Add oca-sale submodule with 16 sale modules

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ernad Husremovic 2025-08-30 17:25:34 +02:00
parent a3641bd518
commit cb12155dcc
567 changed files with 0 additions and 21431 deletions

View file

@ -1,46 +0,0 @@
# Product weekly sales hint
Odoo addon: product_sold_by_delivery_week
## Installation
```bash
pip install odoo-bringout-oca-sale-reporting-product_sold_by_delivery_week
```
## Dependencies
This addon depends on:
- sale_stock
## Manifest Information
- **Name**: Product weekly sales hint
- **Version**: 16.0.1.0.1
- **Category**: Sale
- **License**: AGPL-3
- **Installable**: False
## Source
Based on [OCA/sale-reporting](https://github.com/OCA/sale-reporting) branch 16.0, addon `product_sold_by_delivery_week`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -1,32 +0,0 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Product_sold_by_delivery_week Module - product_sold_by_delivery_week
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -1,3 +0,0 @@
# Configuration
Refer to Odoo settings for product_sold_by_delivery_week. Configure related models, access rights, and options as needed.

View file

@ -1,3 +0,0 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -1,5 +0,0 @@
# Dependencies
This addon depends on:
- [sale_stock](https://github.com/bringout/oca-ocb-sale/tree/681dc8d5fff638cb0862a34e48091a2098d091f8/odoo-bringout-oca-ocb-sale_stock)

View file

@ -1,4 +0,0 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon product_sold_by_delivery_week or install in UI.

View file

@ -1,7 +0,0 @@
# Install
```bash
pip install odoo-bringout-oca-sale-reporting-product_sold_by_delivery_week"
# or
uv pip install odoo-bringout-oca-sale-reporting-product_sold_by_delivery_week"
```

View file

@ -1,15 +0,0 @@
# Models
Detected core models and extensions in product_sold_by_delivery_week.
```mermaid
classDiagram
class product_product
class product_template
class sale_order_line
class stock_move
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -1,6 +0,0 @@
# Overview
Packaged Odoo addon: product_sold_by_delivery_week. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon product_sold_by_delivery_week
- License: LGPL-3

View file

@ -1,3 +0,0 @@
# Reports
This module does not define custom reports.

View file

@ -1,68 +0,0 @@
# Security
Access control and security definitions in product_sold_by_delivery_week.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[bosnian_translations.json](../bosnian_translations.json)**
- 50 model access rules
- **[bosnian_translations_output.json](../bosnian_translations_output.json)**
- 444 model access rules
- **[CHANGELOG.md](../CHANGELOG.md)**
- 132 model access rules
- **[delete_odoo_addons.sh](../delete_odoo_addons.sh)**
- 44 model access rules
- **[doc](../doc)**
- **[docker](../docker)**
- **[input](../input)**
- **[nix](../nix)**
- **[odoo.conf](../odoo.conf)**
- 58 model access rules
- **[odoo_packages_bez_l10n.txt](../odoo_packages_bez_l10n.txt)**
- 1947 model access rules
- **[odoo_packages_bringout.txt](../odoo_packages_bringout.txt)**
- 1947 model access rules
- **[odoo_packages.txt](../odoo_packages.txt)**
- 2085 model access rules
- **[output](../output)**
- **[packages](../packages)**
- **[PACKAGES.md](../PACKAGES.md)**
- 298 model access rules
- **[README.md](../README.md)**
- 338 model access rules
- **[scripts](../scripts)**
- **[temp](../temp)**
- **[TRANSLATION_BS_SUMMARY.md](../TRANSLATION_BS_SUMMARY.md)**
- 146 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[product_sold_by_delivery_week_security.xml](../product_sold_by_delivery_week/security/product_sold_by_delivery_week_security.xml)**
- 2 security groups defined
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[product_sold_by_delivery_week_security.xml](../product_sold_by_delivery_week/security/product_sold_by_delivery_week_security.xml)**
- Security groups, categories, and XML-based rules
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -1,5 +0,0 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -1,7 +0,0 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon product_sold_by_delivery_week
```

View file

@ -1,3 +0,0 @@
# Wizards
This module does not include UI wizards.

View file

@ -1,132 +0,0 @@
=========================
Product weekly sales hint
=========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5c23b69bd0cac593b37140cf67786cb580904f8876975980260f9823ffa7712e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--reporting-lightgray.png?logo=github
:target: https://github.com/OCA/sale-reporting/tree/16.0/product_sold_by_delivery_week
:alt: OCA/sale-reporting
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-reporting-16-0/sale-reporting-16-0-product_sold_by_delivery_week
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/sale-reporting&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows to compute a graphical hint, stored in the product itself,
to display whether that product was sold and delivered in recent weeks.
.. image:: https://raw.githubusercontent.com/OCA/sale-reporting/16.0/product_sold_by_delivery_week/static/description/sold_by_week_hint.png
**Table of contents**
.. contents::
:local:
Configuration
=============
Some variables can be configured using config parameter keys:
- For hint characters:
- For the sold char: `product_sold_by_delivery_week.sold_char`
- For the not sold: `product_sold_by_delivery_week.not_sold_char`
- For weeks length: `product_sold_by_delivery_week.weeks_to_consider`
Assign the security group 'Weekly selling info in order lines' and/or
'Weekly selling info in product list' to users that should see weekly
sales info in product lists or in order lines. (If you want to see the
info in other views like product recommendations, this is not needed.)
Usage
=====
Once configured, hints will appear as an optional column in sale order
lines or in products tree.
In the general products view, general sales info is shown. Meanwhile, in the
sale lines field we can see this field in context by simply filtering partner
sales.
Only salespeople can access this information.
Known issues / Roadmap
======================
* Services are not taken into consideration.
* A widget could be created on top of the main field to have nicer icons and
probably colors.
* For the near future, a configurable granularity would be desirable, so
behavior could be changed to years, months or days as the period of choice.
To simplify this module, only weekly periods will be considered for now.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-reporting/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/sale-reporting/issues/new?body=module:%20product_sold_by_delivery_week%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Tecnativa
Contributors
~~~~~~~~~~~~
* `Tecnativa <https://www.tecnativa.com>`_:
* David Vidal
* Carlos Dauden
* César A. Sánchez
* Luis D. Lafaurie
* Jairo Llopis ([Moduon](https://www.moduon.team/))
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-chienandalu| image:: https://github.com/chienandalu.png?size=40px
:target: https://github.com/chienandalu
:alt: chienandalu
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-chienandalu|
This module is part of the `OCA/sale-reporting <https://github.com/OCA/sale-reporting/tree/16.0/product_sold_by_delivery_week>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -1,2 +0,0 @@
from . import models
from .hooks import post_init_hook

View file

@ -1,22 +0,0 @@
# Copyright 2021 Tecnativa - David Vidal
# Copyright 2021 Tecnativa - Carlos Dauden
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Product weekly sales hint",
"summary": "Adds a field that graphically hints the weekly product sales",
"version": "16.0.1.0.1",
"development_status": "Beta",
"category": "Sale",
"website": "https://github.com/OCA/sale-reporting",
"author": "Tecnativa, Odoo Community Association (OCA)",
"maintainers": ["chienandalu"],
"license": "AGPL-3",
"depends": ["sale_stock"],
"data": [
"data/ir_cron.xml",
"security/product_sold_by_delivery_week_security.xml",
"views/product_views.xml",
"views/sale_views.xml",
],
"post_init_hook": "post_init_hook",
}

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record
forcecreate="True"
id="ir_cron_recalculate_all_weekly_sold_delivered"
model="ir.cron"
>
<field name="name">Recalculate Weekly Delivered Products</field>
<field name="interval_number">1</field>
<field name="interval_type">weeks</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False" />
<field name="model_id" ref="model_product_product" />
<field name="code">model._action_recalculate_all_weekly_sold_delivered()</field>
<field name="state">code</field>
</record>
</odoo>

View file

@ -1,8 +0,0 @@
# Copyright 2017-2018 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID, api
def post_init_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
env["product.product"]._action_recalculate_all_weekly_sold_delivered()

View file

@ -1,63 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_sold_by_delivery_week
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_template
msgid "Product"
msgstr "Artikal"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_product
msgid "Product Variant"
msgstr "Varijanta proizvoda"
#. module: product_sold_by_delivery_week
#: model:ir.actions.server,name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered_ir_actions_server
#: model:ir.cron,cron_name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered
msgid "Recalculate Weekly Delivered Products"
msgstr "Recalculate Weekly Delivered Products"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_sale_order_line
msgid "Sales Order Line"
msgstr "Stavka prodajne narudžbe"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_stock_move
msgid "Stock Move"
msgstr "Skladišno kretanje"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_sale_order_line__weekly_sold_delivered_shown
msgid "Weekly Sold"
msgstr "Sedmično prodano"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered
msgid "Weekly Sold Delivered"
msgstr "Sedmično prodano i isporučeno"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_order_line
msgid "Weekly selling info in order lines"
msgstr "Weekly selling info in order lines"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_product_list
msgid "Weekly selling info in product list"
msgstr "Weekly selling info in product list"

View file

@ -1,70 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_sold_by_delivery_week
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-17 18:34+0000\n"
"PO-Revision-Date: 2023-09-03 13:40+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_template
msgid "Product"
msgstr "Producto"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_product
msgid "Product Variant"
msgstr "Variante del producto"
#. module: product_sold_by_delivery_week
#: model:ir.actions.server,name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered_ir_actions_server
#: model:ir.cron,cron_name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered
msgid "Recalculate Weekly Delivered Products"
msgstr "Recalcular productos entregados semanalmente"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línea de pedido de venta"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_stock_move
msgid "Stock Move"
msgstr "Movimiento de existencias"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_sale_order_line__weekly_sold_delivered_shown
msgid "Weekly Sold"
msgstr "Venta semanal"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered
msgid "Weekly Sold Delivered"
msgstr "Vendidos y entregados semanalmente"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_order_line
msgid "Weekly selling info in order lines"
msgstr "Información de venta semanal en líneas de pedido"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_product_list
msgid "Weekly selling info in product list"
msgstr "Información de venta semanal en lista de productos"
#~ msgid "Product Template"
#~ msgstr "Plantilla de producto"

View file

@ -1,66 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_sold_by_delivery_week
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-12-12 11:34+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_template
msgid "Product"
msgstr "Prodotto"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_product
msgid "Product Variant"
msgstr "Variante prodotto"
#. module: product_sold_by_delivery_week
#: model:ir.actions.server,name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered_ir_actions_server
#: model:ir.cron,cron_name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered
msgid "Recalculate Weekly Delivered Products"
msgstr "Ricalcolo prdotti consegnati settimanalmente"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_sale_order_line
msgid "Sales Order Line"
msgstr "Riga ordine di vendita"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_stock_move
msgid "Stock Move"
msgstr "Movimento di magazzino"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_sale_order_line__weekly_sold_delivered_shown
msgid "Weekly Sold"
msgstr "Venduto settimanale"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered
msgid "Weekly Sold Delivered"
msgstr "Cnsegnato vendite settimanali"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_order_line
msgid "Weekly selling info in order lines"
msgstr "Informazioni vendite settimanali nelle righe ordine"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_product_list
msgid "Weekly selling info in product list"
msgstr "Informazioni vendite settimanali nell'elenco prodotti"

View file

@ -1,63 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_sold_by_delivery_week
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_template
msgid "Product"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_product
msgid "Product Variant"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:ir.actions.server,name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered_ir_actions_server
#: model:ir.cron,cron_name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered
msgid "Recalculate Weekly Delivered Products"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_sale_order_line__weekly_sold_delivered_shown
msgid "Weekly Sold"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered
msgid "Weekly Sold Delivered"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_order_line
msgid "Weekly selling info in order lines"
msgstr ""
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_product_list
msgid "Weekly selling info in product list"
msgstr ""

View file

@ -1,67 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * product_sold_by_delivery_week
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-05-29 16:37+0000\n"
"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
"translation.odoo-community.org>\n"
"Language-Team: none\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_template
msgid "Product"
msgstr "Produto"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_product_product
msgid "Product Variant"
msgstr "Variante do Produto"
#. module: product_sold_by_delivery_week
#: model:ir.actions.server,name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered_ir_actions_server
#: model:ir.cron,cron_name:product_sold_by_delivery_week.ir_cron_recalculate_all_weekly_sold_delivered
msgid "Recalculate Weekly Delivered Products"
msgstr "Recalcular produtos entregues semanalmente"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_sale_order_line
msgid "Sales Order Line"
msgstr "Linha de ordem de venda"
#. module: product_sold_by_delivery_week
#: model:ir.model,name:product_sold_by_delivery_week.model_stock_move
msgid "Stock Move"
msgstr "Movimento de estoque"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered_shown
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_sale_order_line__weekly_sold_delivered_shown
msgid "Weekly Sold"
msgstr "Vendido semanalmente"
#. module: product_sold_by_delivery_week
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_product__weekly_sold_delivered
#: model:ir.model.fields,field_description:product_sold_by_delivery_week.field_product_template__weekly_sold_delivered
msgid "Weekly Sold Delivered"
msgstr "Vendido semanalmente entregue"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_order_line
msgid "Weekly selling info in order lines"
msgstr "Informações de vendas semanais em linhas de pedidos"
#. module: product_sold_by_delivery_week
#: model:res.groups,name:product_sold_by_delivery_week.group_weekly_selling_product_list
msgid "Weekly selling info in product list"
msgstr "Informações de vendas semanais na lista de produtos"

View file

@ -1,4 +0,0 @@
from . import product_product
from . import product_template
from . import sale_order
from . import stock_move

View file

@ -1,169 +0,0 @@
# Copyright 2021 Tecnativa - David Vidal
# Copyright 2021 Tecnativa - Carlos Dauden
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from babel.dates import DateTimeFormat
from odoo import api, fields, models
from odoo.tools import date_utils
class ProductProduct(models.Model):
_inherit = "product.product"
weekly_sold_delivered = fields.Char(
company_dependent=True,
groups="sales_team.group_sale_salesman",
)
weekly_sold_delivered_shown = fields.Char(
string="Weekly Sold",
compute="_compute_weekly_sold_delivered_shown",
groups="sales_team.group_sale_salesman",
)
@api.model
def _format_weekly_string(self, weekly_string):
params = self.env["ir.config_parameter"].sudo()
sold_char = params.get_param("product_sold_by_delivery_week.sold_char", "")
not_sold_char = params.get_param(
"product_sold_by_delivery_week.not_sold_char", ""
)
return weekly_string and "".join(
[int(c) and sold_char or not_sold_char for c in weekly_string]
)
@api.depends("weekly_sold_delivered")
def _compute_weekly_sold_delivered_shown(self):
"""This field is meant to be used only for display purposes so we can use custom
characters show the sales stream. We want to keep the stored one as base 2
string so we can perform bitwise operations easily"""
services = self.filtered(lambda x: x.type == "service")
services.weekly_sold_delivered_shown = False
for product in self - services:
product.weekly_sold_delivered_shown = self._format_weekly_string(
product.weekly_sold_delivered
)
def _weekly_sold_delivered_domain(self, date_start, date_end):
warehouse_id = self.env.context.get("weekly_warehouse_id")
partner_id = self.env.context.get("weekly_partner_id")
# Previous search to improve performance instead of using the ORM huge ids sql
picking_type_domain = [
("company_id", "=", self.env.company.id),
("code", "=", "outgoing"),
]
if warehouse_id:
picking_type_domain += [("warehouse_id", "=", warehouse_id)]
picking_types = self.env["stock.picking.type"].search(picking_type_domain)
picking_domain = [
("date_done", ">=", date_start),
("date_done", "<", date_end),
("picking_type_id", "in", picking_types.ids),
]
if partner_id:
picking_domain += [("partner_id", "child_of", partner_id)]
pickings = self.env["stock.picking"].search(picking_domain)
domain = [
("product_id", "in", self.ids),
("picking_id", "in", pickings.ids),
("state", "=", "done"),
("sale_line_id", "!=", False),
]
return domain
def _weekly_sold_delivered(self):
params = self.env["ir.config_parameter"].sudo()
weeks_to_consider = int(
params.get_param("product_sold_by_delivery_week.weeks_to_consider", 6)
)
delta_one_week = date_utils.get_timedelta(1, "week")
start_of_this_week = date_utils.start_of(fields.Datetime.today(), "week")
start_of_next_week = start_of_this_week + delta_one_week
start_of_period = start_of_this_week - date_utils.get_timedelta(
weeks_to_consider - 1, "week"
)
date_range = date_utils.date_range(
start_of_period, start_of_next_week, delta_one_week
)
# We'll reuse this dictionary to obtain the final string
week_dates_dict = {}
for week_position in range(weeks_to_consider):
locale_date = DateTimeFormat(
next(date_range), locale=self.env.user.lang or "en_US"
)
week_dates_dict[week_position] = (
int(locale_date["w"]),
int(locale_date["y"]),
)
# Get all the results in a single query
sold_grouped = self.env["stock.move"].read_group(
self._weekly_sold_delivered_domain(start_of_period, start_of_next_week),
["date", "product_id"],
["date:week", "product_id"],
lazy=False,
)
if not sold_grouped:
return {p: "0" * weeks_to_consider for p in self}
weekly_product_ids = {}
for date_product in sold_grouped:
(int(date_product["date:week"][1:3]), int(date_product["date:week"][-4:]))
week_year_tuple = (
int(date_product["date:week"][1:3]),
int(date_product["date:week"][-4:]),
)
weekly_product_ids.setdefault(week_year_tuple, [])
weekly_product_ids[week_year_tuple].append(date_product["product_id"][0])
# We'll get a dict like this
# {
# product.product(1,): '000000',
# product.product(2,): '010110',
# product.product(3,): '000010',
# }
products_weekly = {}
for product in self:
products_weekly[product] = "".join(
[
product.id in weekly_product_ids.get(w, []) and "1" or "0"
for p, w in week_dates_dict.items()
]
)
return products_weekly
def _recalculate_weekly_sold_delivered(self):
"""Over this recordset recalculate the whole strings. We end up with something
like '010111'. Later we can transform it into something nicer for the user."""
products_weekly = self._weekly_sold_delivered()
# But we want to group by string result so we can minimize the final records
# writes. The number of writes will depends on the variety of the weekly sales
# up to a maximum given by the parameter `weeks_to_consider` allows us in bits.
# So for 8 weeks, a maximum of 256 writes would be made.
weekly_result_dict = {}
for product, weekly_string in products_weekly.items():
weekly_result_dict.setdefault(weekly_string, self.env["product.product"])
weekly_result_dict[weekly_string] |= product
for weekly_string, product_recordset in weekly_result_dict.items():
if not product_recordset:
continue
product_recordset.with_company(self.env.company).write(
{"weekly_sold_delivered": weekly_string}
)
@api.model
def _action_recalculate_all_weekly_sold_delivered(self):
"""To be launched by the cron or the init hook"""
companies = self.env["res.company"].search([])
for company in companies:
products = (
self.env["product.product"]
.search(
[
("type", "!=", "service"),
"|",
("company_id", "=", company.id),
("company_id", "=", False),
]
)
.with_company(company)
)
if not products:
continue
products._recalculate_weekly_sold_delivered()

View file

@ -1,74 +0,0 @@
# Copyright 2021 Tecnativa - David Vidal
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class ProductTemplate(models.Model):
_inherit = "product.template"
weekly_sold_delivered = fields.Char(
compute="_compute_weekly_sold_delivered",
groups="sales_team.group_sale_salesman",
readonly=True,
)
weekly_sold_delivered_shown = fields.Char(
string="Weekly Sold",
compute="_compute_weekly_sold_delivered_shown",
groups="sales_team.group_sale_salesman",
)
@api.depends("weekly_sold_delivered")
def _compute_weekly_sold_delivered_shown(self):
"""This fields is meant to be used only for display purposes so we can
use custom characters show the sales stream. We want to keep the stored
one as base 2 string so we can perform bitwise operations easily"""
params = self.env["ir.config_parameter"].sudo()
sold_char = params.get_param("product_sold_by_delivery_week.sold_char", "")
not_sold_char = params.get_param(
"product_sold_by_delivery_week.not_sold_char", ""
)
not_service_products = self.filtered(lambda x: x.type != "service")
(self - not_service_products).weekly_sold_delivered_shown = False
for product in self.filtered(lambda x: x.type != "service"):
product.weekly_sold_delivered_shown = (
product.weekly_sold_delivered
and "".join(
[
int(c) and sold_char or not_sold_char
for c in product.weekly_sold_delivered
]
)
)
@api.depends_context("company")
@api.depends("product_variant_ids.weekly_sold_delivered")
def _compute_weekly_sold_delivered(self):
"""Perform a bitwise operation over the variant values to easily check
whether or not any of them has been sold"""
params = self.env["ir.config_parameter"].sudo()
weeks_to_consider = params.get_param(
"product_sold_by_delivery_week.weeks_to_consider", 6
)
self.weekly_sold_delivered = False
for product in self.filtered(lambda x: x.type != "service"):
if len(product.product_variant_ids) == 1:
product.weekly_sold_delivered = (
product.product_variant_ids.weekly_sold_delivered
)
variants_weekly_sold_delivered = product.product_variant_ids.mapped(
"weekly_sold_delivered"
)
if not variants_weekly_sold_delivered:
continue
# The computed value is stored in the form of '0' and '1' strings so
# bitwise operations are easilly done.
weekly_sold_delivered = int(
variants_weekly_sold_delivered.pop() or "0", base=2
)
while variants_weekly_sold_delivered:
weekly_sold_delivered = weekly_sold_delivered | int(
variants_weekly_sold_delivered.pop() or "0", base=2
)
product.weekly_sold_delivered = "{:0{}b}".format(
weekly_sold_delivered, weeks_to_consider
)

View file

@ -1,45 +0,0 @@
# Copyright 2021 Tecnativa - David Vidal
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from collections import defaultdict
from odoo import api, fields, models
class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
weekly_sold_delivered_shown = fields.Char(
string="Weekly Sold",
compute="_compute_weekly_sold_delivered_shown",
)
def get_partner_for_reporting(self):
"""get partner from line taking into account context parameters"""
if self.env.context.get("use_delivery_address", False):
return self.order_id.partner_shipping_id
return self.order_id.partner_id.commercial_partner_id
@api.depends("order_id.partner_id", "order_id.warehouse_id", "product_id")
def _compute_weekly_sold_delivered_shown(self):
"""Compute dinamically in the view"""
_format_weekly_string = self.env["product.product"]._format_weekly_string
self.weekly_sold_delivered_shown = False
partner_products_dic = defaultdict(lambda: self.env["product.product"].browse())
to_process_lines = self.filtered(
lambda x: not x.display_type and x.product_id.type != "service"
)
# Create dict with products by partner
for line in to_process_lines:
partner = line.get_partner_for_reporting()
partner_products_dic[partner] |= line.product_id
partner_products_weekly = {}
# Create dict with partner and product sold delivered info
for partner, products in partner_products_dic.items():
partner_products_weekly[partner] = products.with_context(
weekly_partner_id=partner.id,
)._weekly_sold_delivered()
for line in to_process_lines:
partner = line.get_partner_for_reporting()
line.weekly_sold_delivered_shown = _format_weekly_string(
partner_products_weekly[partner].get(line.product_id)
)

View file

@ -1,27 +0,0 @@
# Copyright 2021 Tecnativa - David Vidal
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models
class StockMove(models.Model):
_inherit = "stock.move"
def _action_done(self, cancel_backorder=False):
"""We don't need to recompute the whole string we just set the last char on as
it is the only possible truth. The cron well be in charge of reseting them every
week anyway."""
moves_todo = super()._action_done(cancel_backorder=cancel_backorder)
products = (
moves_todo.filtered(
lambda x: x.sale_line_id and x.picking_code == "outgoing"
)
.mapped("product_id")
.with_company(self.company_id)
)
for product in products.filtered(
lambda x: x.weekly_sold_delivered and x.weekly_sold_delivered[-1:] == "0"
):
product.sudo().weekly_sold_delivered = (
product.weekly_sold_delivered[:-1] + "1"
)
return moves_todo

View file

@ -1,12 +0,0 @@
Some variables can be configured using config parameter keys:
- For hint characters:
- For the sold char: `product_sold_by_delivery_week.sold_char`
- For the not sold: `product_sold_by_delivery_week.not_sold_char`
- For weeks length: `product_sold_by_delivery_week.weeks_to_consider`
Assign the security group 'Weekly selling info in order lines' and/or
'Weekly selling info in product list' to users that should see weekly
sales info in product lists or in order lines. (If you want to see the
info in other views like product recommendations, this is not needed.)

View file

@ -1,8 +0,0 @@
* `Tecnativa <https://www.tecnativa.com>`_:
* David Vidal
* Carlos Dauden
* César A. Sánchez
* Luis D. Lafaurie
* Jairo Llopis ([Moduon](https://www.moduon.team/))

View file

@ -1,4 +0,0 @@
This module allows to compute a graphical hint, stored in the product itself,
to display whether that product was sold and delivered in recent weeks.
.. image:: ../static/description/sold_by_week_hint.png

View file

@ -1,6 +0,0 @@
* Services are not taken into consideration.
* A widget could be created on top of the main field to have nicer icons and
probably colors.
* For the near future, a configurable granularity would be desirable, so
behavior could be changed to years, months or days as the period of choice.
To simplify this module, only weekly periods will be considered for now.

View file

@ -1,8 +0,0 @@
Once configured, hints will appear as an optional column in sale order
lines or in products tree.
In the general products view, general sales info is shown. Meanwhile, in the
sale lines field we can see this field in context by simply filtering partner
sales.
Only salespeople can access this information.

View file

@ -1,11 +0,0 @@
<?xml version="1.0" ?>
<odoo>
<record id="group_weekly_selling_order_line" model="res.groups">
<field name="name">Weekly selling info in order lines</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>
<record id="group_weekly_selling_product_list" model="res.groups">
<field name="name">Weekly selling info in product list</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>
</odoo>

View file

@ -1,472 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Product weekly sales hint</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="product-weekly-sales-hint">
<h1 class="title">Product weekly sales hint</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5c23b69bd0cac593b37140cf67786cb580904f8876975980260f9823ffa7712e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-reporting/tree/16.0/product_sold_by_delivery_week"><img alt="OCA/sale-reporting" src="https://img.shields.io/badge/github-OCA%2Fsale--reporting-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-reporting-16-0/sale-reporting-16-0-product_sold_by_delivery_week"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-reporting&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module allows to compute a graphical hint, stored in the product itself,
to display whether that product was sold and delivered in recent weeks.</p>
<img alt="https://raw.githubusercontent.com/OCA/sale-reporting/16.0/product_sold_by_delivery_week/static/description/sold_by_week_hint.png" src="https://raw.githubusercontent.com/OCA/sale-reporting/16.0/product_sold_by_delivery_week/static/description/sold_by_week_hint.png" />
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-3">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>Some variables can be configured using config parameter keys:</p>
<ul class="simple">
<li>For hint characters:</li>
</ul>
<blockquote>
<ul class="simple">
<li>For the sold char: <cite>product_sold_by_delivery_week.sold_char</cite></li>
<li>For the not sold: <cite>product_sold_by_delivery_week.not_sold_char</cite></li>
<li>For weeks length: <cite>product_sold_by_delivery_week.weeks_to_consider</cite></li>
</ul>
</blockquote>
<p>Assign the security group Weekly selling info in order lines and/or
Weekly selling info in product list to users that should see weekly
sales info in product lists or in order lines. (If you want to see the
info in other views like product recommendations, this is not needed.)</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p>Once configured, hints will appear as an optional column in sale order
lines or in products tree.</p>
<p>In the general products view, general sales info is shown. Meanwhile, in the
sale lines field we can see this field in context by simply filtering partner
sales.</p>
<p>Only salespeople can access this information.</p>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-3">Known issues / Roadmap</a></h1>
<ul class="simple">
<li>Services are not taken into consideration.</li>
<li>A widget could be created on top of the main field to have nicer icons and
probably colors.</li>
<li>For the near future, a configurable granularity would be desirable, so
behavior could be changed to years, months or days as the period of choice.
To simplify this module, only weekly periods will be considered for now.</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-reporting/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/sale-reporting/issues/new?body=module:%20product_sold_by_delivery_week%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-5">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
<ul class="simple">
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>David Vidal</li>
<li>Carlos Dauden</li>
<li>César A. Sánchez</li>
<li>Luis D. Lafaurie</li>
</ul>
</li>
<li>Jairo Llopis ([Moduon](<a class="reference external" href="https://www.moduon.team/">https://www.moduon.team/</a>))</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/chienandalu"><img alt="chienandalu" src="https://github.com/chienandalu.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-reporting/tree/16.0/product_sold_by_delivery_week">OCA/sale-reporting</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -1 +0,0 @@
from . import test_product_sold_by_delivery_week

View file

@ -1,101 +0,0 @@
# Copyright 2021 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.tests import TransactionCase, new_test_user
class TestProductSoldByDeliveryWeek(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.partner = cls.env["res.partner"].create(
{
"name": "Partner for testing",
}
)
cls.product = cls.env["product.product"].create(
{
"name": "Test product",
"detailed_type": "consu",
}
)
cls.product_expense_product = cls.env["product.product"].create(
{
"name": "expense product for test",
"detailed_type": "service",
}
)
cls.product.weekly_sold_delivered = "000000"
cls.product_expense_product.weekly_sold_delivered = "000000"
# Tests should pass with basic sale and stock access rights
cls.env = cls.env(
user=new_test_user(
cls.env,
login="test_user",
groups="stock.group_stock_user,sales_team.group_sale_salesman",
)
)
cls.order = cls.env["sale.order"].create(
{
"partner_id": cls.partner.id,
"order_line": [
(
0,
0,
{
"product_id": cls.product.id,
"product_uom": cls.product.uom_id.id,
"product_uom_qty": 3.0,
},
),
(0, 0, {"display_type": "line_section", "name": "Section"}),
(
0,
0,
{
"product_id": cls.product_expense_product.id,
"product_uom": cls.product_expense_product.uom_id.id,
"product_uom_qty": 3.0,
},
),
],
}
)
def test_01_check_delivered_message_without_parameters(self):
"""Test the return message depending on the type of the product."""
self.assertEqual(self.order.order_line[0].weekly_sold_delivered_shown, "◌◌◌◌◌◌")
self.assertEqual(self.order.order_line[1].weekly_sold_delivered_shown, False)
def test_02_check_delivered_message_with_parameters(self):
"""Test the definition of config parameters."""
self.env["ir.config_parameter"].sudo().create(
[
{
"key": "product_sold_by_delivery_week.sold_char",
"value": "R",
},
{
"key": "product_sold_by_delivery_week.not_sold_char",
"value": "M",
},
]
)
self.assertEqual(self.order.order_line[0].weekly_sold_delivered_shown, "MMMMMM")
self.assertEqual(self.order.order_line[1].weekly_sold_delivered_shown, False)
def test_03_sale_stock_delivery_partial(self):
"""Test a SO with a product on delivery."""
# initial order
self.order.action_confirm()
self.assertTrue(
self.order.picking_ids,
'Sale Stock: no picking created for "invoice on delivery" storable products',
)
pick = self.order.picking_ids
pick.move_ids.write({"quantity_done": 3})
pick.button_validate()
for line in pick.move_ids:
line._action_done()
self.assertEqual(line.product_id.weekly_sold_delivered, "000001")
self.assertEqual(line.product_id.weekly_sold_delivered_shown, "◌◌◌◌◌●")

View file

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2021 Tecnativa - David Vidal
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="product_template_tree_view" model="ir.ui.view">
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_tree_view" />
<field name="arch" type="xml">
<field name="name" position="after">
<!-- The BS badge class provides some styles that will avoid that
the string gets truncated by an ellipsis and uses less column
width as well -->
<field
groups="product_sold_by_delivery_week.group_weekly_selling_product_list"
name="weekly_sold_delivered_shown"
optional="hide"
class="badge"
/>
</field>
</field>
</record>
<record id="product_product_tree_view" model="ir.ui.view">
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_product_tree_view" />
<field name="arch" type="xml">
<field name="name" position="after">
<!-- The BS badge class provides some styles that will avoid that
the string gets truncated by an ellipsis and uses less column
width as well -->
<field
groups="product_sold_by_delivery_week.group_weekly_selling_product_list"
name="weekly_sold_delivered_shown"
optional="hide"
class="badge"
/>
</field>
</field>
</record>
</odoo>

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2021 Tecnativa - David Vidal
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_order_form" model="ir.ui.view">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath expr="//tree//field[@name='name']" position="after">
<!-- The BS badge class provides some styles that will avoid that
the string gets truncated by an ellipsis and uses less column
width as well -->
<field
groups="product_sold_by_delivery_week.group_weekly_selling_order_line"
name="weekly_sold_delivered_shown"
optional="hide"
class="badge"
/>
</xpath>
</field>
</record>
</odoo>

View file

@ -1,42 +0,0 @@
[project]
name = "odoo-bringout-oca-sale-reporting-product_sold_by_delivery_week"
version = "16.0.0"
description = "Product weekly sales hint - Adds a field that graphically hints the weekly product sales"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-sale-reporting-sale_stock>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["product_sold_by_delivery_week"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -1,47 +0,0 @@
# Sale Comments
Odoo addon: sale_comment_template
## Installation
```bash
pip install odoo-bringout-oca-sale-reporting-sale_comment_template
```
## Dependencies
This addon depends on:
- sale
- account_comment_template
## Manifest Information
- **Name**: Sale Comments
- **Version**: 16.0.1.0.1
- **Category**: Sale
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/sale-reporting](https://github.com/OCA/sale-reporting) branch 16.0, addon `sale_comment_template`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -1,32 +0,0 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Sale_comment_template Module - sale_comment_template
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -1,3 +0,0 @@
# Configuration
Refer to Odoo settings for sale_comment_template. Configure related models, access rights, and options as needed.

View file

@ -1,3 +0,0 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -1,6 +0,0 @@
# Dependencies
This addon depends on:
- [sale](https://github.com/bringout/oca-ocb-sale/tree/681dc8d5fff638cb0862a34e48091a2098d091f8/odoo-bringout-oca-ocb-sale)
- [account_comment_template](https://github.com/bringout/oca-technical)

View file

@ -1,4 +0,0 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon sale_comment_template or install in UI.

View file

@ -1,7 +0,0 @@
# Install
```bash
pip install odoo-bringout-oca-sale-reporting-sale_comment_template"
# or
uv pip install odoo-bringout-oca-sale-reporting-sale_comment_template"
```

View file

@ -1,12 +0,0 @@
# Models
Detected core models and extensions in sale_comment_template.
```mermaid
classDiagram
class sale_order
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -1,6 +0,0 @@
# Overview
Packaged Odoo addon: sale_comment_template. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon sale_comment_template
- License: LGPL-3

View file

@ -1,3 +0,0 @@
# Reports
This module does not define custom reports.

View file

@ -1,34 +0,0 @@
# Security
Access control and security definitions in sale_comment_template.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../sale_comment_template/security/ir.model.access.csv)**
- 2 model access rules
## Record Rules
Row-level security rules defined in:
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[ir.model.access.csv](../sale_comment_template/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -1,5 +0,0 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -1,7 +0,0 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon sale_comment_template
```

View file

@ -1,3 +0,0 @@
# Wizards
This module does not include UI wizards.

View file

@ -1,43 +0,0 @@
[project]
name = "odoo-bringout-oca-sale-reporting-sale_comment_template"
version = "16.0.0"
description = "Sale Comments - Comments texts templates on Sale documents"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-sale>=16.0.0",
"odoo-bringout-oca-sale-reporting-account_comment_template>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["sale_comment_template"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -1,115 +0,0 @@
=============
Sale Comments
=============
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a5668dd9e058678912852086917d34f8612a6f8c9d47e003e920bf42dbc4bfae
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--reporting-lightgray.png?logo=github
:target: https://github.com/OCA/sale-reporting/tree/16.0/sale_comment_template
:alt: OCA/sale-reporting
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-reporting-16-0/sale-reporting-16-0-sale_comment_template
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/sale-reporting&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Adds comments on sales orders.
The comments can be loaded from templates.
Adds comments on
#. sales orders:
The comments can be loaded from templates.
Two positions are available for the comments:
- above sale order lines
- below sale order lines
Comments are copied on the invoice when you will create invoice from sale order.
**Table of contents**
.. contents::
:local:
Installation
============
To install this module, you need to have the module
`account_comment_template`, available in `OCA/account-invoice-reporting
<https://github.com/OCA/account-invoice-reporting>`_.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-reporting/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/sale-reporting/issues/new?body=module:%20sale_comment_template%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Camptocamp
* Tecnativa
Contributors
~~~~~~~~~~~~
* Nicolas Bessi <nicolas.bessi@camptocamp.com>
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
* Simone Rubino <simone.rubino@agilebg.com>
* Xavier Jimenez <xavier.jimenez@qubiq.es>
* `Tecnativa <https://www.tecnativa.com>`_:
* Pedro M. Baeza
* Vicent Cubells
* Vicent Martínez
* `DynApps <https://www.dynapps.be>`_:
* Raf Ven <raf.ven@dynapps.be>
* `ForgeFlow <https://www.forgeflow.com>`_:
* Miquel Raïch <miquel.raich@forgeflow.com>
* Pierre Verkest <pierreverkest84@gmail.com>
* `Jarsa <https://www.jarsa.com>`_:
* Alan Ramos <alan.ramos@jarsa.com>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/sale-reporting <https://github.com/OCA/sale-reporting/tree/16.0/sale_comment_template>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -1,3 +0,0 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

View file

@ -1,26 +0,0 @@
# Copyright 2013-2014 Nicolas Bessi (Camptocamp SA)
# Copyright 2018 Qubiq - Xavier Jiménez
# Copyright 2018 Tecnativa - Pedro M. Baeza
# Copyright 2021 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Sale Comments",
"summary": "Comments texts templates on Sale documents",
"version": "16.0.1.0.1",
"category": "Sale",
"website": "https://github.com/OCA/sale-reporting",
"author": "Camptocamp, Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"depends": [
"sale",
"account_comment_template",
],
"data": [
"views/sale_order_view.xml",
"views/base_comment_template_view.xml",
"views/report_saleorder.xml",
"security/ir.model.access.csv",
],
}

View file

@ -1,39 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_comment_template
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_comment_template
#: model:ir.model.fields,field_description:sale_comment_template.field_sale_order__comment_template_ids
msgid "Comment Template"
msgstr "Predložak komentara"
#. module: sale_comment_template
#: model_terms:ir.ui.view,arch_db:sale_comment_template.sale_order_form_add_comment
msgid "Comments"
msgstr "Komentari"
#. module: sale_comment_template
#: model:ir.ui.menu,name:sale_comment_template.menu_base_comment_template_sale
msgid "Document Comments"
msgstr "Komentari dokumenata"
#. module: sale_comment_template
#: model:ir.actions.act_window,name:sale_comment_template.action_sale_order_comment_template
msgid "Sale Orders Comments"
msgstr "Prodaja Nalogs Comments"
#. module: sale_comment_template
#: model:ir.model,name:sale_comment_template.model_sale_order
msgid "Sales Order"
msgstr "Prodajni nalog"

View file

@ -1,82 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_comment_template
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-03-23 15:13+0000\n"
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.10\n"
#. module: sale_comment_template
#: model:ir.model.fields,field_description:sale_comment_template.field_sale_order__comment_template_ids
msgid "Comment Template"
msgstr ""
#. module: sale_comment_template
#: model_terms:ir.ui.view,arch_db:sale_comment_template.sale_order_form_add_comment
msgid "Comments"
msgstr "Textbausteine"
#. module: sale_comment_template
#: model:ir.ui.menu,name:sale_comment_template.menu_base_comment_template_sale
msgid "Document Comments"
msgstr "Textbausteine"
#. module: sale_comment_template
#: model:ir.actions.act_window,name:sale_comment_template.action_sale_order_comment_template
msgid "Sale Orders Comments"
msgstr ""
#. module: sale_comment_template
#: model:ir.model,name:sale_comment_template.model_sale_order
msgid "Sales Order"
msgstr ""
#~ msgid "Bottom Comment"
#~ msgstr "Suffix-Textbaustein"
#~ msgid "Bottom Comment Template"
#~ msgstr "Suffix-Textbausteinvorlage"
#~ msgid "Bottom Comments"
#~ msgstr "Suffix-Textbausteine"
#~ msgid "Formatted Note"
#~ msgstr "Zusätzlicher Hinweis"
#~ msgid "Load a template"
#~ msgstr "Textbausteinvorlage laden"
#~ msgid "Sale Order"
#~ msgstr "Verkaufsauftrag"
#~ msgid "Sales Order Line"
#~ msgstr "Auftragsposition"
#~ msgid ""
#~ "The comments will be displayed on the printed document. You can load a "
#~ "predefined template, write your own text or load a template and then "
#~ "modify it only for this document."
#~ msgstr ""
#~ "Diese Textbausteine werden auf Dokumentbelegen gedruckt. Es kann eine "
#~ "bereits existierende Vorlage geladen, ein neuer eigenständiger Text "
#~ "geschrieben oder eine Vorlage nach dem Laden nur für dieses Dokument "
#~ "angepasst werden."
#~ msgid "Top Comment"
#~ msgstr "Präfix-Textbaustein"
#~ msgid "Top Comment Template"
#~ msgstr "Präfix-Textbausteinvorlage"
#~ msgid "Top Comments"
#~ msgstr "Präfix-Textbausteine"

View file

@ -1,76 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_comment_template
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-18 06:40+0000\n"
"PO-Revision-Date: 2023-09-03 13:40+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: sale_comment_template
#: model:ir.model.fields,field_description:sale_comment_template.field_sale_order__comment_template_ids
msgid "Comment Template"
msgstr "Plantilla de comentario"
#. module: sale_comment_template
#: model_terms:ir.ui.view,arch_db:sale_comment_template.sale_order_form_add_comment
msgid "Comments"
msgstr "Comentarios"
#. module: sale_comment_template
#: model:ir.ui.menu,name:sale_comment_template.menu_base_comment_template_sale
msgid "Document Comments"
msgstr "Comentarios del documentos"
#. module: sale_comment_template
#: model:ir.actions.act_window,name:sale_comment_template.action_sale_order_comment_template
msgid "Sale Orders Comments"
msgstr "Comentarios de órdenes de venta"
#. module: sale_comment_template
#: model:ir.model,name:sale_comment_template.model_sale_order
msgid "Sales Order"
msgstr "Órdenes de venta"
#~ msgid "Bottom Comment"
#~ msgstr "Comentario inferior"
#~ msgid "Bottom Comment Template"
#~ msgstr "Plantilla del comentario inferior"
#~ msgid "Bottom Comments"
#~ msgstr "Comentarios de la parte inferior"
#~ msgid "Load a template"
#~ msgstr "Cargar una plantialla"
#~ msgid ""
#~ "The comments will be displayed on the printed document. You can load a "
#~ "predefined template, write your own text or load a template and then "
#~ "modify it only for this document."
#~ msgstr ""
#~ "Los comentarios se mostrarán en los documentos impresos. Puede cargar una "
#~ "plantilla pedefinida, escribir su propio texto o cargar una plantilla y "
#~ "modificarla para este documento."
#~ msgid "Top Comment"
#~ msgstr "Comentario superior"
#~ msgid "Top Comment Template"
#~ msgstr "Plantilla del comentario superior"
#~ msgid "Top Comments"
#~ msgstr "Comentarios de la parte superior"
#~ msgid "Quotation"
#~ msgstr "Presupuesto"

View file

@ -1,80 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_comment_template
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-11-26 16:28+0000\n"
"PO-Revision-Date: 2014-10-22 08:13+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_comment_template
#: model:ir.model.fields,field_description:sale_comment_template.field_sale_order__comment_template_ids
msgid "Comment Template"
msgstr ""
#. module: sale_comment_template
#: model_terms:ir.ui.view,arch_db:sale_comment_template.sale_order_form_add_comment
msgid "Comments"
msgstr "Commentaires"
#. module: sale_comment_template
#: model:ir.ui.menu,name:sale_comment_template.menu_base_comment_template_sale
msgid "Document Comments"
msgstr "Commentaires de documents"
#. module: sale_comment_template
#: model:ir.actions.act_window,name:sale_comment_template.action_sale_order_comment_template
msgid "Sale Orders Comments"
msgstr ""
#. module: sale_comment_template
#: model:ir.model,name:sale_comment_template.model_sale_order
msgid "Sales Order"
msgstr ""
#~ msgid "Bottom Comment"
#~ msgstr "Commentaires du bas"
#~ msgid "Bottom Comment Template"
#~ msgstr "Modèle de commentaire du bas"
#~ msgid "Bottom Comments"
#~ msgstr "Commentaires du bas"
#~ msgid "Load a template"
#~ msgstr "Utiliser un modèle"
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Commande"
#, fuzzy
#~ msgid "Sales Order Line"
#~ msgstr "Commande"
#~ msgid ""
#~ "The comments will be displayed on the printed document. You can load a "
#~ "predefined template, write your own text or load a template and then "
#~ "modify it only for this document."
#~ msgstr ""
#~ "Les commentaires seront affichés sur le document imprimé. Vous pouvez "
#~ "charger un modèle prédéfini, écrire votre propre texte ou encore charger "
#~ "un modèle puis le modifier uniquement pour ce document."
#~ msgid "Top Comment"
#~ msgstr "Commentaire du haut"
#~ msgid "Top Comment Template"
#~ msgstr "Modèle de commentaire du haut"
#~ msgid "Top Comments"
#~ msgstr "Commentaires du haut"

View file

@ -1,90 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_comment_template
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-01-18 12:06+0000\n"
"Last-Translator: Francesco Foresti <francesco.foresti@ooops404.com>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.1\n"
#. module: sale_comment_template
#: model:ir.model.fields,field_description:sale_comment_template.field_sale_order__comment_template_ids
msgid "Comment Template"
msgstr "Modello commento"
#. module: sale_comment_template
#: model_terms:ir.ui.view,arch_db:sale_comment_template.sale_order_form_add_comment
msgid "Comments"
msgstr "Commenti"
#. module: sale_comment_template
#: model:ir.ui.menu,name:sale_comment_template.menu_base_comment_template_sale
msgid "Document Comments"
msgstr "Commenti del documento"
#. module: sale_comment_template
#: model:ir.actions.act_window,name:sale_comment_template.action_sale_order_comment_template
msgid "Sale Orders Comments"
msgstr "Commenti ordini vendita"
#. module: sale_comment_template
#: model:ir.model,name:sale_comment_template.model_sale_order
msgid "Sales Order"
msgstr "Ordine di vendita"
#~ msgid "Display Name"
#~ msgstr "Nome visualizzato"
#~ msgid "ID"
#~ msgstr "ID"
#~ msgid "Last Modified on"
#~ msgstr "Ultima modifica il"
#~ msgid "Bottom Comment"
#~ msgstr "Commento in basso"
#~ msgid "Bottom Comment Template"
#~ msgstr "Modello commento in basso"
#~ msgid "Bottom Comments"
#~ msgstr "Commenti in basso"
#~ msgid "Formatted Note"
#~ msgstr "Nota formattata"
#~ msgid "Load a template"
#~ msgstr "Carica un modello"
#~ msgid "Sale Order"
#~ msgstr "Ordine di vendita"
#~ msgid "Sales Order Line"
#~ msgstr "Riga ordine di vendita"
#~ msgid ""
#~ "The comments will be displayed on the printed document. You can load a "
#~ "predefined template, write your own text or load a template and then "
#~ "modify it only for this document."
#~ msgstr ""
#~ "I commenti saranno mostrati sul documento stampato. Puoi caricare un "
#~ "modello predefinito, scrivi il tuo testo o carica un modello e poi "
#~ "modificalo solo per questo documento."
#~ msgid "Top Comment"
#~ msgstr "Commento in alto"
#~ msgid "Top Comment Template"
#~ msgstr "Modello commento in alto"
#~ msgid "Top Comments"
#~ msgstr "Commenti in alto"

View file

@ -1,81 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_comment_template
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-03-23 15:13+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
"Language-Team: none\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.10\n"
#. module: sale_comment_template
#: model:ir.model.fields,field_description:sale_comment_template.field_sale_order__comment_template_ids
msgid "Comment Template"
msgstr ""
#. module: sale_comment_template
#: model_terms:ir.ui.view,arch_db:sale_comment_template.sale_order_form_add_comment
msgid "Comments"
msgstr "Comentários"
#. module: sale_comment_template
#: model:ir.ui.menu,name:sale_comment_template.menu_base_comment_template_sale
msgid "Document Comments"
msgstr "Comentários do Documento"
#. module: sale_comment_template
#: model:ir.actions.act_window,name:sale_comment_template.action_sale_order_comment_template
msgid "Sale Orders Comments"
msgstr ""
#. module: sale_comment_template
#: model:ir.model,name:sale_comment_template.model_sale_order
msgid "Sales Order"
msgstr ""
#~ msgid "Bottom Comment"
#~ msgstr "Comentários de Fundo"
#~ msgid "Bottom Comment Template"
#~ msgstr "Modelo de Comentários de Fundo"
#~ msgid "Bottom Comments"
#~ msgstr "Comentários de Fundo"
#~ msgid "Formatted Note"
#~ msgstr "Nota Formatada"
#~ msgid "Load a template"
#~ msgstr "Carregar um modelo"
#~ msgid "Sale Order"
#~ msgstr "Encomenda de Venda"
#~ msgid "Sales Order Line"
#~ msgstr "Linha de Encomenda de Venda"
#~ msgid ""
#~ "The comments will be displayed on the printed document. You can load a "
#~ "predefined template, write your own text or load a template and then "
#~ "modify it only for this document."
#~ msgstr ""
#~ "Os comentários serão exibidos no documento impresso. Pode carregar um "
#~ "modelo predefinido, escrever o seu próprio texto ou carregar um modelo e "
#~ "depois modificá-lo apenas para este documento."
#~ msgid "Top Comment"
#~ msgstr "Comentário de Topo"
#~ msgid "Top Comment Template"
#~ msgstr "Modelo de Comentário de Topo"
#~ msgid "Top Comments"
#~ msgstr "Comentários de Topo"

View file

@ -1,39 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_comment_template
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_comment_template
#: model:ir.model.fields,field_description:sale_comment_template.field_sale_order__comment_template_ids
msgid "Comment Template"
msgstr ""
#. module: sale_comment_template
#: model_terms:ir.ui.view,arch_db:sale_comment_template.sale_order_form_add_comment
msgid "Comments"
msgstr ""
#. module: sale_comment_template
#: model:ir.ui.menu,name:sale_comment_template.menu_base_comment_template_sale
msgid "Document Comments"
msgstr ""
#. module: sale_comment_template
#: model:ir.actions.act_window,name:sale_comment_template.action_sale_order_comment_template
msgid "Sale Orders Comments"
msgstr ""
#. module: sale_comment_template
#: model:ir.model,name:sale_comment_template.model_sale_order
msgid "Sales Order"
msgstr ""

View file

@ -1,3 +0,0 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import sale_order

View file

@ -1,10 +0,0 @@
# Copyright 2013-2014 Nicolas Bessi (Camptocamp SA)
# Copyright 2021 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models
class SaleOrder(models.Model):
_name = "sale.order"
_inherit = ["sale.order", "comment.template"]

View file

@ -1,18 +0,0 @@
* Nicolas Bessi <nicolas.bessi@camptocamp.com>
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
* Simone Rubino <simone.rubino@agilebg.com>
* Xavier Jimenez <xavier.jimenez@qubiq.es>
* `Tecnativa <https://www.tecnativa.com>`_:
* Pedro M. Baeza
* Vicent Cubells
* Vicent Martínez
* `DynApps <https://www.dynapps.be>`_:
* Raf Ven <raf.ven@dynapps.be>
* `ForgeFlow <https://www.forgeflow.com>`_:
* Miquel Raïch <miquel.raich@forgeflow.com>
* Pierre Verkest <pierreverkest84@gmail.com>
* `Jarsa <https://www.jarsa.com>`_:
* Alan Ramos <alan.ramos@jarsa.com>

View file

@ -1,15 +0,0 @@
Adds comments on sales orders.
The comments can be loaded from templates.
Adds comments on
#. sales orders:
The comments can be loaded from templates.
Two positions are available for the comments:
- above sale order lines
- below sale order lines
Comments are copied on the invoice when you will create invoice from sale order.

View file

@ -1,3 +0,0 @@
To install this module, you need to have the module
`account_comment_template`, available in `OCA/account-invoice-reporting
<https://github.com/OCA/account-invoice-reporting>`_.

View file

@ -1,3 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_base_comment_template_sale_user,access_base_comment_template sale user,base_comment_template.model_base_comment_template,sales_team.group_sale_salesman,1,0,0,0
access_base_comment_template_sale_manager,access_base_comment_template sale manager,base_comment_template.model_base_comment_template,sales_team.group_sale_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_base_comment_template_sale_user access_base_comment_template sale user base_comment_template.model_base_comment_template sales_team.group_sale_salesman 1 0 0 0
3 access_base_comment_template_sale_manager access_base_comment_template sale manager base_comment_template.model_base_comment_template sales_team.group_sale_manager 1 1 1 1

View file

@ -1,461 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Sale Comments</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="sale-comments">
<h1 class="title">Sale Comments</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:a5668dd9e058678912852086917d34f8612a6f8c9d47e003e920bf42dbc4bfae
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-reporting/tree/16.0/sale_comment_template"><img alt="OCA/sale-reporting" src="https://img.shields.io/badge/github-OCA%2Fsale--reporting-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-reporting-16-0/sale-reporting-16-0-sale_comment_template"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-reporting&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>Adds comments on sales orders.
The comments can be loaded from templates.</p>
<p>Adds comments on</p>
<ol class="arabic">
<li><p class="first">sales orders:</p>
<p>The comments can be loaded from templates.</p>
<p>Two positions are available for the comments:</p>
<ul class="simple">
<li>above sale order lines</li>
<li>below sale order lines</li>
</ul>
<p>Comments are copied on the invoice when you will create invoice from sale order.</p>
</li>
</ol>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h1><a class="toc-backref" href="#toc-entry-1">Installation</a></h1>
<p>To install this module, you need to have the module
<cite>account_comment_template</cite>, available in <a class="reference external" href="https://github.com/OCA/account-invoice-reporting">OCA/account-invoice-reporting</a>.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-reporting/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/sale-reporting/issues/new?body=module:%20sale_comment_template%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Camptocamp</li>
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Nicolas Bessi &lt;<a class="reference external" href="mailto:nicolas.bessi&#64;camptocamp.com">nicolas.bessi&#64;camptocamp.com</a>&gt;</li>
<li>Yannick Vaucher &lt;<a class="reference external" href="mailto:yannick.vaucher&#64;camptocamp.com">yannick.vaucher&#64;camptocamp.com</a>&gt;</li>
<li>Simone Rubino &lt;<a class="reference external" href="mailto:simone.rubino&#64;agilebg.com">simone.rubino&#64;agilebg.com</a>&gt;</li>
<li>Xavier Jimenez &lt;<a class="reference external" href="mailto:xavier.jimenez&#64;qubiq.es">xavier.jimenez&#64;qubiq.es</a>&gt;</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Pedro M. Baeza</li>
<li>Vicent Cubells</li>
<li>Vicent Martínez</li>
</ul>
</li>
<li><a class="reference external" href="https://www.dynapps.be">DynApps</a>:<ul>
<li>Raf Ven &lt;<a class="reference external" href="mailto:raf.ven&#64;dynapps.be">raf.ven&#64;dynapps.be</a>&gt;</li>
</ul>
</li>
<li><a class="reference external" href="https://www.forgeflow.com">ForgeFlow</a>:</li>
<li>Miquel Raïch &lt;<a class="reference external" href="mailto:miquel.raich&#64;forgeflow.com">miquel.raich&#64;forgeflow.com</a>&gt;</li>
<li>Pierre Verkest &lt;<a class="reference external" href="mailto:pierreverkest84&#64;gmail.com">pierreverkest84&#64;gmail.com</a>&gt;</li>
<li><a class="reference external" href="https://www.jarsa.com">Jarsa</a>:<ul>
<li>Alan Ramos &lt;<a class="reference external" href="mailto:alan.ramos&#64;jarsa.com">alan.ramos&#64;jarsa.com</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-reporting/tree/16.0/sale_comment_template">OCA/sale-reporting</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -1,3 +0,0 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import test_sale_order_report

View file

@ -1,81 +0,0 @@
# Copyright 2017 Simone Rubino - Agile Business Group
# Copyright 2018 Tecnativa - Pedro M. Baeza
# Copyright 2021 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo.tests.common import Form, TransactionCase
class TestAccountInvoiceReport(TransactionCase):
def setUp(self):
super().setUp()
self.company = self.env.ref("base.main_company")
self.base_comment_model = self.env["base.comment.template"]
# Create comment related to sale model
self.sale_before_comment = self._create_comment("sale.order", "before_lines")
self.sale_after_comment = self._create_comment("sale.order", "after_lines")
# Create comment related to move model
self.move_before_comment = self._create_comment("account.move", "before_lines")
self.move_after_comment = self._create_comment("account.move", "after_lines")
# Create partner
self.partner = self.env["res.partner"].create({"name": "Partner Test"})
self.partner.base_comment_template_ids = [
(4, self.sale_before_comment.id),
(4, self.sale_after_comment.id),
(4, self.move_before_comment.id),
(4, self.move_after_comment.id),
]
self.product = self.env["product.product"].create(
{
"name": "Test product",
"sale_ok": True,
"type": "service",
"list_price": 10,
"invoice_policy": "order",
}
)
self.sale_order = self._create_sale_order()
self.sale_order.action_confirm()
def _create_sale_order(self):
sale_form = Form(self.env["sale.order"])
sale_form.partner_id = self.partner
with sale_form.order_line.new() as line_form:
line_form.product_id = self.product
return sale_form.save()
def _create_comment(self, models, position):
return self.base_comment_model.create(
{
"name": "Comment " + position,
"company_id": self.company.id,
"position": position,
"text": "Text " + position,
"models": models,
}
)
def test_comments_in_sale_order_report(self):
res = self.env["ir.actions.report"]._render_qweb_html(
"sale.report_saleorder", self.sale_order.ids
)
self.assertRegex(str(res[0]), self.sale_before_comment.text)
self.assertRegex(str(res[0]), self.sale_after_comment.text)
def test_comments_in_generated_invoice(self):
invoice = self.sale_order._create_invoices()[0]
self.assertTrue(self.move_before_comment in invoice.comment_template_ids)
self.assertTrue(self.move_after_comment in invoice.comment_template_ids)
self.assertFalse(self.sale_before_comment in invoice.comment_template_ids)
self.assertFalse(self.sale_after_comment in invoice.comment_template_ids)
res = self.env["ir.actions.report"]._render_qweb_html(
"account.report_invoice", invoice.ids
)
self.assertRegex(str(res[0]), self.move_before_comment.text)
self.assertRegex(str(res[0]), self.move_after_comment.text)
def test_comments_in_sale_order(self):
self.assertTrue(self.sale_after_comment in self.sale_order.comment_template_ids)
self.assertTrue(
self.sale_before_comment in self.sale_order.comment_template_ids
)

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.actions.act_window" id="action_sale_order_comment_template">
<field name="name">Sale Orders Comments</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">base.comment.template</field>
<field name="view_mode">tree,form</field>
<field name="domain">[("model_ids", "=", "sale.order")]</field>
<field name="context" eval="{'default_models': 'sale.order'}" />
</record>
<menuitem
name="Document Comments"
id="menu_base_comment_template_sale"
action="sale_comment_template.action_sale_order_comment_template"
parent="sale.menu_sale_config"
/>
</odoo>

View file

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template
id="report_saleorder_document_comments"
inherit_id="sale.report_saleorder_document"
>
<xpath expr="//table[hasclass('table-sm')]" position="before">
<t
t-foreach="doc.comment_template_ids.filtered(lambda x: x.position == 'before_lines')"
t-as="comment_template_top"
>
<div t-out="doc.render_comment(comment_template_top)" />
</t>
</xpath>
<xpath expr="//p[@id='fiscal_position_remark']" position="after">
<t
t-foreach="doc.comment_template_ids.filtered(lambda x: x.position == 'after_lines')"
t-as="comment_template_bottom"
>
<div t-out="doc.render_comment(comment_template_bottom)" />
</t>
</xpath>
</template>
</odoo>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.ui.view" id="sale_order_form_add_comment">
<field name="name">comment_template.sale.order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page string="Comments" name="comments">
<field name="comment_template_ids" />
</page>
</xpath>
</field>
</record>
</odoo>

View file

@ -1,46 +0,0 @@
# Sale layout category hide detail
Odoo addon: sale_layout_category_hide_detail
## Installation
```bash
pip install odoo-bringout-oca-sale-reporting-sale_layout_category_hide_detail
```
## Dependencies
This addon depends on:
- sale_management
## Manifest Information
- **Name**: Sale layout category hide detail
- **Version**: 16.0.1.1.2
- **Category**: Sales Management
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/sale-reporting](https://github.com/OCA/sale-reporting) branch 16.0, addon `sale_layout_category_hide_detail`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -1,32 +0,0 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Sale_layout_category_hide_detail Module - sale_layout_category_hide_detail
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -1,3 +0,0 @@
# Configuration
Refer to Odoo settings for sale_layout_category_hide_detail. Configure related models, access rights, and options as needed.

View file

@ -1,3 +0,0 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -1,5 +0,0 @@
# Dependencies
This addon depends on:
- [sale_management](https://github.com/bringout/oca-ocb-sale/tree/681dc8d5fff638cb0862a34e48091a2098d091f8/odoo-bringout-oca-ocb-sale_management)

View file

@ -1,4 +0,0 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon sale_layout_category_hide_detail or install in UI.

View file

@ -1,7 +0,0 @@
# Install
```bash
pip install odoo-bringout-oca-sale-reporting-sale_layout_category_hide_detail"
# or
uv pip install odoo-bringout-oca-sale-reporting-sale_layout_category_hide_detail"
```

View file

@ -1,13 +0,0 @@
# Models
Detected core models and extensions in sale_layout_category_hide_detail.
```mermaid
classDiagram
class account_move_line
class sale_order_line
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -1,6 +0,0 @@
# Overview
Packaged Odoo addon: sale_layout_category_hide_detail. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon sale_layout_category_hide_detail
- License: LGPL-3

View file

@ -1,3 +0,0 @@
# Reports
This module does not define custom reports.

View file

@ -1,8 +0,0 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -1,5 +0,0 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -1,7 +0,0 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon sale_layout_category_hide_detail
```

View file

@ -1,3 +0,0 @@
# Wizards
This module does not include UI wizards.

View file

@ -1,42 +0,0 @@
[project]
name = "odoo-bringout-oca-sale-reporting-sale_layout_category_hide_detail"
version = "16.0.0"
description = "Sale layout category hide detail - Hide details for sections in sale orders and invoices for reports and customer portal"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-sale-reporting-sale_management>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["sale_layout_category_hide_detail"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -1,130 +0,0 @@
================================
Sale layout category hide detail
================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3a2fb40120a702ad60a8530bcfd4c78296b24c1f62c347e332b0fac6d2f76c3b
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--reporting-lightgray.png?logo=github
:target: https://github.com/OCA/sale-reporting/tree/16.0/sale_layout_category_hide_detail
:alt: OCA/sale-reporting
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-reporting-16-0/sale-reporting-16-0-sale_layout_category_hide_detail
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/sale-reporting&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows you to check/uncheck the new 'Show details' and
'Show subtotal' flags in *Sale order section lines* and
*Customer invoice section lines* if you want to show or hide their
lines or their subtotals in the PDF report and in the website.
You can also show or hide the section subtotal and line amount by
checking or unchecking the new 'Show section subtotal' and
'Show line amount' flags.
**Table of contents**
.. contents::
:local:
Usage
=====
The flags on the right hand side of the sale order line allow you to show or
hide details, subtotal, line amount and section subtotal.
These are the possible combinations:
.. image:: https://raw.githubusercontent.com/OCA/sale-reporting/16.0/sale_layout_category_hide_detail/static/description/readme-icons/order.png
:alt: Possible combinations
And these are the results in report:
.. image:: https://raw.githubusercontent.com/OCA/sale-reporting/16.0/sale_layout_category_hide_detail/static/description/readme-icons/report.png
:alt: Possible combination results in report
The behavior described before is the same for Quotations and Invoices.
.. |eye-icon| image:: https://raw.githubusercontent.com/OCA/sale-reporting/16.0/sale_layout_category_hide_detail/static/description/readme-icons/eye.png
:alt: plus-circle icon
:width: 12 px
.. |eye-slash-icon| image:: https://raw.githubusercontent.com/OCA/sale-reporting/16.0/sale_layout_category_hide_detail/static/description/readme-icons/eye-slash.png
:alt: minus-circle icon
:width: 12 px
.. |plus-circle-icon| image:: https://raw.githubusercontent.com/OCA/sale-reporting/16.0/sale_layout_category_hide_detail/static/description/readme-icons/plus-circle.png
:alt: plus-circle icon
:width: 12 px
.. |minus-circle-icon| image:: https://raw.githubusercontent.com/OCA/sale-reporting/16.0/sale_layout_category_hide_detail/static/description/readme-icons/minus-circle.png
:alt: minus-circle icon
:width: 12 px
Known issues / Roadmap
======================
* The `boolean_fa_icon` widget has not been extracted to a module into OCA/web
because until now this widget has not been needed for anything else, but it's
good that in the future that would be done.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-reporting/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/sale-reporting/issues/new?body=module:%20sale_layout_category_hide_detail%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Tecnativa
Contributors
~~~~~~~~~~~~
* `Tecnativa <https://www.tecnativa.com>`_:
* Ernesto Tejeda
* Pedro M. Baeza
* Víctor Martínez
* Yadier Quesada
* Denis Roussel <denis.roussel@acsone.eu>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/sale-reporting <https://github.com/OCA/sale-reporting/tree/16.0/sale_layout_category_hide_detail>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -1,3 +0,0 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

View file

@ -1,29 +0,0 @@
# Copyright 2018-2019 Tecnativa - Ernesto Tejeda
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Sale layout category hide detail",
"summary": "Hide details for sections in sale orders and invoices for "
"reports and customer portal",
"version": "16.0.1.1.2",
"category": "Sales Management",
"website": "https://github.com/OCA/sale-reporting",
"author": "Tecnativa, " "Odoo Community Association (OCA)",
"license": "AGPL-3",
"depends": ["sale_management"],
"data": [
"views/account_move_view.xml",
"views/invoice_report_templates.xml",
"views/sale_views.xml",
"views/sale_order_report_templates.xml",
"views/sale_portal_templates.xml",
],
"assets": {
"web.assets_backend": [
"sale_layout_category_hide_detail/static/src/js/**",
"sale_layout_category_hide_detail/static/src/xml/*.xml",
],
},
"application": False,
"installable": True,
}

View file

@ -1,81 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_layout_category_hide_detail
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_layout_category_hide_detail
#: model:ir.model,name:sale_layout_category_hide_detail.model_account_move_line
msgid "Journal Item"
msgstr "Stavka žurnala"
#. module: sale_layout_category_hide_detail
#: model:ir.model,name:sale_layout_category_hide_detail.model_sale_order_line
msgid "Sales Order Line"
msgstr "Stavka prodajne narudžbe"
#. module: sale_layout_category_hide_detail
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_account_move_line__show_details
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_sale_order_line__show_details
msgid "Show Details"
msgstr "Show Details"
#. module: sale_layout_category_hide_detail
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_account_move_line__show_line_amount
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_sale_order_line__show_line_amount
msgid "Show Line Amount"
msgstr "Show Line Iznos"
#. module: sale_layout_category_hide_detail
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_account_move_line__show_section_subtotal
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_sale_order_line__show_section_subtotal
msgid "Show Section Subtotal"
msgstr "Show Section Podzbroj"
#. module: sale_layout_category_hide_detail
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_account_move_line__show_subtotal
#: model:ir.model.fields,field_description:sale_layout_category_hide_detail.field_sale_order_line__show_subtotal
msgid "Show Subtotal"
msgstr "Show Podzbroj"
#. module: sale_layout_category_hide_detail
#: model_terms:ir.ui.view,arch_db:sale_layout_category_hide_detail.report_saleorder_document_hide_detail
#: model_terms:ir.ui.view,arch_db:sale_layout_category_hide_detail.sale_order_portal_content_hide_detail
msgid "Subtotal"
msgstr "Podukupno"
#. module: sale_layout_category_hide_detail
#. odoo-javascript
#: code:addons/sale_layout_category_hide_detail/static/src/js/boolean_fa_icon_widget.esm.js:0
#, python-format
msgid "Switch to: details hidden"
msgstr "Switch to: details hidden"
#. module: sale_layout_category_hide_detail
#. odoo-javascript
#: code:addons/sale_layout_category_hide_detail/static/src/js/boolean_fa_icon_widget.esm.js:0
#, python-format
msgid "Switch to: details shown"
msgstr "Switch to: details shown"
#. module: sale_layout_category_hide_detail
#. odoo-javascript
#: code:addons/sale_layout_category_hide_detail/static/src/js/boolean_fa_icon_widget.esm.js:0
#, python-format
msgid "Toggle"
msgstr "Uključi / isključi"
#. module: sale_layout_category_hide_detail
#: model:ir.model.fields,help:sale_layout_category_hide_detail.field_account_move_line__show_section_subtotal
#: model:ir.model.fields,help:sale_layout_category_hide_detail.field_sale_order_line__show_section_subtotal
msgid "Uncheck this if you want to hide the subtotal on section part"
msgstr "Uncheck this if you want to hide the subtotal on section part"

Some files were not shown because too many files have changed in this diff Show more