===================
Multi-Steps Wizards
===================

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

.. |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/16.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-16-0/server-ux-16-0-multi_step_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|

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>

    <record id="open_my_wizard" model="ir.actions.act_window">
        <field name="name">My Wizard</field>
        <field name="res_model">my.wizard</field>
        <field name="view_mode">form</field>
        <field name="target">new</field>
        <field name="binding_model_id" ref="project.model_project_project" />
        <field name="binding_view_types">form</field>
    </record>
  </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 to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-ux/issues/new?body=module:%20multi_step_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
~~~~~~~

* Camptocamp

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

* Guewen Baconnier <guewen.baconnier@camptocamp.com>
* `CorporateHub <https://corporatehub.eu/>`__

  * Alexey Pelykh <alexey.pelykh@corphub.eu>
* Sunanda Chhatbar <sunanda.chhatbar@initos.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/16.0/multi_step_wizard>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
