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

[9.0][FIX] contract: Invoice supplier form view from contract link #84

Merged
merged 5 commits into from
Sep 19, 2017
Merged
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
3 changes: 2 additions & 1 deletion contract/__openerp__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

{
'name': 'Contracts Management recurring',
'version': '9.0.1.2.1',
'version': '9.0.1.3.0',
'category': 'Contract Management',
'license': 'AGPL-3',
'author': "OpenERP SA,"
Expand All @@ -22,6 +22,7 @@
'data/contract_template.xml',
'views/contract.xml',
'views/account_invoice_view.xml',
'views/res_partner_view.xml',
],
'installable': True,
}
1 change: 1 addition & 0 deletions contract/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@

from . import contract
from . import invoice
from . import res_partner
44 changes: 44 additions & 0 deletions contract/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Carlos Dauden <carlos.dauden@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from openerp import api, fields, models


class ResPartner(models.Model):
_inherit = 'res.partner'

contract_count = fields.Integer(
compute='_compute_contract_count',
string='# of Contracts',
)
contract_ids = fields.One2many(
comodel_name='account.analytic.account',
inverse_name='partner_id',
string='Contracts',
)

@api.multi
@api.depends('contract_ids')
def _compute_contract_count(self):
contract_data = self.env['account.analytic.account'].read_group(
domain=[('partner_id', 'child_of', self.ids),
('recurring_invoices', '=', True)],
fields=['partner_id'],
groupby=['partner_id'])
# read to keep the child/parent relation while aggregating the
# read_group result in the loop
partner_child_ids = self.read(['child_ids'])
mapped_data = dict([
(m['partner_id'][0], m['partner_id_count']) for m in contract_data
])
for partner in self:
# let's obtain the partner id and all its child ids from the read
# up there
partner_ids = filter(
lambda r: r['id'] == partner.id, partner_child_ids)[0]
partner_ids = ([partner_ids.get('id')] +
partner_ids.get('child_ids'))
# then we can sum for all the partner's child
partner.contract_count = sum(
mapped_data.get(child, 0) for child in partner_ids)
8 changes: 7 additions & 1 deletion contract/tests/test_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ class TestContract(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestContract, cls).setUpClass()
cls.partner = cls.env.ref('base.res_partner_2')
cls.partner = cls.env['res.partner'].create({
'name': 'Partner test',
'customer': True,
})
cls.product = cls.env.ref('product.product_product_2')
cls.product.description_sale = 'Test description sale'
cls.contract = cls.env['account.analytic.account'].create({
Expand Down Expand Up @@ -42,10 +45,13 @@ def test_contract(self):
self.assertIn('uom_id', res['domain'])
self.contract_line.price_unit = 100.0

self.assertEqual(self.partner.contract_count, 1)
self.contract.partner_id = False
with self.assertRaises(ValidationError):
self.contract.recurring_create_invoice()
self.assertEqual(self.partner.contract_count, 0)
self.contract.partner_id = self.partner.id
self.assertEqual(self.partner.contract_count, 1)

new_invoice = self.contract.recurring_create_invoice()
self.assertTrue(new_invoice)
Expand Down
18 changes: 12 additions & 6 deletions contract/views/contract.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
<data>

<record id="act_recurring_invoices" model="ir.actions.act_window">
<field name="context">{'search_default_contract_id':
[active_id],
'default_contract_id': active_id}
</field>
<field name="name">Invoices</field>
<field name="res_model">account.invoice</field>
<field name="view_id" ref="account.invoice_tree" />
<field name="search_view_id" ref="account.view_account_invoice_filter"/>
<field name="view_ids"
eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('account.invoice_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('account.invoice_form')})]"/>
<field name="context">{
'search_default_contract_id': [active_id],
'default_contract_id': active_id}
</field>
</record>

<record id="account_analytic_account_recurring_form_form" model="ir.ui.view">
Expand Down Expand Up @@ -90,6 +92,10 @@
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_search"/>
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="company_id" filter_domain="[('partner_id', 'child_of', self)]"
string="Partner and dependents"/>
</field>
<field name="name" position="after">
<field name="journal_id"/>
<field name="pricelist_id"/>
Expand Down
31 changes: 31 additions & 0 deletions contract/views/res_partner_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="act_res_partner_2_contract" model="ir.actions.act_window">
<field name="name">Contracts</field>
<field name="res_model">account.analytic.account</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{
'search_default_partner_id': active_id,
'search_default_recurring_invoices': 1}</field>
<field name="groups_id" eval="[(4, ref('base.group_sale_salesman'))]"/>
</record>

<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.view.contract</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="groups_id" eval="[(4, ref('base.group_sale_salesman'))]"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button class="oe_stat_button" type="action" name="%(contract.act_res_partner_2_contract)d"
attrs="{'invisible': [('customer', '=', False)]}"
icon="fa-file-o">
<field string="Contracts" name="contract_count" widget="statinfo"/>
</button>
</div>
</field>
</record>

</odoo>