Initial commit: OCA Technical packages (595 packages)

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

View file

@ -0,0 +1,46 @@
# Confirmation Wizard
Odoo addon: confirmation_wizard
## Installation
```bash
pip install odoo-bringout-oca-server-ux-confirmation_wizard
```
## Dependencies
This addon depends on:
- base
## Manifest Information
- **Name**: Confirmation Wizard
- **Version**: 16.0.1.0.0
- **Category**: Tools
- **License**: LGPL-3
- **Installable**: True
## Source
Based on [OCA/server-ux](https://github.com/OCA/server-ux) branch 16.0, addon `confirmation_wizard`.
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- 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,119 @@
===================
Confirmation Wizard
===================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:7c09aec540a642f981c869d8ce3465f373296e5c5f84568e5483476a93c82014
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github
:target: https://github.com/OCA/server-ux/tree/16.0/confirmation_wizard
:alt: OCA/server-ux
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-ux-16-0/server-ux-16-0-confirmation_wizard
: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/server-ux&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
The module lets the developer trigger a confirmation wizard during any action in Odoo. Based on data passed to the wizard and, based on user input, executes specified methods or close wizard.
**Table of contents**
.. contents::
:local:
Usage
=====
To create configuration wizard:
Use confirm wizard which return method (return_type = method):
.. code-block:: python
def change_address(self, address):
# Confirmation wizard
action = (
self.env["confirmation.wizard"]
.confirm_message(
_("Do you want to change the partner's address?"),
records=self.env["res.partner"].browse(1), # One or more records
title="Confirm",
method="change_address",
callback_params={"address": address}
)
)
if action:
return action
... # Your code here
Use confirm wizard which does nothing and closes itself when clicking confirm (return_type = window_close):
.. code-block:: python
def method(self):
...
return (
self.env["confirmation.wizard"]
.with_context(hide_cancel=True)
.confirm_no_action_message(
message="Message",
title="Notification"
)
)
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-ux/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/server-ux/issues/new?body=module:%20confirmation_wizard%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
~~~~~~~
* Cetmix
Contributors
~~~~~~~~~~~~
* `Cetmix <cetmix.com>`_:
* Ivan Sokolov
* Mikhail Lapin
* Maksim Shurupov
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/server-ux <https://github.com/OCA/server-ux/tree/16.0/confirmation_wizard>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

@ -0,0 +1,21 @@
# Copyright (C) 2024 Cetmix OÜ
# License LGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Confirmation Wizard",
"summary": """
This module adds a confirmation wizard that can be called with code.
It does nothing by itself.
""",
"version": "16.0.1.0.0",
"category": "Tools",
"website": "https://github.com/OCA/server-ux",
"author": "Cetmix, Odoo Community Association (OCA)",
"license": "LGPL-3",
"application": False,
"installable": True,
"depends": ["base"],
"data": [
"security/ir.model.access.csv",
"wizard/confirmation_wizard.xml",
],
}

View file

@ -0,0 +1,126 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * confirmation_wizard
#
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: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__callback_method
msgid "Callback Method"
msgstr "Callback metoda"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__callback_params
msgid "Callback Params"
msgstr "Callback parametri"
#. module: confirmation_wizard
#: model_terms:ir.ui.view,arch_db:confirmation_wizard.confirmation_wizard_form_view
msgid "Cancel"
msgstr "Otkaži"
#. module: confirmation_wizard
#: model_terms:ir.ui.view,arch_db:confirmation_wizard.confirmation_wizard_form_view
msgid "Confirm"
msgstr "Potvrdi"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__message
msgid "Confirm Message"
msgstr "Poruka potvrde"
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#: model:ir.actions.act_window,name:confirmation_wizard.confirmation_wizard_action
#, python-format
msgid "Confirmation"
msgstr "Potvrda"
#. module: confirmation_wizard
#: model:ir.model,name:confirmation_wizard.model_confirmation_wizard
msgid "Confirmation Wizard"
msgstr "Čarobnjak potvrde"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__id
msgid "ID"
msgstr "ID"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#, python-format
msgid "Method '%(callback_method)s' is not found on model '%(res_model)s'."
msgstr "Metoda '%(callback_method)s' nije pronađena na modelu '%(res_model)s'."
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#, python-format
msgid "Records (IDS: '%(ids)s') not found in model '%(model)s'."
msgstr "Zapisi (ID-jevi: '%(ids)s') nisu pronađeni u modelu '%(model)s'."
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__res_ids
msgid "Res"
msgstr "Res"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__res_model
msgid "Res Model"
msgstr "Res model"
#. module: confirmation_wizard
#: model:ir.model.fields.selection,name:confirmation_wizard.selection__confirmation_wizard__return_type__method
msgid "Return Method"
msgstr "Metoda povrata"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__return_type
msgid "Return Type"
msgstr "Tip povrata"
#. module: confirmation_wizard
#: model:ir.model.fields.selection,name:confirmation_wizard.selection__confirmation_wizard__return_type__window_close
msgid "Return Window Close Action"
msgstr "Akcija zatvaranja prozora povrata"

