remove bemade_sethy_configuration from bemade-addons repo after moving it into sethy's repo directly
This commit is contained in:
parent
b439f491e5
commit
d605932e02
21 changed files with 0 additions and 931 deletions
|
|
@ -1,4 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
from . import wizard
|
||||
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'Bemade Sethy',
|
||||
'version': '1.0',
|
||||
'category': 'Specific Module Category', # Specify your module's category here
|
||||
'summary': "This module is developed by Bemade to instantiate the Sethy's Odoo",
|
||||
'author': 'Bemade',
|
||||
'website': 'https://bemade.org',
|
||||
'email': 'it@bemade.org',
|
||||
'license': 'AGPL-3',
|
||||
'depends': [
|
||||
# List of module dependencies
|
||||
'base',
|
||||
'contacts',
|
||||
'crm',
|
||||
'document_knowledge',
|
||||
'document_page',
|
||||
'document_page_approval',
|
||||
'attachment_indexation',
|
||||
'l10n_ca',
|
||||
'membership_variable_period',
|
||||
'membership_delegated_partner',
|
||||
'partner_multi_relation',
|
||||
'sale_management',
|
||||
'base_automation'
|
||||
],
|
||||
'data': [
|
||||
# Reference to XML, CSV, and other data files
|
||||
'data/membership_category_data.xml',
|
||||
'data/ir_cron_data.xml',
|
||||
'data/product_template_data.xml',
|
||||
'data/partner_category_data.xml',
|
||||
'data/partner_relation_type_data.xml',
|
||||
'data/company_data.xml',
|
||||
'views/res_partner_relation_views.xml',
|
||||
# 'views/membership_membership_line.xml',
|
||||
'views/property_view.xml',
|
||||
'views/res_partner_views.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'wizard/transfer_property_wizard_views.xml'
|
||||
],
|
||||
'demo': [
|
||||
# Reference to demo data files
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'application': True,
|
||||
'description': """
|
||||
Main module for Fondation Séthy
|
||||
==================================
|
||||
This module installs base components and will also set up default values according to the Fondation Séthy.
|
||||
|
||||
This will allow us to put all the customization here and add other modules from Oca or our repos if needed.
|
||||
|
||||
Only code specific to Fondation Sethy resides in this module, the reusable stuff should be put in other small dedicated
|
||||
modules elsewhere
|
||||
""",
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1"> <!-- noupdate="1" means the data won't be updated when the module is upgraded -->
|
||||
<!-- Assuming 'base.main_company' is the external ID for the main company -->
|
||||
<record id="base.main_company" model="res.company">
|
||||
<field name="name">Fondation Séthy</field>
|
||||
<field name="website">https://fondationsethy.org</field>
|
||||
<field name="email">info@fondationsethy.org</field>
|
||||
<field name="street">164, rue Cowie</field>
|
||||
<field name="street2">local 335</field>
|
||||
<field name="city">Granby</field>
|
||||
<field name="state_id" ref="base.state_ca_qc"/>
|
||||
<field name="zip">J2G 3V3</field>
|
||||
<field name="country_id" ref="base.ca"/>
|
||||
<field name="phone">450 994-3173</field>
|
||||
<!-- <field name="account_sale_tax_id" ref="account.1_gstqst_sale_tax_14975"/>-->
|
||||
<!-- <field name="account_purchase_tax_id" ref="account.1_gstqst_purchase_tax_14975"/>-->
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="ir_cron_mail_scheduler_action" model="ir.cron">
|
||||
<field name="name">Sethy: Update relation</field>
|
||||
<field name="model_id" ref="model_res_partner"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">partners = env['res.partner'].search([])
|
||||
for rec in partners:
|
||||
rec._compute_relation_count()
|
||||
</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">12</field>
|
||||
<field name="interval_type">months</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
<field eval="False" name="active"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1"> <!-- noupdate="1" means the data won't be updated when the module is upgraded -->
|
||||
<record id="membership_category_perpetual" model="membership.membership_category">
|
||||
<field name="name">Perpetual Membership</field>
|
||||
</record>
|
||||
<record id="membership_extension.membership_category_member" model="membership.membership_category">
|
||||
<field name="name">Annual Membership</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1"> <!-- noupdate="1" means the data won't be updated when the module is upgraded -->
|
||||
<record id="partner_tag_property" model="res.partner.category">
|
||||
<field name="name">Property</field>
|
||||
<field name="color">7</field>
|
||||
</record>
|
||||
<record id="partner_tag_owner" model="res.partner.category">
|
||||
<field name="name">Owner</field>
|
||||
<field name="color">4</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1"> <!-- noupdate="1" means the data won't be updated when the module is upgraded -->
|
||||
<record id="partner_relation_property" model="res.partner.relation.type">
|
||||
<field name="name">Owner</field>
|
||||
<field name="name_inverse">Property</field>
|
||||
<field name="contact_type_right">c</field>
|
||||
<field name="partner_category_right" ref="bemade_sethy_configuration.partner_tag_property"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<data noupdate="1"> <!-- noupdate="1" means the data won't be updated when the module is upgraded -->
|
||||
|
||||
<record id="product_membership_perpetual" model="product.template">
|
||||
<field name="membership_category_id" ref="membership_category_perpetual"/>
|
||||
<field name="name">Perpetual Membership</field>
|
||||
<field name="membership" eval="True" />
|
||||
<field name="type">service</field>
|
||||
<field name="membership_date_from">2000-01-01</field>
|
||||
<field name="membership_date_to">2100-01-01</field>
|
||||
<field name="list_price">225.0</field>
|
||||
<field name="uom_id" ref="uom.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_unit"/>
|
||||
<field name="default_code">MBRAV</field>
|
||||
</record>
|
||||
|
||||
<record id="product_membership_annual" model="product.template">
|
||||
<field name="membership_category_id" ref="membership_extension.membership_category_member"/>
|
||||
<field name="name">Annual Membership</field>
|
||||
<field name="membership" eval="True" />
|
||||
<field name="type">service</field>
|
||||
<field name="list_price">20.0</field>
|
||||
<field name="uom_id" ref="uom.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="uom.product_uom_unit"/>
|
||||
<field name="default_code">MBRAN</field>
|
||||
<field name="membership_type">variable</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
</data>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
from . import res_partner
|
||||
from . import res_config_settings
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
from odoo import models, api
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
def set_values(self):
|
||||
res = super().set_values()
|
||||
category_id = self.env.ref('bemade_sethy_configuration.partner_tag_property', raise_if_not_found=False)
|
||||
# If the category_id record exists, we set its ID in ir.config_parameter
|
||||
if category_id:
|
||||
self.env['ir.config_parameter'].sudo().set_param('bemade_sethy_configuration.partner_tag_property', category_id.id)
|
||||
return res
|
||||
|
|
@ -1,243 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.addons.website.models import ir_http
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
@api.model
|
||||
def _tag_property(self):
|
||||
return self.env.ref('bemade_sethy_configuration.partner_tag_property', raise_if_not_found=False)
|
||||
|
||||
@api.model
|
||||
def _tag_owner(self):
|
||||
return self.env.ref('bemade_sethy_configuration.partner_tag_owner', raise_if_not_found=False)
|
||||
|
||||
@api.model
|
||||
def _relation_owner_property(self):
|
||||
return self.env.ref('bemade_sethy_configuration.partner_relation_property', raise_if_not_found=False)
|
||||
|
||||
# Add new fields to the res.partner model for property management
|
||||
surface = fields.Float(string='Surface (ha)')
|
||||
lot_number = fields.Text(string='Lot Number')
|
||||
|
||||
# Add new fields to the res.partner model for owner/member management
|
||||
ref_project = fields.Text(string='Project No')
|
||||
intent_signing = fields.Boolean(string='Intent to sign')
|
||||
cyberimpact = fields.Boolean(string='Cyberimpact')
|
||||
specification_date = fields.Date(string='Specification date')
|
||||
crm_stage_activity = fields.Text(string='Activity Stage')
|
||||
company_use = fields.Text(string='Company related')
|
||||
|
||||
# Add new fields to the res.partner model for member management
|
||||
sethy_first_date = fields.Date(string='First membership date') # member
|
||||
sethy_last_date = fields.Date(string='Last membership date') # member
|
||||
sethy_renew_date = fields.Date(string='Next renew date date') # member
|
||||
sethy_certification_date = fields.Date(string='Certification date date') # member
|
||||
sethy_payment_type = fields.Text(string='Payment Type') # member
|
||||
sethy_amount = fields.Float(string='Payment amount') # Member
|
||||
|
||||
is_property = fields.Boolean(
|
||||
string='Is Property',
|
||||
compute='_compute_is_property',
|
||||
inverse='_inverse_is_property',
|
||||
store=True
|
||||
) # True if property, False if not
|
||||
|
||||
interest_level = fields.Selection(
|
||||
selection=[
|
||||
('1', 'None'),
|
||||
('2', 'Low'),
|
||||
('3', 'Average'),
|
||||
('4', 'High')],
|
||||
string='Interest Level') # proprio
|
||||
|
||||
# Filtered fields relation_all_ids for owner
|
||||
relation_owner_ids = fields.One2many(
|
||||
"res.partner.relation.all",
|
||||
compute="_compute_relation_property_owner",
|
||||
string="Owner ids",
|
||||
compute_sudo=True,
|
||||
)
|
||||
|
||||
# Filtered fields relation_all_ids for property
|
||||
relation_property_ids = fields.One2many(
|
||||
"res.partner.relation.all",
|
||||
compute="_compute_relation_property_owner",
|
||||
string="Property ids",
|
||||
compute_sudo=True,
|
||||
)
|
||||
|
||||
# Add new fields to the res.partner model for owner management
|
||||
property_count = fields.Integer(
|
||||
string='Property count',
|
||||
compute='_compute_property_count',
|
||||
store=True,
|
||||
compute_sudo=True
|
||||
)
|
||||
|
||||
is_owner = fields.Boolean(
|
||||
string='Is Owner',
|
||||
compute='_compute_owner',
|
||||
store=True,
|
||||
compute_sudo=True,
|
||||
)
|
||||
|
||||
@api.depends('relation_all_ids')
|
||||
def _compute_owner(self):
|
||||
#owner_tag = self._tag_owner()
|
||||
owner_tag = self.env.ref('bemade_sethy_configuration.partner_tag_owner', raise_if_not_found=False)
|
||||
for record in self:
|
||||
record.is_owner = record.relation_count > 0
|
||||
if record.is_owner:
|
||||
record.category_id |= owner_tag
|
||||
else:
|
||||
record.category_id -= owner_tag
|
||||
|
||||
# this is an hugly fix because @api depends doesn't work on new function so hacking it here
|
||||
@api.depends("relation_all_ids")
|
||||
def _compute_relation_count(self):
|
||||
super()._compute_relation_count()
|
||||
#owner_tag = self._tag_owner()
|
||||
owner_tag = self.env.ref('bemade_sethy_configuration.partner_tag_owner', raise_if_not_found=False)
|
||||
for record in self:
|
||||
for line in record.relation_all_ids:
|
||||
if line.active and line.type_id == owner_tag:
|
||||
record.relation_count += 1
|
||||
record.is_owner = record.relation_count > 0 and not record.is_property
|
||||
if record.is_owner:
|
||||
record.category_id |= owner_tag
|
||||
else:
|
||||
record.category_id -= owner_tag
|
||||
|
||||
@api.depends('category_id')
|
||||
def _compute_is_property(self):
|
||||
default_is_property = self._context.get('default_is_property', None)
|
||||
#property_tag = self._tag_property()
|
||||
property_tag = self.env.ref('bemade_sethy_configuration.partner_tag_property', raise_if_not_found=False)
|
||||
for partner in self:
|
||||
# Check if the property tag exists. If it doesn't, set is_property to False.
|
||||
# Because module installation order is not guaranteed, the tag may not exist yet when this method is called.
|
||||
# This is due to store=True on the is_property field.
|
||||
if default_is_property is not None and not self.id:
|
||||
partner.is_property = default_is_property
|
||||
else:
|
||||
if property_tag is None:
|
||||
partner.is_property = False
|
||||
else:
|
||||
partner.is_property = property_tag and property_tag in partner.category_id
|
||||
|
||||
|
||||
def _inverse_is_property(self):
|
||||
#property_tag = self._tag_property()
|
||||
property_tag = self.env.ref('bemade_sethy_configuration.partner_tag_property', raise_if_not_found=False)
|
||||
if property_tag is not None:
|
||||
for partner in self:
|
||||
if partner.is_property and property_tag not in partner.category_id and property_tag:
|
||||
partner.category_id |= property_tag
|
||||
elif not partner.is_property and property_tag in partner.category_id:
|
||||
partner.category_id -= property_tag
|
||||
|
||||
@api.depends("relation_all_ids")
|
||||
def _compute_property_count(self):
|
||||
for record in self:
|
||||
#owner_tag = self._tag_owner()
|
||||
owner_tag = self.env.ref('bemade_sethy_configuration.partner_tag_owner', raise_if_not_found=False)
|
||||
record.property_count = len(record._get_owners())
|
||||
record.is_owner = record.property_count > 0
|
||||
if owner_tag is not None:
|
||||
if record.is_owner:
|
||||
record.category_id |= owner_tag
|
||||
else:
|
||||
record.category_id -= owner_tag
|
||||
|
||||
@api.depends(
|
||||
'relation_all_ids',
|
||||
'relation_all_ids.type_id',
|
||||
'relation_all_ids.date_end',
|
||||
'relation_all_ids.this_partner_id',
|
||||
'relation_all_ids.other_partner_id',
|
||||
'relation_all_ids.is_inverse'
|
||||
)
|
||||
def _compute_relation_property_owner(self):
|
||||
for record in self:
|
||||
# relations = self.env['res.partner.relation.all']
|
||||
# for line in record.relation_all_ids:
|
||||
# if active and is_property and is_inverse:
|
||||
# relations |= line
|
||||
# record.relation_property_ids = relations
|
||||
record.relation_property_ids = record._get_properties()
|
||||
record.relation_owner_ids = record._get_owners()
|
||||
# Just for debugging below this line
|
||||
type_property = self._relation_owner_property()
|
||||
#type_property = self.env.ref('bemade_sethy_configuration.partner_relation_property')
|
||||
for line in record.relation_all_ids:
|
||||
active = line.active
|
||||
is_property = line.type_id == type_property
|
||||
is_inverse = line.is_inverse
|
||||
_logger.info(f"This partner: {line.this_partner_id.name}")
|
||||
_logger.info(f"Other partner: {line.other_partner_id.name}")
|
||||
_logger.info(f"Active: {active}, Property: {is_property}, Inverse: {is_inverse}, Type: {line.type_id.name}")
|
||||
|
||||
def _get_properties(self):
|
||||
self.ensure_one()
|
||||
#type_property = self._relation_owner_property()
|
||||
type_property = self.env.ref('bemade_sethy_configuration.partner_relation_property')
|
||||
return self.relation_all_ids.filtered(
|
||||
lambda line: (line.type_id.id == type_property.id and line.is_inverse and line.active)
|
||||
)
|
||||
|
||||
def _get_owners(self):
|
||||
self.ensure_one()
|
||||
#type_property = self._relation_owner_property()
|
||||
type_property = self.env.ref('bemade_sethy_configuration.partner_relation_property', raise_if_not_found=False)
|
||||
return self.relation_all_ids.filtered(
|
||||
lambda line: (line.type_id.id == type_property.id and not line.is_inverse and line.active)
|
||||
)
|
||||
|
||||
@api.onchange('lot_number')
|
||||
def _onchange_lot_number(self):
|
||||
for lot in self:
|
||||
if lot.lot_number:
|
||||
lot.name = "Lot " + str(lot.lot_number)
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
# Create Partner records using the super function
|
||||
records = super().create(vals_list)
|
||||
user_company = self.env.user.company_id
|
||||
|
||||
# Update the records where 'state_id' or 'country_id' isn't provided
|
||||
for record in records:
|
||||
if not record.state_id or not record.country_id:
|
||||
if not record.state_id and user_company.state_id:
|
||||
record.write({
|
||||
'state_id': user_company.state_id.id,
|
||||
})
|
||||
if not record.country_id and user_company.country_id:
|
||||
record.write({
|
||||
'country_id': user_company.country_id.id
|
||||
})
|
||||
if record.name.startswith("Lot "):
|
||||
record.lot_number = record.name[4:]
|
||||
record._inverse_is_property()
|
||||
return records
|
||||
|
||||
@api.onchange('name')
|
||||
def _onchange_name(self):
|
||||
for record in self:
|
||||
if record.name and record.name.startswith("Lot "):
|
||||
record.lot_number = record.name[4:]
|
||||
|
||||
def write(self, vals):
|
||||
result = super(ResPartner, self).write(vals)
|
||||
self._inverse_is_property()
|
||||
return result
|
||||
|
||||
@api.onchange('category_id')
|
||||
def _onchange_category_id(self):
|
||||
self._compute_is_property()
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_transfer_property_wizard,access_transfer_property_wizard,model_transfer_property_wizard,base.group_user,1,1,1,1
|
||||
|
Binary file not shown.
|
Before Width: | Height: | Size: 51 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 51 KiB |
|
|
@ -1,85 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<!-- <record id="tree_res_partner_relation" model="ir.ui.view">-->
|
||||
<!-- <field name="model">membership.membership_line</field>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <tree editable="top">-->
|
||||
<!-- <field-->
|
||||
<!-- name="partner"-->
|
||||
<!-- required="True"-->
|
||||
<!-- />-->
|
||||
<!-- <field-->
|
||||
<!-- name="date"-->
|
||||
<!-- />-->
|
||||
<!-- <field-->
|
||||
<!-- name="date_from"-->
|
||||
<!-- />-->
|
||||
<!-- <field name="date_to" />-->
|
||||
<!-- <field name="membership_id" />-->
|
||||
<!-- </tree>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
<!-- <record id="search_res_partner_relation_all" model="ir.ui.view">-->
|
||||
<!-- <field name="model">res.partner.relation.all</field>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <search string="Search Relations">-->
|
||||
<!-- <field name="any_partner_id" widget="many2one" />-->
|
||||
<!-- <field name="this_partner_id" />-->
|
||||
<!-- <field name="other_partner_id" />-->
|
||||
<!-- <field name="type_selection_id" />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="left_to_right"-->
|
||||
<!-- string="Left to right"-->
|
||||
<!-- domain="[('is_inverse', '=', False)]"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="right_to_left"-->
|
||||
<!-- string="Right to left"-->
|
||||
<!-- domain="[('is_inverse', '=', True)]"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="include_part_records"-->
|
||||
<!-- string="Include past records"-->
|
||||
<!-- context="{'active_test': False}"-->
|
||||
<!-- />-->
|
||||
<!-- <group expand="0" string="Group By">-->
|
||||
<!-- <filter-->
|
||||
<!-- name="group_by_this_partner_id"-->
|
||||
<!-- string="One Partner"-->
|
||||
<!-- context="{'group_by': 'this_partner_id'}"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="group_by_type_selection_id"-->
|
||||
<!-- string="Relationship Type"-->
|
||||
<!-- context="{'group_by': 'type_selection_id'}"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="group_by_other_partner_id"-->
|
||||
<!-- string="Other Partner"-->
|
||||
<!-- context="{'group_by': 'other_partner_id'}"-->
|
||||
<!-- />-->
|
||||
<!-- </group>-->
|
||||
<!-- </search>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
<record id="action_membership_membership_line" model="ir.actions.act_window">
|
||||
<field name="name">Membership line</field>
|
||||
<field name="res_model">membership.membership_line</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<!-- <field name="view_id" ref="tree_res_partner_relation" />-->
|
||||
<!-- <field name="search_view_id" ref="search_res_partner_relation_all" />-->
|
||||
<!-- <field name="context">{'active_test': 0}</field>-->
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Record and track your partners'membership
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="menu_membership_membership_line"
|
||||
sequence="3"
|
||||
parent="membership.menu_association"
|
||||
action="action_membership_membership_line"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="tree_property" model="ir.ui.view">
|
||||
<field name="model">res.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Properties" sample="1" multi_edit="1">
|
||||
<field name="display_name" string="Name"/>
|
||||
<field name="lot_number" optional="show"/>
|
||||
<field name="city" optional="show"/>
|
||||
<field name="zip" optional="show"/>
|
||||
<field name="state_id" optional="hide" readonly="1"/>
|
||||
<field name="country_id" optional="show" readonly="1"/>
|
||||
<field name="category_id" optional="hide" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
|
||||
<field name="active" column_invisible="True"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="kanban_property">
|
||||
<field name="name">res.partner.kanban.property</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_res_partner_kanban">
|
||||
<field name="display_name"/>
|
||||
<field name="city"/>
|
||||
<field name="zip"/>
|
||||
<field name="state_id"/>
|
||||
<field name="country_id"/>
|
||||
<field name="category_id" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="active" invisible="1"/>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
name="Property"
|
||||
id="menu_property"
|
||||
sequence="15"
|
||||
groups="base.group_user"
|
||||
web_icon="bemade_sethy_configuration,static/description/icon.png"
|
||||
/>
|
||||
|
||||
<record id="action_properties" model="ir.actions.act_window">
|
||||
<field name="name">Properties</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="view_id" ref="kanban_property"/>
|
||||
<field name="domain">[('is_property','=',True)]</field>
|
||||
<field name="context">{'default_is_property': True, 'default_is_company': True}</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="menu_property_views"
|
||||
name="Properties"
|
||||
parent="menu_property"
|
||||
action="action_properties"
|
||||
/>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -1,92 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="tree_res_partner_relation" model="ir.ui.view">
|
||||
<field name="model">res.partner.relation</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="top">
|
||||
<field
|
||||
name="left_partner_id"
|
||||
required="True"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
<field
|
||||
name="type_id"
|
||||
required="True"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
<field
|
||||
name="right_partner_id"
|
||||
required="True"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
<field name="date_start" />
|
||||
<field name="date_end" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<!-- <record id="search_res_partner_relation_all" model="ir.ui.view">-->
|
||||
<!-- <field name="model">res.partner.relation.all</field>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <search string="Search Relations">-->
|
||||
<!-- <field name="any_partner_id" widget="many2one" />-->
|
||||
<!-- <field name="this_partner_id" />-->
|
||||
<!-- <field name="other_partner_id" />-->
|
||||
<!-- <field name="type_selection_id" />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="left_to_right"-->
|
||||
<!-- string="Left to right"-->
|
||||
<!-- domain="[('is_inverse', '=', False)]"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="right_to_left"-->
|
||||
<!-- string="Right to left"-->
|
||||
<!-- domain="[('is_inverse', '=', True)]"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="include_part_records"-->
|
||||
<!-- string="Include past records"-->
|
||||
<!-- context="{'active_test': False}"-->
|
||||
<!-- />-->
|
||||
<!-- <group expand="0" string="Group By">-->
|
||||
<!-- <filter-->
|
||||
<!-- name="group_by_this_partner_id"-->
|
||||
<!-- string="One Partner"-->
|
||||
<!-- context="{'group_by': 'this_partner_id'}"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="group_by_type_selection_id"-->
|
||||
<!-- string="Relationship Type"-->
|
||||
<!-- context="{'group_by': 'type_selection_id'}"-->
|
||||
<!-- />-->
|
||||
<!-- <filter-->
|
||||
<!-- name="group_by_other_partner_id"-->
|
||||
<!-- string="Other Partner"-->
|
||||
<!-- context="{'group_by': 'other_partner_id'}"-->
|
||||
<!-- />-->
|
||||
<!-- </group>-->
|
||||
<!-- </search>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
<record id="action_res_partner_relation_relation" model="ir.actions.act_window">
|
||||
<field name="name">Relations - relation</field>
|
||||
<field name="res_model">res.partner.relation</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="tree_res_partner_relation" />
|
||||
<!-- <field name="search_view_id" ref="search_res_partner_relation_all" />-->
|
||||
<!-- <field name="context">{'active_test': 0}</field>-->
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Record and track your partners' relations. Relations may
|
||||
be linked to other partners with a type either directly
|
||||
or inversely.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="menu_res_partner_relation_relation"
|
||||
sequence="3"
|
||||
parent="partner_multi_relation.menu_res_partner_relation"
|
||||
action="action_res_partner_relation_relation"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
@ -1,193 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="open_partner_form" model="ir.actions.act_window">
|
||||
<field name="name">Open Partner</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">current</field>
|
||||
</record>
|
||||
|
||||
<!-- Action pour ouvrir l'assistant de transfert de propriété -->
|
||||
<record id="action_start_transfer_property_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Transfer Property</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">transfer.property.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record id="partner_default_contacts_view_form" model="ir.ui.view">
|
||||
<field name="name">bemade_sethy_configuration.res_partner.defaults.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<sheet position="before">
|
||||
<header>
|
||||
<button name="%(action_start_transfer_property_wizard)d"
|
||||
type="action"
|
||||
class="btn-primary"
|
||||
string="Transfer Property"
|
||||
context="{'default_property_id': id}"
|
||||
invisible="is_property == False"
|
||||
/>
|
||||
</header>
|
||||
</sheet>
|
||||
|
||||
<field name="company_type" position="after">
|
||||
<field name="is_property" invisible="True"/>
|
||||
</field>
|
||||
|
||||
<field name="company_type" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</field>
|
||||
|
||||
<field name="vat" position="before">
|
||||
<field name="ref" position="move"/>
|
||||
</field>
|
||||
|
||||
<xpath expr="//field[@name='name' and @id='company']" position="attributes">
|
||||
<attribute name="invisible">not is_company or is_property</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='name' and @id='individual']" position="attributes">
|
||||
<attribute name="invisible">is_company or is_property</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='name' and @id='company']" position="after">
|
||||
<field id="lot_number"
|
||||
class="text-break"
|
||||
name="lot_number" placeholder="123456789"
|
||||
invisible="not is_property"
|
||||
/>
|
||||
</xpath>
|
||||
|
||||
<button name="schedule_meeting" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</button>
|
||||
|
||||
<button name="action_view_opportunity" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</button>
|
||||
|
||||
<xpath expr="//field[@name='parent_id']/ancestor::div[hasclass('o_row')]" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</xpath>
|
||||
|
||||
<button name="action_view_partner_invoices" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</button>
|
||||
|
||||
<button name="%(payment.action_payment_token)d" position="attributes">
|
||||
<attribute name="invisible">payment_token_count == 0 or is_property</attribute>
|
||||
</button>
|
||||
|
||||
<xpath expr="//page[@name='contact_addresses']" position="attributes">
|
||||
<attribute name="invisible">is_property</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//page[@name='sales_purchases']" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//page[@name='membership']" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//page[@name='accounting']" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='function']/ancestor::group[1]" position="attributes">
|
||||
<attribute name="invisible">is_property == True</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='function']/ancestor::group[1]" position="after">
|
||||
<group invisible="is_property == False">
|
||||
<field name="surface"/>
|
||||
<field name="category_id"
|
||||
widget="many2many_tags"
|
||||
options="{'color_field': 'color', 'no_create_edit': True}"
|
||||
/>
|
||||
</group>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='contact_addresses']" position="after">
|
||||
<page string="Property" name="bemade_sethy_configuration.res_partner.defaults.form">
|
||||
<field name="relation_property_ids" string="All Owners" invisible="is_property == False">
|
||||
<tree>
|
||||
<field name="other_partner_id"
|
||||
required="True"
|
||||
options="{'no_create': True}"
|
||||
string="Owner"
|
||||
/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_end"/>
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
<field name="relation_owner_ids" string="All Properties" invisible="is_property == True">
|
||||
<tree>
|
||||
<field name="other_partner_id"
|
||||
required="True"
|
||||
options="{'no_create': True}"
|
||||
string="Property"
|
||||
/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_end"/>
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//page[@name='contact_addresses']" position="after">
|
||||
<page string="Sethy" name="bemade_sethy_configuration.res_partner.page.sethy">
|
||||
<group>
|
||||
<field name="ref_project"/>
|
||||
<field name="intent_signing" invisible="is_property"/>
|
||||
<field name="cyberimpact" invisible="is_property"/>
|
||||
<field name="specification_date"/>
|
||||
<field name="crm_stage_activity"/>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_res_partner_search_inherit" model="ir.ui.view">
|
||||
<field name="name">res.partner.search.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_res_partner_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='inactive']" position="before">
|
||||
<field name="ref"/>
|
||||
<filter string="Owner" name="owner" domain="[('is_owner', '=', True)]"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- <record id="view_res_partner_filter_inherit" model="ir.ui.view">-->
|
||||
<!-- <field name="name">res.partner.select.inherit</field>-->
|
||||
<!-- <field name="model">res.partner</field>-->
|
||||
<!-- <field name="inherit_id" ref="base.view_res_partner_filter"/>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <xpath expr="//search" position="inside">-->
|
||||
<!-- <filter string="Owner" domain="[('category_id.name', '=', 'Owner')]" />-->
|
||||
<!-- <filter string="Property" domain="[('category_id.name', '=', 'Property')]" />-->
|
||||
<!-- </xpath>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
<record id="contacts.action_contacts" model="ir.actions.act_window">
|
||||
<field name="name">Contacts</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<!-- Add your domain here -->
|
||||
<field name="domain">[('is_property','=',False)]</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
</odoo>
|
||||
|
|
@ -1 +0,0 @@
|
|||
from . import transfer_property_wizard
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
from odoo import models, fields, api
|
||||
from datetime import timedelta
|
||||
|
||||
class TransferPropertyWizard(models.TransientModel):
|
||||
_name = 'transfer.property.wizard'
|
||||
_description = 'Transfer Property Wizard'
|
||||
|
||||
property_id = fields.Many2one(
|
||||
comodel_name='res.partner',
|
||||
string='Property',
|
||||
domain=[('is_property', '=', True)],
|
||||
required=True
|
||||
)
|
||||
|
||||
new_owner_id = fields.Many2many(
|
||||
comodel_name='res.partner',
|
||||
string='New Owner',
|
||||
required=True,
|
||||
domain=[('is_property', '=', False)],
|
||||
)
|
||||
|
||||
transfer_date = fields.Date(
|
||||
string='Transfer Date',
|
||||
required=True,
|
||||
default=fields.Date.today()
|
||||
)
|
||||
|
||||
def action_transfer_property(self):
|
||||
if self.property_id.relation_property_ids.filtered("active"):
|
||||
for old_owner_relation in self.property_id.relation_property_ids.filtered("active"):
|
||||
if old_owner_relation.date_start and old_owner_relation.date_start >= self.transfer_date:
|
||||
old_owner_relation.unlink()
|
||||
else:
|
||||
old_owner_relation.write({'date_end': self.transfer_date - timedelta(days=1)})
|
||||
old_owner_relation.this_partner_id._compute_owner()
|
||||
for new_owner in self.new_owner_id:
|
||||
self.env['res.partner.relation.all'].create({
|
||||
'this_partner_id': new_owner.id,
|
||||
'other_partner_id': self.property_id.id,
|
||||
'type_id': self.env.ref('bemade_sethy_configuration.partner_relation_property').id,
|
||||
'date_start': self.transfer_date,
|
||||
})
|
||||
new_owner._compute_owner()
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="property_transfer_wizard_form_view" model="ir.ui.view">
|
||||
<field name="name">property.transfer.wizard.form</field>
|
||||
<field name="model">transfer.property.wizard</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Property Wizard">
|
||||
<group>
|
||||
<field name="property_id"/>
|
||||
<field name="transfer_date"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="new_owner_id"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_transfer_property" string="Transfer Property" type="object" class="btn-primary"/>
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Loading…
Reference in a new issue