Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,47 @@
# Sale Report Delivered
Odoo addon: sale_report_delivered
## Installation
```bash
pip install odoo-bringout-oca-sale-reporting-sale_report_delivered
```
## Dependencies
This addon depends on:
- sale_stock
- sale_margin
## Manifest Information
- **Name**: Sale Report Delivered
- **Version**: 16.0.2.2.2
- **Category**: Sales
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/sale-reporting](https://github.com/OCA/sale-reporting) branch 16.0, addon `sale_report_delivered`.
## 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

@ -0,0 +1,32 @@
# 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_report_delivered Module - sale_report_delivered
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

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

View file

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

View file

@ -0,0 +1,6 @@
# Dependencies
This addon depends on:
- [sale_stock](../../odoo-bringout-oca-ocb-sale_stock)
- [sale_margin](../../odoo-bringout-oca-ocb-sale_margin)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,41 @@
# Security
Access control and security definitions in sale_report_delivered.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../sale_report_delivered/security/ir.model.access.csv)**
- 2 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[sale_report_security.xml](../sale_report_delivered/security/sale_report_security.xml)**
```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_report_delivered/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
- **[sale_report_security.xml](../sale_report_delivered/security/sale_report_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

@ -0,0 +1,5 @@
# 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

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

View file

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

View file

@ -0,0 +1,43 @@
[project]
name = "odoo-bringout-oca-sale-reporting-sale_report_delivered"
version = "16.0.0"
description = "Sale Report Delivered - Odoo addon"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-sale-reporting-sale_stock>=16.0.0",
"odoo-bringout-oca-sale-reporting-sale_margin>=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_report_delivered"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,98 @@
=====================
Sale Report Delivered
=====================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:257e0251c07649aad140037e63ec2f390ee43cb80001ab0057842da5581e1192
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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_report_delivered
: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_report_delivered
: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 subtotal price based on the delivered quantities field to the
*Sales Report*.
This module takes in consideration Outgoing, Returns and Dropship.
**Table of contents**
.. contents::
:local:
Usage
=====
Go to *Sales > Reporting > Sales from deliveries* and you'll find the new *Total Price
Delivered* measure.
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_report_delivered%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>`_:
* Sergio Teruel
* Carlos Dauden
* Eduardo de Miguel (`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-sergio-teruel| image:: https://github.com/sergio-teruel.png?size=40px
:target: https://github.com/sergio-teruel
:alt: sergio-teruel
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-sergio-teruel|
This module is part of the `OCA/sale-reporting <https://github.com/OCA/sale-reporting/tree/16.0/sale_report_delivered>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

@ -0,0 +1,19 @@
# Copyright 2021 Tecnativa - Sergio Teruel
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Sale Report Delivered",
"version": "16.0.2.2.2",
"author": "Tecnativa," "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/sale-reporting",
"category": "Sales",
"license": "AGPL-3",
"depends": ["sale_stock", "sale_margin"],
"installable": True,
"development_status": "Beta",
"maintainers": ["sergio-teruel"],
"data": [
"security/ir.model.access.csv",
"security/sale_report_security.xml",
"views/sale_report_delivered_views.xml",
],
}

View file

