Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions purchase_request_substate/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

==========================
Purchase Request Sub State
==========================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:8a17c5c0411a565e677833e932a9815a269e7aca828b3c4ecab158e09e9dc653
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-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/19.0/purchase_request_substate
: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-19-0/purchase-workflow-19-0-purchase_request_substate
: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=19.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to add a substate to purchase request. For each
purchase request state you can define a substate. We this module you can
define substate which allow you to extend purchase request workflow. For
example, you can add substate "To Verify" if the order can not be
approved without document checked and verified

**Table of contents**

.. contents::
:local:

Usage
=====

1. | Go to \*\* Settings > Technical > Database Structure \*\* and Add
"Base substate".
| If necessery you can add "target State values" (ex define a
substate for "cancel" state). Substate sequence is very important.

2. Create a purchae request and check if the substate are displayed on
the header of form view. Check if you can't set substate defined for
purchase request if sate is a To be approved.

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_request_substate%0Aversion:%2019.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
------------

- Kitti U. <kittiu@ecosoft.co.th>
- `Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>`__

- Bhavesh Heliconia

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/19.0/purchase_request_substate>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions purchase_request_substate/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
19 changes: 19 additions & 0 deletions purchase_request_substate/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright 2021 Ecosoft (<http://ecosoft.co.th>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Purchase Request Sub State",
"version": "19.0.1.0.0",
"category": "Tools",
"author": "Ecosoft,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/purchase-workflow",
"license": "AGPL-3",
"depends": ["base_substate", "purchase_request"],
"data": [
"views/purchase_request_views.xml",
"data/purchase_substate_mail_template_data.xml",
"data/purchase_request_substate_data.xml",
],
"demo": ["demo/purchase_request_substate_demo.xml"],
"installable": True,
}
19 changes: 19 additions & 0 deletions purchase_request_substate/data/purchase_request_substate_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="base_substate_type_purchase_request" model="base.substate.type">
<field name="name">Purchase Request Substate</field>
<field name="model">purchase.request</field>
<field name="target_state_field">state</field>
</record>
<!-- Purchase request related substate to state (to_approve, approved) -->
<record id="target_state_value_to_approve" model="target.state.value">
<field name="name">To be approved</field>
<field name="base_substate_type_id" ref="base_substate_type_purchase_request" />
<field name="target_state_value">to_approve</field>
</record>
<record id="target_state_value_approved" model="target.state.value">
<field name="name">Approved</field>
<field name="base_substate_type_id" ref="base_substate_type_purchase_request" />
<field name="target_state_value">approved</field>
</record>
</odoo>
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record
id="mail_template_data_purchase_request_substate_verified"
model="mail.template"
>
<field name="name">Verified</field>
<field name="model_id" ref="purchase_request.model_purchase_request" />
<field name="subject">Your purchase request ${object.name} is verified</field>
<field name="use_default_to" eval="True" />
<field name="body_html" type="html">
<div>
Dear ${object.requested_by.name or 'requester'},<br />
This email is to inform that your purchase request ${object.name} was verified by procurement team.
<br /><br />
Thank you,
<br />
</div>
</field>
<field name="auto_delete" eval="True" />
</record>
</odoo>
23 changes: 23 additions & 0 deletions purchase_request_substate/demo/purchase_request_substate_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- to_approve -->
<record id="base_substate_to_verify" model="base.substate">
<field name="name">To Verify</field>
<field name="sequence">1</field>
<field name="target_state_value_id" ref="target_state_value_to_approve" />
</record>
<record id="base_substate_checked" model="base.substate">
<field name="name">Checked</field>
<field name="sequence">2</field>
<field name="target_state_value_id" ref="target_state_value_to_approve" />
</record>
<record id="base_substate_verified" model="base.substate">
<field name="name">Verified</field>
<field name="sequence">3</field>
<field name="target_state_value_id" ref="target_state_value_to_approve" />
<field
name="mail_template_id"
ref="purchase_request_substate.mail_template_data_purchase_request_substate_verified"
/>
</record>
</odoo>
96 changes: 96 additions & 0 deletions purchase_request_substate/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_request_substate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-07-21 14:57+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.4\n"

#. module: purchase_request_substate
#: model:mail.template,body_html:purchase_request_substate.mail_template_data_purchase_request_substate_verified
msgid ""
"<div>\n"
" Dear ${object.requested_by.name or 'requester'},<br/>\n"
" This email is to inform that your purchase request ${object.name} was verified by procurement team.\n"
" <br/><br/>\n"
" Thank you,\n"
" <br/>\n"
"</div>\n"
" "
msgstr ""
"<div>\n"
"Gentile ${object.requested_by.name o 'requester'},<br/>\n"
"Questa e-mail la informa che la sua richiesta di acquisto ${object.name} è "
"stata verificata dal team acquisti.\n"
"<br/><br/>\n"
"Grazie,\n"
"<br/>\n"
"</div>\n"
" "

#. module: purchase_request_substate
#: model:ir.model.fields,field_description:purchase_request_substate.field_base_substate_type__model
msgid "Apply on"
msgstr "Applica a"

