Initial commit: OCA Workflow Process packages (456 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:00 +02:00
commit d366e42934
18799 changed files with 1284507 additions and 0 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-purchase-workflow-purchase_work_acceptance"
# or
uv pip install odoo-bringout-oca-purchase-workflow-purchase_work_acceptance"
```

View file

@ -0,0 +1,19 @@
# Models
Detected core models and extensions in purchase_work_acceptance.
```mermaid
classDiagram
class work_acceptance
class work_acceptance_line
class account_move
class purchase_order
class purchase_order_line
class res_config_settings
class stock_picking
class stock_picking_type
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

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

View file

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

View file

@ -0,0 +1,42 @@
# Security
Access control and security definitions in purchase_work_acceptance.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../purchase_work_acceptance/security/ir.model.access.csv)**
- 4 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[security.xml](../purchase_work_acceptance/security/security.xml)**
- 5 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](../purchase_work_acceptance/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
- **[security.xml](../purchase_work_acceptance/security/security.xml)**
- Security groups, categories, and XML-based rules
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

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

View file

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

View file

@ -0,0 +1,8 @@
# Wizards
Transient models exposed as UI wizards in purchase_work_acceptance.
```mermaid
classDiagram
class SelectWorkAcceptanceWizard
```

View file

@ -0,0 +1,158 @@
========================
Purchase Work Acceptance
========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:d645ef4e95a02ac0974e6357ae9334fb019f0d639fa42dd02fe2ae399115ee21
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/purchase-workflow/tree/16.0/purchase_work_acceptance
:alt: OCA/purchase-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_work_acceptance
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module introduces the ability to define a quantity control point on Receipts and Vendor Bills by
Work Acceptance. Only the products and services that have been included in a Work Acceptance can be
received and/or invoiced.
.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_
**Table of contents**
.. contents::
:local:
Configuration
=============
** Show Button Create WA on Purchase Order **
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enable WA on Purchase Order'
** Show WA Reference fields on Receipt **
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enable WA on Goods Receipt'
** Control Receipt by Work Acceptance**
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enforce WA on Goods Receipt'
** Show WA Reference fields on Vendor Bill **
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enable WA on Vendor Bill'
** Control Vendor Bill by Work Acceptance**
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enforce WA on Vendor Bill'
Note:
* You can check 'Enable WA on Goods Receipt' and 'Enable WA on Vendor Bill' after checked 'Enable WA on Purchase Order'
* You can check 'Enforce WA on Goods Receipt' after checked 'Enable WA on Goods Receipt'
* But you can bypass WA on some Picking Operation by setting 'WA not required' on Operation Type
* You can check 'Enforce WA on Vendor Bill' after checked 'Enable WA on Vendor Bill'
Usage
=====
** Usual process of Purchasing with Work Acceptance **
#. Create a New Purchase Order
#. Confirm the Purchase Order
#. Create a new Work Acceptance
#. Accept the Work Acceptance
#. Receive the products following a specific Work Acceptance
#. Create the Vendor Bill following a specific Work Acceptance
** Create a Work Acceptance **
#. Create Purchase Order normally
#. After 'Confirm Order' (Status = 'Purchase'), Click button 'Create WA'
#. Accept order
** Control Receipt by Work Acceptance **
#. After 'Confirm Order' in Purchase Order, a smart button 'Receipt' will appear on the Purchase Order
#. Click 'Receipt' to go to the Transfer
#. Select the Work Acceptance relating to this picking in the field 'WA Reference'.
The quantity done filled automatically for the items that have been already accepted.
** Control Vendor Bill by Work Acceptance **
#. After once the products and/or services have been accepted, Click 'Create Bill'
#. You will be prompted to select a Work Acceptance. Select it and Click 'Post'
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-workflow/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/purchase-workflow/issues/new?body=module:%20purchase_work_acceptance%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Ecosoft
Contributors
~~~~~~~~~~~~
* `Ecosoft <http://ecosoft.co.th>`__:
* Pimolnat Suntian <pimolnats@ecosoft.co.th>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-ps-tubtim| image:: https://github.com/ps-tubtim.png?size=40px
:target: https://github.com/ps-tubtim
:alt: ps-tubtim
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-ps-tubtim|
This module is part of the `OCA/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/16.0/purchase_work_acceptance>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

@ -0,0 +1,28 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Purchase Work Acceptance",
"version": "16.0.1.0.0",
"category": "Purchase Management",
"author": "Ecosoft, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/purchase-workflow",
"depends": ["purchase_stock"],
"data": [
"data/work_acceptance_sequence.xml",
"security/ir.model.access.csv",
"security/security.xml",
"views/account_move_views.xml",
"views/purchase_views.xml",
"views/res_config_settings_views.xml",
"views/stock_picking_views.xml",
"views/stock_picking_type_views.xml",
"views/work_acceptance_views.xml",
"wizard/select_work_acceptance_wizard_views.xml",
"wizard/work_accepted_date_wizard.xml",
],
"maintainers": ["ps-tubtim"],
"installable": True,
"development_status": "Alpha",
}

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="seq_work_acceptance" model="ir.sequence">
<field name="name">Work Acceptance</field>
<field name="code">work.acceptance</field>
<field name="prefix">WA</field>
<field name="padding">5</field>
<field name="company_id" eval="False" />
</record>
</odoo>

View file

@ -0,0 +1,700 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_work_acceptance
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/wizard/select_work_acceptance_wizard.py:0
#, python-format
msgid "%s was already used by some bill"
msgstr "%s je već korišten od strane nekog računa"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid "%s was used in some picking."
msgstr "%s je korišten u nekoj prijemnici."
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Accept"
msgstr "Prihvati"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepte Date"
msgstr "Datum prihvatanja"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__accept
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted"
msgstr "Prihvaćeno"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted By"
msgstr "Prihvatio/la"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__date_accept
msgid "Accepted Date"
msgstr "Datum prihvatanja"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_accepted
msgid "Accepted Qty."
msgstr "Prihvaćena kol."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_warning
msgid "Access warning"
msgstr "Upozorenje pristupa"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "Action Needed"
msgstr "Potrebna akcija"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_ids
msgid "Activities"
msgstr "Aktivnosti"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Dekoracija iznimke aktivnosti"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_state
msgid "Activity State"
msgstr "Status aktivnosti"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Activity Type Icon"
msgstr "Ikona tipa aktivnosti"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_attachment_count
msgid "Attachment Count"
msgstr "Broj priloga"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Cancel"
msgstr "Otkaži"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__cancel
msgid "Cancelled"
msgstr "Otkazan"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__company_id
msgid "Company"
msgstr "Preduzeće"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
msgid "Create Vendor Bill"
msgstr "Kreiraj račun dobavljača"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "Create WA"
msgstr "Kreiraj WA (Potvrdu o radu)"
#. module: purchase_work_acceptance
#: model_terms:ir.actions.act_window,help:purchase_work_acceptance.action_work_acceptance
msgid "Create a new work acceptance"
msgstr "Kreiraj novu potvrdu o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__currency_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__currency_id
msgid "Currency"
msgstr "Valuta"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Customer Portal URL"
msgstr "URL portala kupca"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Define your terms and conditions ..."
msgstr "Definišite vaša pravila i uslove ..."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__name
msgid "Description"
msgstr "Opis"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__draft
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Draft"
msgstr "U pripremi"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_due
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_due
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Due Date"
msgstr "Datum dospijeća"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_in
msgid "Enable WA on Goods Receipt"
msgstr "Omogući WA (Potvrdu o radu) na prijemu robe"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_po
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_po
msgid "Enable WA on Purchase Order"
msgstr "Omogući WA (Potvrdu o radu) na narudžbenici"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_invoice
msgid "Enable WA on Vendor Bill"
msgstr "Omogući WA (Potvrdu o radu) na računu dobavljača"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_in
msgid "Enforce WA on Goods Receipt"
msgstr "Nametni WA (Potvrdu o radu) na prijemu robe"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_invoice
msgid "Enforce WA on Vendor Bill"
msgstr "Nametni WA (Potvrdu o radu) na računu dobavljača"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_follower_ids
msgid "Followers"
msgstr "Pratioci"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_partner_ids
msgid "Followers (Partners)"
msgstr "Pratioci (Partneri)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Font awesome ikona npr. fa-tasks"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Group By"
msgstr "Grupiši po"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__has_message
msgid "Has Message"
msgstr "Ima poruku"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__id
msgid "ID"
msgstr "ID"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon"
msgstr "Ikona"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Ikona za prikaz iznimki."
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "If checked, new messages require your attention."
msgstr "Ako je zakačeno, nove poruke će zahtjevati vašu pažnju"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Ako je označeno neke poruke mogu imati grešku u dostavi."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__invoice_ref
msgid "Invoice Reference"
msgstr "Referenca Fakture"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_is_follower
msgid "Is Follower"
msgstr "Pratilac"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_account_move
msgid "Journal Entry"
msgstr "Žurnal"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_main_attachment_id
msgid "Main Attachment"
msgstr "Glavna zakačka"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "Message Delivery error"
msgstr "Greška pri isporuci poruke"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_ids
msgid "Messages"
msgstr "Poruke"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Rok za moju aktivnost"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "My Work Acceptance"
msgstr "Moja potvrda o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__name
msgid "Name"
msgstr "Naziv:"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Krajnji rok za sljedeću aktivnost"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_summary
msgid "Next Activity Summary"
msgstr "Pregled sljedeće aktivnosti"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_id
msgid "Next Activity Type"
msgstr "Tip sljedeće aktivnosti"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__notes
msgid "Notes"
msgstr "Zabilješke"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of Actions"
msgstr "Broj akcija"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of errors"
msgstr "Broj grešaka"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of messages requiring action"
msgstr "Broj poruka koje zahtijevaju aktivnost"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Broj poruka sa greškama pri isporuci"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#, python-format
msgid "Operation not supported"
msgstr "Operacija nije podržana"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__partner_id
msgid "Partner"
msgstr "Partner"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking_type
msgid "Picking Type"
msgstr "Vrsta dokumenta"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Portal Access URL"
msgstr "URL za pristup portalu"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr "Postavke grupisanja nabavke"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__product_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_id
msgid "Product"
msgstr "Artikal"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_uom
msgid "Product Unit of Measure"
msgstr "JMJ artikla"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Products"
msgstr "Artikli"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__purchase_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Purchase Order"
msgstr "Nalog za nabavu"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order_line
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__purchase_line_id
msgid "Purchase Order Line"
msgstr "Stavka naloga za nabavu"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_qty
msgid "Quantity"
msgstr "Količina"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Receive Date"
msgstr "Datum prijema"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_receive
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_receive
msgid "Received Date"
msgstr "Datum prijema"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_tree
msgid "Reference"
msgstr "Referenca"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__require_wa
msgid "Require Wa"
msgstr "Zahtijevaj WA (Potvrdu o radu)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__responsible_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__responsible_id
msgid "Responsible Person"
msgstr "Odgovorna osoba"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_user_id
msgid "Responsible User"
msgstr "Odgovorni korisnik"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_token
msgid "Security Token"
msgstr "Sigurnosni token"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid "Select Accept Date"
msgstr "Odaberi datum prihvatanja"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Select Accepted Date"
msgstr "Odaberi prihvaćeni datum"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#, python-format
msgid "Select Work Acceptance"
msgstr "Odaberi potvrdu o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_select_work_acceptance_wizard
msgid "Select Work Acceptance Wizard"
msgstr "Čarobnjak za odabir potvrde o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_accepted_date_wizard
msgid "Select work accepted date"
msgstr "Odaberi datum prihvatanja rada"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Set to draft"
msgstr "Postavi na nacrt"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__state
msgid "Status"
msgstr "Status"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_subtotal
msgid "Subtotal"
msgstr "Podukupno"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "To Accept"
msgstr "Za prihvatanje"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_to_accept
msgid "To Accept Qty."
msgstr "Kol. za prihvatanje"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_payment__wa_id
msgid ""
"To control quantity and unit price of the vendor bill, to be according to "
"the quantity and unit price of the work acceptance."
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Total"
msgstr "Ukupno"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking
msgid "Transfer"
msgstr "Prijenos"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Vrsta aktivnosti iznimke na zapisu."
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid ""
"Unable set to draft this work acceptance. You must first cancel the related "
"receipts."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_unit
msgid "Unit Price"
msgstr "Cijena"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__partner_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Vendor"
msgstr "Dobavljač"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "WA"
msgstr "WA (Potvrda o radu)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_accepted
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Accepted"
msgstr "WA (Potvrda o radu) prihvaćena"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_line_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__wa_line_ids
msgid "WA Lines"
msgstr "Stavke WA (Potvrde o radu)"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Not Accepted"
msgstr "WA (Potvrda o radu) nije prihvaćena"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__wa_id
msgid "WA Reference"
msgstr "Referenca WA (Potvrde o radu)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_count
msgid "WA count"
msgstr "Broj WA (Potvrda o radu)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid "WA not required"
msgstr "WA (Potvrda o radu) nije potrebna"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_ids
msgid "Wa"
msgstr "Wa (Potvrda o radu)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website Messages"
msgstr "Poruke sa website-a"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website communication history"
msgstr "Povijest komunikacije Web stranice"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid ""
"When 'Enforce WA on Goods Receipt' is set, this option type can by pass it"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.actions.act_window,name:purchase_work_acceptance.action_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_id
#: model:ir.ui.menu,name:purchase_work_acceptance.menu_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.res_config_settings_view_form_purchase
msgid "Work Acceptance"
msgstr "Potvrda o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance_line
msgid "Work Acceptance Line"
msgstr "Stavka potvrde o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__wa_line_ids
msgid "Work Acceptance Lines"
msgstr "Stavke potvrde o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__user_id
msgid "Work Acceptance Representative"
msgstr "Predstavnik za potvrdu o izvršenom radu"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_ids
msgid "Work Acceptances"
msgstr "Potvrde o izvršenom radu"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/account_move.py:0
#, python-format
msgid "You cannot validate a bill if Quantity not equal accepted quantity"
msgstr "Ne možete validirati račun ako količina nije jednaka prihvaćenoj količini"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid ""
"You cannot validate a transfer if done quantity not equal accepted quantity"
msgstr ""

View file

@ -0,0 +1,732 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_work_acceptance
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-04-18 08:37+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/wizard/select_work_acceptance_wizard.py:0
#, python-format
msgid "%s was already used by some bill"
msgstr "%s ya fue utilizado por alguna factura"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid "%s was used in some picking."
msgstr "%s se utilizó en algún albarán."
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Accept"
msgstr "Aceptar"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepte Date"
msgstr "Aceptar Fecha"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__accept
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted"
msgstr "Aceptado"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted By"
msgstr "Aceptado por"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__date_accept
msgid "Accepted Date"
msgstr "Fecha Aceptada"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_accepted
msgid "Accepted Qty."
msgstr "Cantd Aceptada."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_warning
msgid "Access warning"
msgstr "Aviso de Acceso"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "Action Needed"
msgstr "Necesita Acción"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_ids
msgid "Activities"
msgstr "Actividades"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Decoración de Actividad de Excepción"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_state
msgid "Activity State"
msgstr "Estado de la Actividad"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Activity Type Icon"
msgstr "Icono para el Tipo de Actividad"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_attachment_count
msgid "Attachment Count"
msgstr "Conteo de Archivos Adjuntos"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Cancel"
msgstr "Cancelar"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__cancel
msgid "Cancelled"
msgstr "Cancelado"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__company_id
msgid "Company"
msgstr "Companía"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
msgid "Create Vendor Bill"
msgstr "Crear Factura de Proveedor"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "Create WA"
msgstr "Crear WA"
#. module: purchase_work_acceptance
#: model_terms:ir.actions.act_window,help:purchase_work_acceptance.action_work_acceptance
msgid "Create a new work acceptance"
msgstr "Crear una nueva aceptación de trabajo"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_date
msgid "Created on"
msgstr "Creado el"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__currency_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__currency_id
msgid "Currency"
msgstr "Divisa"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Customer Portal URL"
msgstr "URL del Portal de Cliente"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Define your terms and conditions ..."
msgstr "Defina sus términos y condiciones ..."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__name
msgid "Description"
msgstr "Descripción"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__display_name
msgid "Display Name"
msgstr "Mostrar Nombre"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__draft
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Draft"
msgstr "Borrador"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_due
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_due
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Due Date"
msgstr "Fecha de Vencimiento"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_in
msgid "Enable WA on Goods Receipt"
msgstr "Activar WA en la Recepción de Mercancías"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_po
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_po
msgid "Enable WA on Purchase Order"
msgstr "Activar WA en la Orden de Compra"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_invoice
msgid "Enable WA on Vendor Bill"
msgstr "Activar WA en la Factura del Vendedor"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_in
msgid "Enforce WA on Goods Receipt"
msgstr "Aplicar la WA en la Entrada de Mercancías"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_invoice
msgid "Enforce WA on Vendor Bill"
msgstr "Aplicar WA en la Factura del Vendedor"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_follower_ids
msgid "Followers"
msgstr "Seguidores/as"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_partner_ids
msgid "Followers (Partners)"
msgstr "Seguidores (Socios)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Icono de fuente impresionante, por ejemplo fa-tasks"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Group By"
msgstr "Agrupar Por"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__has_message
msgid "Has Message"
msgstr "Tiene Mensaje"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__id
msgid "ID"
msgstr "ID (identificación)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon"
msgstr "Icono"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Icono para indicar una actividad por excepción."
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "If checked, new messages require your attention."
msgstr "Si está marcado, nuevos mensajes requieren de su atención."
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Si está marcada, algunos mensajes tienen error de entrega."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__invoice_ref
msgid "Invoice Reference"
msgstr "Referencia de Factura"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_is_follower
msgid "Is Follower"
msgstr "Es Seguidor/a"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_account_move
msgid "Journal Entry"
msgstr "Entrada Diaria"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard____last_update
msgid "Last Modified on"
msgstr "Última Modificación el"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_uid
msgid "Last Updated by"
msgstr "Última Actualización por"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_date
msgid "Last Updated on"
msgstr "Última Actualización el"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_main_attachment_id
msgid "Main Attachment"
msgstr "Archivo Adjunto Principal"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "Message Delivery error"
msgstr "Error en Entrega de Mensaje"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_ids
msgid "Messages"
msgstr "Mensajes"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Fecha Límite de Mi Actividad"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "My Work Acceptance"
msgstr "Aceptación de Mi Trabajo"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__name
msgid "Name"
msgstr "Nombre"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Fecha Límite para la siguiente Actividad"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_summary
msgid "Next Activity Summary"
msgstr "Resumen de la Siguiente Actividad"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_id
msgid "Next Activity Type"
msgstr "Tipo Siguiente Actividad"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__notes
msgid "Notes"
msgstr "Notas"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of Actions"
msgstr "Número de Acciones"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of errors"
msgstr "Número de errores"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of messages requiring action"
msgstr "Número de mensajes que requieren una acción"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Número de mensajes con error de entrega"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#, python-format
msgid "Operation not supported"
msgstr "Operación no permitida"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__partner_id
msgid "Partner"
msgstr "Socio"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking_type
msgid "Picking Type"
msgstr "Tipo de Recogida"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Portal Access URL"
msgstr "URL Acceso Portal"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr "Configuración de la agrupación de compras"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__product_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_id
msgid "Product"
msgstr "Producto"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_uom
msgid "Product Unit of Measure"
msgstr "Unidad de Medida del Producto"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Products"
msgstr "Productos"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__purchase_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Purchase Order"
msgstr "Orden de Compra"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order_line
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__purchase_line_id
msgid "Purchase Order Line"
msgstr "Línea de Orden de Compra"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_qty
msgid "Quantity"
msgstr "Cantidad"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Receive Date"
msgstr "Fecha de Recepción"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_receive
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_receive
msgid "Received Date"
msgstr "Recibido Fecha"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_tree
msgid "Reference"
msgstr "Referencia"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__require_wa
msgid "Require Wa"
msgstr "Requerir Wa"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__responsible_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__responsible_id
msgid "Responsible Person"
msgstr "Persona Responsable"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_user_id
msgid "Responsible User"
msgstr "Usuario Responsable"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_token
msgid "Security Token"
msgstr "Ficha de Seguridad"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid "Select Accept Date"
msgstr "Seleccionar Fecha de Aceptación"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Select Accepted Date"
msgstr "Seleccionar Fecha Aceptada"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#, python-format
msgid "Select Work Acceptance"
msgstr "Seleccione Aceptación del Trabajo"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_select_work_acceptance_wizard
msgid "Select Work Acceptance Wizard"
msgstr "Seleccione Asistente de Aceptación del Trabajo"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_accepted_date_wizard
msgid "Select work accepted date"
msgstr "Seleccione la fecha de aceptación del trabajo"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Set to draft"
msgstr "Establecer a borrador"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__state
msgid "Status"
msgstr "Situación"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"Estado basado en actividades\n"
"Atrasado: La fecha de vencimiento ya ha pasado\n"
"Hoy: La fecha de la actividad es hoy\n"
"Planeado: Actividades futuras."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_subtotal
msgid "Subtotal"
msgstr "Subtotal"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "To Accept"
msgstr "Para Aceptar"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_to_accept
msgid "To Accept Qty."
msgstr "Ctd para Aceptar."
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_payment__wa_id
msgid ""
"To control quantity and unit price of the vendor bill, to be according to "
"the quantity and unit price of the work acceptance."
msgstr ""
"Controlar la cantidad y el precio unitario de la factura del proveedor, para "
"que estén de acuerdo con la cantidad y el precio unitario de la aceptación "
"del trabajo."
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Total"
msgstr "Total"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking
msgid "Transfer"
msgstr "Transferencia"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Tipo (o clase) de actividad excepcional registrada."
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid ""
"Unable set to draft this work acceptance. You must first cancel the related "
"receipts."
msgstr ""
"No se puede redactar esta aceptación de trabajo. Primero debe cancelar los "
"recibos relacionados."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_unit
msgid "Unit Price"
msgstr "Precio Unitario"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__partner_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Vendor"
msgstr "Vendedor"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "WA"
msgstr "WA"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_accepted
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Accepted"
msgstr "WA Aceptado"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_line_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__wa_line_ids
msgid "WA Lines"
msgstr "Líneas WA"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Not Accepted"
msgstr "WA No Aceptado"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__wa_id
msgid "WA Reference"
msgstr "Referencia WA"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_count
msgid "WA count"
msgstr "Conteo WA"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid "WA not required"
msgstr "WA no requerido"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_ids
msgid "Wa"
msgstr "Wa"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website Messages"
msgstr "Mensajes del Sitio Web"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website communication history"
msgstr "Historial de la comunicación en el sitio web"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid ""
"When 'Enforce WA on Goods Receipt' is set, this option type can by pass it"
msgstr ""
"Cuando se establece \"Aplicar WA en la entrada de mercancías\", este tipo de "
"opción puede pasarla por alto"
#. module: purchase_work_acceptance
#: model:ir.actions.act_window,name:purchase_work_acceptance.action_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_id
#: model:ir.ui.menu,name:purchase_work_acceptance.menu_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.res_config_settings_view_form_purchase
msgid "Work Acceptance"
msgstr "Aceptación de Trabajo"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance_line
msgid "Work Acceptance Line"
msgstr "Línea de Aceptación de Trabajo"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__wa_line_ids
msgid "Work Acceptance Lines"
msgstr "Líneas de Aceptación de Trabajo"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__user_id
msgid "Work Acceptance Representative"
msgstr "Representante de Aceptación de Trabajo"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_ids
msgid "Work Acceptances"
msgstr "Aceptaciones de Trabajo"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/account_move.py:0
#, python-format
msgid "You cannot validate a bill if Quantity not equal accepted quantity"
msgstr ""
"No se puede validar una factura si Cantidad no es igual a cantidad aceptada"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid ""
"You cannot validate a transfer if done quantity not equal accepted quantity"
msgstr ""
"No se puede validar una transferencia si la cantidad realizada no es igual a "
"la cantidad aceptada"
#~ msgid "Number of messages which requires an action"
#~ msgstr "Número de mensajes que requieren una acción"
#~ msgid "Number of unread messages"
#~ msgstr "Número de mensajes no leídos"
#~ msgid "Unread Messages"
#~ msgstr "Mensajes no Leídos"
#~ msgid "Unread Messages Counter"
#~ msgstr "Contador de Mensajes no Leídos"
#~ msgid "SMS Delivery error"
#~ msgstr "Error en la entrega de SMS"

View file

@ -0,0 +1,717 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_work_acceptance
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-03-13 12:38+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/wizard/select_work_acceptance_wizard.py:0
#, python-format
msgid "%s was already used by some bill"
msgstr "%s è stato già utilizzato da qualche conto"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid "%s was used in some picking."
msgstr "%s è utilizzato in qualche prelievo."
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Accept"
msgstr "Accetta"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepte Date"
msgstr "Data accettazione"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__accept
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted"
msgstr "Accettata"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted By"
msgstr "Accettato da"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__date_accept
msgid "Accepted Date"
msgstr "Data accettata"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_accepted
msgid "Accepted Qty."
msgstr "Q.tà accettata"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_warning
msgid "Access warning"
msgstr "Avviso accesso"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "Action Needed"
msgstr "Azione richiesta"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_ids
msgid "Activities"
msgstr "Attività"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Decorazione eccezione attività"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_state
msgid "Activity State"
msgstr "Stato attività"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Activity Type Icon"
msgstr "Icona tipo attività"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_attachment_count
msgid "Attachment Count"
msgstr "Conteggio allegati"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Cancel"
msgstr "Annulla"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__cancel
msgid "Cancelled"
msgstr "Annullato"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__company_id
msgid "Company"
msgstr "Azienda"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
msgid "Create Vendor Bill"
msgstr "Crea una fattura fornitore"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "Create WA"
msgstr "Crea approvazione lavoro"
#. module: purchase_work_acceptance
#: model_terms:ir.actions.act_window,help:purchase_work_acceptance.action_work_acceptance
msgid "Create a new work acceptance"
msgstr "Crea una nuova accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_date
msgid "Created on"
msgstr "Creato il"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__currency_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__currency_id
msgid "Currency"
msgstr "Valuta"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Customer Portal URL"
msgstr "URL portale cliente"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Define your terms and conditions ..."
msgstr "Definire i termini e condizioni ..."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__name
msgid "Description"
msgstr "Descrizione"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__draft
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Draft"
msgstr "Bozza"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_due
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_due
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Due Date"
msgstr "Scadenza"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_in
msgid "Enable WA on Goods Receipt"
msgstr "Abilitare approvazione lavoro nella distinta merce"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_po
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_po
msgid "Enable WA on Purchase Order"
msgstr "Abilitare approvazione lavoro nell'ordine di acquisto"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_invoice
msgid "Enable WA on Vendor Bill"
msgstr "Abilitare accettazione lavoro nella ricevuta venditore"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_in
msgid "Enforce WA on Goods Receipt"
msgstr "Forza accettazione lavoro nella distinta merce"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_invoice
msgid "Enforce WA on Vendor Bill"
msgstr "Forza accettazione lavoro nella ricevuta venditore"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_follower_ids
msgid "Followers"
msgstr "Seguito da"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_partner_ids
msgid "Followers (Partners)"
msgstr "Seguito da (partner)"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Icona Font Awesome es. fa-tasks"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Group By"
msgstr "Raggruppa per"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__has_message
msgid "Has Message"
msgstr "Ha un messaggio"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__id
msgid "ID"
msgstr "ID"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon"
msgstr "Icona"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Icona per indicare un'attività eccezione."
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "If checked, new messages require your attention."
msgstr "Se selezionata, nuovi messaggi richiedono attenzione."
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__invoice_ref
msgid "Invoice Reference"
msgstr "Riferimento fattura"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_is_follower
msgid "Is Follower"
msgstr "Segue"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_account_move
msgid "Journal Entry"
msgstr "Registrazione contabile"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_main_attachment_id
msgid "Main Attachment"
msgstr "Allegato principale"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "Message Delivery error"
msgstr "Errore di consegna messaggio"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_ids
msgid "Messages"
msgstr "Messaggi"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Scadenza mia attività"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "My Work Acceptance"
msgstr "Mia approvazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__name
msgid "Name"
msgstr "Nome"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Scadenza prossima attività"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_summary
msgid "Next Activity Summary"
msgstr "Riepilogo prossima attività"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_id
msgid "Next Activity Type"
msgstr "Tipo prossima attività"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__notes
msgid "Notes"
msgstr "Note"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of Actions"
msgstr "Numero di azioni"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of errors"
msgstr "Numero di errori"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of messages requiring action"
msgstr "Numero di messaggi che richiedono un'azione"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Numero di messaggi con errore di consegna"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#, python-format
msgid "Operation not supported"
msgstr "Operazione non supportata"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__partner_id
msgid "Partner"
msgstr "Partner"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking_type
msgid "Picking Type"
msgstr "Tipo prelievo"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Portal Access URL"
msgstr "URL accesso portale"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr "Impostazioni raggruppamento approvvigionamento acquisti"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__product_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_id
msgid "Product"
msgstr "Prodotto"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_uom
msgid "Product Unit of Measure"
msgstr "Unità di misura del prodotto"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Products"
msgstr "Prodotti"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__purchase_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Purchase Order"
msgstr "Ordine di acquisto"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order_line
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__purchase_line_id
msgid "Purchase Order Line"
msgstr "Riga ordine di acquisto"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_qty
msgid "Quantity"
msgstr "Quantità"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Receive Date"
msgstr "Data ricezione"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_receive
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_receive
msgid "Received Date"
msgstr "Data ricezione"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_tree
msgid "Reference"
msgstr "Riferimento"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__require_wa
msgid "Require Wa"
msgstr "Richiede accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__responsible_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__responsible_id
msgid "Responsible Person"
msgstr "Persona responsabile"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_user_id
msgid "Responsible User"
msgstr "Utente responsabile"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_token
msgid "Security Token"
msgstr "Token di sicurezza"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid "Select Accept Date"
msgstr "Selezionare data accettazione"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Select Accepted Date"
msgstr "Selezionare data accettazione"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#, python-format
msgid "Select Work Acceptance"
msgstr "Selezionare accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_select_work_acceptance_wizard
msgid "Select Work Acceptance Wizard"
msgstr "Procedura guidata selezione accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_accepted_date_wizard
msgid "Select work accepted date"
msgstr "Selezionare data accettazione lavoro"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Set to draft"
msgstr "Imposta a bozza"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__state
msgid "Status"
msgstr "Stato"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"Stato in base alle attività\n"
"Scaduto: la data richiesta è trascorsa\n"
"Oggi: la data attività è oggi\n"
"Pianificato: attività future."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_subtotal
msgid "Subtotal"
msgstr "Subtotale"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "To Accept"
msgstr "Da approvare"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_to_accept
msgid "To Accept Qty."
msgstr "Q.tà da approvare"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_payment__wa_id
msgid ""
"To control quantity and unit price of the vendor bill, to be according to "
"the quantity and unit price of the work acceptance."
msgstr ""
"Quantità da controllare e prezzo unitario del conto vendtore, da allineare "
"alla quantità e prezzo unitario dell'accettazione lavoro."
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Total"
msgstr "Totale"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking
msgid "Transfer"
msgstr "Trasferimento"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Tipo di attività eccezione sul record."
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid ""
"Unable set to draft this work acceptance. You must first cancel the related "
"receipts."
msgstr ""
"Impossibile impostare a bozza questa accettazione lavoro. Bisogna prima "
"annullare la ricevuta relativa."
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_unit
msgid "Unit Price"
msgstr "Prezzo unitario"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__partner_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Vendor"
msgstr "Fornitore"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "WA"
msgstr "Approvazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_accepted
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Accepted"
msgstr "Approvazione lavoro accettata"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_line_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__wa_line_ids
msgid "WA Lines"
msgstr "Righe approvazione lavoro"
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Not Accepted"
msgstr "Accettazione lavoro non approvata"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__wa_id
msgid "WA Reference"
msgstr "Riferimento approvazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_count
msgid "WA count"
msgstr "Conteggio approvazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid "WA not required"
msgstr "Accettazione lavoro non richiesta"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_ids
msgid "Wa"
msgstr "Accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website Messages"
msgstr "Messaggi sito web"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website communication history"
msgstr "Cronologia comunicazioni sito web"
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid ""
"When 'Enforce WA on Goods Receipt' is set, this option type can by pass it"
msgstr ""
"Quando è impostato 'Forza accettazione lavoro in distinta merce', questo "
"tipo opzione la può baypassare"
#. module: purchase_work_acceptance
#: model:ir.actions.act_window,name:purchase_work_acceptance.action_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_id
#: model:ir.ui.menu,name:purchase_work_acceptance.menu_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.res_config_settings_view_form_purchase
msgid "Work Acceptance"
msgstr "Approvazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance_line
msgid "Work Acceptance Line"
msgstr "Riga accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__wa_line_ids
msgid "Work Acceptance Lines"
msgstr "Righe accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__user_id
msgid "Work Acceptance Representative"
msgstr "Rappresentante accettazione lavoro"
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_ids
msgid "Work Acceptances"
msgstr "Approvazioni lavoro"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/account_move.py:0
#, python-format
msgid "You cannot validate a bill if Quantity not equal accepted quantity"
msgstr ""
"Non si può validare una ricevuta se la quantità è diversa dalla quantità "
"accettata"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid ""
"You cannot validate a transfer if done quantity not equal accepted quantity"
msgstr ""
"Non si può validare un trasferimento se la quantità è diversa dalla quantità "
"accettata"

View file

@ -0,0 +1,700 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_work_acceptance
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/wizard/select_work_acceptance_wizard.py:0
#, python-format
msgid "%s was already used by some bill"
msgstr ""
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid "%s was used in some picking."
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Accept"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepte Date"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__accept
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Accepted By"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_accept
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__date_accept
msgid "Accepted Date"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_accepted
msgid "Accepted Qty."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_warning
msgid "Access warning"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "Action Needed"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_ids
msgid "Activities"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_state
msgid "Activity State"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Activity Type Icon"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Cancel"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__cancel
msgid "Cancelled"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__company_id
msgid "Company"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
msgid "Create Vendor Bill"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "Create WA"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.actions.act_window,help:purchase_work_acceptance.action_work_acceptance
msgid "Create a new work acceptance"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_uid
msgid "Created by"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__create_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__create_date
msgid "Created on"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__currency_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__currency_id
msgid "Currency"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Customer Portal URL"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Define your terms and conditions ..."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__name
msgid "Description"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__display_name
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__display_name
msgid "Display Name"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields.selection,name:purchase_work_acceptance.selection__work_acceptance__state__draft
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Draft"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_due
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_due
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Due Date"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_in
msgid "Enable WA on Goods Receipt"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_po
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_po
msgid "Enable WA on Purchase Order"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enable_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enable_wa_on_invoice
msgid "Enable WA on Vendor Bill"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_in
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_in
msgid "Enforce WA on Goods Receipt"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_res_config_settings__group_enforce_wa_on_invoice
#: model:res.groups,name:purchase_work_acceptance.group_enforce_wa_on_invoice
msgid "Enforce WA on Vendor Bill"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_follower_ids
msgid "Followers"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Group By"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__has_message
msgid "Has Message"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__id
msgid "ID"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__invoice_ref
msgid "Invoice Reference"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line____last_update
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard____last_update
msgid "Last Modified on"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_uid
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__write_date
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_accepted_date_wizard__write_date
msgid "Last Updated on"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_ids
msgid "Messages"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "My Work Acceptance"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__name
msgid "Name"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__notes
msgid "Notes"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_needaction_counter
msgid "Number of messages requiring action"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#, python-format
msgid "Operation not supported"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__partner_id
msgid "Partner"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking_type
msgid "Picking Type"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_url
msgid "Portal Access URL"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_res_config_settings
msgid "Procurement purchase grouping settings"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__product_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_id
msgid "Product"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_uom
msgid "Product Unit of Measure"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Products"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__purchase_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Purchase Order"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_purchase_order_line
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__purchase_line_id
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__product_qty
msgid "Quantity"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Receive Date"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__date_receive
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__date_receive
msgid "Received Date"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_tree
msgid "Reference"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__require_wa
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__require_wa
msgid "Require Wa"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__responsible_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__responsible_id
msgid "Responsible Person"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__access_token
msgid "Security Token"
msgstr ""
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid "Select Accept Date"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_accepted_date_wizard
msgid "Select Accepted Date"
msgstr ""
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/purchase.py:0
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_select_work_acceptance_wizard
#, python-format
msgid "Select Work Acceptance"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_select_work_acceptance_wizard
msgid "Select Work Acceptance Wizard"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_accepted_date_wizard
msgid "Select work accepted date"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Set to draft"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__state
msgid "Status"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_subtotal
msgid "Subtotal"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "To Accept"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__qty_to_accept
msgid "To Accept Qty."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,help:purchase_work_acceptance.field_account_payment__wa_id
msgid ""
"To control quantity and unit price of the vendor bill, to be according to "
"the quantity and unit price of the work acceptance."
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_form
msgid "Total"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_stock_picking
msgid "Transfer"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr ""
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/work_acceptance.py:0
#, python-format
msgid ""
"Unable set to draft this work acceptance. You must first cancel the related "
"receipts."
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__price_unit
msgid "Unit Price"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__partner_id
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_work_acceptance_search
msgid "Vendor"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_form_inherit
msgid "WA"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_accepted
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Accepted"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_line_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order_line__wa_line_ids
msgid "WA Lines"
msgstr ""
#. module: purchase_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.purchase_order_view_search
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.view_purchase_order_filter
msgid "WA Not Accepted"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_bank_statement_line__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_move__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_account_payment__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_id
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance_line__wa_id
msgid "WA Reference"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_count
msgid "WA count"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid "WA not required"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_ids
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_stock_picking__wa_ids
msgid "Wa"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website Messages"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_work_acceptance__website_message_ids
msgid "Website communication history"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,help:purchase_work_acceptance.field_stock_picking_type__bypass_wa
msgid ""
"When 'Enforce WA on Goods Receipt' is set, this option type can by pass it"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.actions.act_window,name:purchase_work_acceptance.action_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_select_work_acceptance_wizard__wa_id
#: model:ir.ui.menu,name:purchase_work_acceptance.menu_work_acceptance
#: model_terms:ir.ui.view,arch_db:purchase_work_acceptance.res_config_settings_view_form_purchase
msgid "Work Acceptance"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model,name:purchase_work_acceptance.model_work_acceptance_line
msgid "Work Acceptance Line"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__wa_line_ids
msgid "Work Acceptance Lines"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_work_acceptance__user_id
msgid "Work Acceptance Representative"
msgstr ""
#. module: purchase_work_acceptance
#: model:ir.model.fields,field_description:purchase_work_acceptance.field_purchase_order__wa_ids
msgid "Work Acceptances"
msgstr ""
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/account_move.py:0
#, python-format
msgid "You cannot validate a bill if Quantity not equal accepted quantity"
msgstr ""
#. module: purchase_work_acceptance
#. odoo-python
#: code:addons/purchase_work_acceptance/models/stock_picking.py:0
#, python-format
msgid ""
"You cannot validate a transfer if done quantity not equal accepted quantity"
msgstr ""

View file

@ -0,0 +1,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import account_move
from . import purchase
from . import res_config_settings
from . import stock_picking
from . import work_acceptance

View file

@ -0,0 +1,76 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class AccountMove(models.Model):
_inherit = "account.move"
require_wa = fields.Boolean(compute="_compute_require_wa")
wa_id = fields.Many2one(
comodel_name="work.acceptance",
string="WA Reference",
copy=False,
readonly=True,
domain=lambda self: [
("state", "=", "accept"),
("purchase_id", "=", self._context.get("active_id")),
],
help="To control quantity and unit price of the vendor bill, to be "
"according to the quantity and unit price of the work acceptance.",
)
def _compute_require_wa(self):
for rec in self:
enforce_wa = self.env.user.has_group(
"purchase_work_acceptance.group_enforce_wa_on_invoice"
)
rec.require_wa = self.wa_id and enforce_wa
def action_post(self):
for rec in self:
if rec.wa_id:
wa_line = {}
for line in rec.wa_id.wa_line_ids:
qty = line.product_uom._compute_quantity(
line.product_qty, line.product_id.uom_id
)
if qty > 0.0:
if line.product_id.id in wa_line.keys():
qty_old = wa_line[line.product_id.id]
wa_line[line.product_id.id] = qty_old + qty
else:
wa_line[line.product_id.id] = qty
invoice_line = {}
for line in rec.invoice_line_ids:
qty = line.product_uom_id._compute_quantity(
line.quantity, line.product_id.uom_id
)
if qty > 0.0:
if line.product_id.id in invoice_line.keys():
qty_old = invoice_line[line.product_id.id]
invoice_line[line.product_id.id] = qty_old + qty
else:
invoice_line[line.product_id.id] = qty
if wa_line != invoice_line:
raise ValidationError(
_(
"You cannot validate a bill if Quantity not equal "
"accepted quantity"
)
)
return super().action_post()
@api.model_create_multi
def create(self, vals_list):
if self.env.context.get("wa_id"):
for vals in vals_list:
# When use WA, filter for line with qty != 0, good for deposit too.
lines = vals.get("invoice_line_ids", [])
lines = filter(
lambda l: len(l) == 3 and l[2].get("quantity") != 0, lines
)
vals["invoice_line_ids"] = list(lines)
return super().create(vals_list)

View file

@ -0,0 +1,193 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import Command, _, api, fields, models
from odoo.exceptions import UserError
class PurchaseOrder(models.Model):
_inherit = "purchase.order"
wa_count = fields.Integer(compute="_compute_wa_ids", string="WA count", default=0)
wa_ids = fields.One2many(
comodel_name="work.acceptance",
compute="_compute_wa_ids",
string="Work Acceptances",
)
wa_line_ids = fields.One2many(
comodel_name="work.acceptance.line",
inverse_name="purchase_line_id",
string="WA Lines",
readonly=True,
)
wa_accepted = fields.Boolean(
string="WA Accepted",
compute="_compute_wa_accepted",
search="_search_wa_accepted",
)
@api.depends("wa_line_ids")
def _compute_wa_ids(self):
for order in self:
order.wa_ids = (
order.mapped("order_line").mapped("wa_line_ids").mapped("wa_id")
)
order.wa_count = len(order.wa_ids)
def action_view_wa(self):
self.ensure_one()
act = self.env.ref("purchase_work_acceptance.action_work_acceptance")
result = act.sudo().read()[0]
create_wa = self.env.context.get("create_wa", False)
result["context"] = {
"default_purchase_id": self.id,
"default_partner_id": self.partner_id.id,
"default_company_id": self.company_id.id,
"default_currency_id": self.currency_id.id,
"default_date_due": self.date_planned,
"default_wa_line_ids": [
Command.create(
{
"purchase_line_id": line.id,
"name": line.name,
"product_uom": line.product_uom.id,
"product_id": line.product_id.id,
"price_unit": line.price_unit,
"product_qty": line._get_product_qty(),
}
)
for line in self.order_line
if line._get_product_qty() != 0
],
}
if len(self.wa_ids) > 1 and not create_wa:
result["domain"] = "[('id', 'in', " + str(self.wa_ids.ids) + ")]"
else:
res = self.env.ref(
"purchase_work_acceptance.view_work_acceptance_form", False
)
result["views"] = [(res and res.id or False, "form")]
if not create_wa:
result["res_id"] = self.wa_ids.id or False
return result
def action_create_invoice(self):
enable_wa = self.env.user.has_group(
"purchase_work_acceptance.group_enable_wa_on_invoice"
)
ctx = self.env.context.copy()
if enable_wa and ctx.get("create_bill"):
wizard = self.env.ref(
"purchase_work_acceptance.view_select_work_acceptance_wizard"
)
return {
"name": _("Select Work Acceptance"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "select.work.acceptance.wizard",
"views": [(wizard.id, "form")],
"view_id": wizard.id,
"target": "new",
}
res = super().action_create_invoice()
# Set 'ref' to WA
if (
ctx.get("wa_id")
and res.get("res_model") == "account.move"
and res.get("res_id")
):
wa = self.env["work.acceptance"].browse(ctx["wa_id"])
invoice = self.env["account.move"].browse(res["res_id"])
# invoice.ref, adding "/ WA001"
invoice.ref = (
"{} / {}".format(invoice.ref, wa.name) if invoice.ref else wa.name
)
# invoice.payment_reference, adding "/ <WA's invoice_ref>"
invoice.payment_reference = (
"{} / {}".format(invoice.payment_reference, wa.invoice_ref)
if invoice.payment_reference
else wa.invoice_ref
)
return res
def _compute_wa_accepted(self):
for order in self:
lines = order.order_line.filtered(
lambda l: l.product_qty > 0 and l.qty_to_accept > 0
)
order.wa_accepted = not any(lines)
@api.model
def _search_wa_accepted(self, operator, value):
if operator not in ["=", "!="] or not isinstance(value, bool):
raise UserError(_("Operation not supported"))
recs = self.search([]).filtered(lambda l: l.wa_accepted is value)
return [("id", "in", recs.ids)]
def _prepare_invoice(self):
invoice_vals = super()._prepare_invoice()
invoice_vals["wa_id"] = self.env.context.get("wa_id")
return invoice_vals
class PurchaseOrderLine(models.Model):
_inherit = "purchase.order.line"
wa_line_ids = fields.One2many(
comodel_name="work.acceptance.line",
inverse_name="purchase_line_id",
string="WA Lines",
readonly=True,
)
qty_accepted = fields.Float(
compute="_compute_qty_accepted",
string="Accepted Qty.",
store=True,
readonly=True,
digits="Product Unit of Measure",
)
qty_to_accept = fields.Float(
compute="_compute_qty_accepted",
string="To Accept Qty.",
store=True,
readonly=True,
digits="Product Unit of Measure",
)
def _get_product_qty(self):
return self.product_qty - sum(
wa_line.product_qty
for wa_line in self.wa_line_ids
if wa_line.wa_id.state != "cancel"
)
def _prepare_account_move_line(self, move=False):
res = super()._prepare_account_move_line(move=move)
wa_id = self.env.context.get("wa_id")
if wa_id:
wa_line = self.wa_line_ids.filtered(lambda l: l.wa_id.id == wa_id)
res["quantity"] = wa_line.product_qty
res["product_uom_id"] = wa_line.product_uom.id
return res
@api.depends(
"wa_line_ids.wa_id.state",
"wa_line_ids.product_qty",
"product_qty",
"product_uom_qty",
"order_id.state",
)
def _compute_qty_accepted(self):
for line in self:
# compute qty_accepted
qty_accepted = 0.0
for wa_line in line.wa_line_ids.filtered(
lambda l: l.wa_id.state == "accept"
):
qty_accepted += wa_line.product_uom._compute_quantity(
wa_line.product_qty, line.product_uom, round=False
)
line.qty_accepted = qty_accepted
# compute qty_to_accept
line.qty_to_accept = line.product_uom_qty - qty_accepted

View file

@ -0,0 +1,29 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
group_enable_wa_on_po = fields.Boolean(
string="Enable WA on Purchase Order",
implied_group="purchase_work_acceptance.group_enable_wa_on_po",
)
group_enable_wa_on_in = fields.Boolean(
string="Enable WA on Goods Receipt",
implied_group="purchase_work_acceptance.group_enable_wa_on_in",
)
group_enforce_wa_on_in = fields.Boolean(
string="Enforce WA on Goods Receipt",
implied_group="purchase_work_acceptance.group_enforce_wa_on_in",
)
group_enable_wa_on_invoice = fields.Boolean(
string="Enable WA on Vendor Bill",
implied_group="purchase_work_acceptance.group_enable_wa_on_invoice",
)
group_enforce_wa_on_invoice = fields.Boolean(
string="Enforce WA on Vendor Bill",
implied_group="purchase_work_acceptance.group_enforce_wa_on_invoice",
)

View file

@ -0,0 +1,114 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class Picking(models.Model):
_inherit = "stock.picking"
require_wa = fields.Boolean(compute="_compute_require_wa")
wa_id = fields.Many2one(
comodel_name="work.acceptance",
string="WA Reference",
domain="[('id', 'in', wa_ids)]",
copy=False,
)
wa_ids = fields.Many2many(
comodel_name="work.acceptance",
compute="_compute_wa_ids",
)
@api.depends("picking_type_id")
def _compute_require_wa(self):
for rec in self:
rec.require_wa = False
if (
not rec.picking_type_id.bypass_wa
and rec.picking_type_code == "incoming"
):
rec.require_wa = self.env.user.has_group(
"purchase_work_acceptance.group_enforce_wa_on_in"
)
@api.depends("require_wa")
def _compute_wa_ids(self):
for picking in self:
picking.wa_ids = (
self.env["work.acceptance"]
.sudo()
._get_valid_wa("picking", picking.purchase_id.id)
)
def button_validate(self):
for picking in self:
if picking.wa_id:
order_id = self._context.get("active_id")
wa = (
self.env["work.acceptance"]
.sudo()
._get_valid_wa("picking", order_id)
)
wa += picking.wa_id
if picking.wa_id not in wa:
raise ValidationError(
_("%s was used in some picking.") % picking.wa_id.name
)
wa_line = {}
for line in picking.wa_id.wa_line_ids:
qty = line.product_uom._compute_quantity(
line.product_qty, line.product_id.uom_id
)
if qty > 0.0 and line.product_id.type in ["product", "consu"]:
wa_line[line.product_id.id] = (
wa_line.get(line.product_id.id, 0) + qty
)
move_line = {}
for move in picking.move_ids_without_package:
qty = move.product_uom._compute_quantity(
move.quantity_done, move.product_id.uom_id
)
if qty > 0.0:
move_line[move.product_id.id] = (
move_line.get(move.product_id.id, 0) + qty
)
if wa_line != move_line:
raise ValidationError(
_(
"You cannot validate a transfer if done"
" quantity not equal accepted quantity"
)
)
return super(Picking, self).button_validate()
@api.onchange("wa_id")
def _onchange_wa_id(self):
"""Change qty in picking"""
if self.wa_id:
wa_line = {}
for line in self.wa_id.wa_line_ids:
qty = line.product_uom._compute_quantity(
line.product_qty, line.product_id.uom_id
)
if line.product_id.id in wa_line:
wa_line[line.product_id.id] += qty
else:
wa_line[line.product_id.id] = qty
for move_line in self.move_line_ids_without_package:
if move_line.product_id.id in wa_line:
qty = wa_line[move_line.product_id.id]
if move_line.reserved_uom_qty < qty:
move_line._origin.qty_done = move_line.reserved_uom_qty
wa_line[line.product_id.id] = qty - move_line.reserved_uom_qty
else:
move_line._origin.qty_done = qty
class StockPickingType(models.Model):
_inherit = "stock.picking.type"
bypass_wa = fields.Boolean(
string="WA not required",
help="When 'Enforce WA on Goods Receipt' is set, this option type can by pass it",
)

View file

@ -0,0 +1,223 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class WorkAcceptance(models.Model):
_name = "work.acceptance"
_inherit = ["mail.thread", "mail.activity.mixin", "portal.mixin"]
_description = "Work Acceptance"
_order = "id desc"
name = fields.Char(required=True, index=True, copy=False, default="New")
date_due = fields.Datetime(
string="Due Date",
required=True,
readonly=True,
states={"draft": [("readonly", False)]},
)
date_receive = fields.Datetime(
string="Received Date",
default=fields.Datetime.now,
required=True,
readonly=True,
states={"draft": [("readonly", False)]},
)
date_accept = fields.Datetime(string="Accepted Date", readonly=True)
invoice_ref = fields.Char(string="Invoice Reference", copy=False)
partner_id = fields.Many2one(
comodel_name="res.partner",
string="Vendor",
required=True,
change_default=True,
tracking=True,
readonly=True,
states={"draft": [("readonly", False)]},
)
responsible_id = fields.Many2one(
comodel_name="res.users",
string="Responsible Person",
default=lambda self: self.env.user,
required=True,
change_default=True,
tracking=True,
readonly=True,
states={"draft": [("readonly", False)]},
)
currency_id = fields.Many2one(
comodel_name="res.currency",
string="Currency",
default=lambda self: self.env.company.currency_id,
required=True,
readonly=True,
)
state = fields.Selection(
[("draft", "Draft"), ("accept", "Accepted"), ("cancel", "Cancelled")],
string="Status",
readonly=True,
index=True,
copy=False,
default="draft",
tracking=True,
)
wa_line_ids = fields.One2many(
comodel_name="work.acceptance.line",
inverse_name="wa_id",
string="Work Acceptance Lines",
)
notes = fields.Text()
product_id = fields.Many2one(
comodel_name="product.product",
related="wa_line_ids.product_id",
string="Product",
readonly=False,
)
user_id = fields.Many2one(
comodel_name="res.users",
string="Work Acceptance Representative",
default=lambda self: self.env.user,
index=True,
tracking=True,
)
company_id = fields.Many2one(
comodel_name="res.company",
string="Company",
default=lambda self: self.env.company,
required=True,
index=True,
readonly=True,
states={"draft": [("readonly", False)]},
)
purchase_id = fields.Many2one(
comodel_name="purchase.order", string="Purchase Order", readonly=True
)
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if vals.get("name", "New") == "New":
vals["name"] = (
self.env["ir.sequence"].next_by_code("work.acceptance") or "/"
)
return super().create(vals_list)
def button_accept(self, force=False):
if self.env.context.get("manual_date_accept"):
wizard = self.env.ref(
"purchase_work_acceptance.view_work_accepted_date_wizard"
)
return {
"name": _("Select Accept Date"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "work.accepted.date.wizard",
"views": [(wizard.id, "form")],
"view_id": wizard.id,
"target": "new",
}
self._unlink_zero_quantity()
date_accept = force or fields.Datetime.now()
self.write({"state": "accept", "date_accept": date_accept})
def button_draft(self):
picking_obj = self.env["stock.picking"]
wa_ids = picking_obj.search([("wa_id", "in", self.ids)])
if wa_ids:
raise UserError(
_(
"Unable set to draft this work acceptance. "
"You must first cancel the related receipts."
)
)
self.write({"state": "draft"})
def button_cancel(self):
self.write({"state": "cancel"})
def _unlink_zero_quantity(self):
wa_line_zero_quantity = self.wa_line_ids.filtered(
lambda l: l.product_qty == 0.0
)
wa_line_zero_quantity.unlink()
def _get_valid_wa(self, doctype, order_id):
"""Get unused WA when validate invoice or picking"""
order = self.env["purchase.order"].browse(order_id)
all_wa = self.env["work.acceptance"].search(
[
("state", "=", "accept"),
("purchase_id", "=", order.id),
]
)
if doctype == "invoice":
used_wa = order.invoice_ids.filtered(
lambda l: l.state in ("draft", "posted")
).mapped("wa_id")
return all_wa - used_wa
if doctype == "picking":
used_wa = order.picking_ids.mapped("wa_id")
return all_wa - used_wa
return all_wa
class WorkAcceptanceLine(models.Model):
_name = "work.acceptance.line"
_description = "Work Acceptance Line"
_order = "id"
name = fields.Text(string="Description", required=True)
product_qty = fields.Float(
string="Quantity", required=True, digits="Product Unit of Measure"
)
product_id = fields.Many2one(
comodel_name="product.product", string="Product", required=True
)
product_uom = fields.Many2one(
comodel_name="uom.uom", string="Product Unit of Measure", required=True
)
price_unit = fields.Float(string="Unit Price", required=True)
price_subtotal = fields.Monetary(compute="_compute_amount", string="Subtotal")
wa_id = fields.Many2one(
comodel_name="work.acceptance",
string="WA Reference",
index=True,
required=True,
ondelete="cascade",
)
partner_id = fields.Many2one(
comodel_name="res.partner",
related="wa_id.partner_id",
string="Partner",
readonly=True,
)
responsible_id = fields.Many2one(
comodel_name="res.users",
related="wa_id.responsible_id",
string="Responsible Person",
readonly=True,
)
currency_id = fields.Many2one(
related="wa_id.currency_id", string="Currency", readonly=True
)
date_due = fields.Datetime(
related="wa_id.date_due", string="Due Date", readonly=True
)
date_receive = fields.Datetime(
related="wa_id.date_receive", string="Received Date", readonly=True
)
date_accept = fields.Datetime(
related="wa_id.date_accept", string="Accepted Date", readonly=True
)
purchase_line_id = fields.Many2one(
comodel_name="purchase.order.line",
string="Purchase Order Line",
ondelete="set null",
index=True,
readonly=False,
)
def _compute_amount(self):
for line in self:
line.price_subtotal = line.product_qty * line.price_unit

View file

@ -0,0 +1,31 @@
** Show Button Create WA on Purchase Order **
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enable WA on Purchase Order'
** Show WA Reference fields on Receipt **
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enable WA on Goods Receipt'
** Control Receipt by Work Acceptance**
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enforce WA on Goods Receipt'
** Show WA Reference fields on Vendor Bill **
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enable WA on Vendor Bill'
** Control Vendor Bill by Work Acceptance**
#. Go to *Purchase > Configuration > Settings*
#. Check 'Enforce WA on Vendor Bill'
Note:
* You can check 'Enable WA on Goods Receipt' and 'Enable WA on Vendor Bill' after checked 'Enable WA on Purchase Order'
* You can check 'Enforce WA on Goods Receipt' after checked 'Enable WA on Goods Receipt'
* But you can bypass WA on some Picking Operation by setting 'WA not required' on Operation Type
* You can check 'Enforce WA on Vendor Bill' after checked 'Enable WA on Vendor Bill'

View file

@ -0,0 +1,3 @@
* `Ecosoft <http://ecosoft.co.th>`__:
* Pimolnat Suntian <pimolnats@ecosoft.co.th>

View file

@ -0,0 +1,3 @@
This module introduces the ability to define a quantity control point on Receipts and Vendor Bills by
Work Acceptance. Only the products and services that have been included in a Work Acceptance can be
received and/or invoiced.

View file

@ -0,0 +1,26 @@
** Usual process of Purchasing with Work Acceptance **
#. Create a New Purchase Order
#. Confirm the Purchase Order
#. Create a new Work Acceptance
#. Accept the Work Acceptance
#. Receive the products following a specific Work Acceptance
#. Create the Vendor Bill following a specific Work Acceptance
** Create a Work Acceptance **
#. Create Purchase Order normally
#. After 'Confirm Order' (Status = 'Purchase'), Click button 'Create WA'
#. Accept order
** Control Receipt by Work Acceptance **
#. After 'Confirm Order' in Purchase Order, a smart button 'Receipt' will appear on the Purchase Order
#. Click 'Receipt' to go to the Transfer
#. Select the Work Acceptance relating to this picking in the field 'WA Reference'.
The quantity done filled automatically for the items that have been already accepted.
** Control Vendor Bill by Work Acceptance **
#. After once the products and/or services have been accepted, Click 'Create Bill'
#. You will be prompted to select a Work Acceptance. Select it and Click 'Post'

View file

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_work_acceptance,access_work_acceptance,model_work_acceptance,purchase.group_purchase_user,1,1,1,1
access_work_acceptance_line,access_work_acceptance_line,model_work_acceptance_line,purchase.group_purchase_user,1,1,1,1
access_select_work_acceptance_wizard,access_select_work_acceptance_wizard,model_select_work_acceptance_wizard,purchase.group_purchase_user,1,1,1,1
access_work_accepted_date_wizard,access_work_accepted_date_wizard,model_work_accepted_date_wizard,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_work_acceptance access_work_acceptance model_work_acceptance purchase.group_purchase_user 1 1 1 1
3 access_work_acceptance_line access_work_acceptance_line model_work_acceptance_line purchase.group_purchase_user 1 1 1 1
4 access_select_work_acceptance_wizard access_select_work_acceptance_wizard model_select_work_acceptance_wizard purchase.group_purchase_user 1 1 1 1
5 access_work_accepted_date_wizard access_work_accepted_date_wizard model_work_accepted_date_wizard 1 1 1 1

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="group_enable_wa_on_po" model="res.groups">
<field name="name">Enable WA on Purchase Order</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>
<record id="group_enable_wa_on_in" model="res.groups">
<field name="name">Enable WA on Goods Receipt</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>
<record id="group_enforce_wa_on_in" model="res.groups">
<field name="name">Enforce WA on Goods Receipt</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>
<record id="group_enable_wa_on_invoice" model="res.groups">
<field name="name">Enable WA on Vendor Bill</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>
<record id="group_enforce_wa_on_invoice" model="res.groups">
<field name="name">Enforce WA on Vendor Bill</field>
<field name="category_id" ref="base.module_category_hidden" />
</record>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,501 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Purchase Work Acceptance</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="purchase-work-acceptance">
<h1 class="title">Purchase Work Acceptance</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:d645ef4e95a02ac0974e6357ae9334fb019f0d639fa42dd02fe2ae399115ee21
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_work_acceptance"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_work_acceptance"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module introduces the ability to define a quantity control point on Receipts and Vendor Bills by
Work Acceptance. Only the products and services that have been included in a Work Acceptance can be
received and/or invoiced.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<p class="last">This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
<a class="reference external" href="https://odoo-community.org/page/development-status">More details on development status</a></p>
</div>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>** Show Button Create WA on Purchase Order **</p>
<ol class="arabic simple">
<li>Go to <em>Purchase &gt; Configuration &gt; Settings</em></li>
<li>Check Enable WA on Purchase Order</li>
</ol>
<p>** Show WA Reference fields on Receipt **</p>
<ol class="arabic simple">
<li>Go to <em>Purchase &gt; Configuration &gt; Settings</em></li>
<li>Check Enable WA on Goods Receipt</li>
</ol>
<p>** Control Receipt by Work Acceptance**</p>
<ol class="arabic simple">
<li>Go to <em>Purchase &gt; Configuration &gt; Settings</em></li>
<li>Check Enforce WA on Goods Receipt</li>
</ol>
<p>** Show WA Reference fields on Vendor Bill **</p>
<ol class="arabic simple">
<li>Go to <em>Purchase &gt; Configuration &gt; Settings</em></li>
<li>Check Enable WA on Vendor Bill</li>
</ol>
<p>** Control Vendor Bill by Work Acceptance**</p>
<ol class="arabic simple">
<li>Go to <em>Purchase &gt; Configuration &gt; Settings</em></li>
<li>Check Enforce WA on Vendor Bill</li>
</ol>
<p>Note:</p>
<ul class="simple">
<li>You can check Enable WA on Goods Receipt and Enable WA on Vendor Bill after checked Enable WA on Purchase Order</li>
<li>You can check Enforce WA on Goods Receipt after checked Enable WA on Goods Receipt
* But you can bypass WA on some Picking Operation by setting WA not required on Operation Type</li>
<li>You can check Enforce WA on Vendor Bill after checked Enable WA on Vendor Bill</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p>** Usual process of Purchasing with Work Acceptance **</p>
<ol class="arabic simple">
<li>Create a New Purchase Order</li>
<li>Confirm the Purchase Order</li>
<li>Create a new Work Acceptance</li>
<li>Accept the Work Acceptance</li>
<li>Receive the products following a specific Work Acceptance</li>
<li>Create the Vendor Bill following a specific Work Acceptance</li>
</ol>
<p>** Create a Work Acceptance **</p>
<ol class="arabic simple">
<li>Create Purchase Order normally</li>
<li>After Confirm Order (Status = Purchase), Click button Create WA</li>
<li>Accept order</li>
</ol>
<p>** Control Receipt by Work Acceptance **</p>
<ol class="arabic simple">
<li>After Confirm Order in Purchase Order, a smart button Receipt will appear on the Purchase Order</li>
<li>Click Receipt to go to the Transfer</li>
<li>Select the Work Acceptance relating to this picking in the field WA Reference.
The quantity done filled automatically for the items that have been already accepted.</li>
</ol>
<p>** Control Vendor Bill by Work Acceptance **</p>
<ol class="arabic simple">
<li>After once the products and/or services have been accepted, Click Create Bill</li>
<li>You will be prompted to select a Work Acceptance. Select it and Click Post</li>
</ol>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/purchase-workflow/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/purchase-workflow/issues/new?body=module:%20purchase_work_acceptance%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
<ul class="simple">
<li>Ecosoft</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="http://ecosoft.co.th">Ecosoft</a>:<ul>
<li>Pimolnat Suntian &lt;<a class="reference external" href="mailto:pimolnats&#64;ecosoft.co.th">pimolnats&#64;ecosoft.co.th</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/ps-tubtim"><img alt="ps-tubtim" src="https://github.com/ps-tubtim.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_work_acceptance">OCA/purchase-workflow</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,359 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import ast
from odoo import Command, fields
from odoo.exceptions import UserError, ValidationError
from odoo.tests.common import Form, TransactionCase
class TestPurchaseWorkAcceptance(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.po_model = cls.env["purchase.order"]
cls.wa_model = cls.env["work.acceptance"]
cls.picking_model = cls.env["stock.picking"]
cls.move_model = cls.env["account.move"]
cls.config_setting_model = cls.env["res.config.settings"]
cls.wa_accept_wizard = cls.env["work.accepted.date.wizard"]
cls.service_product = cls.env.ref("product.product_product_1")
cls.service_product.purchase_method = "purchase"
cls.product_product = cls.env.ref("product.product_product_6")
cls.res_partner = cls.env.ref("base.res_partner_3")
cls.employee = cls.env.ref("base.user_demo")
cls.main_company = cls.env.ref("base.main_company")
cls.date_now = fields.Datetime.now()
# Enable and Config WA in PO / Picking
cls.config_setting_model.create(
{
"group_enable_wa_on_po": True,
"group_enable_wa_on_in": True,
}
).execute()
cls.picking_type_return = cls.env["stock.picking.type"].search(
[
("code", "=", "incoming"),
("return_picking_type_id", "=", False),
("company_id", "=", cls.main_company.id),
],
limit=1,
)
def _create_purchase_order(self, qty, product):
purchase_order = self.po_model.create(
{
"partner_id": self.res_partner.id,
"order_line": [
Command.create(
{
"product_id": product.id,
"product_uom": product.uom_id.id,
"name": product.name,
"price_unit": product.standard_price,
"date_planned": self.date_now,
"product_qty": qty,
}
)
],
}
)
return purchase_order
def _create_multi_purchase_order(self, qty, multi):
purchase_order = self.po_model.create(
{
"partner_id": self.res_partner.id,
"order_line": [
Command.create(
{
"product_id": self.product_product.id,
"product_uom": self.product_product.uom_id.id,
"name": self.product_product.name,
"price_unit": self.product_product.standard_price,
"date_planned": self.date_now,
"product_qty": qty,
}
)
for x in range(multi)
],
}
)
return purchase_order
def _create_work_acceptance(self, qty, po=False):
work_acceptance = self.wa_model.create(
{
"purchase_id": po and po.id or False,
"partner_id": self.res_partner.id,
"responsible_id": self.employee.id,
"date_due": self.date_now,
"date_receive": self.date_now,
"company_id": self.main_company.id,
"wa_line_ids": [
Command.create(
{
"purchase_line_id": po and po.order_line[0].id or False,
"product_id": po
and po.order_line[0].product_id.id
or self.service_product.id,
"name": po
and po.order_line[0].name
or self.service_product.name,
"price_unit": po
and po.order_line[0].price_unit
or self.service_product.standard_price,
"product_uom": po
and po.order_line[0].product_uom.id
or self.service_product.uom_id.id,
"product_qty": qty,
}
)
],
}
)
return work_acceptance
def _create_multi_work_acceptance(self, qty, purchase_order, multi):
work_acceptance = self.wa_model.create(
{
"purchase_id": purchase_order.id,
"partner_id": self.res_partner.id,
"responsible_id": self.employee.id,
"date_due": self.date_now,
"date_receive": self.date_now,
"company_id": self.main_company.id,
"wa_line_ids": [
Command.create(
{
"purchase_line_id": purchase_order.order_line[x].id,
"product_id": purchase_order.order_line[x].product_id.id,
"name": purchase_order.order_line[x].name,
"price_unit": purchase_order.order_line[x].price_unit,
"product_uom": purchase_order.order_line[x].product_uom.id,
"product_qty": qty,
}
)
for x in range(multi)
],
}
)
return work_acceptance
def test_00_wa_button(self):
qty = 3.0
work_acceptance = self._create_work_acceptance(qty)
work_acceptance.button_accept()
self.assertEqual(work_acceptance.state, "accept")
work_acceptance.button_cancel()
self.assertEqual(work_acceptance.state, "cancel")
work_acceptance.button_draft()
self.assertEqual(work_acceptance.state, "draft")
# Test open wizard
wizard = self.env.ref("purchase_work_acceptance.view_work_accepted_date_wizard")
res = work_acceptance.with_context(manual_date_accept=True).button_accept()
self.assertEqual(res["res_model"], "work.accepted.date.wizard")
self.assertEqual(res["view_id"], wizard.id)
ctx = {
"active_ids": [work_acceptance.id],
"active_id": work_acceptance.id,
"active_model": work_acceptance._name,
}
with Form(self.wa_accept_wizard.with_context(**ctx)) as f:
f.date_accept = self.date_now
wa_wizard = f.save()
wa_wizard.button_accept()
def test_01_action_view_wa(self):
# Create Purchase Order
qty = 42.0
purchase_order = self._create_purchase_order(qty, self.product_product)
purchase_order.button_confirm()
self.assertEqual(purchase_order.state, "purchase")
res = purchase_order.with_context(create_wa=True).action_view_wa()
ctx = res.get("context")
work_acceptance = Form(self.wa_model.with_context(**ctx))
self.assertEqual(work_acceptance.state, "draft")
# Open with 1 WA
work_acceptance1 = self._create_work_acceptance(1, purchase_order)
res = purchase_order.action_view_wa()
self.assertEqual(res["res_id"], work_acceptance1.id)
work_acceptance1.button_accept()
purchase_order._compute_wa_accepted()
# Open with 2 WA
work_acceptance2 = self._create_work_acceptance(2, purchase_order)
purchase_order._compute_wa_ids()
res = purchase_order.action_view_wa()
res_domain = ast.literal_eval(res["domain"])
wa_ids = (work_acceptance1 + work_acceptance2).ids
self.assertEqual(res_domain[0][2], wa_ids)
def test_02_flow_product(self):
# Create Purchase Order
qty = 42.0
purchase_order = self._create_purchase_order(qty, self.product_product)
purchase_order.button_confirm()
self.assertEqual(purchase_order.state, "purchase")
self.assertEqual(purchase_order.incoming_picking_count, 1)
# Create Work Acceptance
work_acceptance = self._create_work_acceptance(qty, purchase_order)
work_acceptance.button_accept()
self.assertEqual(work_acceptance.state, "accept")
self.assertEqual(purchase_order.wa_count, 1)
# Received Products
picking = purchase_order.picking_ids[0]
self.assertEqual(len(picking.move_ids_without_package), 1)
with Form(picking) as p:
p.wa_id = work_acceptance
p.save()
with self.assertRaises(ValidationError):
picking.move_ids_without_package[0].quantity_done = 30.0
picking.button_validate()
picking.move_ids_without_package[0].quantity_done = 42.0
picking.button_validate()
# Can't set to draft wa when you validate picking
with self.assertRaises(UserError):
work_acceptance.button_draft()
# Create Vendor Bill
f = Form(self.move_model.with_context(default_move_type="in_invoice"))
f.partner_id = purchase_order.partner_id
f.purchase_vendor_bill_id = self.env["purchase.bill.union"].browse(
-purchase_order.id
)
invoice = f.save()
invoice.wa_id = work_acceptance
invoice_line = invoice.invoice_line_ids[0]
with self.assertRaises(ValidationError):
invoice_line.with_context(check_move_validity=False).write(
{"quantity": 6.0}
)
invoice.action_post() # Warn when quantity not equal to WA
invoice_line.quantity = qty
self.assertEqual(invoice.state, "draft")
invoice.invoice_date = invoice.date
invoice.action_post()
self.assertEqual(invoice.state, "posted")
def test_03_flow_service(self):
qty = 30.0
# Create Purchase Order
purchase_order = self._create_purchase_order(qty, self.service_product)
purchase_order.button_confirm()
self.assertEqual(purchase_order.state, "purchase")
# Create Work Acceptance
work_acceptance = self._create_work_acceptance(qty, purchase_order)
work_acceptance.button_accept()
self.assertEqual(work_acceptance.state, "accept")
self.assertEqual(purchase_order.wa_count, 1)
# Create Vendor Bill
f = Form(self.move_model.with_context(default_move_type="in_invoice"))
f.partner_id = purchase_order.partner_id
f.purchase_vendor_bill_id = self.env["purchase.bill.union"].browse(
-purchase_order.id
)
invoice = f.save()
invoice.wa_id = work_acceptance
self.assertEqual(invoice.state, "draft")
invoice.invoice_date = invoice.date
invoice.action_post()
self.assertEqual(invoice.state, "posted")
def test_04_enable_config_flow(self):
qty = 2.0
# Create Purchase Order
purchase_order = self._create_purchase_order(qty, self.service_product)
purchase_order.button_confirm()
# Create Work Acceptance
work_acceptance = self._create_work_acceptance(qty, purchase_order)
work_acceptance.button_accept()
self.config_setting_model.create({"group_enable_wa_on_invoice": True}).execute()
res = purchase_order.with_context(create_bill=True).action_create_invoice()
self.assertEqual(res.get("res_model"), "select.work.acceptance.wizard")
wizard = self.env[res.get("res_model")].create({"wa_id": work_acceptance.id})
wizard = wizard.with_context(active_id=purchase_order.id)
self.assertEqual(wizard.wa_ids, work_acceptance)
res = wizard.button_create_vendor_bill()
invoice = self.move_model.browse(res["res_id"])
self.assertEqual(sum(invoice.invoice_line_ids.mapped("quantity")), qty)
# Test create wa is used
with self.assertRaises(ValidationError):
wizard.button_create_vendor_bill()
invoice = self.move_model.browse(res["res_id"])
self.assertEqual(sum(invoice.invoice_line_ids.mapped("quantity")), qty)
# Create Return with required WA
self.config_setting_model.create({"group_enforce_wa_on_in": True}).execute()
picking = self.picking_model.create(
{
"picking_type_id": self.picking_type_return.id,
"location_id": 4,
"location_dest_id": 8,
}
)
# Set bypass return not required wa
self.assertTrue(picking.require_wa)
self.picking_type_return.bypass_wa = True
picking._compute_require_wa()
self.assertFalse(picking.require_wa)
def test_05_create_multi_lines(self):
qty = 5.0
# Create Purchase Order
purchase_order = self._create_multi_purchase_order(qty, multi=2)
purchase_order.button_confirm()
# Create Work Acceptance
work_acceptance = work_acceptance = self._create_multi_work_acceptance(
qty, purchase_order, multi=2
)
work_acceptance.button_accept()
# Received Products
picking = purchase_order.picking_ids[0]
self.assertEqual(len(picking.move_ids_without_package), 2)
with Form(picking) as p:
p.wa_id = work_acceptance
p.save()
picking.button_validate()
# Create Vendor Bill
self.config_setting_model.create({"group_enable_wa_on_invoice": True}).execute()
res = purchase_order.with_context(create_bill=True).action_create_invoice()
self.assertEqual(res.get("res_model"), "select.work.acceptance.wizard")
wizard = self.env[res.get("res_model")].create({"wa_id": work_acceptance.id})
res = wizard.with_context(
active_id=purchase_order.id
).button_create_vendor_bill()
invoice = self.move_model.browse(res["res_id"])
self.assertEqual(sum(invoice.invoice_line_ids.mapped("quantity")), qty * 2)
invoice.invoice_date = invoice.date
invoice.action_post()
self.assertEqual(invoice.state, "posted")
def test_06_check_qty_accepted(self):
qty_po = 20.0
qty_wa = 12.0
purchase_order = self._create_purchase_order(qty_po, self.product_product)
purchase_order.button_confirm()
work_acceptance = self._create_work_acceptance(qty_wa, po=purchase_order)
work_acceptance.button_accept()
self.assertEqual(purchase_order.order_line[0].qty_accepted, 12.0)
self.assertEqual(purchase_order.order_line[0].qty_to_accept, 8.0)
def test_07_hide_wa_button(self):
qty_po = 20.0
purchase_order = self._create_purchase_order(qty_po, self.product_product)
purchase_order.button_confirm()
work_acceptance = self._create_work_acceptance(qty=12, po=purchase_order)
work_acceptance.button_accept()
purchase_order._compute_wa_accepted()
self.assertEqual(purchase_order.wa_accepted, False)
work_acceptance = self._create_work_acceptance(qty=8, po=purchase_order)
work_acceptance.button_accept()
purchase_order._compute_wa_accepted()
self.assertEqual(purchase_order.wa_accepted, True)
# Search wa accepted
purchase_order._search_wa_accepted("=", True)
# Search with not `=` or `!=`
with self.assertRaises(UserError):
purchase_order._search_wa_accepted(">", True)

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_move_form" model="ir.ui.view">
<field name="name">account.move.form</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="purchase.view_move_form_inherit_purchase" />
<field name="arch" type="xml">
<group id="header_left_group" position="inside">
<field name="require_wa" invisible="1" />
<field
name="wa_id"
options="{'no_create': True}"
groups="purchase_work_acceptance.group_enable_wa_on_invoice"
attrs="{'required': [('require_wa','=', True)], 'invisible': [('wa_id', '=', False)]}"
/>
</group>
</field>
</record>
</odoo>

View file

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Search RFQ -->
<record id="view_purchase_order_filter" model="ir.ui.view">
<field name="name">request.quotation.select</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.view_purchase_order_filter" />
<field name="arch" type="xml">
<xpath expr="//search/separator[1]" position="after">
<filter
name="wa_accepted"
string="WA Accepted"
domain="[('wa_accepted', '=', True)]"
/>
<filter
name="wa_not_accepted"
string="WA Not Accepted"
domain="[('wa_accepted', '=', False)]"
/>
<separator />
</xpath>
</field>
</record>
<!-- Search Purchase Order -->
<record id="purchase_order_view_search" model="ir.ui.view">
<field name="name">purchase.order.select</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_view_search" />
<field name="arch" type="xml">
<xpath expr="//search/separator[1]" position="after">
<filter
name="wa_accepted"
string="WA Accepted"
domain="[('wa_accepted', '=', True)]"
/>
<filter
name="wa_not_accepted"
string="WA Not Accepted"
domain="[('wa_accepted', '=', False)]"
/>
<separator />
</xpath>
</field>
</record>
<record id="purchase_order_form_inherit" model="ir.ui.view">
<field name="name">purchase.order.form.inherit</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form" />
<field name="arch" type="xml">
<xpath expr="//button[@name='button_approve']" position="after">
<button
name="action_view_wa"
string="Create WA"
type="object"
class="oe_highlight"
context="{'create_wa':True}"
groups="purchase_work_acceptance.group_enable_wa_on_po"
attrs="{'invisible': ['|', ('state', 'not in', ('purchase', 'done')), ('wa_accepted', '=', True)]}"
/>
</xpath>
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
<button
type="object"
name="action_view_wa"
class="oe_stat_button"
icon="fa-clipboard"
attrs="{'invisible':[('wa_ids','=',[])]}"
groups="purchase.group_purchase_user"
>
<field name="wa_count" widget="statinfo" string="WA" />
<field name="wa_ids" invisible="1" />
</button>
</xpath>
<xpath expr="//field[@name='order_line']/tree" position="inside">
<field name="wa_line_ids" invisible="1" />
</xpath>
<xpath
expr="//field[@name='order_line']/tree//field[@name='qty_received']"
position="attributes"
>
<attribute name="attrs">
{'column_invisible': [('parent.state', 'not in', ('purchase', 'done'))],
'readonly': ['|', ('product_type', 'in', ('consu',
'product')), ('wa_line_ids', '!=', ())]}
</attribute>
</xpath>
<xpath
expr="//field[@name='order_line']/tree//field[@name='product_qty']"
position="after"
>
<field name="qty_to_accept" string="To Accept" invisible="1" />
<field
name="qty_accepted"
string="Accepted"
attrs="{'column_invisible': [('parent.state', 'not in', ('purchase', 'done'))]}"
/>
</xpath>
<field name="fiscal_position_id" position="after">
<field
name="wa_accepted"
groups="purchase_work_acceptance.group_enable_wa_on_po"
attrs="{'invisible': [('state', 'not in', ('purchase', 'done'))]}"
/>
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="res_config_settings_view_form_purchase" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.purchase</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="25" />
<field
name="inherit_id"
ref="purchase.res_config_settings_view_form_purchase"
/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='purchase']" position="inside">
<h2>Work Acceptance</h2>
<div
class="row mt16 o_settings_container"
name="purchase_work_acceptance_setting_container"
>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="group_enable_wa_on_po" />
</div>
<div class="o_setting_right_pane">
<label for="group_enable_wa_on_po" />
<div
class="content-group"
attrs="{'invisible': [('group_enable_wa_on_po' ,'=', False)]}"
>
<div class="mt16">
<field
name="group_enable_wa_on_in"
class="oe_inline"
/>
<label
for="group_enable_wa_on_in"
class="o_light_label"
/>
</div>
<div
class="mt4 ml32"
attrs="{'invisible': [('group_enable_wa_on_in' ,'=', False)]}"
>
<field
name="group_enforce_wa_on_in"
class="oe_inline"
/>
<label
for="group_enforce_wa_on_in"
class="o_light_label"
/>
</div>
<div class="mt8">
<field
name="group_enable_wa_on_invoice"
class="oe_inline"
/>
<label
for="group_enable_wa_on_invoice"
class="o_light_label"
/>
</div>
<div
class="mt4 ml32"
attrs="{'invisible': [('group_enable_wa_on_invoice' ,'=', False)]}"
>
<field
name="group_enforce_wa_on_invoice"
class="oe_inline"
/>
<label
for="group_enforce_wa_on_invoice"
class="o_light_label"
/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.ui.view" id="view_picking_type_form">
<field name="name">view.picking.type.form</field>
<field name="model">stock.picking.type</field>
<field name="inherit_id" ref="stock.view_picking_type_form" />
<field name="arch" type="xml">
<field name="show_reserved" position="after">
<field name="bypass_wa" />
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.ui.view" id="view_picking_form">
<field name="name">stock.picking.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='backorder_id']" position="after">
<field name="require_wa" invisible="1" />
<field name="purchase_id" invisible="1" />
<field
name="wa_id"
options="{'no_create': True}"
groups="purchase_work_acceptance.group_enable_wa_on_in"
attrs="{'required': [('require_wa','=', True)],
'readonly':[('state', 'in' , ('done', 'cancel'))],
'invisible': ['|', ('id', '=', False), ('picking_type_code', '!=', 'incoming')]}"
/>
<field name="wa_ids" invisible="1" />
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,251 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_work_acceptance_form" model="ir.ui.view">
<field name="name">work.acceptance.form</field>
<field name="model">work.acceptance</field>
<field name="arch" type="xml">
<form>
<header>
<button
name="button_accept"
type="object"
states="draft"
string="Accept"
class="oe_highlight"
context="{'manual_date_accept': True}"
/>
<button
name="button_draft"
type="object"
states="accept,cancel"
string="Set to draft"
/>
<button
name="button_cancel"
type="object"
states="draft,accept"
string="Cancel"
/>
<field
name="state"
widget="statusbar"
statusbar_visible="draft,accept"
attrs="{'readonly': True}"
/>
</header>
<sheet>
<div class="oe_title">
<h1>
<field name="name" attrs="{'readonly': True}" />
</h1>
</div>
<group>
<group>
<field name="partner_id" />
<field name="responsible_id" />
<field name="purchase_id" />
<field name="invoice_ref" />
<field
name="currency_id"
groups="base.group_multi_currency"
options="{'no_create': True}"
/>
</group>
<group>
<field name="date_due" />
<field name="date_receive" />
<field
name="date_accept"
attrs="{'invisible': [('state', '=', 'draft')]}"
/>
<field
name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
/>
</group>
</group>
<notebook>
<page string="Products">
<field
name="wa_line_ids"
attrs="{'readonly': [('state', '!=', 'draft')]}"
>
<tree editable="bottom">
<field
name="purchase_line_id"
optional="hide"
readonly="1"
force_save="1"
/>
<field
name="product_id"
readonly="1"
force_save="1"
/>
<field name="name" />
<field name="product_qty" />
<field name="product_uom" groups="uom.group_uom" />
<field name="price_unit" />
<field
name="price_subtotal"
widget="monetary"
sum="Total"
/>
</tree>
<form>
<sheet>
<group>
<group>
<field name="purchase_line_id" />
<field name="product_id" />
<label for="product_qty" />
<div>
<field
name="product_qty"
class="oe_inline"
/>
<span
class="oe_inline"
>&#160;</span>
<field
name="product_uom"
class="oe_inline"
/>
</div>
<field name="price_unit" />
</group>
</group>
</sheet>
</form>
</field>
</page>
</notebook>
<field
name="notes"
class="oe_inline"
placeholder="Define your terms and conditions ..."
/>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers" />
<field name="activity_ids" widget="mail_activity" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<record id="view_work_acceptance_tree" model="ir.ui.view">
<field name="name">work.acceptance.tree</field>
<field name="model">work.acceptance</field>
<field name="arch" type="xml">
<tree decoration-muted="state=='cancel'">
<field name="name" string="Reference" />
<field name="date_due" />
<field name="date_receive" />
<field name="date_accept" />
<field name="partner_id" />
<field name="responsible_id" />
<field name="invoice_ref" optional="show" />
<field
name="company_id"
groups="base.group_multi_company"
options="{'no_create': True}"
/>
<field
name="currency_id"
groups="base.group_multi_currency"
options="{'no_create': True}"
/>
<field name="purchase_id" optional="hide" />
<field name="state" />
</tree>
</field>
</record>
<record id="view_work_acceptance_search" model="ir.ui.view">
<field name="name">work.acceptance.search</field>
<field name="model">work.acceptance</field>
<field name="arch" type="xml">
<search>
<field name="name" string="Reference" />
<field name="partner_id" operator="child_of" />
<field name="responsible_id" operator="child_of" />
<field name="invoice_ref" />
<field name="product_id" />
<field name="create_uid" />
<field name="user_id" />
<field name="purchase_id" />
<filter
name="my_wa"
string="My Work Acceptance"
domain="[('user_id','=', uid)]"
/>
<separator />
<filter
string="Draft"
name="draft"
domain="[('state', '=', 'draft')]"
/>
<filter
string="Accepted"
name="accepted"
domain="[('state', '=', 'accept')]"
/>
<group expand="0" string="Group By">
<filter
string="Accepted By"
name="accept_by"
domain="[]"
context="{'group_by':'responsible_id'}"
/>
<filter
string="Vendor"
name="vendor"
domain="[]"
context="{'group_by':'partner_id'}"
/>
<filter
string="Purchase Order"
name="purchase"
domain="[]"
context="{'group_by':'purchase_id'}"
/>
<filter
string="Due Date"
name="due_date"
domain="[]"
context="{'group_by':'date_due'}"
/>
<filter
string="Receive Date"
name="receive_date"
domain="[]"
context="{'group_by':'date_receive'}"
/>
<filter
string="Accepte Date"
name="accept_date"
domain="[]"
context="{'group_by':'date_accept'}"
/>
</group>
</search>
</field>
</record>
<record id="action_work_acceptance" model="ir.actions.act_window">
<field name="name">Work Acceptance</field>
<field name="res_model">work.acceptance</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_work_acceptance_search" />
<field name="view_id" ref="view_work_acceptance_tree" />
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">Create a new work acceptance</p>
</field>
</record>
<menuitem
id="menu_work_acceptance"
name="Work Acceptance"
action="action_work_acceptance"
parent="purchase.menu_procurement_management"
/>
</odoo>