@ -0,0 +1,271 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_report_delivered
#
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_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__nbr
msgid "# of Lines"
msgstr "# Linija"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__amount_cost
msgid "Amount cost"
msgstr "Amount cost"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__analytic_account_id
msgid "Analytic Account"
msgstr "Analitički konto"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__campaign_id
msgid "Campaign"
msgstr "Kampanja"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__cancel
msgid "Cancelled"
msgstr "Otkazan"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__company_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Company"
msgstr "Preduzeće"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer"
msgstr "Kupac"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__country_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Country"
msgstr "Država kupca"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__commercial_partner_id
msgid "Customer Entity"
msgstr "Nadređena tvrtka"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__industry_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Industry"
msgstr "Kupčeva industrija"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__date
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Date"
msgstr "Datum"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__draft
msgid "Draft Quotation"
msgstr "Predračun u pripremi"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Extended Filters"
msgstr "Prošireni filteri"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__weight
msgid "Gross Weight"
msgstr "Bruto težina"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Group By"
msgstr "Grupiši po"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__id
msgid "ID"
msgstr "ID"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin
msgid "Margin delivered"
msgstr "Margin delivered"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin_percent
msgid "Margin delivered(%)"
msgstr "Margin delivered(%)"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__medium_id
msgid "Medium"
msgstr "Medijum"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__order_id
msgid "Order"
msgstr "Nalog"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__name
msgid "Order Reference"
msgstr "Referenca narudžbe"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__picking_id
msgid "Picking"
msgstr "Skladišnice"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__pricelist_id
msgid "Pricelist"
msgstr "Cjenik"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_tmpl_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product"
msgstr "Artikal"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__categ_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product Category"
msgstr "Kategorija proizvoda"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_id
msgid "Product Variant"
msgstr "Varijanta proizvoda"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom_qty
msgid "Qty"
msgstr "Količina"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sent
msgid "Quotation Sent"
msgstr "Ponuda poslana"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Quotations"
msgstr "Predračuni"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_pivot
msgid "Sales Analysis"
msgstr "Analiza prodaje"
#. module: sale_report_delivered
#: model:ir.actions.act_window,name:sale_report_delivered.action_sale_report_delivered
msgid "Sales Analysis From Deliveries"
msgstr "Sales Analysis From Deliveries"
#. module: sale_report_delivered
#: model:ir.model,name:sale_report_delivered.model_sale_report_delivered
msgid "Sales Delivered Analysis Report"
msgstr "Sales Delivered Analysis Report"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__done
msgid "Sales Done"
msgstr "Prodaja završena"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sale
msgid "Sales Order"
msgstr "Prodajni nalog"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Orders"
msgstr "Prodajni nalozi"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__team_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Team"
msgstr "Prodajni tim"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_graph
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales analysis from deliveries"
msgstr "Sales analysis from deliveries"
#. module: sale_report_delivered
#: model:ir.ui.menu,name:sale_report_delivered.menu_report_sale_stock_delivery
msgid "Sales from deliveries"
msgstr "Sales from deliveries"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson"
msgstr "Referent prodaje"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_from_partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson From Partner"
msgstr "Salesperson From Partner"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__source_id
msgid "Source"
msgstr "Izvor"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__state
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Status"
msgstr "Status"
#. module: sale_report_delivered
#: model_terms:ir.actions.act_window,help:sale_report_delivered.action_sale_report_delivered
msgid ""
"This report performs analysis on your sales orders from deliveries. Analysis"
" check your sales revenues and sort it by different group criteria "
"(salesman, partner, product, etc.) Use this report to perform analysis on "
"sales not having invoiced yet. If you want to analyse your turnover, you "
"should use the Invoice Analysis report in the Accounting application."
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom
msgid "Unit of Measure"
msgstr "Jedinica mjere"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__price_subtotal
msgid "Untaxed total delivered"
msgstr "Untaxed total delivered"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__volume
msgid "Volume"
msgstr "Volumen"

View file

@ -0,0 +1,281 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_report_delivered
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-28 20:03+0000\n"
"PO-Revision-Date: 2024-11-28 21:03+0100\n"
"Last-Translator: Carlos Dauden <carlos.dauden@tecnativa.com>\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: Poedit 3.4.2\n"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__nbr
msgid "# of Lines"
msgstr "# de líneas"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__amount_cost
msgid "Amount cost"
msgstr "Coste"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__analytic_account_id
msgid "Analytic Account"
msgstr "Cuenta analítica"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__campaign_id
msgid "Campaign"
msgstr "Campaña"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__cancel
msgid "Cancelled"
msgstr "Cancelado"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__company_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Company"
msgstr "Compañía"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer"
msgstr "Cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__country_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Country"
msgstr "País del cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__commercial_partner_id
msgid "Customer Entity"
msgstr "Entidad del Cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__industry_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Industry"
msgstr "Sector"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__date
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Date"
msgstr "Fecha"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__display_name
msgid "Display Name"
msgstr "Nombre a mostrar"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__draft
msgid "Draft Quotation"
msgstr "Presupuesto borrador"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Extended Filters"
msgstr "Filtros extendidos"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__weight
msgid "Gross Weight"
msgstr "Peso bruto"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Group By"
msgstr "Agrupado por"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__id
msgid "ID"
msgstr "ID (Identificador)"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin
msgid "Margin delivered"
msgstr "Margen entregado"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin_percent
msgid "Margin delivered(%)"
msgstr "Margen entregado(%)"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__medium_id
msgid "Medium"
msgstr "Media"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__order_id
msgid "Order"
msgstr "Pedido"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__name
msgid "Order Reference"
msgstr "Referencia del pedido"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__picking_id
msgid "Picking"
msgstr "Albarán"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__pricelist_id
msgid "Pricelist"
msgstr "Tarifa"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_tmpl_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product"
msgstr "Producto"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__categ_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product Category"
msgstr "Categoría"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_id
msgid "Product Variant"
msgstr "Variante de producto"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom_qty
msgid "Qty"
msgstr "Cantidad"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sent
msgid "Quotation Sent"
msgstr "Presupuesto enviado"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Quotations"
msgstr "Presupuestos"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_pivot
msgid "Sales Analysis"
msgstr "Análisis de ventas"
#. module: sale_report_delivered
#: model:ir.actions.act_window,name:sale_report_delivered.action_sale_report_delivered
msgid "Sales Analysis From Deliveries"
msgstr "Análisis de ventas desde albaranes"
#. module: sale_report_delivered
#: model:ir.model,name:sale_report_delivered.model_sale_report_delivered
msgid "Sales Delivered Analysis Report"
msgstr "Análisis de ventas"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__done
msgid "Sales Done"
msgstr "Orden de venta completa"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sale
msgid "Sales Order"
msgstr "Pedido de venta"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Orders"
msgstr "Pedidos de ventas"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__team_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Team"
msgstr "Equipo de ventas"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_graph
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales analysis from deliveries"
msgstr "Análisis de ventas desde albaranes"
#. module: sale_report_delivered
#: model:ir.ui.menu,name:sale_report_delivered.menu_report_sale_stock_delivery
msgid "Sales from deliveries"
msgstr "Ventas desde albaranes"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson"
msgstr "Comercial"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_from_partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson From Partner"
msgstr "Comercial del cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__source_id
msgid "Source"
msgstr "Origen"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__state
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Status"
msgstr "Estado"
#. module: sale_report_delivered
#: model_terms:ir.actions.act_window,help:sale_report_delivered.action_sale_report_delivered
msgid ""
"This report performs analysis on your sales orders from deliveries. Analysis "
"check your sales revenues and sort it by different group criteria (salesman, "
"partner, product, etc.) Use this report to perform analysis on sales not "
"having invoiced yet. If you want to analyse your turnover, you should use "
"the Invoice Analysis report in the Accounting application."
msgstr ""
"Este informe realiza el análisis de sus pedidos de venta. El análisis "
"comprueba su ingresos por ventas y los ordena por diferentes criterios de "
"agrupación (comercial, cliente, producto, etc). Use este informe para "
"analizar las ventas que aún no han sido facturadas. Si lo que quiere "
"analizar es su volumen de negocios, debería usar el informe de análisis de "
"facturas en la aplicación de Contabilidad."
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom
msgid "Unit of Measure"
msgstr "Unidad de medida"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__price_subtotal
msgid "Untaxed total delivered"
msgstr "Base imponible entregada"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__volume
msgid "Volume"
msgstr "Volumen"

