mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-18 04:12:06 +02:00
Initial commit: Sale packages
This commit is contained in:
commit
14e3d26998
6469 changed files with 2479670 additions and 0 deletions
48
odoo-bringout-oca-ocb-sale/README.md
Normal file
48
odoo-bringout-oca-ocb-sale/README.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# Sales
|
||||
|
||||
|
||||
This module contains all the common features of Sales Management and eCommerce.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-ocb-sale
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
This addon depends on:
|
||||
- sales_team
|
||||
- account_payment
|
||||
- utm
|
||||
|
||||
## Manifest Information
|
||||
|
||||
- **Name**: Sales
|
||||
- **Version**: 1.2
|
||||
- **Category**: Sales/Sales
|
||||
- **License**: LGPL-3
|
||||
- **Installable**: True
|
||||
|
||||
## Source
|
||||
|
||||
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `sale`.
|
||||
|
||||
## License
|
||||
|
||||
This package maintains the original LGPL-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
|
||||
- Install: doc/INSTALL.md
|
||||
- Usage: doc/USAGE.md
|
||||
- Configuration: doc/CONFIGURATION.md
|
||||
- Dependencies: doc/DEPENDENCIES.md
|
||||
- Troubleshooting: doc/TROUBLESHOOTING.md
|
||||
- FAQ: doc/FAQ.md
|
||||
32
odoo-bringout-oca-ocb-sale/doc/ARCHITECTURE.md
Normal file
32
odoo-bringout-oca-ocb-sale/doc/ARCHITECTURE.md
Normal 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 Module - sale
|
||||
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.
|
||||
3
odoo-bringout-oca-ocb-sale/doc/CONFIGURATION.md
Normal file
3
odoo-bringout-oca-ocb-sale/doc/CONFIGURATION.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Configuration
|
||||
|
||||
Refer to Odoo settings for sale. Configure related models, access rights, and options as needed.
|
||||
17
odoo-bringout-oca-ocb-sale/doc/CONTROLLERS.md
Normal file
17
odoo-bringout-oca-ocb-sale/doc/CONTROLLERS.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# Controllers
|
||||
|
||||
HTTP routes provided by this module.
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as User/Client
|
||||
participant C as Module Controllers
|
||||
participant O as ORM/Views
|
||||
|
||||
U->>C: HTTP GET/POST (routes)
|
||||
C->>O: ORM operations, render templates
|
||||
O-->>U: HTML/JSON/PDF
|
||||
```
|
||||
|
||||
Notes
|
||||
- See files in controllers/ for route definitions.
|
||||
7
odoo-bringout-oca-ocb-sale/doc/DEPENDENCIES.md
Normal file
7
odoo-bringout-oca-ocb-sale/doc/DEPENDENCIES.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Dependencies
|
||||
|
||||
This addon depends on:
|
||||
|
||||
- [sales_team](../../odoo-bringout-oca-ocb-sales_team)
|
||||
- [account_payment](../../odoo-bringout-oca-ocb-account_payment)
|
||||
- [utm](../../odoo-bringout-oca-ocb-utm)
|
||||
4
odoo-bringout-oca-ocb-sale/doc/FAQ.md
Normal file
4
odoo-bringout-oca-ocb-sale/doc/FAQ.md
Normal 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 or install in UI.
|
||||
7
odoo-bringout-oca-ocb-sale/doc/INSTALL.md
Normal file
7
odoo-bringout-oca-ocb-sale/doc/INSTALL.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Install
|
||||
|
||||
```bash
|
||||
pip install odoo-bringout-oca-ocb-sale"
|
||||
# or
|
||||
uv pip install odoo-bringout-oca-ocb-sale"
|
||||
```
|
||||
103
odoo-bringout-oca-ocb-sale/doc/MODELS.md
Normal file
103
odoo-bringout-oca-ocb-sale/doc/MODELS.md
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
# Models
|
||||
|
||||
Detected core models and extensions in sale.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class account_move
|
||||
class sale_order
|
||||
class sale_order_line
|
||||
class account_analytic_applicability
|
||||
class account_analytic_line
|
||||
class account_move_line
|
||||
class analytic_mixin
|
||||
class crm_team
|
||||
class payment_provider
|
||||
class payment_transaction
|
||||
class product_attribute_custom_value
|
||||
class product_packaging
|
||||
class product_product
|
||||
class product_template
|
||||
class res_company
|
||||
class res_config_settings
|
||||
class res_partner
|
||||
class utm_campaign
|
||||
class res_company
|
||||
sale_order --> res_company : company_id (Many2one)
|
||||
class res_partner
|
||||
sale_order --> res_partner : partner_id (Many2one)
|
||||
class res_partner
|
||||
sale_order --> res_partner : partner_invoice_id (Many2one)
|
||||
class res_partner
|
||||
sale_order --> res_partner : partner_shipping_id (Many2one)
|
||||
class account_fiscal_position
|
||||
sale_order --> account_fiscal_position : fiscal_position_id (Many2one)
|
||||
class account_payment_term
|
||||
sale_order --> account_payment_term : payment_term_id (Many2one)
|
||||
class product_pricelist
|
||||
sale_order --> product_pricelist : pricelist_id (Many2one)
|
||||
class res_users
|
||||
sale_order --> res_users : user_id (Many2one)
|
||||
class crm_team
|
||||
sale_order --> crm_team : team_id (Many2one)
|
||||
class sale_order_line
|
||||
sale_order --> sale_order_line : order_line (One2many)
|
||||
class account_move
|
||||
sale_order --> account_move : invoice_ids (Many2many)
|
||||
class payment_transaction
|
||||
sale_order --> payment_transaction : transaction_ids (Many2many)
|
||||
class payment_transaction
|
||||
sale_order --> payment_transaction : authorized_transaction_ids (Many2many)
|
||||
class account_analytic_account
|
||||
sale_order --> account_analytic_account : analytic_account_id (Many2one)
|
||||
class crm_tag
|
||||
sale_order --> crm_tag : tag_ids (Many2many)
|
||||
class res_country
|
||||
sale_order --> res_country : tax_country_id (Many2one)
|
||||
class sale_order
|
||||
sale_order_line --> sale_order : order_id (Many2one)
|
||||
class product_product
|
||||
sale_order_line --> product_product : product_id (Many2one)
|
||||
class product_template
|
||||
sale_order_line --> product_template : product_template_id (Many2one)
|
||||
class product_attribute_custom_value
|
||||
sale_order_line --> product_attribute_custom_value : product_custom_attribute_value_ids (One2many)
|
||||
class product_template_attribute_value
|
||||
sale_order_line --> product_template_attribute_value : product_no_variant_attribute_value_ids (Many2many)
|
||||
class uom_uom
|
||||
sale_order_line --> uom_uom : product_uom (Many2one)
|
||||
class account_tax
|
||||
sale_order_line --> account_tax : tax_id (Many2many)
|
||||
class product_pricelist_item
|
||||
sale_order_line --> product_pricelist_item : pricelist_item_id (Many2one)
|
||||
class product_packaging
|
||||
sale_order_line --> product_packaging : product_packaging_id (Many2one)
|
||||
class account_analytic_line
|
||||
sale_order_line --> account_analytic_line : analytic_line_ids (One2many)
|
||||
class account_move_line
|
||||
sale_order_line --> account_move_line : invoice_lines (Many2many)
|
||||
class sale_order
|
||||
res_partner --> sale_order : sale_order_ids (One2many)
|
||||
class res_company
|
||||
utm_campaign --> res_company : company_id (Many2one)
|
||||
class res_currency
|
||||
utm_campaign --> res_currency : currency_id (Many2one)
|
||||
class sale_order
|
||||
payment_transaction --> sale_order : sale_order_ids (Many2many)
|
||||
class sale_order_line
|
||||
product_attribute_custom_value --> sale_order_line : sale_order_line_id (Many2one)
|
||||
class sale_order_line
|
||||
account_move_line --> sale_order_line : sale_line_ids (Many2many)
|
||||
class sale_order_line
|
||||
account_analytic_line --> sale_order_line : so_line (Many2one)
|
||||
class product_product
|
||||
res_config_settings --> product_product : deposit_default_product_id (Many2one)
|
||||
class mail_template
|
||||
res_config_settings --> mail_template : invoice_mail_template_id (Many2one)
|
||||
class crm_team
|
||||
account_move --> crm_team : team_id (Many2one)
|
||||
```
|
||||
|
||||
Notes
|
||||
- Classes show model technical names; fields omitted for brevity.
|
||||
- Items listed under _inherit are extensions of existing models.
|
||||
6
odoo-bringout-oca-ocb-sale/doc/OVERVIEW.md
Normal file
6
odoo-bringout-oca-ocb-sale/doc/OVERVIEW.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# Overview
|
||||
|
||||
Packaged Odoo addon: sale. Provides features documented in upstream Odoo 16 under this addon.
|
||||
|
||||
- Source: OCA/OCB 16.0, addon sale
|
||||
- License: LGPL-3
|
||||
39
odoo-bringout-oca-ocb-sale/doc/REPORTS.md
Normal file
39
odoo-bringout-oca-ocb-sale/doc/REPORTS.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# Reports
|
||||
|
||||
Report definitions and templates in sale.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class SaleReport
|
||||
Model <|-- SaleReport
|
||||
class AccountInvoiceReport
|
||||
Model <|-- AccountInvoiceReport
|
||||
```
|
||||
|
||||
## Available Reports
|
||||
|
||||
### PDF/Document Reports
|
||||
- **Quotation / Order** (PDF/Print)
|
||||
- **PRO-FORMA Invoice** (PDF/Print)
|
||||
|
||||
### Analytical/Dashboard Reports
|
||||
- **Quotations Analysis** (Analysis/Dashboard)
|
||||
- **Sales Analysis** (Analysis/Dashboard)
|
||||
- **Invoices Analysis** (Analysis/Dashboard)
|
||||
|
||||
|
||||
## Report Files
|
||||
|
||||
- **account_invoice_report.py** (Python logic)
|
||||
- **account_invoice_report_views.xml** (XML template/definition)
|
||||
- **__init__.py** (Python logic)
|
||||
- **ir_actions_report_templates.xml** (XML template/definition)
|
||||
- **ir_actions_report.xml** (XML template/definition)
|
||||
- **sale_report.py** (Python logic)
|
||||
- **sale_report_views.xml** (XML template/definition)
|
||||
|
||||
## Notes
|
||||
- Named reports above are accessible through Odoo's reporting menu
|
||||
- Python files define report logic and data processing
|
||||
- XML files contain report templates, definitions, and formatting
|
||||
- Reports are integrated with Odoo's printing and email systems
|
||||
46
odoo-bringout-oca-ocb-sale/doc/SECURITY.md
Normal file
46
odoo-bringout-oca-ocb-sale/doc/SECURITY.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
# Security
|
||||
|
||||
Access control and security definitions in sale.
|
||||
|
||||
## Access Control Lists (ACLs)
|
||||
|
||||
Model access permissions defined in:
|
||||
- **[ir.model.access.csv](../sale/security/ir.model.access.csv)**
|
||||
- 58 model access rules
|
||||
|
||||
## Record Rules
|
||||
|
||||
Row-level security rules defined in:
|
||||
- **[ir_rules.xml](../sale/security/ir_rules.xml)**
|
||||
|
||||
## Security Groups & Configuration
|
||||
|
||||
Security groups and permissions defined in:
|
||||
- **[ir_rules.xml](../sale/security/ir_rules.xml)**
|
||||
- **[res_groups.xml](../sale/security/res_groups.xml)**
|
||||
- 3 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:
|
||||
- **[ir.model.access.csv](../sale/security/ir.model.access.csv)**
|
||||
- Model access permissions (CRUD rights)
|
||||
- **[ir_rules.xml](../sale/security/ir_rules.xml)**
|
||||
- Security groups, categories, and XML-based rules
|
||||
- **[res_groups.xml](../sale/security/res_groups.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
|
||||
5
odoo-bringout-oca-ocb-sale/doc/TROUBLESHOOTING.md
Normal file
5
odoo-bringout-oca-ocb-sale/doc/TROUBLESHOOTING.md
Normal 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.
|
||||
7
odoo-bringout-oca-ocb-sale/doc/USAGE.md
Normal file
7
odoo-bringout-oca-ocb-sale/doc/USAGE.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Usage
|
||||
|
||||
Start Odoo including this addon (from repo root):
|
||||
|
||||
```bash
|
||||
python3 scripts/odoo_web_server.py --db-name mydb --addon sale
|
||||
```
|
||||
13
odoo-bringout-oca-ocb-sale/doc/WIZARDS.md
Normal file
13
odoo-bringout-oca-ocb-sale/doc/WIZARDS.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# Wizards
|
||||
|
||||
Transient models exposed as UI wizards in sale.
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class AccountPaymentRegister
|
||||
class MailComposeMessage
|
||||
class PaymentLinkWizard
|
||||
class PaymentWizard
|
||||
class SaleAdvancePaymentInv
|
||||
class SaleOrderCancel
|
||||
```
|
||||
44
odoo-bringout-oca-ocb-sale/pyproject.toml
Normal file
44
odoo-bringout-oca-ocb-sale/pyproject.toml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[project]
|
||||
name = "odoo-bringout-oca-ocb-sale"
|
||||
version = "16.0.0"
|
||||
description = "Sales - Sales internal machinery"
|
||||
authors = [
|
||||
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
|
||||
]
|
||||
dependencies = [
|
||||
"odoo-bringout-oca-ocb-sales_team>=16.0.0",
|
||||
"odoo-bringout-oca-ocb-account_payment>=16.0.0",
|
||||
"odoo-bringout-oca-ocb-utm>=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/odoo-bringout-oca-ocb-sale"
|
||||
repository = "https://github.com/bringout/odoo-bringout-oca-ocb-sale"
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.hatch.metadata]
|
||||
allow-direct-references = true
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["sale"]
|
||||
|
||||
[tool.rye]
|
||||
managed = true
|
||||
dev-dependencies = [
|
||||
"pytest>=8.4.1",
|
||||
]
|
||||
100
odoo-bringout-oca-ocb-sale/sale/README.md
Normal file
100
odoo-bringout-oca-ocb-sale/sale/README.md
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
Sales Management Made Easy
|
||||
--------------------------
|
||||
|
||||
From quotes to invoices, in just a few clicks with the Odoo <a href="https://www.odoo.com/app/crm">Sales Management</a>.
|
||||
|
||||
Drive your sales operations from quotes to invoices with all the information
|
||||
you need, easily accessible. Keep track of long term contracts, automate
|
||||
invoicing and notify sales when they have things to do.
|
||||
|
||||
Create Professional Quotations
|
||||
------------------------------
|
||||
|
||||
Create quotations in a matter of seconds. Send quotes by email or get a
|
||||
professional PDF. Track quotations, and convert them to sales order in one
|
||||
click.
|
||||
|
||||
Spend the extra time focusing on selling, not recording data.
|
||||
|
||||
Fully Integrated
|
||||
----------------
|
||||
|
||||
The information your need, where you need it.
|
||||
|
||||
Don't lose time looking for customers, products or contracts related
|
||||
information; they are all conveniently accessible when creating quotations.
|
||||
|
||||
Get access to stock availabilities in the different warehouses, to customer's
|
||||
specific prices, to the history of preceeding offers for this prospect, etc.
|
||||
|
||||
|
||||
Your Address Book
|
||||
-----------------
|
||||
|
||||
So many features, so easy to use.
|
||||
|
||||
Assign tags to your prospects, manage
|
||||
relationships between contacts and store all customer's preferences including
|
||||
pricing, billing conditions, addresses, payment terms, etc.
|
||||
|
||||
Navigate through all the documents related to a customer with the powerfull
|
||||
breadcrumb: quotations, invoices, emails, meetings.
|
||||
|
||||
Fully Integrated Invoicing
|
||||
--------------------------
|
||||
|
||||
Whether you invoice based on time and materials, on delivery orders or fixed
|
||||
price; Odoo supports all possible methods.
|
||||
|
||||
Get recurring invoices produced automatically, create advances in just a few
|
||||
clicks, re-invoices expenses easily, etc.
|
||||
|
||||
Keep track of your contracts
|
||||
----------------------------
|
||||
|
||||
Get rid of wasted paper and record all your contracts in the application.
|
||||
Invoices are generated automatically based on your contract conditions. Your
|
||||
account managers get alerts before contracts have to be renewed.
|
||||
|
||||
Communicate Efficiently With Customers
|
||||
--------------------------------------
|
||||
|
||||
The chatter feature enables you to communicate faster and more efficiently with
|
||||
your customer. This takes place directly on a quotation or sale order from
|
||||
within Odoo or via email.
|
||||
|
||||
Get all the negotiations and discussions attached to the right document and
|
||||
relevent managers notified on specific events.
|
||||
|
||||
Fully Extensible
|
||||
----------------
|
||||
|
||||
By default, sales order are very simple, limited to a small number of features.
|
||||
Don't be confused by features you don't need.
|
||||
|
||||
But you can activate options to fit your specific need: multi-warehouses, multi
|
||||
unit of measures, manage customer specific prices with pricelists, control
|
||||
margins on quotations, use different addresses for shipping and billing, etc.
|
||||
|
||||
Built-in Customer Relationship Management
|
||||
-----------------------------------------
|
||||
|
||||
Activate the CRM application to manage your funnel of opportunities, attract
|
||||
leads, log calls, schedule meetings and launch marketing campaigns.
|
||||
|
||||
Opportunities can be converted into quotations in just one click.
|
||||
|
||||
Drive Engagement with Gamification
|
||||
----------------------------------
|
||||
|
||||
Align Sales Teams on clear targets. Define clear commission plans. Get real
|
||||
time statistics on the performance of individual sales or channels. Motivate your
|
||||
teams with challenges, rewards and leaderboards.
|
||||
|
||||
Have Clear Pricing Strategies
|
||||
-----------------------------
|
||||
|
||||
Use pricelists to record special conditions for a specific customer or to
|
||||
define prices for a segment of customers. Define promotions and have them
|
||||
applied automatically for all your Sales Teams.
|
||||
|
||||
18
odoo-bringout-oca-ocb-sale/sale/__init__.py
Normal file
18
odoo-bringout-oca-ocb-sale/sale/__init__.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
from . import controllers
|
||||
from . import report
|
||||
from . import wizard
|
||||
from . import populate
|
||||
|
||||
from odoo.api import Environment, SUPERUSER_ID
|
||||
|
||||
|
||||
def _synchronize_cron(cr, registry):
|
||||
env = Environment(cr, SUPERUSER_ID, {'active_test': False})
|
||||
send_invoice_cron = env.ref('sale.send_invoice_cron', raise_if_not_found=False)
|
||||
if send_invoice_cron:
|
||||
config = env['ir.config_parameter'].get_param('sale.automatic_invoice', False)
|
||||
send_invoice_cron.active = bool(config)
|
||||
93
odoo-bringout-oca-ocb-sale/sale/__manifest__.py
Normal file
93
odoo-bringout-oca-ocb-sale/sale/__manifest__.py
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
|
||||
{
|
||||
'name': 'Sales',
|
||||
'version': '1.2',
|
||||
'category': 'Sales/Sales',
|
||||
'summary': 'Sales internal machinery',
|
||||
'description': """
|
||||
This module contains all the common features of Sales Management and eCommerce.
|
||||
""",
|
||||
'depends': [
|
||||
'sales_team',
|
||||
'account_payment', # -> account, payment, portal
|
||||
'utm',
|
||||
],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'security/res_groups.xml',
|
||||
'security/ir_rules.xml',
|
||||
|
||||
'report/account_invoice_report_views.xml',
|
||||
'report/ir_actions_report_templates.xml',
|
||||
'report/ir_actions_report.xml',
|
||||
'report/sale_report_views.xml',
|
||||
|
||||
'data/ir_sequence_data.xml',
|
||||
'data/mail_activity_type_data.xml',
|
||||
'data/mail_message_subtype_data.xml',
|
||||
'data/mail_template_data.xml',
|
||||
'data/sale_data.xml',
|
||||
|
||||
'wizard/account_accrued_orders_wizard_views.xml',
|
||||
'wizard/payment_link_wizard_views.xml',
|
||||
'wizard/sale_make_invoice_advance_views.xml',
|
||||
'wizard/sale_order_cancel_views.xml',
|
||||
|
||||
# Define sale order views before their references
|
||||
'views/sale_order_views.xml',
|
||||
|
||||
'views/account_views.xml',
|
||||
'views/crm_team_views.xml',
|
||||
'views/mail_activity_views.xml',
|
||||
'views/payment_templates.xml',
|
||||
'views/payment_views.xml',
|
||||
'views/product_packaging_views.xml',
|
||||
'views/product_views.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
'views/res_partner_views.xml',
|
||||
'views/variant_templates.xml',
|
||||
'views/sale_onboarding_views.xml',
|
||||
'views/sale_order_line_views.xml',
|
||||
'views/sale_portal_templates.xml',
|
||||
'views/utm_campaign_views.xml',
|
||||
|
||||
'views/sale_menus.xml', # Last because referencing actions defined in previous files
|
||||
],
|
||||
'demo': [
|
||||
'data/product_demo.xml',
|
||||
'data/sale_demo.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'sale/static/src/scss/sale_onboarding.scss',
|
||||
'sale/static/src/scss/product_configurator.scss',
|
||||
'sale/static/src/js/sale_progressbar_field.js',
|
||||
'sale/static/src/js/tours/sale.js',
|
||||
'sale/static/src/js/product_discount_field.js',
|
||||
'sale/static/src/js/sale_product_field.js',
|
||||
'sale/static/src/xml/**/*',
|
||||
],
|
||||
'web.assets_frontend': [
|
||||
'sale/static/src/scss/sale_portal.scss',
|
||||
'sale/static/src/js/sale_portal_sidebar.js',
|
||||
'sale/static/src/js/sale_portal.js',
|
||||
'sale/static/src/js/payment_form.js',
|
||||
],
|
||||
'web.assets_tests': [
|
||||
'sale/static/tests/tours/**/*',
|
||||
],
|
||||
'web.qunit_suite_tests': [
|
||||
'sale/static/tests/**/*',
|
||||
('remove', 'sale/static/tests/tours/**/*')
|
||||
],
|
||||
'web.report_assets_common': [
|
||||
'sale/static/src/scss/sale_report.scss',
|
||||
],
|
||||
},
|
||||
'post_init_hook': '_synchronize_cron',
|
||||
'license': 'LGPL-3',
|
||||
}
|
||||
Binary file not shown.
6
odoo-bringout-oca-ocb-sale/sale/controllers/__init__.py
Normal file
6
odoo-bringout-oca-ocb-sale/sale/controllers/__init__.py
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import onboarding
|
||||
from . import portal
|
||||
from . import variant
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
26
odoo-bringout-oca-ocb-sale/sale/controllers/onboarding.py
Normal file
26
odoo-bringout-oca-ocb-sale/sale/controllers/onboarding.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import http
|
||||
from odoo.http import request
|
||||
|
||||
|
||||
class OnboardingController(http.Controller):
|
||||
|
||||
@http.route('/sales/sale_quotation_onboarding_panel', auth='user', type='json')
|
||||
def sale_quotation_onboarding(self):
|
||||
""" Returns the `banner` for the sale onboarding panel.
|
||||
It can be empty if the user has closed it or if he doesn't have
|
||||
the permission to see it. """
|
||||
|
||||
company = request.env.company
|
||||
if not request.env.is_admin() or \
|
||||
company.sale_quotation_onboarding_state == 'closed':
|
||||
return {}
|
||||
|
||||
return {
|
||||
'html': request.env['ir.qweb']._render('sale.sale_quotation_onboarding_panel', {
|
||||
'company': company,
|
||||
'state': company.get_and_update_sale_quotation_onboarding_state()
|
||||
})
|
||||
}
|
||||
395
odoo-bringout-oca-ocb-sale/sale/controllers/portal.py
Normal file
395
odoo-bringout-oca-ocb-sale/sale/controllers/portal.py
Normal file
|
|
@ -0,0 +1,395 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import binascii
|
||||
|
||||
from odoo import fields, http, SUPERUSER_ID, _
|
||||
from odoo.exceptions import AccessError, MissingError, ValidationError
|
||||
from odoo.fields import Command
|
||||
from odoo.http import request
|
||||
|
||||
from odoo.addons.payment.controllers import portal as payment_portal
|
||||
from odoo.addons.payment import utils as payment_utils
|
||||
from odoo.addons.portal.controllers.mail import _message_post_helper
|
||||
from odoo.addons.portal.controllers import portal
|
||||
from odoo.addons.portal.controllers.portal import pager as portal_pager
|
||||
|
||||
|
||||
class CustomerPortal(portal.CustomerPortal):
|
||||
|
||||
def _prepare_home_portal_values(self, counters):
|
||||
values = super()._prepare_home_portal_values(counters)
|
||||
partner = request.env.user.partner_id
|
||||
|
||||
SaleOrder = request.env['sale.order']
|
||||
if 'quotation_count' in counters:
|
||||
values['quotation_count'] = SaleOrder.search_count(self._prepare_quotations_domain(partner)) \
|
||||
if SaleOrder.check_access_rights('read', raise_exception=False) else 0
|
||||
if 'order_count' in counters:
|
||||
values['order_count'] = SaleOrder.search_count(self._prepare_orders_domain(partner)) \
|
||||
if SaleOrder.check_access_rights('read', raise_exception=False) else 0
|
||||
|
||||
return values
|
||||
|
||||
def _prepare_quotations_domain(self, partner):
|
||||
return [
|
||||
('message_partner_ids', 'child_of', [partner.commercial_partner_id.id]),
|
||||
('state', 'in', ['sent', 'cancel'])
|
||||
]
|
||||
|
||||
def _prepare_orders_domain(self, partner):
|
||||
return [
|
||||
('message_partner_ids', 'child_of', [partner.commercial_partner_id.id]),
|
||||
('state', 'in', ['sale', 'done'])
|
||||
]
|
||||
|
||||
def _get_sale_searchbar_sortings(self):
|
||||
return {
|
||||
'date': {'label': _('Order Date'), 'order': 'date_order desc'},
|
||||
'name': {'label': _('Reference'), 'order': 'name'},
|
||||
'stage': {'label': _('Stage'), 'order': 'state'},
|
||||
}
|
||||
|
||||
def _prepare_sale_portal_rendering_values(
|
||||
self, page=1, date_begin=None, date_end=None, sortby=None, quotation_page=False, **kwargs
|
||||
):
|
||||
SaleOrder = request.env['sale.order']
|
||||
|
||||
if not sortby:
|
||||
sortby = 'date'
|
||||
|
||||
partner = request.env.user.partner_id
|
||||
values = self._prepare_portal_layout_values()
|
||||
|
||||
if quotation_page:
|
||||
url = "/my/quotes"
|
||||
domain = self._prepare_quotations_domain(partner)
|
||||
else:
|
||||
url = "/my/orders"
|
||||
domain = self._prepare_orders_domain(partner)
|
||||
|
||||
searchbar_sortings = self._get_sale_searchbar_sortings()
|
||||
|
||||
sort_order = searchbar_sortings[sortby]['order']
|
||||
|
||||
if date_begin and date_end:
|
||||
domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)]
|
||||
|
||||
pager_values = portal_pager(
|
||||
url=url,
|
||||
total=SaleOrder.search_count(domain),
|
||||
page=page,
|
||||
step=self._items_per_page,
|
||||
url_args={'date_begin': date_begin, 'date_end': date_end, 'sortby': sortby},
|
||||
)
|
||||
orders = SaleOrder.search(domain, order=sort_order, limit=self._items_per_page, offset=pager_values['offset'])
|
||||
|
||||
values.update({
|
||||
'date': date_begin,
|
||||
'quotations': orders.sudo() if quotation_page else SaleOrder,
|
||||
'orders': orders.sudo() if not quotation_page else SaleOrder,
|
||||
'page_name': 'quote' if quotation_page else 'order',
|
||||
'pager': pager_values,
|
||||
'default_url': url,
|
||||
'searchbar_sortings': searchbar_sortings,
|
||||
'sortby': sortby,
|
||||
})
|
||||
|
||||
return values
|
||||
|
||||
@http.route(['/my/quotes', '/my/quotes/page/<int:page>'], type='http', auth="user", website=True)
|
||||
def portal_my_quotes(self, **kwargs):
|
||||
values = self._prepare_sale_portal_rendering_values(quotation_page=True, **kwargs)
|
||||
request.session['my_quotations_history'] = values['quotations'].ids[:100]
|
||||
return request.render("sale.portal_my_quotations", values)
|
||||
|
||||
@http.route(['/my/orders', '/my/orders/page/<int:page>'], type='http', auth="user", website=True)
|
||||
def portal_my_orders(self, **kwargs):
|
||||
values = self._prepare_sale_portal_rendering_values(quotation_page=False, **kwargs)
|
||||
request.session['my_orders_history'] = values['orders'].ids[:100]
|
||||
return request.render("sale.portal_my_orders", values)
|
||||
|
||||
@http.route(['/my/orders/<int:order_id>'], type='http', auth="public", website=True)
|
||||
def portal_order_page(self, order_id, report_type=None, access_token=None, message=False, download=False, **kw):
|
||||
try:
|
||||
order_sudo = self._document_check_access('sale.order', order_id, access_token=access_token)
|
||||
except (AccessError, MissingError):
|
||||
return request.redirect('/my')
|
||||
|
||||
if report_type in ('html', 'pdf', 'text'):
|
||||
return self._show_report(model=order_sudo, report_type=report_type, report_ref='sale.action_report_saleorder', download=download)
|
||||
|
||||
if request.env.user.share and access_token:
|
||||
# If a public/portal user accesses the order with the access token
|
||||
# Log a note on the chatter.
|
||||
today = fields.Date.today().isoformat()
|
||||
session_obj_date = request.session.get('view_quote_%s' % order_sudo.id)
|
||||
if session_obj_date != today:
|
||||
# store the date as a string in the session to allow serialization
|
||||
request.session['view_quote_%s' % order_sudo.id] = today
|
||||
# The "Quotation viewed by customer" log note is an information
|
||||
# dedicated to the salesman and shouldn't be translated in the customer/website lgg
|
||||
context = {'lang': order_sudo.user_id.partner_id.lang or order_sudo.company_id.partner_id.lang}
|
||||
msg = _('Quotation viewed by customer %s', order_sudo.partner_id.name if request.env.user._is_public() else request.env.user.partner_id.name)
|
||||
del context
|
||||
_message_post_helper(
|
||||
"sale.order",
|
||||
order_sudo.id,
|
||||
message=msg,
|
||||
token=order_sudo.access_token,
|
||||
message_type="notification",
|
||||
subtype_xmlid="mail.mt_note",
|
||||
partner_ids=order_sudo.user_id.sudo().partner_id.ids,
|
||||
)
|
||||
|
||||
backend_url = f'/web#model={order_sudo._name}'\
|
||||
f'&id={order_sudo.id}'\
|
||||
f'&action={order_sudo._get_portal_return_action().id}'\
|
||||
f'&view_type=form'
|
||||
values = {
|
||||
'sale_order': order_sudo,
|
||||
'message': message,
|
||||
'report_type': 'html',
|
||||
'backend_url': backend_url,
|
||||
'res_company': order_sudo.company_id, # Used to display correct company logo
|
||||
}
|
||||
|
||||
# Payment values
|
||||
if order_sudo._has_to_be_paid():
|
||||
values.update(self._get_payment_values(order_sudo))
|
||||
|
||||
if order_sudo.state in ('draft', 'sent', 'cancel'):
|
||||
history_session_key = 'my_quotations_history'
|
||||
else:
|
||||
history_session_key = 'my_orders_history'
|
||||
|
||||
values = self._get_page_view_values(
|
||||
order_sudo, access_token, values, history_session_key, False)
|
||||
|
||||
return request.render('sale.sale_order_portal_template', values)
|
||||
|
||||
def _get_payment_values(self, order_sudo):
|
||||
""" Return the payment-specific QWeb context values.
|
||||
|
||||
:param recordset order_sudo: The sales order being paid, as a `sale.order` record.
|
||||
:return: The payment-specific values.
|
||||
:rtype: dict
|
||||
"""
|
||||
logged_in = not request.env.user._is_public()
|
||||
providers_sudo = request.env['payment.provider'].sudo()._get_compatible_providers(
|
||||
order_sudo.company_id.id,
|
||||
order_sudo.partner_id.id,
|
||||
order_sudo.amount_total,
|
||||
currency_id=order_sudo.currency_id.id,
|
||||
sale_order_id=order_sudo.id,
|
||||
) # In sudo mode to read the fields of providers and partner (if not logged in)
|
||||
tokens = request.env['payment.token'].search([
|
||||
('provider_id', 'in', providers_sudo.ids),
|
||||
('partner_id', '=', order_sudo.partner_id.id)
|
||||
]) if logged_in else request.env['payment.token']
|
||||
# Make sure that the partner's company matches the order's company.
|
||||
if not payment_portal.PaymentPortal._can_partner_pay_in_company(
|
||||
order_sudo.partner_id, order_sudo.company_id
|
||||
):
|
||||
providers_sudo = request.env['payment.provider'].sudo()
|
||||
tokens = request.env['payment.token']
|
||||
fees_by_provider = {
|
||||
provider: provider._compute_fees(
|
||||
order_sudo.amount_total,
|
||||
order_sudo.currency_id,
|
||||
order_sudo.partner_id.country_id,
|
||||
) for provider in providers_sudo.filtered('fees_active')
|
||||
}
|
||||
return {
|
||||
'providers': providers_sudo,
|
||||
'tokens': tokens,
|
||||
'fees_by_provider': fees_by_provider,
|
||||
'show_tokenize_input': PaymentPortal._compute_show_tokenize_input_mapping(
|
||||
providers_sudo, logged_in=logged_in, sale_order_id=order_sudo.id
|
||||
),
|
||||
'amount': order_sudo.amount_total,
|
||||
'currency': order_sudo.pricelist_id.currency_id,
|
||||
'partner_id': order_sudo.partner_id.id,
|
||||
'access_token': order_sudo.access_token,
|
||||
'transaction_route': order_sudo.get_portal_url(suffix='/transaction'),
|
||||
'landing_route': order_sudo.get_portal_url(),
|
||||
}
|
||||
|
||||
@http.route(['/my/orders/<int:order_id>/accept'], type='json', auth="public", website=True)
|
||||
def portal_quote_accept(self, order_id, access_token=None, name=None, signature=None):
|
||||
# get from query string if not on json param
|
||||
access_token = access_token or request.httprequest.args.get('access_token')
|
||||
try:
|
||||
order_sudo = self._document_check_access('sale.order', order_id, access_token=access_token)
|
||||
except (AccessError, MissingError):
|
||||
return {'error': _('Invalid order.')}
|
||||
|
||||
if not order_sudo._has_to_be_signed():
|
||||
return {'error': _('The order is not in a state requiring customer signature.')}
|
||||
if not signature:
|
||||
return {'error': _('Signature is missing.')}
|
||||
|
||||
try:
|
||||
order_sudo.write({
|
||||
'signed_by': name,
|
||||
'signed_on': fields.Datetime.now(),
|
||||
'signature': signature,
|
||||
})
|
||||
request.env.cr.commit()
|
||||
except (TypeError, binascii.Error) as e:
|
||||
return {'error': _('Invalid signature data.')}
|
||||
|
||||
if not order_sudo._has_to_be_paid():
|
||||
order_sudo.action_confirm()
|
||||
order_sudo._send_order_confirmation_mail()
|
||||
|
||||
pdf = request.env['ir.actions.report'].sudo()._render_qweb_pdf('sale.action_report_saleorder', [order_sudo.id])[0]
|
||||
|
||||
_message_post_helper(
|
||||
'sale.order',
|
||||
order_sudo.id,
|
||||
_('Order signed by %s', name),
|
||||
attachments=[('%s.pdf' % order_sudo.name, pdf)],
|
||||
token=access_token,
|
||||
)
|
||||
|
||||
query_string = '&message=sign_ok'
|
||||
if order_sudo._has_to_be_paid(True):
|
||||
query_string += '#allow_payment=yes'
|
||||
return {
|
||||
'force_refresh': True,
|
||||
'redirect_url': order_sudo.get_portal_url(query_string=query_string),
|
||||
}
|
||||
|
||||
@http.route(['/my/orders/<int:order_id>/decline'], type='http', auth="public", methods=['POST'], website=True)
|
||||
def portal_quote_decline(self, order_id, access_token=None, decline_message=None, **kwargs):
|
||||
try:
|
||||
order_sudo = self._document_check_access('sale.order', order_id, access_token=access_token)
|
||||
except (AccessError, MissingError):
|
||||
return request.redirect('/my')
|
||||
|
||||
if order_sudo._has_to_be_signed() and decline_message:
|
||||
order_sudo._action_cancel()
|
||||
_message_post_helper(
|
||||
'sale.order',
|
||||
order_sudo.id,
|
||||
decline_message,
|
||||
token=access_token,
|
||||
)
|
||||
redirect_url = order_sudo.get_portal_url()
|
||||
else:
|
||||
redirect_url = order_sudo.get_portal_url(query_string="&message=cant_reject")
|
||||
|
||||
return request.redirect(redirect_url)
|
||||
|
||||
|
||||
class PaymentPortal(payment_portal.PaymentPortal):
|
||||
|
||||
@http.route('/my/orders/<int:order_id>/transaction', type='json', auth='public')
|
||||
def portal_order_transaction(self, order_id, access_token, **kwargs):
|
||||
""" Create a draft transaction and return its processing values.
|
||||
|
||||
:param int order_id: The sales order to pay, as a `sale.order` id
|
||||
:param str access_token: The access token used to authenticate the request
|
||||
:param dict kwargs: Locally unused data passed to `_create_transaction`
|
||||
:return: The mandatory values for the processing of the transaction
|
||||
:rtype: dict
|
||||
:raise: ValidationError if the invoice id or the access token is invalid
|
||||
"""
|
||||
# Check the order id and the access token
|
||||
try:
|
||||
order_sudo = self._document_check_access('sale.order', order_id, access_token)
|
||||
except MissingError as error:
|
||||
raise error
|
||||
except AccessError:
|
||||
raise ValidationError(_("The access token is invalid."))
|
||||
|
||||
kwargs.update({
|
||||
'reference_prefix': None, # Allow the reference to be computed based on the order
|
||||
'partner_id': order_sudo.partner_invoice_id.id,
|
||||
'sale_order_id': order_id, # Include the SO to allow Subscriptions tokenizing the tx
|
||||
})
|
||||
kwargs.pop('custom_create_values', None) # Don't allow passing arbitrary create values
|
||||
tx_sudo = self._create_transaction(
|
||||
custom_create_values={'sale_order_ids': [Command.set([order_id])]}, **kwargs,
|
||||
)
|
||||
|
||||
return tx_sudo._get_processing_values()
|
||||
|
||||
# Payment overrides
|
||||
|
||||
@http.route()
|
||||
def payment_pay(self, *args, amount=None, sale_order_id=None, access_token=None, **kwargs):
|
||||
""" Override of payment to replace the missing transaction values by that of the sale order.
|
||||
|
||||
This is necessary for the reconciliation as all transaction values, excepted the amount,
|
||||
need to match exactly that of the sale order.
|
||||
|
||||
:param str amount: The (possibly partial) amount to pay used to check the access token
|
||||
:param str sale_order_id: The sale order for which a payment id made, as a `sale.order` id
|
||||
:param str access_token: The access token used to authenticate the partner
|
||||
:return: The result of the parent method
|
||||
:rtype: str
|
||||
:raise: ValidationError if the order id is invalid
|
||||
"""
|
||||
# Cast numeric parameters as int or float and void them if their str value is malformed
|
||||
amount = self._cast_as_float(amount)
|
||||
sale_order_id = self._cast_as_int(sale_order_id)
|
||||
if sale_order_id:
|
||||
order_sudo = request.env['sale.order'].sudo().browse(sale_order_id).exists()
|
||||
if not order_sudo:
|
||||
raise ValidationError(_("The provided parameters are invalid."))
|
||||
|
||||
# Check the access token against the order values. Done after fetching the order as we
|
||||
# need the order fields to check the access token.
|
||||
if not payment_utils.check_access_token(
|
||||
access_token, order_sudo.partner_invoice_id.id, amount, order_sudo.currency_id.id
|
||||
):
|
||||
raise ValidationError(_("The provided parameters are invalid."))
|
||||
|
||||
kwargs.update({
|
||||
'currency_id': order_sudo.currency_id.id,
|
||||
'partner_id': order_sudo.partner_invoice_id.id,
|
||||
'company_id': order_sudo.company_id.id,
|
||||
'sale_order_id': sale_order_id,
|
||||
})
|
||||
return super().payment_pay(*args, amount=amount, access_token=access_token, **kwargs)
|
||||
|
||||
def _get_custom_rendering_context_values(self, sale_order_id=None, **kwargs):
|
||||
""" Override of payment to add the sale order id in the custom rendering context values.
|
||||
|
||||
:param int sale_order_id: The sale order for which a payment id made, as a `sale.order` id
|
||||
:return: The extended rendering context values
|
||||
:rtype: dict
|
||||
"""
|
||||
rendering_context_values = super()._get_custom_rendering_context_values(
|
||||
sale_order_id=sale_order_id, **kwargs
|
||||
)
|
||||
if sale_order_id:
|
||||
rendering_context_values['sale_order_id'] = sale_order_id
|
||||
|
||||
# Interrupt the payment flow if the sales order has been canceled.
|
||||
order_sudo = request.env['sale.order'].sudo().browse(sale_order_id)
|
||||
if order_sudo.state == 'cancel':
|
||||
rendering_context_values['amount'] = 0.0
|
||||
return rendering_context_values
|
||||
|
||||
def _create_transaction(self, *args, sale_order_id=None, custom_create_values=None, **kwargs):
|
||||
""" Override of payment to add the sale order id in the custom create values.
|
||||
|
||||
:param int sale_order_id: The sale order for which a payment id made, as a `sale.order` id
|
||||
:param dict custom_create_values: Additional create values overwriting the default ones
|
||||
:return: The result of the parent method
|
||||
:rtype: recordset of `payment.transaction`
|
||||
"""
|
||||
if sale_order_id:
|
||||
if custom_create_values is None:
|
||||
custom_create_values = {}
|
||||
# As this override is also called if the flow is initiated from sale or website_sale, we
|
||||
# need not to override whatever value these modules could have already set
|
||||
if 'sale_order_ids' not in custom_create_values: # We are in the payment module's flow
|
||||
custom_create_values['sale_order_ids'] = [Command.set([int(sale_order_id)])]
|
||||
|
||||
return super()._create_transaction(
|
||||
*args, sale_order_id=sale_order_id, custom_create_values=custom_create_values, **kwargs
|
||||
)
|
||||
39
odoo-bringout-oca-ocb-sale/sale/controllers/variant.py
Normal file
39
odoo-bringout-oca-ocb-sale/sale/controllers/variant.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import json
|
||||
|
||||
from odoo import http
|
||||
from odoo.http import request
|
||||
|
||||
|
||||
class VariantController(http.Controller):
|
||||
@http.route(['/sale/get_combination_info'], type='json', auth="user", methods=['POST'])
|
||||
def get_combination_info(self, product_template_id, product_id, combination, add_qty, pricelist_id, **kw):
|
||||
combination = request.env['product.template.attribute.value'].browse(combination)
|
||||
pricelist = self._get_pricelist(pricelist_id)
|
||||
cids = request.httprequest.cookies.get('cids', str(request.env.user.company_id.id))
|
||||
allowed_company_ids = [int(cid) for cid in cids.split(',')]
|
||||
ProductTemplate = request.env['product.template'].with_context(allowed_company_ids=allowed_company_ids)
|
||||
if 'context' in kw:
|
||||
ProductTemplate = ProductTemplate.with_context(**kw.get('context'))
|
||||
product_template = ProductTemplate.browse(int(product_template_id))
|
||||
res = product_template._get_combination_info(combination, int(product_id or 0), int(add_qty or 1), pricelist)
|
||||
if 'parent_combination' in kw:
|
||||
parent_combination = request.env['product.template.attribute.value'].browse(kw.get('parent_combination'))
|
||||
if not combination.exists() and product_id:
|
||||
product = request.env['product.product'].browse(int(product_id))
|
||||
if product.exists():
|
||||
combination = product.product_template_attribute_value_ids
|
||||
res.update({
|
||||
'is_combination_possible': product_template._is_combination_possible(combination=combination, parent_combination=parent_combination),
|
||||
'parent_exclusions': product_template._get_parent_attribute_exclusions(parent_combination=parent_combination)
|
||||
})
|
||||
return res
|
||||
|
||||
@http.route(['/sale/create_product_variant'], type='json', auth="user", methods=['POST'])
|
||||
def create_product_variant(self, product_template_id, product_template_attribute_value_ids, **kwargs):
|
||||
return request.env['product.template'].browse(int(product_template_id)).create_product_variant(json.loads(product_template_attribute_value_ids))
|
||||
|
||||
def _get_pricelist(self, pricelist_id, pricelist_fallback=False):
|
||||
return request.env['product.pricelist'].browse(int(pricelist_id or 0))
|
||||
12
odoo-bringout-oca-ocb-sale/sale/data/ir_sequence_data.xml
Normal file
12
odoo-bringout-oca-ocb-sale/sale/data/ir_sequence_data.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record id="seq_sale_order" model="ir.sequence">
|
||||
<field name="name">Sales Order</field>
|
||||
<field name="code">sale.order</field>
|
||||
<field name="prefix">S</field>
|
||||
<field name="padding">5</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Activities -->
|
||||
<record id="mail_act_sale_upsell" model="mail.activity.type">
|
||||
<field name="name">Order Upsell</field>
|
||||
<field name="icon">fa-line-chart</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Sale-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_order_sent" model="mail.message.subtype">
|
||||
<field name="name">Quotation sent</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Quotation sent</field>
|
||||
</record>
|
||||
<record id="mt_order_confirmed" model="mail.message.subtype">
|
||||
<field name="name">Sales Order Confirmed</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Quotation confirmed</field>
|
||||
</record>
|
||||
|
||||
<!-- Salesteam-related subtypes for messaging / Chatter -->
|
||||
<record id="mt_salesteam_order_sent" model="mail.message.subtype">
|
||||
<field name="name">Quotation sent</field>
|
||||
<field name="sequence">20</field>
|
||||
<field name="res_model">crm.team</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="parent_id" ref="sale.mt_order_sent"/>
|
||||
<field name="relation_field">team_id</field>
|
||||
</record>
|
||||
<record id="mt_salesteam_order_confirmed" model="mail.message.subtype">
|
||||
<field name="name">Sales Order Confirmed</field>
|
||||
<field name="sequence">21</field>
|
||||
<field name="res_model">crm.team</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="parent_id" ref="sale.mt_order_confirmed"/>
|
||||
<field name="relation_field">team_id</field>
|
||||
</record>
|
||||
<record id="mt_salesteam_invoice_created" model="mail.message.subtype">
|
||||
<field name="name">Invoice Created</field>
|
||||
<field name="sequence">22</field>
|
||||
<field name="res_model">crm.team</field>
|
||||
<field name="parent_id" ref="account.mt_invoice_created"/>
|
||||
<field name="relation_field">team_id</field>
|
||||
</record>
|
||||
<record id="mt_salesteam_invoice_confirmed" model="mail.message.subtype">
|
||||
<field name="name">Invoice Confirmed</field>
|
||||
<field name="sequence">23</field>
|
||||
<field name="res_model">crm.team</field>
|
||||
<field name="parent_id" ref="account.mt_invoice_validated"/>
|
||||
<field name="relation_field">team_id</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
274
odoo-bringout-oca-ocb-sale/sale/data/mail_template_data.xml
Normal file
274
odoo-bringout-oca-ocb-sale/sale/data/mail_template_data.xml
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="email_template_edi_sale" model="mail.template">
|
||||
<field name="name">Sales: Send Quotation</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="subject">{{ object.company_id.name }} {{ object.state in ('draft', 'sent') and (ctx.get('proforma') and 'Proforma' or 'Quotation') or 'Order' }} (Ref {{ object.name or 'n/a' }})</field>
|
||||
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
|
||||
<field name="partner_to">{{ object.partner_id.id }}</field>
|
||||
<field name="description">Used by salespeople when they send quotations or proforma to prospects</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<p style="margin: 0px; padding: 0px; font-size: 13px;">
|
||||
<t t-set="doc_name" t-value="'quotation' if object.state in ('draft', 'sent') else 'order'"/>
|
||||
Hello,
|
||||
<br/><br/>
|
||||
Your
|
||||
<t t-if="ctx.get('proforma')">
|
||||
Pro forma invoice for <t t-out="doc_name or ''">quotation</t> <span style="font-weight: bold;" t-out="object.name or ''">S00052</span>
|
||||
<t t-if="object.origin">
|
||||
(with reference: <t t-out="object.origin or ''"></t> )
|
||||
</t>
|
||||
amounting in <span style="font-weight: bold;" t-out="format_amount(object.amount_total, object.pricelist_id.currency_id) or ''">$ 10.00</span> is available.
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-out="doc_name or ''">quotation</t> <span style="font-weight: bold;" t-out="object.name or ''"></span>
|
||||
<t t-if="object.origin">
|
||||
(with reference: <t t-out="object.origin or ''">S00052</t> )
|
||||
</t>
|
||||
amounting in <span style="font-weight: bold;" t-out="format_amount(object.amount_total, object.pricelist_id.currency_id) or ''">$ 10.00</span> is ready for review.
|
||||
</t>
|
||||
<br/><br/>
|
||||
Do not hesitate to contact us if you have any questions.
|
||||
<t t-if="not is_html_empty(object.user_id.signature)">
|
||||
<br/><br/>
|
||||
<t t-out="object.user_id.signature or ''">--<br/>Mitchell Admin</t>
|
||||
</t>
|
||||
<br/><br/>
|
||||
</p>
|
||||
</div>
|
||||
</field>
|
||||
<field name="report_template" ref="action_report_saleorder"/>
|
||||
<field name="report_name">{{ (object.name or '').replace('/','_') }}</field>
|
||||
<field name="lang">{{ object.partner_id.lang }}</field>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record id="mail_template_sale_confirmation" model="mail.template">
|
||||
<field name="name">Sales: Order Confirmation</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="subject">{{ object.company_id.name }} {{ (object.get_portal_last_transaction().state == 'pending') and 'Pending Order' or 'Order' }} (Ref {{ object.name or 'n/a' }})</field>
|
||||
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
|
||||
<field name="partner_to">{{ object.partner_id.id }}</field>
|
||||
<field name="description">Sent to customers on order confirmation</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<p style="margin: 0px; padding: 0px; font-size: 12px;">
|
||||
Hello,
|
||||
<br/><br/>
|
||||
<t t-set="transaction" t-value="object.get_portal_last_transaction()"/>
|
||||
Your order <span style="font-weight:bold;" t-out="object.name or ''">S00049</span> amounting in <span style="font-weight:bold;" t-out="format_amount(object.amount_total, object.currency_id) or ''">$ 10.00</span>
|
||||
<t t-if="object.state == 'sale' or (transaction and transaction.state in ('done', 'authorized'))">
|
||||
has been confirmed.<br/>
|
||||
Thank you for your trust!
|
||||
</t>
|
||||
<t t-elif="transaction and transaction.state == 'pending'">
|
||||
is pending. It will be confirmed when the payment is received.
|
||||
<t t-if="object.reference">
|
||||
Your payment reference is <span style="font-weight:bold;" t-out="object.reference or ''"></span>.
|
||||
</t>
|
||||
</t>
|
||||
<br/><br/>
|
||||
Do not hesitate to contact us if you have any questions.
|
||||
<t t-if="not is_html_empty(object.user_id.signature)">
|
||||
<br/><br/>
|
||||
<t t-out="object.user_id.signature or ''">--<br/>Mitchell Admin</t>
|
||||
</t>
|
||||
<br/><br/>
|
||||
</p>
|
||||
<t t-if="hasattr(object, 'website_id') and object.website_id">
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<table width="100%" style="color: #454748; font-size: 12px; border-collapse: collapse;">
|
||||
<tr style="border-bottom: 2px solid #dee2e6;">
|
||||
<td style="width: 150px;"><span style="font-weight:bold;">Products</span></td>
|
||||
<td></td>
|
||||
<td width="15%" align="center"><span style="font-weight:bold;">Quantity</span></td>
|
||||
<td width="20%" align="right"><span style="font-weight:bold;">
|
||||
<t t-if="object.user_id.has_group('account.group_show_line_subtotals_tax_excluded')">
|
||||
VAT Excl.
|
||||
</t>
|
||||
<t t-else="">
|
||||
VAT Incl.
|
||||
</t>
|
||||
</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<t t-foreach="object.order_line" t-as="line">
|
||||
<t t-if="(not hasattr(line, 'is_delivery') or not line.is_delivery) and line.display_type in ['line_section', 'line_note']">
|
||||
<table width="100%" style="color: #454748; font-size: 12px; border-collapse: collapse;">
|
||||
<t t-set="loop_cycle_number" t-value="loop_cycle_number or 0" />
|
||||
<tr t-att-style="'background-color: #f2f2f2' if loop_cycle_number % 2 == 0 else 'background-color: #ffffff'">
|
||||
<t t-set="loop_cycle_number" t-value="loop_cycle_number + 1" />
|
||||
<td colspan="4">
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<span style="font-weight:bold;" t-out="line.name or ''">Taking care of Trees Course</span>
|
||||
</t>
|
||||
<t t-elif="line.display_type == 'line_note'">
|
||||
<i t-out="line.name or ''">Taking care of Trees Course</i>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</t>
|
||||
<t t-elif="(not hasattr(line, 'is_delivery') or not line.is_delivery)">
|
||||
<table width="100%" style="color: #454748; font-size: 12px; border-collapse: collapse;">
|
||||
<t t-set="loop_cycle_number" t-value="loop_cycle_number or 0" />
|
||||
<tr t-att-style="'background-color: #f2f2f2' if loop_cycle_number % 2 == 0 else 'background-color: #ffffff'">
|
||||
<t t-set="loop_cycle_number" t-value="loop_cycle_number + 1" />
|
||||
<td style="width: 150px;">
|
||||
<img t-attf-src="/web/image/product.product/{{ line.product_id.id }}/image_128" style="width: 64px; height: 64px; object-fit: contain;" alt="Product image"></img>
|
||||
</td>
|
||||
<td align="left" t-out="line.product_id.name or ''"> Taking care of Trees Course</td>
|
||||
<td width="15%" align="center" t-out="line.product_uom_qty or ''">1</td>
|
||||
<td width="20%" align="right"><span style="font-weight:bold;">
|
||||
<t t-if="object.user_id.has_group('account.group_show_line_subtotals_tax_excluded')">
|
||||
<t t-out="format_amount(line.price_reduce_taxexcl, object.currency_id) or ''">$ 10.00</t>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-out="format_amount(line.price_reduce_taxinc, object.currency_id) or ''">$ 10.00</t>
|
||||
</t>
|
||||
</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</t>
|
||||
</t>
|
||||
</div>
|
||||
<div style="margin: 0px; padding: 0px;" t-if="hasattr(object, 'carrier_id') and object.carrier_id">
|
||||
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px;" align="right">
|
||||
<tr>
|
||||
<td style="width: 60%"/>
|
||||
<td style="width: 30%; border-top: 1px solid #dee2e6;" align="right"><span style="font-weight:bold;">Delivery:</span></td>
|
||||
<td style="width: 10%; border-top: 1px solid #dee2e6;" align="right" t-out="format_amount(object.amount_delivery, object.currency_id) or ''">$ 0.00</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 60%"/>
|
||||
<td style="width: 30%;" align="right"><span style="font-weight:bold;">SubTotal:</span></td>
|
||||
<td style="width: 10%;" align="right" t-out="format_amount(object.amount_untaxed, object.currency_id) or ''">$ 10.00</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div style="margin: 0px; padding: 0px;" t-else="">
|
||||
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px;" align="right">
|
||||
<tr>
|
||||
<td style="width: 60%"/>
|
||||
<td style="width: 30%; border-top: 1px solid #dee2e6;" align="right"><span style="font-weight:bold;">SubTotal:</span></td>
|
||||
<td style="width: 10%; border-top: 1px solid #dee2e6;" align="right" t-out="format_amount(object.amount_untaxed, object.currency_id) or ''">$ 10.00</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<table width="100%" style="color: #454748; font-size: 12px; border-spacing: 0px 4px;" align="right">
|
||||
<tr>
|
||||
<td style="width: 60%"/>
|
||||
<td style="width: 30%;" align="right"><span style="font-weight:bold;">Taxes:</span></td>
|
||||
<td style="width: 10%;" align="right" t-out="format_amount(object.amount_tax, object.currency_id) or ''">$ 0.00</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 60%"/>
|
||||
<td style="width: 30%; border-top: 1px solid #dee2e6;" align="right"><span style="font-weight:bold;">Total:</span></td>
|
||||
<td style="width: 10%; border-top: 1px solid #dee2e6;" align="right" t-out="format_amount(object.amount_total, object.currency_id) or ''">$ 10.00</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div t-if="object.partner_invoice_id" style="margin: 0px; padding: 0px;">
|
||||
<table width="100%" style="color: #454748; font-size: 12px;">
|
||||
<tr>
|
||||
<td style="padding-top: 10px;">
|
||||
<span style="font-weight:bold;">Bill to:</span>
|
||||
<t t-out="object.partner_invoice_id.street or ''">1201 S Figueroa St</t>
|
||||
<t t-out="object.partner_invoice_id.city or ''">Los Angeles</t>
|
||||
<t t-out="object.partner_invoice_id.state_id.name or ''">California</t>
|
||||
<t t-out="object.partner_invoice_id.zip or ''">90015</t>
|
||||
<t t-out="object.partner_invoice_id.country_id.name or ''">United States</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<span style="font-weight:bold;">Payment Method:</span>
|
||||
<t t-if="transaction.token_id">
|
||||
<t t-out="transaction.token_id.display_name or ''"></t>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-out="transaction.provider_id.sudo().name or ''"></t>
|
||||
</t>
|
||||
(<t t-out="format_amount(transaction.amount, object.currency_id) or ''">$ 10.00</t>)
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div t-if="object.partner_shipping_id and not object.only_services" style="margin: 0px; padding: 0px;">
|
||||
<table width="100%" style="color: #454748; font-size: 12px;">
|
||||
<tr>
|
||||
<td>
|
||||
<br/>
|
||||
<span style="font-weight:bold;">Ship to:</span>
|
||||
<t t-out="object.partner_shipping_id.street or ''">1201 S Figueroa St</t>
|
||||
<t t-out="object.partner_shipping_id.city or ''">Los Angeles</t>
|
||||
<t t-out="object.partner_shipping_id.state_id.name or ''">California</t>
|
||||
<t t-out="object.partner_shipping_id.zip or ''">90015</t>
|
||||
<t t-out="object.partner_shipping_id.country_id.name or ''">United States</t>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table t-if="hasattr(object, 'carrier_id') and object.carrier_id" width="100%" style="color: #454748; font-size: 12px;">
|
||||
<tr>
|
||||
<td>
|
||||
<span style="font-weight:bold;">Shipping Method:</span>
|
||||
<t t-out="object.carrier_id.name or ''"></t>
|
||||
<t t-if="object.amount_delivery == 0.0">
|
||||
(Free)
|
||||
</t>
|
||||
<t t-else="">
|
||||
(<t t-out="format_amount(object.amount_delivery, object.currency_id) or ''">$ 10.00</t>)
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
<tr t-if="object.carrier_id.carrier_description">
|
||||
<td>
|
||||
<strong>Shipping Description:</strong>
|
||||
<t t-out="object.carrier_id.carrier_description"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</t>
|
||||
</div></field>
|
||||
<field name="report_template" ref="action_report_saleorder"/>
|
||||
<field name="report_name">{{ (object.name or '').replace('/','_') }}</field>
|
||||
<field name="lang">{{ object.partner_id.lang }}</field>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record id="sale.mail_template_sale_cancellation" model="mail.template">
|
||||
<field name="name">Sales: Order Cancellation</field>
|
||||
<field name="model_id" ref="sale.model_sale_order"/>
|
||||
<field name="subject">{{ object.company_id.name }} {{ object.type_name }} Cancelled (Ref {{ object.name or 'n/a' }})</field>
|
||||
<field name="email_from">{{ (object.user_id.email_formatted or object.company_id.email_formatted or user.email_formatted) }}</field>
|
||||
<field name="partner_to">{{ object.partner_id.id }}</field>
|
||||
<field name="description">Sent automatically to customers when you cancel an order</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<p style="margin: 0px; padding: 0px; font-size: 13px;">
|
||||
<t t-set="doc_name" t-value="object.type_name"/>
|
||||
Dear <t t-out="object.partner_id.name or ''">user</t>,
|
||||
<br/><br/>
|
||||
Please be advised that your
|
||||
<t t-out="doc_name or ''">quotation</t> <strong t-out="object.name or ''">S00052</strong>
|
||||
<t t-if="object.origin">
|
||||
(with reference: <t t-out="object.origin or ''">S00052</t> )
|
||||
</t>
|
||||
has been cancelled. Therefore, you should not be charged further for this order.
|
||||
If any refund is necessary, this will be executed at best convenience.
|
||||
<br/><br/>
|
||||
Do not hesitate to contact us if you have any questions.
|
||||
<br/>
|
||||
</p>
|
||||
</div>
|
||||
</field>
|
||||
<field name="lang">{{ object.partner_id.lang }}</field>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
233
odoo-bringout-oca-ocb-sale/sale/data/product_demo.xml
Normal file
233
odoo-bringout-oca-ocb-sale/sale/data/product_demo.xml
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record id="product.consu_delivery_01" model="product.product">
|
||||
<field name="invoice_policy">order</field>
|
||||
</record>
|
||||
|
||||
<record id="product.consu_delivery_02" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.consu_delivery_03" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_order_01" model="product.product">
|
||||
<field name="invoice_policy">order</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_delivery_01" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_delivery_02" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_27" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_25" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_24" model="product.product">
|
||||
<field name="invoice_policy">order</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_22" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_20" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_16" model="product.product">
|
||||
<field name="invoice_policy">order</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_13" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_12" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_11b" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_11" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_10" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_9" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_8" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_7" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_6" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_5" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_4c" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_4b" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_4" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_3" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
<field name="expense_policy">cost</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_2" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_product_1" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
</record>
|
||||
|
||||
<!-- Expensable products -->
|
||||
<record id="product.expense_product" model="product.product">
|
||||
<field name="invoice_policy">order</field>
|
||||
<field name="expense_policy">sales_price</field>
|
||||
</record>
|
||||
|
||||
<record id="product.expense_hotel" model="product.product">
|
||||
<field name="invoice_policy">delivery</field>
|
||||
<field name="expense_policy">cost</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_attribute_2" model="product.attribute">
|
||||
<field name="display_type">color</field>
|
||||
</record>
|
||||
<record id="product.product_attribute_3" model="product.attribute">
|
||||
<field name="display_type">select</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_attribute_value_3" model="product.attribute.value">
|
||||
<field name="html_color">#FFFFFF</field>
|
||||
</record>
|
||||
<record id="product.product_attribute_value_4" model="product.attribute.value">
|
||||
<field name="html_color">#000000</field>
|
||||
</record>
|
||||
|
||||
<record id="product_attribute_value_7" model="product.attribute.value">
|
||||
<field name="name">Custom</field>
|
||||
<field name="attribute_id" ref="product.product_attribute_1"/>
|
||||
<field name="is_custom">True</field>
|
||||
<field name="sequence">3</field>
|
||||
</record>
|
||||
|
||||
<record id="product.product_4_attribute_1_product_template_attribute_line" model="product.template.attribute.line">
|
||||
<field name="value_ids" eval="[(4,ref('product_attribute_value_7'))]"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Handle automatically created product.template.attribute.value.
|
||||
Check "product.product_4_attribute_1_value_2" for more information about this
|
||||
-->
|
||||
<function model="ir.model.data" name="_update_xmlids">
|
||||
<value model="base" eval="[{
|
||||
'xml_id': 'sale.product_4_attribute_1_value_3',
|
||||
'record': obj().env.ref('product.product_4_attribute_1_product_template_attribute_line').product_template_value_ids[2],
|
||||
'noupdate': True,
|
||||
}]"/>
|
||||
</function>
|
||||
|
||||
<function model="ir.model.data" name="_update_xmlids">
|
||||
<value model="base" eval="[{
|
||||
'xml_id': 'sale.product_product_4e',
|
||||
'record': obj().env.ref('product.product_product_4_product_template')._get_variant_for_combination(obj().env.ref('sale.product_4_attribute_1_value_3') + obj().env.ref('product.product_4_attribute_2_value_1')),
|
||||
'noupdate': True,
|
||||
}, {
|
||||
'xml_id': 'sale.product_product_4f',
|
||||
'record': obj().env.ref('product.product_product_4_product_template')._get_variant_for_combination(obj().env.ref('sale.product_4_attribute_1_value_3') + obj().env.ref('product.product_4_attribute_2_value_2')),
|
||||
'noupdate': True,
|
||||
},]"/>
|
||||
</function>
|
||||
|
||||
<record id="product_product_4e" model="product.product">
|
||||
<field name="default_code">DESK0005</field>
|
||||
<field name="weight">0.01</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_4f" model="product.product">
|
||||
<field name="default_code">DESK0006</field>
|
||||
<field name="weight">0.01</field>
|
||||
</record>
|
||||
|
||||
<record id="product_template_attribute_exclusion_1" model="product.template.attribute.exclusion">
|
||||
<field name="product_tmpl_id" ref="product.product_product_4_product_template" />
|
||||
<field name="value_ids" eval="[(6,0,[ref('product.product_4_attribute_2_value_2')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="product_template_attribute_exclusion_2" model="product.template.attribute.exclusion">
|
||||
<field name="product_tmpl_id" ref="product.product_product_11_product_template" />
|
||||
<field name="value_ids" eval="[(6,0,[ref('product.product_11_attribute_1_value_1')])]"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
The "Customizable Desk's Aluminium" attribute value will excude:
|
||||
- The "Customizable Desk's Black" attribute
|
||||
- The "Office Chair's Steel" attribute
|
||||
-->
|
||||
<record id="product.product_4_attribute_1_value_2" model="product.template.attribute.value">
|
||||
<field name="exclude_for" eval="[(6,0,[ref('sale.product_template_attribute_exclusion_1') ,ref('sale.product_template_attribute_exclusion_2')])]" />
|
||||
</record>
|
||||
|
||||
<record id="product_template_attribute_exclusion_3" model="product.template.attribute.exclusion">
|
||||
<field name="product_tmpl_id" ref="product.product_product_11_product_template" />
|
||||
<field name="value_ids" eval="[(6,0,[ref('product.product_11_attribute_1_value_2')])]"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
The "Customizable Desk's Steel" attribute value will excude:
|
||||
- The "Office Chair's Aluminium" attribute
|
||||
-->
|
||||
<record id="product.product_4_attribute_1_value_1" model="product.template.attribute.value">
|
||||
<field name="exclude_for" eval="[(6,0,[ref('sale.product_template_attribute_exclusion_3')])]" />
|
||||
</record>
|
||||
|
||||
<record id="advance_product_0" model="product.product">
|
||||
<field name="name">Deposit</field>
|
||||
<field name="categ_id" ref="product.product_category_3"/>
|
||||
<field name="type">service</field>
|
||||
<field name="list_price">150.0</field>
|
||||
<field name="invoice_policy">order</field>
|
||||
<field name="standard_price">100.0</field>
|
||||
<field name="uom_id" ref="uom.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_unit"/>
|
||||
<field name="company_id" eval="[]"/>
|
||||
<field name="image_1920" type="base64" file="sale/static/img/advance_product_0-image.jpg"/>
|
||||
<field name="taxes_id" eval="[]"/>
|
||||
<field name="supplier_taxes_id" eval="[]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
26
odoo-bringout-oca-ocb-sale/sale/data/sale_data.xml
Normal file
26
odoo-bringout-oca-ocb-sale/sale/data/sale_data.xml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<!-- TODO remove as it is already the fallback in _find_mail_template -->
|
||||
<record id="default_confirmation_template" model="ir.config_parameter">
|
||||
<field name="key">sale.default_confirmation_template</field>
|
||||
<field name="value" ref="sale.mail_template_sale_confirmation"/>
|
||||
</record>
|
||||
|
||||
<record id="default_invoice_email_template" model="ir.config_parameter">
|
||||
<field name="key">sale.default_invoice_email_template</field>
|
||||
<field name="value" ref="account.email_template_edi_invoice"/>
|
||||
</record>
|
||||
|
||||
<record id="send_invoice_cron" model="ir.cron">
|
||||
<field name="name">automatic invoicing: send ready invoice</field>
|
||||
<field name="model_id" ref="payment.model_payment_transaction" />
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_send_invoice()</field>
|
||||
<field name="user_id" ref="base.user_root" />
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
743
odoo-bringout-oca-ocb-sale/sale/data/sale_demo.xml
Normal file
743
odoo-bringout-oca-ocb-sale/sale/data/sale_demo.xml
Normal file
|
|
@ -0,0 +1,743 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<!-- Enable EUR currency since it's the currency on the company, pricelist and Sale Orders
|
||||
|
||||
If the currency is not enabled, you cannot pay the demo SO's with a payment link bc the currency
|
||||
is disabled.
|
||||
-->
|
||||
<function model="res.currency" name="action_unarchive">
|
||||
<value model="res.currency" search="[('id', '=', obj().env.ref('product.list0').currency_id.id), ('active', '=', False)]"/>
|
||||
</function>
|
||||
|
||||
<!-- We want to activate pay and sign by default for easier demoing. -->
|
||||
<record id="base.main_company" model="res.company">
|
||||
<field name="portal_confirmation_pay" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record id="base.user_demo" model="res.users">
|
||||
<field eval="[(4, ref('sales_team.group_sale_salesman'))]" name="groups_id"/>
|
||||
</record>
|
||||
|
||||
<record model="crm.team" id="sales_team.team_sales_department">
|
||||
<field name="use_quotations" eval="True"/>
|
||||
<field name="invoiced_target">250000</field>
|
||||
</record>
|
||||
|
||||
<record model="crm.team" id="sales_team.crm_team_1">
|
||||
<field name="use_quotations" eval="True"/>
|
||||
<field name="invoiced_target">40000</field>
|
||||
</record>
|
||||
|
||||
<record id="utm_source_sale_order_0" model="utm.source">
|
||||
<field name="name">Sale Promotion 1</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_1" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_2"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_2"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_2"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_1" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_1"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">295.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_2" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_1"/>
|
||||
<field name="product_id" ref="product.product_delivery_02"/>
|
||||
<field name="product_uom_qty">5</field>
|
||||
<field name="price_unit">145.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_3" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_1"/>
|
||||
<field name="product_id" ref="product.product_delivery_01"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">65.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_2" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_4"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_13"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_13"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor7'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_4" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_2"/>
|
||||
<field name="product_id" ref="product.product_product_1"/>
|
||||
<field name="product_uom_qty">24</field>
|
||||
<field name="price_unit">75.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_5" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_2"/>
|
||||
<field name="product_id" ref="product.product_product_2"/>
|
||||
<field name="product_uom_qty">30</field>
|
||||
<field name="price_unit">38.25</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_3" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_4"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_4"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_4"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor1')), (4, ref('sales_team.categ_oppor2'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_6" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_3"/>
|
||||
<field name="product_id" ref="product.product_product_1"/>
|
||||
<field name="product_uom_qty">10</field>
|
||||
<field name="price_unit">30.75</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_7" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_3"/>
|
||||
<field name="product_id" ref="product.product_delivery_01"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_4" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_8" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_4"/>
|
||||
<field name="product_id" ref="product.product_product_1"/>
|
||||
<field name="product_uom_qty">16</field>
|
||||
<field name="price_unit">75.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_9" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_4"/>
|
||||
<field name="product_id" ref="product.product_delivery_02"/>
|
||||
<field name="product_uom_qty">10</field>
|
||||
<field name="price_unit">45.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_10" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_4"/>
|
||||
<field name="product_id" ref="product.consu_delivery_02"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">150.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_11" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_4"/>
|
||||
<field name="product_id" ref="product.product_delivery_01"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_5" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_2"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_2"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_2"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_12" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_5"/>
|
||||
<field name="product_id" ref="product.product_delivery_02"/>
|
||||
<field name="price_unit">405.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_6" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_18"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_18"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_18"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor6'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_15" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_6"/>
|
||||
<field name="product_id" ref="product.product_product_4"/>
|
||||
<field name="price_unit">750.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_7" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_11"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_11"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor4'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_16" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_7"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">5</field>
|
||||
<field name="price_unit">295.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_17" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_7"/>
|
||||
<field name="product_id" ref="product.consu_delivery_01"/>
|
||||
<field name="price_unit">173.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_18" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_7"/>
|
||||
<field name="product_id" ref="product.product_delivery_02"/>
|
||||
<field name="price_unit">40.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_19" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_7"/>
|
||||
<field name="product_id" ref="product.product_delivery_01"/>
|
||||
<field name="price_unit">18.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_8" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_20" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_8"/>
|
||||
<field name="product_id" ref="product.product_product_27"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">110.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_21" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_8"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<!-- additional demo data for pretty graphs in sales dashboard -->
|
||||
|
||||
<record id="sale_order_9" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_22" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_9"/>
|
||||
<field name="product_id" ref="product.product_product_27"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">97.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_23" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_9"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_10" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=14)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor3'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_24" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_10"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">255.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_25" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_10"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="sale_order_11" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=21)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_26" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_11"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">245.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_27" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_11"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_12" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=28)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor1'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_28" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_12"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="price_unit">315.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_29" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_12"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_13" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.crm_team_1"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=35)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_30" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_13"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="price_unit">295.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_31" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_13"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_14" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=7)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_32" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_14"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">4</field>
|
||||
<field name="price_unit">275.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_33" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_14"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">4</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_15" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=14)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_34" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_15"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">4</field>
|
||||
<field name="price_unit">295.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_35" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_15"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_16" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=21)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_36" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_16"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">275.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_37" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_16"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_17" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=28)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_38" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_17"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">355.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_39" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_17"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_18" model="sale.order">
|
||||
<field name="partner_id" ref="base.res_partner_3"/>
|
||||
<field name="partner_invoice_id" ref="base.res_partner_address_25"/>
|
||||
<field name="partner_shipping_id" ref="base.res_partner_address_25"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="campaign_id" ref="utm.utm_campaign_email_campaign_products"/>
|
||||
<field name="medium_id" ref="utm.utm_medium_email"/>
|
||||
<field name="source_id" ref="sale.utm_source_sale_order_0"/>
|
||||
<field name="date_order" eval="(datetime.now()-relativedelta(days=35)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_40" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_18"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">295.00</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_line_41" model="sale.order.line">
|
||||
<field name="order_id" ref="sale_order_18"/>
|
||||
<field name="product_id" ref="product.product_product_12"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">120.50</field>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_1" model="sale.order">
|
||||
<field name="partner_id" ref="base.partner_demo_portal"/>
|
||||
<field name="partner_invoice_id" ref="base.partner_demo_portal"/>
|
||||
<field name="partner_shipping_id" ref="base.partner_demo_portal"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="state">sent</field>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="message_partner_ids" eval="[(4, ref('base.partner_demo_portal'))]"/>
|
||||
<field name="tag_ids" eval="[(4, ref('sales_team.categ_oppor4'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_line_1" model="sale.order.line">
|
||||
<field name="order_id" ref="portal_sale_order_1"/>
|
||||
<field name="product_id" ref="product.product_product_25"/>
|
||||
<field name="product_uom_qty">3</field>
|
||||
<field name="price_unit">295.00</field>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_line_2" model="sale.order.line">
|
||||
<field name="order_id" ref="portal_sale_order_1"/>
|
||||
<field name="product_id" ref="product.product_delivery_02"/>
|
||||
<field name="product_uom_qty">5</field>
|
||||
<field name="price_unit">145.00</field>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_line_3" model="sale.order.line">
|
||||
<field name="order_id" ref="portal_sale_order_1"/>
|
||||
<field name="product_id" ref="product.product_delivery_01"/>
|
||||
<field name="product_uom_qty">2</field>
|
||||
<field name="price_unit">65.00</field>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_2" model="sale.order">
|
||||
<field name="partner_id" ref="base.partner_demo_portal"/>
|
||||
<field name="partner_invoice_id" ref="base.partner_demo_portal"/>
|
||||
<field name="partner_shipping_id" ref="base.partner_demo_portal"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="pricelist_id" ref="product.list0"/>
|
||||
<field name="team_id" ref="sales_team.team_sales_department"/>
|
||||
<field name="date_order" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="message_partner_ids" eval="[(4, ref('base.partner_demo_portal'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_line_4" model="sale.order.line">
|
||||
<field name="order_id" ref="portal_sale_order_2"/>
|
||||
<field name="product_id" ref="product.product_product_1"/>
|
||||
<field name="product_uom_qty">24</field>
|
||||
<field name="price_unit">75.00</field>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_line_5" model="sale.order.line">
|
||||
<field name="order_id" ref="portal_sale_order_2"/>
|
||||
<field name="product_id" ref="product.product_product_2"/>
|
||||
<field name="product_uom_qty">30</field>
|
||||
<field name="price_unit">38.25</field>
|
||||
</record>
|
||||
|
||||
<!-- Confirm some Sales Orders-->
|
||||
<function model="sale.order" name="action_confirm" eval="[[
|
||||
ref('sale_order_4'),
|
||||
ref('sale_order_6'),
|
||||
ref('sale_order_7'),
|
||||
ref('sale_order_8'),
|
||||
ref('sale_order_9'),
|
||||
ref('sale_order_10'),
|
||||
ref('sale_order_11'),
|
||||
ref('sale_order_12'),
|
||||
ref('sale_order_13'),
|
||||
ref('sale_order_14'),
|
||||
ref('sale_order_15'),
|
||||
ref('sale_order_16'),
|
||||
ref('sale_order_17'),
|
||||
ref('sale_order_18'),
|
||||
ref('portal_sale_order_2'),
|
||||
]]"/>
|
||||
|
||||
<!-- Setting date_order in the past for beautiful spread -->
|
||||
<record id="sale_order_9" model="sale.order">
|
||||
<field name="date_order" eval="datetime.now() - relativedelta(days=7)"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_11" model="sale.order">
|
||||
<field name="date_order" eval="datetime.now() - relativedelta(days=21)"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_15" model="sale.order">
|
||||
<field name="date_order" eval="datetime.now() - relativedelta(days=14)"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_17" model="sale.order">
|
||||
<field name="date_order" eval="datetime.now() - relativedelta(days=28)"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_18" model="sale.order">
|
||||
<field name="date_order" eval="datetime.now() - relativedelta(days=35)"/>
|
||||
</record>
|
||||
|
||||
<record id="portal_sale_order_2" model="sale.order">
|
||||
<field name="date_order" eval="datetime.now() - relativedelta(months=1)"/>
|
||||
</record>
|
||||
|
||||
<!-- Mail messages in SO's chatter -->
|
||||
<record id="message_sale_1" model="mail.message">
|
||||
<field name="model">sale.order</field>
|
||||
<field name="res_id" ref="sale_order_2"/>
|
||||
<field name="body">Hi,
|
||||
I have a question regarding services pricing: I heard of a possible discount for quantities exceeding 25 hours.
|
||||
Could you confirm, please?</field>
|
||||
<field name="message_type">comment</field>
|
||||
<field name="author_id" ref="base.partner_demo"/>
|
||||
</record>
|
||||
|
||||
<record id="message_sale_2" model="mail.message">
|
||||
<field name="model">sale.order</field>
|
||||
<field name="res_id" ref="sale_order_2"/>
|
||||
<field name="parent_id" ref="message_sale_1"/>
|
||||
<field name="body">Hello,
|
||||
Unfortunately that was a temporary discount that is not available anymore.
|
||||
Do you still plan to confirm the order based on the quoted prices?
|
||||
Thanks!</field>
|
||||
<field name="message_type">comment</field>
|
||||
<field name="author_id" ref="base.partner_root"/>
|
||||
</record>
|
||||
|
||||
<record id="message_sale_3" model="mail.message">
|
||||
<field name="model">sale.order</field>
|
||||
<field name="res_id" ref="sale_order_2"/>
|
||||
<field name="parent_id" ref="message_sale_2"/>
|
||||
<field name="body">
|
||||
Alright, thanks for the clarification. I will confirm the order as soon as I get my manager's approval.
|
||||
</field>
|
||||
<field name="message_type">comment</field>
|
||||
<field name="author_id" ref="base.partner_demo"/>
|
||||
</record>
|
||||
|
||||
<!-- Activities of sales order -->
|
||||
<record id="sale_activity_2" model="mail.activity">
|
||||
<field name="res_id" ref="sale.sale_order_3"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="mail.mail_activity_data_email"/>
|
||||
<field name="date_deadline" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="summary">Answer questions</field>
|
||||
<field name="create_uid" ref="base.user_admin"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
</record>
|
||||
<record id="sale_activity_3" model="mail.activity">
|
||||
<field name="res_id" ref="sale.sale_order_4"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="sale.mail_act_sale_upsell"/>
|
||||
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="create_uid" ref="base.user_admin"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
</record>
|
||||
<record id="sale_activity_4" model="mail.activity">
|
||||
<field name="res_id" ref="sale.sale_order_5"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="mail.mail_activity_data_email"/>
|
||||
<field name="date_deadline" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="create_uid" ref="base.user_demo"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
</record>
|
||||
<record id="sale_activity_6" model="mail.activity">
|
||||
<field name="res_id" ref="sale.sale_order_7"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
|
||||
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="summary">Check delivery requirements</field>
|
||||
<field name="create_uid" ref="base.user_admin"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
</record>
|
||||
<record id="sale_activity_7" model="mail.activity">
|
||||
<field name="res_id" ref="sale.sale_order_10"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
|
||||
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="summary">Confirm Delivery</field>
|
||||
<field name="create_uid" ref="base.user_demo"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
</record>
|
||||
<record id="sale_activity_8" model="mail.activity">
|
||||
<field name="res_id" ref="sale.sale_order_12"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="mail.mail_activity_data_email"/>
|
||||
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="create_uid" ref="base.user_demo"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
</record>
|
||||
<record id="sale_activity_9" model="mail.activity">
|
||||
<field name="res_id" ref="sale.sale_order_16"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="sale.mail_act_sale_upsell"/>
|
||||
<field name="date_deadline" eval="DateTime.today().strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="create_uid" ref="base.user_demo"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
</record>
|
||||
<record id="sale_activity_10" model="mail.activity">
|
||||
<field name="res_id" ref="sale.portal_sale_order_1"/>
|
||||
<field name="res_model_id" ref="sale.model_sale_order"/>
|
||||
<field name="activity_type_id" ref="mail.mail_activity_data_todo"/>
|
||||
<field name="date_deadline" eval="(DateTime.today() + relativedelta(days=5)).strftime('%Y-%m-%d %H:%M')"/>
|
||||
<field name="summary">Get quote confirmation</field>
|
||||
<field name="create_uid" ref="base.user_admin"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
4525
odoo-bringout-oca-ocb-sale/sale/i18n/af.po
Normal file
4525
odoo-bringout-oca-ocb-sale/sale/i18n/af.po
Normal file
File diff suppressed because it is too large
Load diff
4521
odoo-bringout-oca-ocb-sale/sale/i18n/am.po
Normal file
4521
odoo-bringout-oca-ocb-sale/sale/i18n/am.po
Normal file
File diff suppressed because it is too large
Load diff
4973
odoo-bringout-oca-ocb-sale/sale/i18n/ar.po
Normal file
4973
odoo-bringout-oca-ocb-sale/sale/i18n/ar.po
Normal file
File diff suppressed because it is too large
Load diff
4710
odoo-bringout-oca-ocb-sale/sale/i18n/az.po
Normal file
4710
odoo-bringout-oca-ocb-sale/sale/i18n/az.po
Normal file
File diff suppressed because it is too large
Load diff
4528
odoo-bringout-oca-ocb-sale/sale/i18n/be.po
Normal file
4528
odoo-bringout-oca-ocb-sale/sale/i18n/be.po
Normal file
File diff suppressed because it is too large
Load diff
4705
odoo-bringout-oca-ocb-sale/sale/i18n/bg.po
Normal file
4705
odoo-bringout-oca-ocb-sale/sale/i18n/bg.po
Normal file
File diff suppressed because it is too large
Load diff
4534
odoo-bringout-oca-ocb-sale/sale/i18n/bs.po
Normal file
4534
odoo-bringout-oca-ocb-sale/sale/i18n/bs.po
Normal file
File diff suppressed because it is too large
Load diff
5042
odoo-bringout-oca-ocb-sale/sale/i18n/ca.po
Normal file
5042
odoo-bringout-oca-ocb-sale/sale/i18n/ca.po
Normal file
File diff suppressed because it is too large
Load diff
5005
odoo-bringout-oca-ocb-sale/sale/i18n/cs.po
Normal file
5005
odoo-bringout-oca-ocb-sale/sale/i18n/cs.po
Normal file
File diff suppressed because it is too large
Load diff
4778
odoo-bringout-oca-ocb-sale/sale/i18n/da.po
Normal file
4778
odoo-bringout-oca-ocb-sale/sale/i18n/da.po
Normal file
File diff suppressed because it is too large
Load diff
5056
odoo-bringout-oca-ocb-sale/sale/i18n/de.po
Normal file
5056
odoo-bringout-oca-ocb-sale/sale/i18n/de.po
Normal file
File diff suppressed because it is too large
Load diff
4178
odoo-bringout-oca-ocb-sale/sale/i18n/el.po
Normal file
4178
odoo-bringout-oca-ocb-sale/sale/i18n/el.po
Normal file
File diff suppressed because it is too large
Load diff
1955
odoo-bringout-oca-ocb-sale/sale/i18n/en_GB.po
Normal file
1955
odoo-bringout-oca-ocb-sale/sale/i18n/en_GB.po
Normal file
File diff suppressed because it is too large
Load diff
5040
odoo-bringout-oca-ocb-sale/sale/i18n/es.po
Normal file
5040
odoo-bringout-oca-ocb-sale/sale/i18n/es.po
Normal file
File diff suppressed because it is too large
Load diff
1923
odoo-bringout-oca-ocb-sale/sale/i18n/es_BO.po
Normal file
1923
odoo-bringout-oca-ocb-sale/sale/i18n/es_BO.po
Normal file
File diff suppressed because it is too large
Load diff
672
odoo-bringout-oca-ocb-sale/sale/i18n/es_CL.po
Normal file
672
odoo-bringout-oca-ocb-sale/sale/i18n/es_CL.po
Normal file
|
|
@ -0,0 +1,672 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * sale
|
||||
#
|
||||
# Translators:
|
||||
# Daniel Santibáñez Polanco <dansanti@gmail.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 15.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-23 08:23+0000\n"
|
||||
"PO-Revision-Date: 2016-03-13 01:19+0000\n"
|
||||
"Last-Translator: Daniel Santibáñez Polanco <dansanti@gmail.com>\n"
|
||||
"Language-Team: Spanish (Chile) (http://www.transifex.com/odoo/odoo-9/"
|
||||
"language/es_CL/)\n"
|
||||
"Language: es_CL\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"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__nbr
|
||||
msgid "# of Lines"
|
||||
msgstr "# de líneas"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document
|
||||
msgid "<strong>Fiscal Position Remark:</strong>"
|
||||
msgstr "<strong>Posición fiscal:</strong>"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document
|
||||
msgid "<strong>Salesperson:</strong>"
|
||||
msgstr "<strong>Vendedor:</strong>"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Acción necesaria"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__analytic_account_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__analytic_account_id
|
||||
msgid "Analytic Account"
|
||||
msgstr "Cuenta analítica"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_cancel_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sale_advance_payment_inv
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields.selection,name:sale.selection__sale_order__state__cancel
|
||||
#: model:ir.model.fields.selection,name:sale.selection__sale_report__state__cancel
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model,name:sale.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Compañías"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__company_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__company_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__company_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__company_id
|
||||
#: model:ir.model.fields,field_description:sale.field_utm_campaign__company_id
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
msgid "Company"
|
||||
msgstr "Compañía"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__advance_payment_method
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sale_advance_payment_inv
|
||||
msgid "Create Invoice"
|
||||
msgstr "Crear factura"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__create_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__create_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_cancel__create_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__create_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_payment_provider_onboarding_wizard__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Creado por"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__create_date
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_cancel__create_date
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__create_date
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_payment_provider_onboarding_wizard__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Creado en"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__create_date
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_quotation_tree
|
||||
msgid "Creation Date"
|
||||
msgstr "Fecha creación"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__currency_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__currency_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__currency_id
|
||||
#: model:ir.model.fields,field_description:sale.field_utm_campaign__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Moneda"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__partner_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__order_partner_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__partner_id
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
msgid "Customer"
|
||||
msgstr "Cliente"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__client_order_ref
|
||||
msgid "Customer Reference"
|
||||
msgstr "Referencia cliente"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__deposit_taxes_id
|
||||
msgid "Customer Taxes"
|
||||
msgstr "Impuestos de cliente"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
msgid "Delivered"
|
||||
msgstr "Entregado"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__name
|
||||
#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
msgid "Description"
|
||||
msgstr "Descripción"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__discount
|
||||
msgid "Discount (%)"
|
||||
msgstr "Descuento (%)"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__display_name
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__display_name
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_cancel__display_name
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__display_name
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_payment_provider_onboarding_wizard__display_name
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nombre mostrado"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields.selection,name:sale.selection__res_company__sale_onboarding_order_confirmation_state__done
|
||||
#: model:ir.model.fields.selection,name:sale.selection__res_company__sale_onboarding_sample_quotation_state__done
|
||||
#: model:ir.model.fields.selection,name:sale.selection__res_company__sale_quotation_onboarding_state__done
|
||||
msgid "Done"
|
||||
msgstr "Realizado"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model,name:sale.model_mail_compose_message
|
||||
msgid "Email composition wizard"
|
||||
msgstr "Asistente de redacción de correo electrónico."
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__fiscal_position_id
|
||||
msgid "Fiscal Position"
|
||||
msgstr "Posición fiscal"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Seguidores"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Seguidores (Empresas)"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_line_filter
|
||||
msgid "Group By"
|
||||
msgstr "Agrupar por"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_cancel__id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_payment_provider_onboarding_wizard__id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__id
|
||||
msgid "ID"
|
||||
msgstr "ID (identificación)"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,help:sale.field_sale_order__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Si está marcado, hay nuevos mensajes que requieren su atención."
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__deposit_account_id
|
||||
msgid "Income Account"
|
||||
msgstr "Cuenta de ingresos"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__partner_invoice_id
|
||||
msgid "Invoice Address"
|
||||
msgstr "Dirección factura"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__invoice_lines
|
||||
msgid "Invoice Lines"
|
||||
msgstr "Líneas de factura"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__invoice_status
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__invoice_status
|
||||
msgid "Invoice Status"
|
||||
msgstr "Estado de facturación"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
msgid "Invoiced"
|
||||
msgstr "Facturado"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.actions.act_window,name:sale.action_invoice_salesteams
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__invoice_ids
|
||||
#: model_terms:ir.ui.view,arch_db:sale.crm_team_view_kanban_dashboard
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
msgid "Invoices"
|
||||
msgstr "Facturas"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.actions.act_window,name:sale.action_account_invoice_report_salesteam
|
||||
msgid "Invoices Analysis"
|
||||
msgstr "Análisis de facturas"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model,name:sale.model_account_invoice_report
|
||||
msgid "Invoices Statistics"
|
||||
msgstr "Estadísticas de facturas"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.crm_team_view_kanban_dashboard
|
||||
#: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form
|
||||
msgid "Invoicing"
|
||||
msgstr "Facturando"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Es un seguidor"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv____last_update
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order____last_update
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_cancel____last_update
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line____last_update
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_payment_provider_onboarding_wizard____last_update
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Última modificación en"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__write_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__write_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_cancel__write_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__write_uid
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_payment_provider_onboarding_wizard__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Última actualización de"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_advance_payment_inv__write_date
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__write_date
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_cancel__write_date
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__write_date
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_payment_provider_onboarding_wizard__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Última actualización en"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Mensajes"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_line_filter
|
||||
msgid "My Sales Order Lines"
|
||||
msgstr "Mis lineas de pedidos de venta"
|
||||
|
||||
#. module: sale
|
||||
#. odoo-python
|
||||
#: code:addons/sale/models/sale_order.py:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr "Nueva"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Número de acciones"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_line_filter
|
||||
msgid "Order"
|
||||
msgstr "Pedido"
|
||||
|
||||
#. module: sale
|
||||
#. odoo-python
|
||||
#: code:addons/sale/controllers/portal.py:0
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__date_order
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__date
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_orders
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_view_search_inherit_sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_tree
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
#, python-format
|
||||
msgid "Order Date"
|
||||
msgstr "Fecha orden"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__order_line
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
msgid "Order Lines"
|
||||
msgstr "Líneas del pedido"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__name
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__order_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__name
|
||||
msgid "Order Reference"
|
||||
msgstr "Referencia de pedido"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__state
|
||||
msgid "Order Status"
|
||||
msgstr "Estado del pedido"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__pricelist_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__pricelist_id
|
||||
msgid "Pricelist"
|
||||
msgstr "Tarifa"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_template
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model,name:sale.model_product_template
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__product_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__product_tmpl_id
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_line_filter
|
||||
msgid "Product"
|
||||
msgstr "Producto"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__categ_id
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
msgid "Product Category"
|
||||
msgstr "Categoría de producto"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__product_template_id
|
||||
msgid "Product Template"
|
||||
msgstr "Plantilla producto"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.actions.act_window,name:sale.product_template_action
|
||||
#: model:ir.ui.menu,name:sale.menu_product_template_action
|
||||
#: model:ir.ui.menu,name:sale.prod_config_main
|
||||
#: model:ir.ui.menu,name:sale.product_menu_catalog
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content
|
||||
msgid "Products"
|
||||
msgstr "Productos"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_line_tree
|
||||
msgid "Qty"
|
||||
msgstr "Ctdad"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__product_uom_qty
|
||||
#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content
|
||||
msgid "Quantity"
|
||||
msgstr "Cantidad"
|
||||
|
||||
#. module: sale
|
||||
#. odoo-python
|
||||
#: code:addons/sale/models/sale_order.py:0
|
||||
#: model:ir.model.fields.selection,name:sale.selection__sale_order__state__draft
|
||||
#: model_terms:ir.ui.view,arch_db:sale.crm_team_view_kanban_dashboard
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_quotation_tree
|
||||
#, python-format
|
||||
msgid "Quotation"
|
||||
msgstr "Presupuesto"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.actions.report,name:sale.action_report_saleorder
|
||||
msgid "Quotation / Order"
|
||||
msgstr "Presupuesto / Pedido"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.actions.act_window,name:sale.action_quotations
|
||||
#: model:ir.actions.act_window,name:sale.action_quotations_salesteams
|
||||
#: model:ir.actions.act_window,name:sale.action_quotations_with_onboarding
|
||||
#: model:ir.model.fields,field_description:sale.field_crm_team__use_quotations
|
||||
#: model:ir.ui.menu,name:sale.menu_sale_quotations
|
||||
#: model_terms:ir.ui.view,arch_db:sale.crm_team_view_kanban_dashboard
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_home_menu_sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_home_sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_quotations
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_view_search_inherit_quotation
|
||||
#: model_terms:ir.ui.view,arch_db:sale.utm_campaign_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.utm_campaign_view_kanban
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
msgid "Quotations"
|
||||
msgstr "Presupuestos"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order
|
||||
msgid "Quotations and Sales"
|
||||
msgstr "Presupuestos y pedidos"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.ui.menu,name:sale.menu_sale_report
|
||||
msgid "Reporting"
|
||||
msgstr "Informes"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_product_packaging__sales
|
||||
#: model:ir.ui.menu,name:sale.sale_menu_root
|
||||
#: model_terms:ir.ui.view,arch_db:sale.crm_team_view_kanban_dashboard
|
||||
#: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.res_partner_view_buttons
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
msgid "Sales"
|
||||
msgstr "Ventas"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model,name:sale.model_sale_advance_payment_inv
|
||||
msgid "Sales Advance Payment Invoice"
|
||||
msgstr "Ventas. Anticipo pago factura"
|
||||
|
||||
#. module: sale
|
||||
#. odoo-python
|
||||
#: code:addons/sale/models/crm_team.py:0
|
||||
#: model:ir.actions.act_window,name:sale.action_order_report_all
|
||||
#: model:ir.actions.act_window,name:sale.action_order_report_so_salesteam
|
||||
#: model:ir.actions.act_window,name:sale.report_all_channels_sales_action
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_report_view_tree
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_graph
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_pivot
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#, python-format
|
||||
msgid "Sales Analysis"
|
||||
msgstr "Análisis de ventas"
|
||||
|
||||
#. module: sale
|
||||
#. odoo-python
|
||||
#: code:addons/sale/models/sale_order.py:0
|
||||
#: model:ir.model,name:sale.model_sale_order
|
||||
#: model:ir.model.fields,field_description:sale.field_res_partner__sale_order_ids
|
||||
#: model:ir.model.fields,field_description:sale.field_res_users__sale_order_ids
|
||||
#: model:ir.model.fields.selection,name:sale.selection__sale_order__state__sale
|
||||
#: model:ir.model.fields.selection,name:sale.selection__sale_report__state__sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
#, python-format
|
||||
msgid "Sales Order"
|
||||
msgstr "Pedido de venta"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model,name:sale.model_sale_order_line
|
||||
#: model:ir.model.fields,field_description:sale.field_product_attribute_custom_value__sale_order_line_id
|
||||
#: model:ir.model.fields,field_description:sale.field_product_product__sale_line_warn
|
||||
#: model:ir.model.fields,field_description:sale.field_product_template__sale_line_warn
|
||||
msgid "Sales Order Line"
|
||||
msgstr "Línea de pedido de venta"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_account_move_line__sale_line_ids
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_line_tree
|
||||
msgid "Sales Order Lines"
|
||||
msgstr "Líneas pedido de ventas"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.actions.act_window,name:sale.action_orders
|
||||
#: model:ir.actions.act_window,name:sale.action_orders_salesteams
|
||||
#: model:ir.actions.act_window,name:sale.action_orders_to_invoice_salesteams
|
||||
#: model:ir.model.fields,field_description:sale.field_payment_transaction__sale_order_ids
|
||||
#: model:ir.ui.menu,name:sale.menu_sales_config
|
||||
#: model_terms:ir.ui.view,arch_db:sale.crm_team_view_kanban_dashboard
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_home_menu_sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_home_sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_orders
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_view_activity
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_view_search_inherit_quotation
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_tree
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sale_order_calendar
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sale_order_graph
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sale_order_pivot
|
||||
msgid "Sales Orders"
|
||||
msgstr "Pedidos de ventas"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model,name:sale.model_crm_team
|
||||
#: model:ir.model.fields,field_description:sale.field_account_bank_statement_line__team_id
|
||||
#: model:ir.model.fields,field_description:sale.field_account_invoice_report__team_id
|
||||
#: model:ir.model.fields,field_description:sale.field_account_move__team_id
|
||||
#: model:ir.model.fields,field_description:sale.field_account_payment__team_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__team_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__team_id
|
||||
#: model_terms:ir.ui.view,arch_db:sale.account_invoice_groupby_inherit
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_account_invoice_report_search_inherit
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
msgid "Sales Team"
|
||||
msgstr "Equipo de ventas"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__user_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__salesman_id
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__user_id
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_line_filter
|
||||
msgid "Salesperson"
|
||||
msgstr "Vendedor"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_filter
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_line_filter
|
||||
msgid "Search Sales Order"
|
||||
msgstr "Buscar pedido de venta"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__sequence
|
||||
msgid "Sequence"
|
||||
msgstr "Secuencia"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__origin
|
||||
msgid "Source Document"
|
||||
msgstr "Documento origen"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__state
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__state
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_product_search
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__price_subtotal
|
||||
msgid "Subtotal"
|
||||
msgstr "Subtotal"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__amount_tax
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__tax_id
|
||||
#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document
|
||||
msgid "Taxes"
|
||||
msgstr "Impuestos"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.actions.act_window,help:sale.action_order_report_all
|
||||
msgid ""
|
||||
"This report performs analysis on your quotations and sales orders. 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 un análisis de sus presupuestos y pedidos de venta. El "
|
||||
"análisis verifica los ingresos de sus ventas y los ordena por diferentes "
|
||||
"grupos de criterios (comercial, empresa, producto, etc.). Utilice este "
|
||||
"informe para realizar un análisis sobre sus ventas todavía no facturadas. Si "
|
||||
"desea analizar sus ingresos, debería utilizar el informe de análisis de "
|
||||
"facturas en la aplicación de Contabilidad."
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields.selection,name:sale.selection__sale_order__invoice_status__to_invoice
|
||||
#: model:ir.model.fields.selection,name:sale.selection__sale_order_line__invoice_status__to_invoice
|
||||
#: model:ir.ui.menu,name:sale.menu_sale_invoicing
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_view_search_inherit_sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_sales_order_line_filter
|
||||
msgid "To Invoice"
|
||||
msgstr "Para facturar"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__amount_total
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__price_total
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__price_total
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_orders
|
||||
#: model_terms:ir.ui.view,arch_db:sale.portal_my_quotations
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_line_tree
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_tree
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_quotation_tree
|
||||
msgid "Total Tax Included"
|
||||
msgstr "Total impuestos incluidos"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__price_unit
|
||||
#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document
|
||||
#: model_terms:ir.ui.view,arch_db:sale.sale_order_portal_content
|
||||
msgid "Unit Price"
|
||||
msgstr "Precio un."
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__product_uom
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__product_uom
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_line_tree
|
||||
msgid "Unit of Measure"
|
||||
msgstr "Unidad de medida"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__amount_untaxed
|
||||
msgid "Untaxed Amount"
|
||||
msgstr "Total neto"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__untaxed_amount_invoiced
|
||||
msgid "Untaxed Amount Invoiced"
|
||||
msgstr "Total neto facturado"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order_line__untaxed_amount_to_invoice
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_report__untaxed_amount_to_invoice
|
||||
msgid "Untaxed Amount To Invoice"
|
||||
msgstr "Total neto por facturar"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,field_description:sale.field_sale_order__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Mensajes del sitio web"
|
||||
|
||||
#. module: sale
|
||||
#: model:ir.model.fields,help:sale.field_sale_order__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Historial de comunicaciones del sitio web"
|
||||
|
||||
#. module: sale
|
||||
#: model_terms:ir.ui.view,arch_db:sale.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:sale.view_order_form
|
||||
msgid "days"
|
||||
msgstr "días"
|
||||
2279
odoo-bringout-oca-ocb-sale/sale/i18n/es_CO.po
Normal file
2279
odoo-bringout-oca-ocb-sale/sale/i18n/es_CO.po
Normal file
File diff suppressed because it is too large
Load diff
1909
odoo-bringout-oca-ocb-sale/sale/i18n/es_CR.po
Normal file
1909
odoo-bringout-oca-ocb-sale/sale/i18n/es_CR.po
Normal file
File diff suppressed because it is too large
Load diff
2200
odoo-bringout-oca-ocb-sale/sale/i18n/es_DO.po
Normal file
2200
odoo-bringout-oca-ocb-sale/sale/i18n/es_DO.po
Normal file
File diff suppressed because it is too large
Load diff
2272
odoo-bringout-oca-ocb-sale/sale/i18n/es_EC.po
Normal file
2272
odoo-bringout-oca-ocb-sale/sale/i18n/es_EC.po
Normal file
File diff suppressed because it is too large
Load diff
5044
odoo-bringout-oca-ocb-sale/sale/i18n/es_MX.po
Normal file
5044
odoo-bringout-oca-ocb-sale/sale/i18n/es_MX.po
Normal file
File diff suppressed because it is too large
Load diff
1965
odoo-bringout-oca-ocb-sale/sale/i18n/es_PE.po
Normal file
1965
odoo-bringout-oca-ocb-sale/sale/i18n/es_PE.po
Normal file
File diff suppressed because it is too large
Load diff
1912
odoo-bringout-oca-ocb-sale/sale/i18n/es_PY.po
Normal file
1912
odoo-bringout-oca-ocb-sale/sale/i18n/es_PY.po
Normal file
File diff suppressed because it is too large
Load diff
1908
odoo-bringout-oca-ocb-sale/sale/i18n/es_VE.po
Normal file
1908
odoo-bringout-oca-ocb-sale/sale/i18n/es_VE.po
Normal file
File diff suppressed because it is too large
Load diff
4785
odoo-bringout-oca-ocb-sale/sale/i18n/et.po
Normal file
4785
odoo-bringout-oca-ocb-sale/sale/i18n/et.po
Normal file
File diff suppressed because it is too large
Load diff
1958
odoo-bringout-oca-ocb-sale/sale/i18n/eu.po
Normal file
1958
odoo-bringout-oca-ocb-sale/sale/i18n/eu.po
Normal file
File diff suppressed because it is too large
Load diff
4754
odoo-bringout-oca-ocb-sale/sale/i18n/fa.po
Normal file
4754
odoo-bringout-oca-ocb-sale/sale/i18n/fa.po
Normal file
File diff suppressed because it is too large
Load diff
5030
odoo-bringout-oca-ocb-sale/sale/i18n/fi.po
Normal file
5030
odoo-bringout-oca-ocb-sale/sale/i18n/fi.po
Normal file
File diff suppressed because it is too large
Load diff
1903
odoo-bringout-oca-ocb-sale/sale/i18n/fo.po
Normal file
1903
odoo-bringout-oca-ocb-sale/sale/i18n/fo.po
Normal file
File diff suppressed because it is too large
Load diff
5050
odoo-bringout-oca-ocb-sale/sale/i18n/fr.po
Normal file
5050
odoo-bringout-oca-ocb-sale/sale/i18n/fr.po
Normal file
File diff suppressed because it is too large
Load diff
1912
odoo-bringout-oca-ocb-sale/sale/i18n/fr_CA.po
Normal file
1912
odoo-bringout-oca-ocb-sale/sale/i18n/fr_CA.po
Normal file
File diff suppressed because it is too large
Load diff
1907
odoo-bringout-oca-ocb-sale/sale/i18n/gl.po
Normal file
1907
odoo-bringout-oca-ocb-sale/sale/i18n/gl.po
Normal file
File diff suppressed because it is too large
Load diff
4545
odoo-bringout-oca-ocb-sale/sale/i18n/gu.po
Normal file
4545
odoo-bringout-oca-ocb-sale/sale/i18n/gu.po
Normal file
File diff suppressed because it is too large
Load diff
4711
odoo-bringout-oca-ocb-sale/sale/i18n/he.po
Normal file
4711
odoo-bringout-oca-ocb-sale/sale/i18n/he.po
Normal file
File diff suppressed because it is too large
Load diff
4558
odoo-bringout-oca-ocb-sale/sale/i18n/hi.po
Normal file
4558
odoo-bringout-oca-ocb-sale/sale/i18n/hi.po
Normal file
File diff suppressed because it is too large
Load diff
4733
odoo-bringout-oca-ocb-sale/sale/i18n/hr.po
Normal file
4733
odoo-bringout-oca-ocb-sale/sale/i18n/hr.po
Normal file
File diff suppressed because it is too large
Load diff
4775
odoo-bringout-oca-ocb-sale/sale/i18n/hu.po
Normal file
4775
odoo-bringout-oca-ocb-sale/sale/i18n/hu.po
Normal file
File diff suppressed because it is too large
Load diff
4521
odoo-bringout-oca-ocb-sale/sale/i18n/hy.po
Normal file
4521
odoo-bringout-oca-ocb-sale/sale/i18n/hy.po
Normal file
File diff suppressed because it is too large
Load diff
4966
odoo-bringout-oca-ocb-sale/sale/i18n/id.po
Normal file
4966
odoo-bringout-oca-ocb-sale/sale/i18n/id.po
Normal file
File diff suppressed because it is too large
Load diff
4566
odoo-bringout-oca-ocb-sale/sale/i18n/is.po
Normal file
4566
odoo-bringout-oca-ocb-sale/sale/i18n/is.po
Normal file
File diff suppressed because it is too large
Load diff
5038
odoo-bringout-oca-ocb-sale/sale/i18n/it.po
Normal file
5038
odoo-bringout-oca-ocb-sale/sale/i18n/it.po
Normal file
File diff suppressed because it is too large
Load diff
4653
odoo-bringout-oca-ocb-sale/sale/i18n/ja.po
Normal file
4653
odoo-bringout-oca-ocb-sale/sale/i18n/ja.po
Normal file
File diff suppressed because it is too large
Load diff
1905
odoo-bringout-oca-ocb-sale/sale/i18n/ka.po
Normal file
1905
odoo-bringout-oca-ocb-sale/sale/i18n/ka.po
Normal file
File diff suppressed because it is too large
Load diff
1947
odoo-bringout-oca-ocb-sale/sale/i18n/kab.po
Normal file
1947
odoo-bringout-oca-ocb-sale/sale/i18n/kab.po
Normal file
File diff suppressed because it is too large
Load diff
4650
odoo-bringout-oca-ocb-sale/sale/i18n/km.po
Normal file
4650
odoo-bringout-oca-ocb-sale/sale/i18n/km.po
Normal file
File diff suppressed because it is too large
Load diff
4693
odoo-bringout-oca-ocb-sale/sale/i18n/ko.po
Normal file
4693
odoo-bringout-oca-ocb-sale/sale/i18n/ko.po
Normal file
File diff suppressed because it is too large
Load diff
4604
odoo-bringout-oca-ocb-sale/sale/i18n/lb.po
Normal file
4604
odoo-bringout-oca-ocb-sale/sale/i18n/lb.po
Normal file
File diff suppressed because it is too large
Load diff
4531
odoo-bringout-oca-ocb-sale/sale/i18n/lo.po
Normal file
4531
odoo-bringout-oca-ocb-sale/sale/i18n/lo.po
Normal file
File diff suppressed because it is too large
Load diff
4759
odoo-bringout-oca-ocb-sale/sale/i18n/lt.po
Normal file
4759
odoo-bringout-oca-ocb-sale/sale/i18n/lt.po
Normal file
File diff suppressed because it is too large
Load diff
4808
odoo-bringout-oca-ocb-sale/sale/i18n/lv.po
Normal file
4808
odoo-bringout-oca-ocb-sale/sale/i18n/lv.po
Normal file
File diff suppressed because it is too large
Load diff
2025
odoo-bringout-oca-ocb-sale/sale/i18n/mk.po
Normal file
2025
odoo-bringout-oca-ocb-sale/sale/i18n/mk.po
Normal file
File diff suppressed because it is too large
Load diff
4537
odoo-bringout-oca-ocb-sale/sale/i18n/ml.po
Normal file
4537
odoo-bringout-oca-ocb-sale/sale/i18n/ml.po
Normal file
File diff suppressed because it is too large
Load diff
4716
odoo-bringout-oca-ocb-sale/sale/i18n/mn.po
Normal file
4716
odoo-bringout-oca-ocb-sale/sale/i18n/mn.po
Normal file
File diff suppressed because it is too large
Load diff
4552
odoo-bringout-oca-ocb-sale/sale/i18n/ms.po
Normal file
4552
odoo-bringout-oca-ocb-sale/sale/i18n/ms.po
Normal file
File diff suppressed because it is too large
Load diff
4763
odoo-bringout-oca-ocb-sale/sale/i18n/nb.po
Normal file
4763
odoo-bringout-oca-ocb-sale/sale/i18n/nb.po
Normal file
File diff suppressed because it is too large
Load diff
5035
odoo-bringout-oca-ocb-sale/sale/i18n/nl.po
Normal file
5035
odoo-bringout-oca-ocb-sale/sale/i18n/nl.po
Normal file
File diff suppressed because it is too large
Load diff
4525
odoo-bringout-oca-ocb-sale/sale/i18n/no.po
Normal file
4525
odoo-bringout-oca-ocb-sale/sale/i18n/no.po
Normal file
File diff suppressed because it is too large
Load diff
5039
odoo-bringout-oca-ocb-sale/sale/i18n/pl.po
Normal file
5039
odoo-bringout-oca-ocb-sale/sale/i18n/pl.po
Normal file
File diff suppressed because it is too large
Load diff
4722
odoo-bringout-oca-ocb-sale/sale/i18n/pt.po
Normal file
4722
odoo-bringout-oca-ocb-sale/sale/i18n/pt.po
Normal file
File diff suppressed because it is too large
Load diff
5031
odoo-bringout-oca-ocb-sale/sale/i18n/pt_BR.po
Normal file
5031
odoo-bringout-oca-ocb-sale/sale/i18n/pt_BR.po
Normal file
File diff suppressed because it is too large
Load diff
4814
odoo-bringout-oca-ocb-sale/sale/i18n/ro.po
Normal file
4814
odoo-bringout-oca-ocb-sale/sale/i18n/ro.po
Normal file
File diff suppressed because it is too large
Load diff
4821
odoo-bringout-oca-ocb-sale/sale/i18n/ru.po
Normal file
4821
odoo-bringout-oca-ocb-sale/sale/i18n/ru.po
Normal file
File diff suppressed because it is too large
Load diff
4534
odoo-bringout-oca-ocb-sale/sale/i18n/sale.pot
Normal file
4534
odoo-bringout-oca-ocb-sale/sale/i18n/sale.pot
Normal file
File diff suppressed because it is too large
Load diff
4738
odoo-bringout-oca-ocb-sale/sale/i18n/sk.po
Normal file
4738
odoo-bringout-oca-ocb-sale/sale/i18n/sk.po
Normal file
File diff suppressed because it is too large
Load diff
4723
odoo-bringout-oca-ocb-sale/sale/i18n/sl.po
Normal file
4723
odoo-bringout-oca-ocb-sale/sale/i18n/sl.po
Normal file
File diff suppressed because it is too large
Load diff
4525
odoo-bringout-oca-ocb-sale/sale/i18n/sq.po
Normal file
4525
odoo-bringout-oca-ocb-sale/sale/i18n/sq.po
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue