Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[12.0][MIG] multi_step_wizard #83

Closed
Closed
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
165 changes: 165 additions & 0 deletions multi_step_wizard/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
===================
Multi-Steps Wizards
===================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--ux-lightgray.png?logo=github
:target: https://github.com/OCA/server-ux/tree/12.0/multi_step_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-12-0/server-ux-12-0-multi_step_wizard
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/250/12.0
:alt: Try me on Runbot

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

This module is a base for creating multi-steps wizards. It does nothing by
itself.

**Table of contents**

.. contents::
:local:

Usage
=====

Example of class:

.. code:: python

class MyWizard(models.TransientModel):
_name = 'my.wizard'
_inherit = ['multi.step.wizard.mixin']

project_id = fields.Many2one(
comodel_name='project.project',
name="Project",
required=True,
ondelete='cascade',
default=lambda self: self._default_project_id(),
)
name = fields.Char()
field1 = fields.Char()
field2 = fields.Char()
field3 = fields.Char()

@api.model
def _selection_state(self):
return [
('start', 'Start'),
('configure', 'Configure'),
('custom', 'Customize'),
('final', 'Final'),
]

@api.model
def _default_project_id(self):
return self.env.context.get('active_id')

def state_exit_start(self):
self.state = 'configure'

def state_exit_configure(self):
self.state = 'custom'

def state_exit_custom(self):
self.state = 'final'

Example of view (note the mode, must be primary):

.. code:: xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="my_wizard_form" model="ir.ui.view">
<field name="name">my.wizard.form</field>
<field name="model">my.wizard</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="multi_step_wizard.multi_step_wizard_form"/>
<field name="arch" type="xml">
<xpath expr="//footer" position="before">
<h1>
<field name="name"
attrs="{'readonly': [('state', '!=', 'start')]}"
class="oe_inline"
placeholder="Name"/>
</h1>
<group name="configure" attrs="{'invisible': [('state', '!=', 'configure')]}">
<group>
<field name="field1"/>
<field name="field2"/>
</group>
</group>
<group name="custom" attrs="{'invisible': [('state', '!=', 'custom')]}">
<group>
<field name="field3"/>
</group>
</group>
<div name="final" attrs="{'invisible': [('state', '!=', 'final')]}">
<p>The project is now configured.</p>
</div>
</xpath>
</field>
</record>

<act_window id="open_my_wizard"
name="My Wizard"
res_model="my.wizard"
src_model="project.project"
view_mode="form" target="new" view_type="form" />
</odoo>

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 smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-ux/issues/new?body=module:%20multi_step_wizard%0Aversion:%2012.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
~~~~~~~

* Camptocamp

Contributors
~~~~~~~~~~~~

* Guewen Baconnier <guewen.baconnier@camptocamp.com>
* Alexey Pelykh <alexey.pelykh@brainbeanapps.com>

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/12.0/multi_step_wizard>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
4 changes: 4 additions & 0 deletions multi_step_wizard/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from . import models
from .tests import multi_step_wizard_test
16 changes: 16 additions & 0 deletions multi_step_wizard/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

{
'name': 'Multi-Steps Wizards',
'version': '12.0.1.0.0',
'author': 'Camptocamp,Odoo Community Association (OCA)',
'license': 'AGPL-3',
'depends': [
'base',
],
'website': 'https://github.com/OCA/server-ux',
'data': [
'views/multi_step_wizard_views.xml',
],
'installable': True,
}
57 changes: 57 additions & 0 deletions multi_step_wizard/i18n/multi_step_wizard.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * multi_step_wizard
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.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: multi_step_wizard
#: model:ir.ui.view,arch_db:multi_step_wizard.multi_step_wizard_form
msgid "Cancel"
msgstr ""

#. module: multi_step_wizard
#: model:ir.ui.view,arch_db:multi_step_wizard.multi_step_wizard_form
msgid "Close"
msgstr ""

#. module: multi_step_wizard
#: model:ir.model.fields,field_description:multi_step_wizard.field_multi_step_wizard_mixin_display_name
msgid "Display Name"
msgstr ""

#. module: multi_step_wizard
#: model:ir.model.fields,field_description:multi_step_wizard.field_multi_step_wizard_mixin_id
msgid "ID"
msgstr ""

#. module: multi_step_wizard
#: model:ir.model.fields,field_description:multi_step_wizard.field_multi_step_wizard_mixin___last_update
msgid "Last Modified on"
msgstr ""

#. module: multi_step_wizard
#: model:ir.model,name:multi_step_wizard.model_multi_step_wizard_mixin
msgid "Multi Steps Wizard Mixin"
msgstr ""

#. module: multi_step_wizard
#: model:ir.ui.view,arch_db:multi_step_wizard.multi_step_wizard_form
msgid "Next"
msgstr ""

#. module: multi_step_wizard
#: model:ir.model.fields,field_description:multi_step_wizard.field_multi_step_wizard_mixin_state
#: model:ir.model.fields,field_description:multi_step_wizard.field_project_link_jira_state
#: model:ir.model.fields,field_description:multi_step_wizard.field_task_link_jira_state
msgid "State"
msgstr ""

3 changes: 3 additions & 0 deletions multi_step_wizard/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from . import multi_step_wizard
64 changes: 64 additions & 0 deletions multi_step_wizard/models/multi_step_wizard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

import logging

from odoo import api, fields, models

_logger = logging.getLogger(__name__)


class MultiStepWizard(models.AbstractModel):
""" Mixin to ease the creation of multisteps wizards

_selection_state must return all possible step of
the wizard.

For each state but final, there must be a method named
"state_exit_X" where X is the name of the state. Each
of these method must set the next state in self.state.

The final state has no related method because the view
should only display a button to close the wizard.

open_next and _reopen_self should not need to be
overidden, but _selection_state and state_exit_start
likely will need to.

"""
_name = 'multi.step.wizard.mixin'
_description = 'Multi Steps Wizard Mixin'

state = fields.Selection(
selection='_selection_state',
default='start',
required=True,
)

@api.model
def _selection_state(self):
return [
('start', 'Start'),
('final', 'Final'),
]

def open_next(self):
state_method = getattr(self, 'state_exit_%s' % (self.state,), None)
if state_method is None:
raise NotImplementedError(
'No method defined for state %s' % (self.state,)
)
state_method()
return self._reopen_self()

def _reopen_self(self):
return {
'type': 'ir.actions.act_window',
'res_model': self._name,
'res_id': self.id,
'view_mode': 'form',
'target': 'new',
}

def state_exit_start(self):
self.state = 'final'
2 changes: 2 additions & 0 deletions multi_step_wizard/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* Guewen Baconnier <guewen.baconnier@camptocamp.com>
* Alexey Pelykh <alexey.pelykh@brainbeanapps.com>
alexey-pelykh marked this conversation as resolved.
Show resolved Hide resolved
2 changes: 2 additions & 0 deletions multi_step_wizard/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This module is a base for creating multi-steps wizards. It does nothing by
itself.
Loading