View file

@ -0,0 +1,280 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_report_delivered
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-03-05 12:06+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 5.10.2\n"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__nbr
msgid "# of Lines"
msgstr "N° di righe"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__amount_cost
msgid "Amount cost"
msgstr "Costo del valore"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__analytic_account_id
msgid "Analytic Account"
msgstr "Conto analitico"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__campaign_id
msgid "Campaign"
msgstr "Campagna"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__cancel
msgid "Cancelled"
msgstr "Annullata"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__company_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Company"
msgstr "Azienda"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer"
msgstr "Cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__country_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Country"
msgstr "Nazione cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__commercial_partner_id
msgid "Customer Entity"
msgstr "Entità cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__industry_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Industry"
msgstr "Settore cliente"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__date
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Date"
msgstr "Data"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__draft
msgid "Draft Quotation"
msgstr "Preventivo bozza"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Extended Filters"
msgstr "Filtri estesi"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__weight
msgid "Gross Weight"
msgstr "Peso lordo"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Group By"
msgstr "Raggruppa per"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__id
msgid "ID"
msgstr "ID"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin
msgid "Margin delivered"
msgstr "Margine consegnato"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin_percent
msgid "Margin delivered(%)"
msgstr "Margine consegnato (%)"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__medium_id
msgid "Medium"
msgstr "Medio"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__order_id
msgid "Order"
msgstr "Ordine"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__name
msgid "Order Reference"
msgstr "Riferimento ordine"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__picking_id
msgid "Picking"
msgstr "Prelievo"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__pricelist_id
msgid "Pricelist"
msgstr "Listino prezzi"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_tmpl_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product"
msgstr "Prodotto"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__categ_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product Category"
msgstr "Categoria prodotto"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_id
msgid "Product Variant"
msgstr "Variante prodotto"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom_qty
msgid "Qty"
msgstr "Q.tà"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sent
msgid "Quotation Sent"
msgstr "Preventivo inviato"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Quotations"
msgstr "Preventivi"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_pivot
msgid "Sales Analysis"
msgstr "Analisi delle vendite"
#. module: sale_report_delivered
#: model:ir.actions.act_window,name:sale_report_delivered.action_sale_report_delivered
msgid "Sales Analysis From Deliveries"
msgstr "Analisi vendite dalle consegne"
#. module: sale_report_delivered
#: model:ir.model,name:sale_report_delivered.model_sale_report_delivered
msgid "Sales Delivered Analysis Report"
msgstr "Resoconto analisi vendite consegnate"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__done
msgid "Sales Done"
msgstr "Vendita effettuata"
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sale
msgid "Sales Order"
msgstr "Ordine di vendita"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Orders"
msgstr "Ordini di vendita"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__team_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Team"
msgstr "Team di vendita"
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_graph
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales analysis from deliveries"
msgstr "Analisi vendite dalle consegne"
#. module: sale_report_delivered
#: model:ir.ui.menu,name:sale_report_delivered.menu_report_sale_stock_delivery
msgid "Sales from deliveries"
msgstr "Vendite dalle consegne"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson"
msgstr "Addetto vendite"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_from_partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson From Partner"
msgstr "Venditore dal partner"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__source_id
msgid "Source"
msgstr "Origine"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__state
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Status"
msgstr "Stato"
#. module: sale_report_delivered
#: model_terms:ir.actions.act_window,help:sale_report_delivered.action_sale_report_delivered
msgid ""
"This report performs analysis on your sales orders from deliveries. Analysis "
"check your sales revenues and sort it by different group criteria (salesman, "
"partner, product, etc.) Use this report to perform analysis on sales not "
"having invoiced yet. If you want to analyse your turnover, you should use "
"the Invoice Analysis report in the Accounting application."
msgstr ""
"Questo resoconto effettua l'analisi sugli ordini di vendita dalle consegne. "
"L'analisi controlla i ricavi delle vendite e li ordina per diversi gruppi di "
"criteri (addetto vendita, partner, prodotto, ecc.). Utilizzare questo "
"resoconto per effettuare analisi sulle vendite che non sono ancora state "
"fatturate. Se si vuole analizzare il fatturato, si deve usare il resoconto "
"analisi fatture nell'applicazione contabilità."
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom
msgid "Unit of Measure"
msgstr "Unità di misura"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__price_subtotal
msgid "Untaxed total delivered"
msgstr "Totale consegnato tasse escluse"
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__volume
msgid "Volume"
msgstr "Volume"