View file

@ -0,0 +1,126 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * confirmation_wizard
#
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: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__callback_method
msgid "Callback Method"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__callback_params
msgid "Callback Params"
msgstr ""
#. module: confirmation_wizard
#: model_terms:ir.ui.view,arch_db:confirmation_wizard.confirmation_wizard_form_view
msgid "Cancel"
msgstr ""
#. module: confirmation_wizard
#: model_terms:ir.ui.view,arch_db:confirmation_wizard.confirmation_wizard_form_view
msgid "Confirm"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__message
msgid "Confirm Message"
msgstr ""
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#: model:ir.actions.act_window,name:confirmation_wizard.confirmation_wizard_action
#, python-format
msgid "Confirmation"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model,name:confirmation_wizard.model_confirmation_wizard
msgid "Confirmation Wizard"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__create_uid
msgid "Created by"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__create_date
msgid "Created on"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__display_name
msgid "Display Name"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__id
msgid "ID"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard____last_update
msgid "Last Modified on"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__write_uid
msgid "Last Updated by"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__write_date
msgid "Last Updated on"
msgstr ""
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#, python-format
msgid "Method '%(callback_method)s' is not found on model '%(res_model)s'."
msgstr ""
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#, python-format
msgid "Records (IDS: '%(ids)s') not found in model '%(model)s'."
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__res_ids
msgid "Res"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__res_model
msgid "Res Model"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields.selection,name:confirmation_wizard.selection__confirmation_wizard__return_type__method
msgid "Return Method"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__return_type
msgid "Return Type"
msgstr ""
#. module: confirmation_wizard
#: model:ir.model.fields.selection,name:confirmation_wizard.selection__confirmation_wizard__return_type__window_close
msgid "Return Window Close Action"
msgstr ""

View file

@ -0,0 +1,131 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * confirmation_wizard
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-02-26 11:06+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__callback_method
msgid "Callback Method"
msgstr "Metodo callback"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__callback_params
msgid "Callback Params"
msgstr "Parametri callback"
#. module: confirmation_wizard
#: model_terms:ir.ui.view,arch_db:confirmation_wizard.confirmation_wizard_form_view
msgid "Cancel"
msgstr "Annulla"
#. module: confirmation_wizard
#: model_terms:ir.ui.view,arch_db:confirmation_wizard.confirmation_wizard_form_view
msgid "Confirm"
msgstr "Conferma"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__message
msgid "Confirm Message"
msgstr "Messaggio di conferma"
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#: model:ir.actions.act_window,name:confirmation_wizard.confirmation_wizard_action
#, python-format
msgid "Confirmation"
msgstr "Conferma"
#. module: confirmation_wizard
#: model:ir.model,name:confirmation_wizard.model_confirmation_wizard
msgid "Confirmation Wizard"
msgstr "Procedura guidata conferma"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__create_date
msgid "Created on"
msgstr "Creato il"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__id
msgid "ID"
msgstr "ID"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#, python-format
msgid "Method '%(callback_method)s' is not found on model '%(res_model)s'."
msgstr ""
"Il metodo '%(callback_method)s' inon è stato trovato nel modello "
"'%(res_model)s'."
#. module: confirmation_wizard
#. odoo-python
#: code:addons/confirmation_wizard/wizard/confirmation_wizard.py:0
#, python-format
msgid "Records (IDS: '%(ids)s') not found in model '%(model)s'."
msgstr "I record (ID: '%(ids)s') non trovati nel modello '%(model)s'."
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__res_ids
msgid "Res"
msgstr "Res"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__res_model
msgid "Res Model"
msgstr "Modello res"
#. module: confirmation_wizard
#: model:ir.model.fields.selection,name:confirmation_wizard.selection__confirmation_wizard__return_type__method
msgid "Return Method"
msgstr "Metodo risposta"
#. module: confirmation_wizard
#: model:ir.model.fields,field_description:confirmation_wizard.field_confirmation_wizard__return_type
msgid "Return Type"
msgstr "Tipo risposta"
#. module: confirmation_wizard
#: model:ir.model.fields.selection,name:confirmation_wizard.selection__confirmation_wizard__return_type__window_close
msgid "Return Window Close Action"
msgstr "Risposta azione chiusura finestra"

