Skip to content

Commit

Permalink
Merge pull request #18 from leemannd/port_variable_period
Browse files Browse the repository at this point in the history
[PORT] [9.0] Port of membership_variable_period
  • Loading branch information
pedrobaeza committed Jun 12, 2017
2 parents c7670a1 + b9be0a5 commit 7a5fbc2
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 120 deletions.
1 change: 1 addition & 0 deletions membership_variable_period/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ Contributors
------------

* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
* Denis Leemann <denis.leemann@camptocamp.com>

Icon
----
Expand Down
9 changes: 5 additions & 4 deletions membership_variable_period/__openerp__.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# -*- coding: utf-8 -*-
# (c) 2015 Antiun Ingeniería S.L. - Pedro M. Baeza
# (c) 2016 Camptocamp SA - Denis Leemann
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
{
'name': 'Variable period for memberships',
'version': '8.0.1.0.0',
'version': '9.0.1.0.0',
'license': 'AGPL-3',
'category': 'Association',
'author': 'Antiun Ingeniería S.L., '
'Serv. Tecnol. Avanzados - Pedro M. Baeza, '
'author': 'Tecnativa, '
'Camptocamp SA, '
'Odoo Community Association (OCA)',
'website': 'http://www.antiun.com',
'depends': [
Expand All @@ -18,5 +19,5 @@
'views/res_partner_views.xml',
'data/membership_data.xml',
],
'installable': False,
'installable': True,
}
86 changes: 49 additions & 37 deletions membership_variable_period/tests/test_membership_variable_period.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,21 @@ def setUp(self):
'membership_interval_unit': 'weeks',
})
self.partner = self.env['res.partner'].create({'name': 'Test'})
self.partner_account = self.partner.property_account_receivable_id.id