View file

@ -0,0 +1,271 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_report_delivered
#
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_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__nbr
msgid "# of Lines"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__amount_cost
msgid "Amount cost"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__analytic_account_id
msgid "Analytic Account"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__campaign_id
msgid "Campaign"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__cancel
msgid "Cancelled"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__company_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Company"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__country_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Country"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__commercial_partner_id
msgid "Customer Entity"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__industry_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Customer Industry"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__date
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Date"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__display_name
msgid "Display Name"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__draft
msgid "Draft Quotation"
msgstr ""
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Extended Filters"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__weight
msgid "Gross Weight"
msgstr ""
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Group By"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__id
msgid "ID"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered____last_update
msgid "Last Modified on"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin
msgid "Margin delivered"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__margin_percent
msgid "Margin delivered(%)"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__medium_id
msgid "Medium"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__order_id
msgid "Order"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__name
msgid "Order Reference"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__picking_id
msgid "Picking"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__pricelist_id
msgid "Pricelist"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_tmpl_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__categ_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Product Category"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_id
msgid "Product Variant"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom_qty
msgid "Qty"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sent
msgid "Quotation Sent"
msgstr ""
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Quotations"
msgstr ""
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_pivot
msgid "Sales Analysis"
msgstr ""
#. module: sale_report_delivered
#: model:ir.actions.act_window,name:sale_report_delivered.action_sale_report_delivered
msgid "Sales Analysis From Deliveries"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model,name:sale_report_delivered.model_sale_report_delivered
msgid "Sales Delivered Analysis Report"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__done
msgid "Sales Done"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields.selection,name:sale_report_delivered.selection__sale_report_delivered__state__sale
msgid "Sales Order"
msgstr ""
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Orders"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__team_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales Team"
msgstr ""
#. module: sale_report_delivered
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_graph
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Sales analysis from deliveries"
msgstr ""
#. module: sale_report_delivered
#: model:ir.ui.menu,name:sale_report_delivered.menu_report_sale_stock_delivery
msgid "Sales from deliveries"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__user_from_partner_id
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Salesperson From Partner"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__source_id
msgid "Source"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__state
#: model_terms:ir.ui.view,arch_db:sale_report_delivered.view_sale_report_delivered_search
msgid "Status"
msgstr ""
#. module: sale_report_delivered
#: model_terms:ir.actions.act_window,help:sale_report_delivered.action_sale_report_delivered
msgid ""
"This report performs analysis on your sales orders from deliveries. Analysis"
" check your sales revenues and sort it by different group criteria "
"(salesman, partner, product, etc.) Use this report to perform analysis on "
"sales not having invoiced yet. If you want to analyse your turnover, you "
"should use the Invoice Analysis report in the Accounting application."
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__product_uom
msgid "Unit of Measure"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__price_subtotal
msgid "Untaxed total delivered"
msgstr ""
#. module: sale_report_delivered
#: model:ir.model.fields,field_description:sale_report_delivered.field_sale_report_delivered__volume
msgid "Volume"
msgstr ""

View file

@ -0,0 +1,6 @@
* `Tecnativa <https://www.tecnativa.com>`_:
* Sergio Teruel
* Carlos Dauden
* Eduardo de Miguel (`Moduon <https://www.moduon.team/>`__)

View file

@ -0,0 +1,4 @@
Adds subtotal price based on the delivered quantities field to the
*Sales Report*.
This module takes in consideration Outgoing, Returns and Dropship.

View file

@ -0,0 +1,2 @@
Go to *Sales > Reporting > Sales from deliveries* and you'll find the new *Total Price
Delivered* measure.

View file

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

View file