View file

@ -0,0 +1,4 @@
* `Cetmix <cetmix.com>`_:
* Ivan Sokolov
* Mikhail Lapin
* Maksim Shurupov

View file

@ -0,0 +1 @@
The module lets the developer trigger a confirmation wizard during any action in Odoo. Based on data passed to the wizard and, based on user input, executes specified methods or close wizard.

View file

@ -0,0 +1,36 @@
To create configuration wizard:
Use confirm wizard which return method (return_type = method):
.. code-block:: python
def change_address(self, address):
# Confirmation wizard
action = (
self.env["confirmation.wizard"]
.confirm_message(
_("Do you want to change the partner's address?"),
records=self.env["res.partner"].browse(1), # One or more records
title="Confirm",
method="change_address",
callback_params={"address": address}
)
)
if action:
return action
... # Your code here
Use confirm wizard which does nothing and closes itself when clicking confirm (return_type = window_close):
.. code-block:: python
def method(self):
...
return (
self.env["confirmation.wizard"]
.with_context(hide_cancel=True)
.confirm_no_action_message(
message="Message",
title="Notification"
)
)

View file

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_confirmation_wizard,access.confirmation.wizard,model_confirmation_wizard,base.group_system,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_confirmation_wizard access.confirmation.wizard model_confirmation_wizard base.group_system 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,468 @@
<!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>Confirmation Wizard</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="confirmation-wizard">
<h1 class="title">Confirmation Wizard</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:7c09aec540a642f981c869d8ce3465f373296e5c5f84568e5483476a93c82014
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-ux/tree/16.0/confirmation_wizard"><img alt="OCA/server-ux" src="https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-ux-16-0/server-ux-16-0-confirmation_wizard"><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/server-ux&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>The module lets the developer trigger a confirmation wizard during any action in Odoo. Based on data passed to the wizard and, based on user input, executes specified methods or close wizard.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>To create configuration wizard:</p>
<p>Use confirm wizard which return method (return_type = method):</p>
<pre class="code python literal-block">
<span class="k">def</span><span class="w"> </span><span class="nf">change_address</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span><span class="w">
</span> <span class="c1"># Confirmation wizard</span><span class="w">
</span> <span class="n">action</span> <span class="o">=</span> <span class="p">(</span><span class="w">
</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">&quot;confirmation.wizard&quot;</span><span class="p">]</span><span class="w">
</span> <span class="o">.</span><span class="n">confirm_message</span><span class="p">(</span><span class="w">
</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Do you want to change the partner's address?&quot;</span><span class="p">),</span><span class="w">
</span> <span class="n">records</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">&quot;res.partner&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">browse</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="c1"># One or more records</span><span class="w">
</span> <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Confirm&quot;</span><span class="p">,</span><span class="w">
</span> <span class="n">method</span><span class="o">=</span><span class="s2">&quot;change_address&quot;</span><span class="p">,</span><span class="w">
</span> <span class="n">callback_params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;address&quot;</span><span class="p">:</span> <span class="n">address</span><span class="p">}</span><span class="w">
</span> <span class="p">)</span><span class="w">
</span> <span class="p">)</span><span class="w">
</span> <span class="k">if</span> <span class="n">action</span><span class="p">:</span><span class="w">
</span> <span class="k">return</span> <span class="n">action</span><span class="w">
</span> <span class="o">...</span> <span class="c1"># Your code here</span>
</pre>
<p>Use confirm wizard which does nothing and closes itself when clicking confirm (return_type = window_close):</p>
<pre class="code python literal-block">
<span class="k">def</span><span class="w"> </span><span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span><span class="w">
</span> <span class="o">...</span><span class="w">
</span> <span class="k">return</span> <span class="p">(</span><span class="w">
</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">&quot;confirmation.wizard&quot;</span><span class="p">]</span><span class="w">
</span> <span class="o">.</span><span class="n">with_context</span><span class="p">(</span><span class="n">hide_cancel</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="w">
</span> <span class="o">.</span><span class="n">confirm_no_action_message</span><span class="p">(</span><span class="w">
</span> <span class="n">message</span><span class="o">=</span><span class="s2">&quot;Message&quot;</span><span class="p">,</span><span class="w">
</span> <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Notification&quot;</span><span class="w">
</span> <span class="p">)</span><span class="w">
</span> <span class="p">)</span>
</pre>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-ux/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/server-ux/issues/new?body=module:%20confirmation_wizard%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Cetmix</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li><dl class="first docutils">
<dt><a class="reference external" href="cetmix.com">Cetmix</a>:</dt>
<dd><ul class="first last">
<li>Ivan Sokolov</li>
<li>Mikhail Lapin</li>
<li>Maksim Shurupov</li>
</ul>
</dd>
</dl>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-ux/tree/16.0/confirmation_wizard">OCA/server-ux</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,98 @@
from odoo.exceptions import UserError
from odoo.tests import TransactionCase
class TestConfirmationWizard(TransactionCase):
def setUp(self):
super().setUp()
self.partner = self.env["res.partner"].create(
{
"name": "Test Partner",
}
)
def test_confirm_message(self):
"""Test flow when create confirmation wizard with method"""
confirmation_wizard_obj = self.env["confirmation.wizard"]
# Default behavior
action = confirmation_wizard_obj.confirm_message(
"Message Test",
self.partner,
)
excepted_action = self.env["ir.actions.actions"]._for_xml_id(
"confirmation_wizard.confirmation_wizard_action"
)
excepted_action["context"] = self.env.context
# Wizard with title and context
excepted_title = "Confirm Wizard"
action = confirmation_wizard_obj.with_context(hide_cancel=True).confirm_message(
"Message Test", self.partner, title=excepted_title
)
self.assertEqual(action["name"], excepted_title, "Title must be the same")
self.assertTrue(
action["context"]["hide_cancel"], "Invisible Cancel must be True"
)
def test_confirm_no_action_message(self):
"""Test flow when create confirmation wizard with window close"""
confirmation_wizard_obj = self.env["confirmation.wizard"]
excepted_title = "Confirm Wizard"
action = confirmation_wizard_obj.confirm_message(
"Message Test", self.partner, title=excepted_title
)
self.assertEqual(action["name"], excepted_title, "Title must be the same")
def test_action_confirm_method(self):
"""Test flow when confirm wizard with return type method"""
vals = {
"message": "Message Test",
"res_ids": "",
"return_type": "method",
"res_model": "res.partner",
"callback_method": "",
"callback_params": {},
}
wizard = self.env["confirmation.wizard"].create(vals)
with self.assertRaises(UserError) as e:
wizard.action_confirm()
self.assertEqual(
str(e.exception), "Records (IDS: '') not found in model 'res.partner'."
)
vals1 = {**vals, "res_ids": ",".join(map(str, self.partner.ids))}
wizard = self.env["confirmation.wizard"].create(vals1)
with self.assertRaises(UserError) as e:
wizard.action_confirm()
self.assertEqual(
str(e.exception), "Method '' is not found on model 'res.partner'."
)
vals2 = {
**vals1,
"callback_method": "write",
"callback_params": {"vals": {"name": "New Partner #1"}},
}
wizard = self.env["confirmation.wizard"].create(vals2)
result = wizard.action_confirm()
self.assertTrue(result, "Result must be True")
self.assertEqual(
self.partner.name,
"New Partner #1",
"Partner name must be equal to 'New Partner #1'",
)
def test_action_confirm_window_close(self):
"""Test flow when confirm wizard with return type window close"""
wizard = self.env["confirmation.wizard"].create(
{
"message": "Message Confirmation Text",
"return_type": "window_close",
}
)
result = wizard.action_confirm()
self.assertDictEqual(
result, {"type": "ir.actions.act_window_close"}, "Dicts must be the same"
)

View file

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

View file

@ -0,0 +1,122 @@
# Copyright (C) 2024 Cetmix OÜ
# License LGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from ast import literal_eval
from odoo import _, api, fields, models
class ConfirmationWizard(models.TransientModel):
_name = "confirmation.wizard"
_description = "Confirmation Wizard"
message = fields.Char(string="Confirm Message", required=True)
res_ids = fields.Char()
res_model = fields.Char()
callback_method = fields.Char()
callback_params = fields.Json()
return_type = fields.Selection(
[
("window_close", "Return Window Close Action"),
("method", "Return Method"),
],
default="window_close",
required=True,
)
@api.model
def _prepare_action(self, title=None):
"""
Prepare confirmation wizard
:param title: wizard title
"""
action = self.env["ir.actions.act_window"]._for_xml_id(
"confirmation_wizard.confirmation_wizard_action"
)
action.update(
{
"name": title or _("Confirmation"),
"res_id": self.id,
"context": self._context,
}
)
return action
@api.model
def confirm_message(
self, message, records, title=None, method=None, callback_params=None
) -> dict | None:
"""
Confirm message with method return type
context: hide_cancel = True to hide confirm button
:param message: confirmation message
:param records: record set
:param title: wizard title
:param method: triggered method
:param callback_params: method arguments
:return dict: ir actions act window dict
"""
if self._context.get("skip_confirm_message"):
return
wizard = self.create(
{
"message": message,
"res_ids": repr(records.ids),
"return_type": "method",
"res_model": records._name,
"callback_method": method,
"callback_params": callback_params or {},
}
)
return wizard.with_context(skip_confirm_message=True)._prepare_action(title)
@api.model
def confirm_no_action_message(self, message, title=None) -> dict | None:
"""
Confirm message with close window return type
context: hide_cancel = True to hide confirm button
:param message: confirmation message
:param title: wizard title
:return dict: ir actions act window dict
"""
if self._context.get("skip_confirm_no_action_message"):
return
wizard = self.create(
{
"message": message,
"return_type": "window_close",
}
)
return wizard.with_context(skip_confirm_message=True)._prepare_action(title)
def _confirm_window_close(self):
"""Action confirm for return type window close"""
return {"type": "ir.actions.act_window_close"}
def _confirm_method(self):
"""Action confirm for return type method"""
res_ids = literal_eval(self.res_ids) if self.res_ids else []
records = self.env[self.res_model].browse(res_ids)
if not records.exists():
raise models.UserError(
_("Records (IDS: '%(ids)s') not found in model '%(model)s'.")
% {"ids": self.res_ids, "model": self.res_model}
)
if not hasattr(records, self.callback_method):
raise models.UserError(
_("Method '%(callback_method)s' is not found on model '%(res_model)s'.")
% {"callback_method": self.callback_method, "res_model": self.res_model}
)
params = self.callback_params or {}
return getattr(records, self.callback_method)(**params)
def action_confirm(self):
"""Action confirm wizard"""
method = getattr(self, f"_confirm_{self.return_type}", None)
return method()

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="confirmation_wizard_form_view" model="ir.ui.view">
<field name="name">confirmation.wizard.form.view</field>
<field name="model">confirmation.wizard</field>
<field name="arch" type="xml">
<form>
<field name="message" readonly="1" />
<footer>
<button
string="Confirm"
type="object"
name="action_confirm"
class="btn-primary"
/>
<button
string="Cancel"
class="btn-secondary"
special="cancel"
data-hotkey="z"
invisible="context.get('hide_cancel')"
/>
</footer>
</form>
</field>
</record>
<record id="confirmation_wizard_action" model="ir.actions.act_window">
<field name="name">Confirmation</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">confirmation.wizard</field>
<field name="view_mode">form</field>
<field name="view_id" ref="confirmation_wizard_form_view" />
<field name="target">new</field>
</record>
</odoo>

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 Confirmation_wizard Module - confirmation_wizard
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 confirmation_wizard. 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:
- base

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 confirmation_wizard or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-server-ux-confirmation_wizard"
# or
uv pip install odoo-bringout-oca-server-ux-confirmation_wizard"
```

View file

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

View file

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

View file

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

View file

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

View file

@ -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 confirmation_wizard
```

View file

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

View file

@ -0,0 +1,45 @@
[project]
name = "odoo-bringout-oca-server-ux-confirmation_wizard"
version = "16.0.0"
description = "Confirmation Wizard -
This module adds a confirmation wizard that can be called with code.
It does nothing by itself.
"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-base>=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 = ["confirmation_wizard"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]