def test_create_invoice_membership_product_days(self):
self.product.membership_interval_qty = 20
self.product.membership_interval_unit = 'days'
invoice = self.env['account.invoice'].create(
{'partner_id': self.partner.id,
'date_invoice': '2015-07-01',
'account_id': self.partner.property_account_receivable.id,
'invoice_line': [(0, 0, {'product_id': self.product.id,
'name': 'Membership w/o prorrate'})]}
'account_id': self.partner_account,
'invoice_line_ids': [(0, 0, {'product_id': self.product.id,
'price_unit': 100,
'account_id': self.partner_account,
'name': 'Membership w/o prorrate'})]}
)
membership_line = invoice.invoice_line[0].membership_lines[0]
membership_line = invoice.invoice_line_ids[0].membership_lines[0]
self.assertEqual(membership_line.date_from, '2015-07-01')
self.assertEqual(membership_line.date_to, '2015-07-20')
self.assertEqual(self.partner.membership_start, '2015-07-01')
Expand All @@ -41,11 +44,13 @@ def test_create_invoice_membership_product_week(self):
invoice = self.env['account.invoice'].create(
{'partner_id': self.partner.id,
'date_invoice': '2015-07-01',
'account_id': self.partner.property_account_receivable.id,
'invoice_line': [(0, 0, {'product_id': self.product.id,
'name': 'Membership w/o prorrate'})]}
'account_id': self.partner_account,
'invoice_line_ids': [(0, 0, {'product_id': self.product.id,
'price_unit': 100,
'account_id': self.partner_account,
'name': 'Membership w/o prorrate'})]}
)
membership_line = invoice.invoice_line[0].membership_lines[0]
membership_line = invoice.invoice_line_ids[0].membership_lines[0]
self.assertEqual(membership_line.date_from, '2015-07-01')
self.assertEqual(membership_line.date_to, '2015-07-07')
self.assertEqual(self.partner.membership_start, '2015-07-01')
Expand All @@ -56,11 +61,13 @@ def test_create_invoice_membership_product_month(self):
invoice = self.env['account.invoice'].create(
{'partner_id': self.partner.id,
'date_invoice': '2015-04-15',
'account_id': self.partner.property_account_receivable.id,
'invoice_line': [(0, 0, {'product_id': self.product.id,
'name': 'Membership with prorrate'})]}
'account_id': self.partner_account,
'invoice_line_ids': [(0, 0, {'product_id': self.product.id,
'price_unit': 100,
'account_id': self.partner_account,
'name': 'Membership wth prorrate'})]}
)
membership_line = invoice.invoice_line[0].membership_lines[0]
membership_line = invoice.invoice_line_ids[0].membership_lines[0]
self.assertEqual(membership_line.date_from, '2015-04-15')
self.assertEqual(membership_line.date_to, '2015-05-14')
self.assertEqual(self.partner.membership_start, '2015-04-15')
Expand All @@ -71,11 +78,13 @@ def test_create_invoice_membership_product_year(self):
invoice = self.env['account.invoice'].create(
{'partner_id': self.partner.id,
'date_invoice': '2016-07-01', # It's leap year
'account_id': self.partner.property_account_receivable.id,
'invoice_line': [(0, 0, {'product_id': self.product.id,
'name': 'Membership with prorrate'})]}
'account_id': self.partner_account,
'invoice_line_ids': [(0, 0, {'product_id': self.product.id,
'price_unit': 100,
'account_id': self.partner_account,
'name': 'Membership wth prorrate'})]}
)
membership_line = invoice.invoice_line[0].membership_lines[0]
membership_line = invoice.invoice_line_ids[0].membership_lines[0]
self.assertEqual(membership_line.date_from, '2016-07-01')
self.assertEqual(membership_line.date_to, '2017-06-30')
self.assertEqual(self.partner.membership_start, '2016-07-01')
Expand All @@ -86,13 +95,15 @@ def test_modify_invoice_membership_product(self):
invoice = self.env['account.invoice'].create(
{'partner_id': self.partner.id,
'date_invoice': '2015-07-01',
'account_id': self.partner.property_account_receivable.id,
'invoice_line': [(0, 0, {'product_id': self.product.id,
'name': 'Membership w/o prorrate'})]}
'account_id': self.partner_account,
'invoice_line_ids': [(0, 0, {'product_id': self.product.id,
'price_unit': 100,
'account_id': self.partner_account,
'name': 'Membership w/o prorrate'})]}
)
# Add quantity
invoice.invoice_line[0].quantity = 2.0
membership_lines = invoice.invoice_line[0].membership_lines
invoice.invoice_line_ids[0].quantity = 2.0
membership_lines = invoice.invoice_line_ids[0].membership_lines
self.assertEqual(len(membership_lines), 2)
self.assertEqual(membership_lines[1].date_from, '2015-07-01')
self.assertEqual(membership_lines[1].date_to, '2016-06-30')
Expand All @@ -101,8 +112,8 @@ def test_modify_invoice_membership_product(self):
self.assertEqual(self.partner.membership_start, '2015-07-01')
self.assertEqual(self.partner.membership_stop, '2017-06-30')
# Remove quantity
invoice.invoice_line[0].quantity = 1.0
membership_lines = invoice.invoice_line[0].membership_lines
invoice.invoice_line_ids[0].quantity = 1.0
membership_lines = invoice.invoice_line_ids[0].membership_lines
self.assertEqual(len(membership_lines), 1)
self.assertEqual(membership_lines[0].date_from, '2015-07-01')
self.assertEqual(membership_lines[0].date_to, '2016-06-30')
Expand All @@ -112,33 +123,34 @@ def test_create_and_modify_invoice_line_membership_product(self):
self.product.membership_interval_unit = 'days'
invoice_line = self.env['account.invoice.line'].create(
{'product_id': self.product.id,
'price_unit': 100,
'account_id': self.partner_account,
'name': 'Membership w/o prorrate'})
invoice = self.env['account.invoice'].create(
{'partner_id': self.partner.id,
'date_invoice': '2015-07-01',
'account_id': self.partner.property_account_receivable.id})
'account_id': self.partner_account})
invoice_line.invoice_id = invoice.id
membership_line = invoice.invoice_line[0].membership_lines[0]
membership_line = invoice_line[0].membership_lines[0]
self.assertEqual(membership_line.date_from, '2015-07-01')
self.assertEqual(membership_line.date_to, '2015-07-20')
self.assertEqual(self.partner.membership_start, '2015-07-01')
self.assertEqual(self.partner.membership_stop, '2015-07-20')

def test_check_membership_expiry(self):
self.env['membership.membership_line'].create(
{'partner': self.partner.id,
'membership_id': self.product.id,
'member_price': 1.0,
'date': '2014-01-01',
'date_from': '2014-01-01',
'date_to': '2014-12-31',
'state': 'paid',
'account_invoice_line': self.env['account.invoice.line'].search(
[], limit=1).id})
# Force state to let the calculation return to the computed one
self.product.membership_interval_unit = 'years'
self.env['account.invoice'].create(
{'partner_id': self.partner.id,
'date_invoice': '2014-07-01', # It's leap year
'account_id': self.partner_account,
'invoice_line_ids': [(0, 0, {'product_id': self.product.id,
'price_unit': 100,
'account_id': self.partner_account,
'name': 'Membership wth prorrate'})]}
)
self.partner.membership_stop = '2014-12-31'
self.env['res.partner'].check_membership_expiry()
self.assertEqual(self.partner.membership_state, 'none')
self.assertEqual(self.partner.membership_state, 'old')

