[IMP] partner_profiles: refactoring of position profile creation
This commit is contained in:
committed by
Stéphan Sainléger
parent
379b598754
commit
a4c1c467c5
3
partner_profiles/wizard/__init__.py
Normal file
3
partner_profiles/wizard/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import create_position_profile
|
66
partner_profiles/wizard/create_position_profile.py
Normal file
66
partner_profiles/wizard/create_position_profile.py
Normal file
@@ -0,0 +1,66 @@
|
||||
# Copyright 2022 Elabore (https://elabore.coop)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
class CreatePositionProfile(models.TransientModel):
|
||||
_name = "create.position.profile"
|
||||
_description = "create Position Profile"
|
||||
|
||||
@api.model
|
||||
def _default_is_company(self):
|
||||
return self.env['res.partner'].browse(self._context.get('active_ids')).is_company
|
||||
|
||||
@api.model
|
||||
def _default_structure_id(self):
|
||||
current_partner_id = self.env['res.partner'].browse(self._context.get('active_ids'))
|
||||
if current_partner_id.is_company:
|
||||
return current_partner_id.id
|
||||
else:
|
||||
return None
|
||||
|
||||
@api.model
|
||||
def _default_partner_id(self):
|
||||
current_partner_id = self.env['res.partner'].browse(self._context.get('active_ids'))
|
||||
if not current_partner_id.is_company:
|
||||
return current_partner_id.id
|
||||
else:
|
||||
return None
|
||||
|
||||
is_company = fields.Boolean('Is Company', default=_default_is_company)
|
||||
structure_id = fields.Many2one('res.partner', string='Structure', domain="[('is_company', '=', True), ('is_main_profile', '=', True)]", default=_default_structure_id )
|
||||
partner_id = fields.Many2one('res.partner', string='Person', domain="[('is_company', '=', False), ('is_main_profile', '=', True)]", default=_default_partner_id)
|
||||
function = fields.Char('Function')
|
||||
phone = fields.Char('Phone')
|
||||
email = fields.Char('Email')
|
||||
comment = fields.Text('Notes')
|
||||
|
||||
def _compute_position_profile_values(self):
|
||||
values= {
|
||||
"contact_id": self.partner_id.id,
|
||||
"parent_id": self.structure_id.id,
|
||||
"function": self.function,
|
||||
"name": self.partner_id.name,
|
||||
"phone": self.phone,
|
||||
"email": self.email,
|
||||
"comment" : self.comment,
|
||||
"partner_profile": self.env.ref("partner_profiles.partner_profile_position").id
|
||||
}
|
||||
return values
|
||||
|
||||
|
||||
@api.multi
|
||||
def create_position_profile(self):
|
||||
values = self._compute_position_profile_values()
|
||||
position_partner_id = self.env["res.partner"].create(values)
|
||||
view = self.env.ref("base.view_partner_form")
|
||||
return {
|
||||
"name": "Position Partner created",
|
||||
"view_type": "form",
|
||||
"view_mode": "form",
|
||||
"view_id": view.id,
|
||||
"res_model": "res.partner",
|
||||
"type": "ir.actions.act_window",
|
||||
"res_id": position_partner_id.id,
|
||||
"context": self.env.context,
|
||||
}
|
51
partner_profiles/wizard/create_position_profile.xml
Normal file
51
partner_profiles/wizard/create_position_profile.xml
Normal file
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="create_position_wizard_view_form" model="ir.ui.view">
|
||||
<field name="name">create.position.wizard.view.form</field>
|
||||
<field name="model">create.position.profile</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Create a position profile">
|
||||
<sheet>
|
||||
<div class="alert alert-info" role="alert" style="margin-bottom:0px;">
|
||||
<span>You are about to create a <strong>Position Profile</strong> which
|
||||
represents the role or the job of a person in a structure.</span>
|
||||
</div>
|
||||
<group>
|
||||
<field name="is_company" invisible="1" />
|
||||
<field name="structure_id"
|
||||
attrs="{'readonly': [('is_company','=',True)], 'required': [('is_company','=',False)]}" />
|
||||
<field name="partner_id"
|
||||
attrs="{'readonly': [('is_company','=',False)], 'required': [('is_company','=',True)]}" />
|
||||
<field name="function" />
|
||||
<field name="email" />
|
||||
<field name="phone" />
|
||||
<field name="comment" />
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button string="Create" name="create_position_profile" type="object"
|
||||
class="btn-primary" />
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_create_position_profile_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Create Position Profile</field>
|
||||
<field name="res_model">create.position.profile</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="create_position_wizard_view_form" />
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<act_window name="Create Position Profile"
|
||||
res_model="create.position.profile"
|
||||
src_model="res.partner"
|
||||
multi="True"
|
||||
key2="client_action_multi"
|
||||
view_mode="form"
|
||||
id="action_create_position_profile_wizard" />
|
||||
|
||||
</odoo>
|
Reference in New Issue
Block a user