View file

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

View file

@ -0,0 +1,51 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class SelectWorkAcceptanceWizard(models.TransientModel):
_name = "select.work.acceptance.wizard"
_description = "Select Work Acceptance Wizard"
require_wa = fields.Boolean(default=lambda self: self._get_require_wa())
wa_id = fields.Many2one(
comodel_name="work.acceptance",
string="Work Acceptance",
domain="[('id', 'in', wa_ids)]",
)
wa_ids = fields.Many2many(
comodel_name="work.acceptance",
compute="_compute_wa_ids",
)
def _get_require_wa(self):
return self.env.user.has_group(
"purchase_work_acceptance.group_enforce_wa_on_invoice"
)
@api.depends("require_wa")
def _compute_wa_ids(self):
self.ensure_one()
self.wa_ids = self.env["work.acceptance"]._get_valid_wa(
"invoice", self.env.context.get("active_id")
)
def _get_purchase_order_with_context(self, order_id):
return (
self.env["purchase.order"]
.browse(order_id)
.with_context(create_bill=False, wa_id=self.wa_id.id)
)
def button_create_vendor_bill(self):
self.ensure_one()
order_id = self._context.get("active_id")
wa = self.env["work.acceptance"]._get_valid_wa("invoice", order_id)
if self.wa_id not in wa:
raise ValidationError(
_("%s was already used by some bill") % self.wa_id.name
)
order = self._get_purchase_order_with_context(order_id)
return order.sudo().action_create_invoice()

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_select_work_acceptance_wizard" model="ir.ui.view">
<field name="name">select_work_acceptance_wizard</field>
<field name="model">select.work.acceptance.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Select Work Acceptance">
<group>
<field name="require_wa" invisible="1" />
<field
name="wa_id"
options="{'no_create': True}"
attrs="{'required': [('require_wa','=', True)]}"
/>
<field name="wa_ids" invisible="1" />
</group>
<footer>
<button
name="button_create_vendor_bill"
string="Create Vendor Bill"
type="object"
class="oe_highlight"
/>
<button special="cancel" string="Cancel" class="oe_link" />
</footer>
</form>
</field>
</record>
</odoo>

View file

@ -0,0 +1,21 @@
# Copyright 2019 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class SelectWorkAcceptanceWizard(models.TransientModel):
_name = "work.accepted.date.wizard"
_description = "Select work accepted date"
date_accept = fields.Datetime(
string="Accepted Date",
required=True,
)
def button_accept(self):
active_id = self.env.context.get("active_id")
work_acceptance = self.env["work.acceptance"].browse(active_id)
work_acceptance.with_context(manual_date_accept=False).button_accept(
force=self.date_accept
)

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_work_accepted_date_wizard" model="ir.ui.view">
<field name="name">view.work.accepted.date.wizard</field>
<field name="model">work.accepted.date.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Select Accepted Date">
<group>
<group>
<field name="date_accept" />
</group>
<group />
</group>
<footer>
<button
name="button_accept"
string="Accept"
type="object"
class="oe_highlight"
/>
<button special="cancel" string="Cancel" class="oe_link" />
</footer>
</form>
</field>
</record>
</odoo>

View file

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