def test_get_next_date(self):
test_suite = [
Expand Down
99 changes: 35 additions & 64 deletions membership_variable_period/views/product_template_views.xml
Original file line number Diff line number Diff line change
@@ -1,74 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>

<record model="ir.ui.view" id="membership_products_form_period">
<field name="name">Membership Products (variable period)</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="membership.membership_products_form" />
<field name="arch" type="xml">
<label for="membership_date_from" position="before">
<field name="membership_type"/>
<label for="membership_interval_qty"
string="Interval"
attrs="{'invisible': [('membership_type', '!=', 'variable')]}"
/>
<div attrs="{'invisible': [('membership_type', '!=', 'variable')]}">
<field name="membership_interval_qty"
attrs="{'required': [('membership_type', '=', 'variable'), ('membership', '=', True)]}"
class="oe_inline"
nolabel="1"
/>
<field name="membership_interval_unit"
attrs="{'required': [('membership_type', '=', 'variable'), ('membership', '=', True)]}"
class="oe_inline"
nolabel="1"
/>
</div>
</label>
<label for="membership_date_from" position="attributes">
<attribute name="attrs">{'invisible': [('membership_type', '!=', 'fixed')]}</attribute>
</label>
<xpath expr="//field[@name='membership_date_from']/.." position="attributes">
<attribute name="attrs">{'invisible': [('membership_type', '!=', 'fixed')]}</attribute>
</xpath>
<field name="membership_date_from" position="attributes">
<attribute name="attrs">{'required': [('membership_type', '=', 'fixed'), ('membership', '=', True)]}</attribute>
<attribute name="required">0</attribute>
</field>
<field name="membership_date_to" position="attributes">
<attribute name="attrs">{'required': [('membership_type', '=', 'fixed'), ('membership', '=', True)]}</attribute>
<attribute name="required">0</attribute>
</field>
</field>
</record>

<record model="ir.ui.view" id="product_template_form_view_membership_period">
<field name="name">Membership Products (regular - variable period)</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="membership.product_template_form_view" />
<field name="arch" type="xml">
<field name="membership_date_from" position="before">
<field name="membership_type"/>
<record model="ir.ui.view" id="membership_products_form_period">
<field name="name">Membership Products (variable period)</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="membership.membership_products_form" />
<field name="arch" type="xml">
<label for="membership_date_from" position="before">
<field name="membership_type"/>
<label for="membership_interval_qty"
string="Interval"
attrs="{'invisible': [('membership_type', '!=', 'variable')]}"
/>
<div attrs="{'invisible': [('membership_type', '!=', 'variable')]}">
<field name="membership_interval_qty"
attrs="{'required': [('membership_type', '=', 'variable'), ('membership', '=', True)], 'invisible': [('membership_type', '!=', 'variable')]}"
attrs="{'required': [('membership_type', '=', 'variable'), ('membership', '=', True)]}"
class="oe_inline"
nolabel="1"
/>
<field name="membership_interval_unit"
attrs="{'required': [('membership_type', '=', 'variable'), ('membership', '=', True)], 'invisible': [('membership_type', '!=', 'variable')]}"
attrs="{'required': [('membership_type', '=', 'variable'), ('membership', '=', True)]}"
class="oe_inline"
nolabel="1"
/>
</field>
<field name="membership_date_from" position="attributes">
<attribute name="attrs">{'required': [('membership_type', '=', 'fixed'), ('membership', '=', True)], 'invisible': [('membership_type', '!=', 'fixed')]}</attribute>
<attribute name="required">0</attribute>
</field>
<field name="membership_date_to" position="attributes">
<attribute name="attrs">{'required': [('membership_type', '=', 'fixed'), ('membership', '=', True)], 'invisible': [('membership_type', '!=', 'fixed')]}</attribute>
<attribute name="required">0</attribute>
</field>
</div>
</label>
<label for="membership_date_from" position="attributes">
<attribute name="attrs">{'invisible': [('membership_type', '!=', 'fixed')]}</attribute>
</label>
<xpath expr="//field[@name='membership_date_from']/.." position="attributes">
<attribute name="attrs">{'invisible': [('membership_type', '!=', 'fixed')]}</attribute>
</xpath>
<field name="membership_date_from" position="attributes">
<attribute name="attrs">{'required': [('membership_type', '=', 'fixed'), ('membership', '=', True)]}</attribute>
<attribute name="required">0</attribute>
</field>
<field name="membership_date_to" position="attributes">
<attribute name="attrs">{'required': [('membership_type', '=', 'fixed'), ('membership', '=', True)]}</attribute>
<attribute name="required">0</attribute>
</field>
</record>
</field>
</record>

</data>
</openerp>
</odoo>
29 changes: 14 additions & 15 deletions membership_variable_period/views/res_partner_views.xml
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>

<record model="ir.ui.view" id="view_partner_form_membership_period">
<field name="name">res.partner.form.membership.period</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="membership.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='member_lines']/tree//field[@name='date']" position="after">
<field name="date_from"/>
<field name="date_to"/>
</xpath>
</field>
</record>
</data>
</openerp>
<record model="ir.ui.view" id="view_partner_form_membership_period">
<field name="name">res.partner.form.membership.period</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="membership.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='member_lines']/tree//field[@name='date']" position="after">
<field name="date_from"/>
<field name="date_to"/>
</xpath>
</field>
</record>

</odoo>

0 comments on commit 7a5fbc2

Please sign in to comment.