#. module: purchase_request_substate
#: model:target.state.value,name:purchase_request_substate.target_state_value_approved
msgid "Approved"
msgstr "Approvata"

#. module: purchase_request_substate
#: model:ir.model,name:purchase_request_substate.model_base_substate_type
msgid "Base Substate Type"
msgstr "Tipo substato base"

#. module: purchase_request_substate
#: model:base.substate,name:purchase_request_substate.base_substate_checked
msgid "Checked"
msgstr "Selezionato"

#. module: purchase_request_substate
#: model:ir.model,name:purchase_request_substate.model_purchase_request
#: model:ir.model.fields.selection,name:purchase_request_substate.selection__base_substate_type__model__purchase_request
msgid "Purchase Request"
msgstr "Richiesta di acquisto"

#. module: purchase_request_substate
#: model:base.substate.type,name:purchase_request_substate.base_substate_type_purchase_request
msgid "Purchase Request Substate"
msgstr "Substato richiesta di acquisto"

#. module: purchase_request_substate
#: model:ir.model.fields,field_description:purchase_request_substate.field_purchase_request__substate_id
msgid "Sub State"
msgstr "Substato"

#. module: purchase_request_substate
#: model:base.substate,name:purchase_request_substate.base_substate_to_verify
msgid "To Verify"
msgstr "Da verificare"

#. module: purchase_request_substate
#: model:target.state.value,name:purchase_request_substate.target_state_value_to_approve
msgid "To be approved"
msgstr "Da approvare"

#. module: purchase_request_substate
#: model:base.substate,name:purchase_request_substate.base_substate_verified
#: model:mail.template,name:purchase_request_substate.mail_template_data_purchase_request_substate_verified
msgid "Verified"
msgstr "Verificato"

#. module: purchase_request_substate
#: model:mail.template,subject:purchase_request_substate.mail_template_data_purchase_request_substate_verified
msgid "Your purchase request ${object.name} is verified"
msgstr "La sua richiesta di acquisto ${object.name} è verificata"
84 changes: 84 additions & 0 deletions purchase_request_substate/i18n/purchase_request_substate.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_request_substate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.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_request_substate
#: model:mail.template,body_html:purchase_request_substate.mail_template_data_purchase_request_substate_verified
msgid ""
"<div>\n"
" Dear ${object.requested_by.name or 'requester'},<br/>\n"
" This email is to inform that your purchase request ${object.name} was verified by procurement team.\n"
" <br/><br/>\n"
" Thank you,\n"
" <br/>\n"
"</div>\n"
" "
msgstr ""

#. module: purchase_request_substate
#: model:ir.model.fields,field_description:purchase_request_substate.field_base_substate_type__model
msgid "Apply on"
msgstr ""

#. module: purchase_request_substate
#: model:target.state.value,name:purchase_request_substate.target_state_value_approved
msgid "Approved"
msgstr ""

#. module: purchase_request_substate
#: model:ir.model,name:purchase_request_substate.model_base_substate_type
msgid "Base Substate Type"
msgstr ""

#. module: purchase_request_substate
#: model:base.substate,name:purchase_request_substate.base_substate_checked
msgid "Checked"
msgstr ""

#. module: purchase_request_substate
#: model:ir.model,name:purchase_request_substate.model_purchase_request
#: model:ir.model.fields.selection,name:purchase_request_substate.selection__base_substate_type__model__purchase_request
msgid "Purchase Request"
msgstr ""

#. module: purchase_request_substate
#: model:base.substate.type,name:purchase_request_substate.base_substate_type_purchase_request
msgid "Purchase Request Substate"
msgstr ""

#. module: purchase_request_substate
#: model:ir.model.fields,field_description:purchase_request_substate.field_purchase_request__substate_id
msgid "Sub State"
msgstr ""

#. module: purchase_request_substate
#: model:base.substate,name:purchase_request_substate.base_substate_to_verify
msgid "To Verify"
msgstr ""

#. module: purchase_request_substate
#: model:target.state.value,name:purchase_request_substate.target_state_value_to_approve
msgid "To be approved"
msgstr ""

#. module: purchase_request_substate
#: model:base.substate,name:purchase_request_substate.base_substate_verified
#: model:mail.template,name:purchase_request_substate.mail_template_data_purchase_request_substate_verified
msgid "Verified"
msgstr ""

#. module: purchase_request_substate
#: model:mail.template,subject:purchase_request_substate.mail_template_data_purchase_request_substate_verified
msgid "Your purchase request ${object.name} is verified"
msgstr ""
1 change: 1 addition & 0 deletions purchase_request_substate/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import purchase_request
19 changes: 19 additions & 0 deletions purchase_request_substate/models/purchase_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright 2021 Ecosoft (<http://ecosoft.co.th>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import fields, models


class BaseSubstateType(models.Model):
_inherit = "base.substate.type"

model = fields.Selection(
selection_add=[("purchase.request", "Purchase Request")],
ondelete={"purchase.request": "cascade"},
)


class PurchaseRequest(models.Model):
_name = "purchase.request"
_inherit = ["purchase.request", "base.substate.mixin"]
_state_field = "state"
3 changes: 3 additions & 0 deletions purchase_request_substate/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
Loading
Loading