@ -0,0 +1,322 @@
# Copyright 2021 Tecnativa - Sergio Teruel
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from psycopg2.extensions import AsIs
from odoo import api, fields, models, tools
class SaleReportDeliverd(models.Model):
_name = "sale.report.delivered"
_description = "Sales Delivered Analysis Report"
_auto = False
_rec_name = "date"
_order = "date desc"
name = fields.Char("Order Reference", readonly=True)
date = fields.Datetime(readonly=True)
product_id = fields.Many2one("product.product", "Product Variant", readonly=True)
product_uom = fields.Many2one("uom.uom", "Unit of Measure", readonly=True)
product_uom_qty = fields.Float("Qty", readonly=True)
partner_id = fields.Many2one("res.partner", "Customer", readonly=True)
company_id = fields.Many2one("res.company", "Company", readonly=True)
user_from_partner_id = fields.Many2one(
"res.users", "Salesperson From Partner", readonly=True
)
user_id = fields.Many2one("res.users", "Salesperson", readonly=True)
price_subtotal = fields.Float("Untaxed total delivered", readonly=True)
product_tmpl_id = fields.Many2one("product.template", "Product", readonly=True)
categ_id = fields.Many2one("product.category", "Product Category", readonly=True)
nbr = fields.Integer("# of Lines", readonly=True)
pricelist_id = fields.Many2one("product.pricelist", "Pricelist", readonly=True)
analytic_account_id = fields.Many2one(
"account.analytic.account", "Analytic Account", readonly=True
)
team_id = fields.Many2one("crm.team", "Sales Team", readonly=True)
country_id = fields.Many2one("res.country", "Customer Country", readonly=True)
industry_id = fields.Many2one(
"res.partner.industry", "Customer Industry", readonly=True
)
commercial_partner_id = fields.Many2one(
"res.partner", "Customer Entity", readonly=True
)
state = fields.Selection(
[
("draft", "Draft Quotation"),
("sent", "Quotation Sent"),
("sale", "Sales Order"),
("done", "Sales Done"),
("cancel", "Cancelled"),
],
string="Status",
readonly=True,
)
weight = fields.Float("Gross Weight", readonly=True)
volume = fields.Float(readonly=True)
campaign_id = fields.Many2one("utm.campaign", "Campaign")
medium_id = fields.Many2one("utm.medium", "Medium")
source_id = fields.Many2one("utm.source", "Source")
order_id = fields.Many2one("sale.order", "Order", readonly=True)
picking_id = fields.Many2one("stock.picking", "Picking", readonly=True)
amount_cost = fields.Float("Amount cost", readonly=True)
margin = fields.Float("Margin delivered", readonly=True)
margin_percent = fields.Float(string="Margin delivered(%)", readonly=True)
def _select(self):
select_str = """
SELECT
min(sub.id) AS id,
sub.product_id,
sub.template_name,
sub.product_uom,
count(*) as nbr,
sub.order_name as name,
sub.date,
sub.state,
sub.partner_id,
sub.user_from_partner_id,
sub.user_id,
sub.company_id,
sub.campaign_id,
sub.medium_id,
sub.source_id,
sub.categ_id,
sub.pricelist_id,
sub.analytic_account_id ,
sub.team_id,
sub.product_tmpl_id,
sub.country_id,
sub.industry_id,
sub.commercial_partner_id,
sum(signed_qty * sub.weight) as weight,
sum(signed_qty * sub.volume) as volume,
sub.order_id,
sub.picking_id,
sum(signed_qty * unsigned_product_uom_qty) AS product_uom_qty,
sum(signed_qty * unsigned_price_subtotal) AS price_subtotal,
CASE
WHEN BOOL_OR(sub.amount_cost is not NULL)
THEN sum(-sub.amount_cost)
ELSE sum(
signed_qty * ROUND(
sub.unsigned_purchase_price * unsigned_product_uom_qty,
sub.decimal_places
)
)
END AS amount_cost,
CASE
WHEN BOOL_OR(sub.amount_cost is not NULL)
THEN sum(
signed_qty * unsigned_price_subtotal + COALESCE(
sub.amount_cost, 0.0
)
)
ELSE sum(
signed_qty * unsigned_price_subtotal - (
signed_qty * ROUND(
sub.unsigned_purchase_price * unsigned_product_uom_qty,
sub.decimal_places
)
)
)
END AS margin,
0 AS margin_percent
"""
return select_str
def _sub_select_signed_qty(self):
"""Sub select to calculate the cases for the signed quantity"""
return """
WHEN source_location.usage = 'internal' AND dest_location.usage = 'customer'
THEN 1
WHEN source_location.usage = 'customer' AND dest_location.usage = 'internal'
THEN -1
WHEN source_location.usage = 'supplier' AND dest_location.usage = 'customer'
THEN 1
WHEN source_location.usage = 'customer' AND dest_location.usage = 'supplier'
THEN -1
"""
def _sub_select(self):
sub_select_str = """
SELECT
sol.id AS id,
sol.product_id as product_id,
t.name as template_name,
t.uom_id as product_uom,
cur.decimal_places,
CASE
WHEN dest_location.usage IS NULL
THEN 1
{sub_select_signed_qty}
ELSE 0
END AS signed_qty,
(CASE
WHEN t.type IN ('product', 'consu')
THEN ABS(COALESCE(-svl.quantity, sm.quantity_done, 0.0))
ELSE sol.product_uom_qty END
) / u.factor * u2.factor as unsigned_product_uom_qty,
ROUND(ABS(COALESCE(
-svl.quantity * sol.price_reduce,
sm.quantity_done * sol.price_reduce,
sol.price_subtotal)) /
CASE COALESCE(s.currency_rate, 0)
WHEN 0 THEN 1.0 ELSE s.currency_rate END, cur.decimal_places)
as unsigned_price_subtotal,
s.name as order_name,
COALESCE(sm.date, s.effective_date, s.date_order) as date,
s.state as state,
s.partner_id as partner_id,
s.user_id as user_id,
s.company_id as company_id,
s.campaign_id as campaign_id,
s.medium_id as medium_id,
s.source_id as source_id,
t.categ_id as categ_id,
s.pricelist_id as pricelist_id,
s.analytic_account_id as analytic_account_id,
s.team_id as team_id,
p.product_tmpl_id,
partner.user_id as user_from_partner_id,
partner.country_id as country_id,
partner.industry_id as industry_id,
partner.commercial_partner_id as commercial_partner_id,
p.weight * sm.quantity_done / u.factor * u2.factor as weight,
p.volume * sm.quantity_done / u.factor * u2.factor as volume,
s.id as order_id,
sp.id as picking_id,
sol.purchase_price AS unsigned_purchase_price,
ROUND(svl.value, cur.decimal_places) AS amount_cost
""".format(
sub_select_signed_qty=self._sub_select_signed_qty()
)
return sub_select_str
def _from(self):
from_str = """
FROM sale_order_line sol
LEFT JOIN stock_move sm ON (sol.id = sm.sale_line_id)
join sale_order s on (sol.order_id=s.id)
join res_partner partner on s.partner_id = partner.id
left join product_product p on (sol.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id)
left join uom_uom u on (u.id=sol.product_uom)
left join uom_uom u2 on (u2.id=t.uom_id)
left join product_pricelist pp on (s.pricelist_id = pp.id)
LEFT JOIN
stock_location dest_location ON sm.location_dest_id = dest_location.id
LEFT JOIN
stock_location source_location ON sm.location_id = source_location.id
LEFT JOIN stock_valuation_layer svl ON svl.stock_move_id = sm.id
LEFT JOIN stock_picking sp ON sp.id = sm.picking_id
LEFT JOIN res_currency as cur ON cur.id = sol.currency_id
"""
return from_str
def _sub_where(self):
"""
Take into account only stock moves from:
Outgoing: Internal to Customer
Returns: Customer to Internal + to_refund
Dropship: Supplier to Customer
Dropship return: Customer to Supplier
"""
return """
(
source_location.usage = 'internal' AND
dest_location.usage = 'customer'
) OR
(
source_location.usage = 'customer' AND
dest_location.usage = 'internal' AND
sm.to_refund
) OR
(
source_location.usage = 'supplier' AND
dest_location.usage = 'customer' AND
svl.quantity < 0
) OR
(
source_location.usage = 'customer' AND
dest_location.usage = 'supplier' AND
svl.quantity > 0
)
"""
def _where(self):
"""Where clause with only done mvoes or without state"""
return """
WHERE (sm.quantity_done <> 0.0) AND
(sm.state = 'done' OR sm.state IS NULL) AND
({sub_where})
""".format(
sub_where=self._sub_where()
)
def _group_by(self):
group_by_str = """
GROUP BY sub.product_id,
sub.template_name,
sub.order_id,
sub.picking_id,
sub.product_uom,
sub.categ_id,
sub.order_name,
sub.date,
sub.partner_id,
sub.user_from_partner_id,
sub.user_id,
sub.state,
sub.company_id,
sub.campaign_id,
sub.medium_id,
sub.source_id,
sub.pricelist_id,
sub.analytic_account_id,
sub.team_id,
sub.product_tmpl_id,
sub.country_id,
sub.industry_id,
sub.commercial_partner_id
"""
return group_by_str
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute(
"""CREATE or REPLACE VIEW %s AS (
%s
FROM (
%s %s %s
) AS sub %s)""",
(
AsIs(self._table),
AsIs(self._select()),
AsIs(self._sub_select()),
AsIs(self._from()),
AsIs(self._where()),
AsIs(self._group_by()),
),
)
@api.model
def read_group(
self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True
):
res = super().read_group(
domain,
fields,
groupby,
offset=offset,
limit=limit,
orderby=orderby,
lazy=lazy,
)
if "margin_percent:sum" not in fields:
return res
full_fields = all(x in fields for x in {"price_subtotal:sum", "margin:sum"})
for line in res:
if full_fields and line["price_subtotal"]:
line["margin_percent"] = (line["margin"] / line["price_subtotal"]) * 100
return res

View file

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sale_report_delivered_manager,sale.report.delivered,model_sale_report_delivered,sales_team.group_sale_manager,1,1,1,1
access_sale_report_delivered_salesman,sale.report.delivered,model_sale_report_delivered,sales_team.group_sale_salesman,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_sale_report_delivered_manager sale.report.delivered model_sale_report_delivered sales_team.group_sale_manager 1 1 1 1
3 access_sale_report_delivered_salesman sale.report.delivered model_sale_report_delivered sales_team.group_sale_salesman 1 0 0 0

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="sale_report_delivered_personal_rule" model="ir.rule">
<field name="name">Personal Delivered Analysis</field>
<field name="model_id" ref="model_sale_report_delivered" />
<field
name="domain_force"
>['|',('user_id','=',user.id),('user_id','=',False)]</field>
<field name="groups" eval="[(4, ref('sales_team.group_sale_salesman'))]" />
</record>
<record id="sale_report_delivered_see_all_rule" model="ir.rule">
<field name="name">All Delivered Analysis</field>
<field name="model_id" ref="model_sale_report_delivered" />
<field name="domain_force">[(1, '=', 1)]</field>
<field
name="groups"
eval="[(4, ref('sales_team.group_sale_salesman_all_leads'))]"
/>
</record>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,442 @@
<!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 Report Delivered</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
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: gray; } /* 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, pre.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-report-delivered">
<h1 class="title">Sale Report Delivered</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:257e0251c07649aad140037e63ec2f390ee43cb80001ab0057842da5581e1192
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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_report_delivered"><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_report_delivered"><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 subtotal price based on the delivered quantities field to the
<em>Sales Report</em>.</p>
<p>This module takes in consideration Outgoing, Returns and Dropship.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</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="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>Go to <em>Sales &gt; Reporting &gt; Sales from deliveries</em> and youll find the new <em>Total Price
Delivered</em> measure.</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_report_delivered%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>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul>
<li><p class="first"><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:</p>
<blockquote>
<ul class="simple">
<li>Sergio Teruel</li>
<li>Carlos Dauden</li>
</ul>
</blockquote>
</li>
<li><p class="first">Eduardo de Miguel (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</p>
</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>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/sergio-teruel"><img alt="sergio-teruel" src="https://github.com/sergio-teruel.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/sale_report_delivered">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

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

View file

@ -0,0 +1,98 @@
# Copyright 2022 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import Form, common, new_test_user
from odoo.tests.common import users
class TestSaleReportDeliveredBase(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env.company
cls.admin = cls.env.ref("base.user_admin")
cls.pricelist = cls.env["product.pricelist"].create(
{
"name": "Test pricelist",
"currency_id": cls.company.currency_id.id,
}
)
cls.partner = cls.env["res.partner"].create(
{"name": "Test partner", "property_product_pricelist": cls.pricelist.id}
)
cls.user = new_test_user(
cls.env,
login="test_user-sale_report_delivered",
name="test_user-one",
groups="sales_team.group_sale_manager",
)
group_sale_manager = cls.env.ref("sales_team.group_sale_manager")
group_sale_manager.write({"users": [(4, cls.admin.id)]})
cls.product = cls.env["product.product"].create(
{"name": "Test product", "type": "product", "list_price": 10}
)
cls._create_stock_quant(cls, cls.product)
cls.service = cls.env["product.product"].create(
{"name": "Test service", "type": "service", "list_price": 10}
)
cls.order_1 = cls._create_order(cls, cls.product)
cls.order_2 = cls._create_order(cls, cls.service)
cls.orders = cls.order_1 + cls.order_2
cls.orders.action_confirm()
cls.orders.picking_ids.action_confirm()
cls.orders.picking_ids.move_ids.write({"quantity_done": 1.0})
cls.orders.picking_ids.button_validate()
def _create_stock_quant(self, product):
res = product.action_update_quantity_on_hand()
quant_form = Form(
self.env["stock.quant"].with_context(**res["context"]),
view="stock.view_stock_quant_tree_inventory_editable",
)
quant_form.inventory_quantity = 1
quant_form.location_id = self.env.ref("stock.stock_location_stock")
return quant_form.save()
def _create_order(self, product):
order_form = Form(self.env["sale.order"])
order_form.partner_id = self.partner
with order_form.order_line.new() as line_form:
line_form.product_id = product
line_form.product_uom_qty = 1
return order_form.save()
class TestSaleReportDelivered(TestSaleReportDeliveredBase):
@users("admin", "test_user-sale_report_delivered")
def test_sale_report_delivered_misc(self):
items = self.env["sale.report.delivered"].search(
[("order_id", "in", self.orders.ids)]
)
self.assertIn(self.order_1, items.mapped("order_id"))
self.assertNotIn(self.order_2, items.mapped("order_id"))
self.assertIn(self.order_1.picking_ids, items.mapped("picking_id"))
self.assertIn(self.product, items.mapped("product_id"))
self.assertNotIn(self.service, items.mapped("product_id"))
def _test_sale_report_delivered_read_group(self):
self.product.stock_valuation_layer_ids.value = 1
res = self.env["sale.report.delivered"].read_group(
domain=[("order_id", "in", self.orders.ids)],
fields=[
"order_id",
"margin_percent:sum",
"price_subtotal:sum",
"margin:sum",
],
groupby=["order_id"],
)
self.assertAlmostEqual(res[0]["margin_percent"], 100.00)
@users("admin")
def test_sale_report_delivered_read_group_admin(self):
self._test_sale_report_delivered_read_group()
@users("test_user-sale_report_delivered")
def test_sale_report_delivered_read_group(self):
self._test_sale_report_delivered_read_group()

View file

@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_sale_report_delivered_pivot" model="ir.ui.view">
<field name="name">sale.report.delivered.pivot</field>
<field name="model">sale.report.delivered</field>
<field name="arch" type="xml">
<pivot string="Sales Analysis" disable_linking="True">
<field name="date" interval="month" type="row" />
<field name="product_uom_qty" type="measure" />
<field name="price_subtotal" type="measure" />
<field name="amount_cost" type="measure" />
<field name="margin" type="measure" />
</pivot>
</field>
</record>
<record id="view_sale_report_delivered_graph" model="ir.ui.view">
<field name="name">sale.report.delivered.graph</field>
<field name="model">sale.report.delivered</field>
<field name="arch" type="xml">
<graph string="Sales analysis from deliveries" type="line">
<field name="date" type="row" interval="day" />
<field name="price_subtotal" type="measure" />
</graph>
</field>
</record>
<record id="view_sale_report_delivered_search" model="ir.ui.view">
<field name="name">sale.report.delivered.search</field>
<field name="model">sale.report.delivered</field>
<field name="arch" type="xml">
<search string="Sales analysis from deliveries">
<field name="date" />
<filter
string="Date"
name="year"
invisible="0"
date="date"
default_period="this_year"
/>
<separator />
<filter
name="Quotations"
string="Quotations"
domain="[('state','in', ('draft', 'sent'))]"
/>
<filter
name="Sales"
string="Sales Orders"
domain="[('state','not in',('draft', 'cancel', 'sent'))]"
/>
<separator />
<field name="user_id" />
<field name="user_from_partner_id" />
<field name="team_id" />
<field name="product_id" />
<field name="categ_id" />
<field name="partner_id" />
<field name="country_id" />
<field name="industry_id" />
<group expand="0" string="Extended Filters">
<field
name="categ_id"
filter_domain="[('categ_id', 'child_of', self)]"
/>
<field name="company_id" groups="base.group_multi_company" />
</group>
<group expand="1" string="Group By">
<filter
string="Salesperson"
name="User"
context="{'group_by':'user_id'}"
/>
<filter
string="Salesperson From Partner"
name="user_from_partner_id"
context="{'group_by':'user_from_partner_id'}"
/>
<filter
string="Sales Team"
name="sales_channel"
context="{'group_by':'team_id'}"
/>
<filter
string="Customer"
name="Customer"
context="{'group_by':'partner_id'}"
/>
<filter
string="Customer Country"
name="country_id"
context="{'group_by':'country_id'}"
/>
<filter
string="Customer Industry"
name="industry_id"
context="{'group_by':'industry_id'}"
/>
<filter
string="Product"
name="Product"
context="{'group_by':'product_id'}"
/>
<filter
string="Product Category"
name="Category"
context="{'group_by':'categ_id'}"
/>
<filter
name="status"
string="Status"
context="{'group_by':'state'}"
/>
<filter
string="Company"
name="company"
groups="base.group_multi_company"
context="{'group_by':'company_id'}"
/>
<separator />
<filter string="Date" name="date" context="{'group_by':'date'}" />
</group>
</search>
</field>
</record>
<record id="action_sale_report_delivered" model="ir.actions.act_window">
<field name="name">Sales Analysis From Deliveries</field>
<field name="res_model">sale.report.delivered</field>
<field name="view_mode">graph,pivot</field>
<field name="view_id" /> <!-- force empty -->
<field name="search_view_id" ref="view_sale_report_delivered_search" />
<field
name="context"
>{'search_default_Sales':1, 'group_by_no_leaf':1,'group_by':[], 'search_default_year':1}</field>
<field
name="help"
>This report performs analysis on your sales orders from deliveries. Analysis check your sales revenues and sort it by different group criteria (salesman, partner, product, etc.) Use this report to perform analysis on sales not having invoiced yet. If you want to analyse your turnover, you should use the Invoice Analysis report in the Accounting application.</field>
</record>
<menuitem
id="menu_report_sale_stock_delivery"
name="Sales from deliveries"
action="action_sale_report_delivered"
parent="sale.menu_sale_report"
sequence="50"
/>
</odoo>