From ccd09bcef30411410f4de3d500a2ae0987d86cfc Mon Sep 17 00:00:00 2001
From: "atp (OpenERP)" <>
Date: Wed, 9 Jun 2010 20:30:54 +0530
Subject: [PATCH] [IMP] membership: improvment
bzr revid: hmo@tinyerp.com-20100609150054-8wqicowhoczpp5d0
---
addons/membership/__init__.py | 1 +
addons/membership/__openerp__.py | 2 +
addons/membership/membership.py | 245 +++---------------
addons/membership/membership_view.xml | 227 ++--------------
.../wizard/membership_unpaid_invoice.py | 4 +-
5 files changed, 62 insertions(+), 417 deletions(-)
diff --git a/addons/membership/__init__.py b/addons/membership/__init__.py
index 4ae17c80e71..7e377bcdace 100644
--- a/addons/membership/__init__.py
+++ b/addons/membership/__init__.py
@@ -21,5 +21,6 @@
import membership
import wizard
+import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/membership/__openerp__.py b/addons/membership/__openerp__.py
index 49297bc010d..1de648ff8e8 100644
--- a/addons/membership/__openerp__.py
+++ b/addons/membership/__openerp__.py
@@ -43,10 +43,12 @@ invoice and send propositions for membership renewal.
'security/ir.model.access.csv',
'wizard/membership_invoice_view.xml',
'membership_view.xml',
+ 'report/report_membership_view.xml',
'wizard/membership_unpaid_invoice_view.xml',
'process/membership_process.xml'
],
'demo_xml': ['membership_demo.xml'],
+ 'test': ['test/test_membership.yml'],
'installable': True,
'active': False,
'certificate': '0042907796381',
diff --git a/addons/membership/membership.py b/addons/membership/membership.py
index 23f9cd19275..af70c174519 100644
--- a/addons/membership/membership.py
+++ b/addons/membership/membership.py
@@ -221,6 +221,7 @@ class Partner(osv.osv):
_inherit = 'res.partner'
def _get_partner_id(self, cr, uid, ids, context=None):
+
data_inv = self.pool.get('membership.membership_line').browse(cr, uid, ids, context)
list_partner = []
for data in data_inv:
@@ -298,55 +299,47 @@ class Partner(osv.osv):
res_state = self._membership_state(cr, uid, [partner_data.associate_member.id], name, args, context)
res[id] = res_state[partner_data.associate_member.id]
return res
-
- def _membership_start(self, cr, uid, ids, name, args, context=None):
- '''Return the start date of membership'''
+
+ def _membership_date(self, cr, uid, ids, name, args, context=None):
+
+ '''Return date of membership'''
+
+ name = name[0]
res = {}
member_line_obj = self.pool.get('membership.membership_line')
+
for partner in self.browse(cr, uid, ids):
+
if partner.associate_member:
- partner_id = partner.associate_member.id
+ partner_id = partner.associate_member.id
else:
- partner_id = partner.id
- line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id)],
- limit=1, order='date_from')
- if line_id:
- res[partner.id] = member_line_obj.read(cr, uid, line_id[0],
- ['date_from'])['date_from']
- else:
- res[partner.id] = False
- return res
-
- def _membership_stop(self, cr, uid, ids, name, args, context=None):
- '''Return the stop date of membership'''
- res = {}
- member_line_obj = self.pool.get('membership.membership_line')
- for partner in self.browse(cr, uid, ids):
- cr.execute('select membership_state from res_partner where id=%s', (partner.id,))
- data_state = cr.fetchall()
- if partner.associate_member:
- partner_id = partner.associate_member.id
- else:
- partner_id = partner.id
- line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id)],
- limit=1, order='date_to desc')
- if line_id:
- res[partner.id] = member_line_obj.read(cr, uid, line_id[0],
- ['date_to'])['date_to']
- else:
- res[partner.id] = False
- return res
-
- def _membership_cancel(self, cr, uid, ids, name, args, context=None):
- '''Return the cancel date of membership'''
- res = {}
- member_line_obj = self.pool.get('membership.membership_line')
- for partner in self.browse(cr, uid, ids, context=context):
- res[partner.id] = False
- if partner.membership_state == 'canceled':
- line_id = member_line_obj.search(cr, uid, [('partner', '=', partner.id)],limit=1, order='date_cancel')
+ partner_id = partner.id
+
+ res[partner.id]={
+ 'membership_start': False,
+ 'membership_stop': False,
+ 'membership_cancel': False
+ }
+
+ if name == 'membership_start':
+ line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id)],
+ limit=1, order='date_from')
if line_id:
- res[partner.id] = member_line_obj.read(cr, uid, line_id[0],['date_cancel'])['date_cancel']
+ res[partner.id]['membership_start'] = member_line_obj.read(cr, uid, line_id[0],
+ ['date_from'])['date_from']
+
+ if name == 'membership_stop':
+ line_id1 = member_line_obj.search(cr, uid, [('partner', '=', partner_id)],
+ limit=1, order='date_to desc')
+ if line_id1:
+ res[partner.id]['membership_stop'] = member_line_obj.read(cr, uid, line_id1[0],
+ ['date_to'])['date_to']
+ if name == 'membership_cancel':
+ if partner.membership_state == 'canceled':
+ line_id2 = member_line_obj.search(cr, uid, [('partner', '=', partner.id)],limit=1, order='date_cancel')
+ if line_id2:
+ res[partner.id]['membership_cancel'] = member_line_obj.read(cr, uid, line_id2[0],['date_cancel'])['date_cancel']
+
return res
def _get_partners(self, cr, uid, ids, context={}):
@@ -376,17 +369,17 @@ class Partner(osv.osv):
}
),
'membership_start': fields.function(
- _membership_start, method=True,
+ _membership_date, method=True, multi='membeship_start',
string = 'Start membership date', type = 'date',
store = {
'account.invoice':(_get_invoice_partner,['state'], 10),
- 'membership.membership_line':(_get_partner_id,['state'], 10),
+ 'membership.membership_line':(_get_partner_id,['state'], 10, ),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
}
),
'membership_stop': fields.function(
- _membership_stop, method = True,
- string = 'Stop membership date', type = 'date',
+ _membership_date, method = True,
+ string = 'Stop membership date', type = 'date', multi='membership_stop',
store = {
'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
@@ -395,8 +388,8 @@ class Partner(osv.osv):
),
'membership_cancel': fields.function(
- _membership_cancel, method = True,
- string = 'Cancel membership date', type='date',
+ _membership_date, method = True,
+ string = 'Cancel membership date', type='date', multi='membership_cancel',
store = {
'account.invoice':(_get_invoice_partner,['state'], 11),
'membership.membership_line':(_get_partner_id,['state'], 10),
@@ -490,160 +483,6 @@ class Invoice(osv.osv):
return super(Invoice, self).action_cancel(cr, uid, ids, context)
Invoice()
-
-class ReportPartnerMemberYear(osv.osv):
- '''Membership by Years'''
-
- _name = 'report.partner_member.year'
- _description = __doc__
- _auto = False
- _rec_name = 'year'
- _columns = {
- 'year': fields.char('Year', size='4', readonly=True, select=1),
- 'canceled_number': fields.integer('Canceled', readonly=True),
- 'waiting_number': fields.integer('Waiting', readonly=True),
- 'invoiced_number': fields.integer('Invoiced', readonly=True),
- 'paid_number': fields.integer('Paid', readonly=True),
- 'canceled_amount': fields.float('Canceled', digits=(16, 2), readonly=True),
- 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
- 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
- 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
- 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
- select=2),
- }
-
- def init(self, cr):
- '''Create the view'''
- cr.execute("""
- CREATE OR REPLACE VIEW report_partner_member_year AS (
- SELECT
- MIN(id) AS id,
- COUNT(ncanceled) as canceled_number,
- COUNT(npaid) as paid_number,
- COUNT(ninvoiced) as invoiced_number,
- COUNT(nwaiting) as waiting_number,
- SUM(acanceled) as canceled_amount,
- SUM(apaid) as paid_amount,
- SUM(ainvoiced) as invoiced_amount,
- SUM(awaiting) as waiting_amount,
- year,
- currency
- FROM (SELECT
- CASE WHEN ai.state = 'cancel' THEN ml.id END AS ncanceled,
- CASE WHEN ai.state = 'paid' THEN ml.id END AS npaid,
- CASE WHEN ai.state = 'open' THEN ml.id END AS ninvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN ml.id END AS nwaiting,
- CASE WHEN ai.state = 'cancel'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS acanceled,
- CASE WHEN ai.state = 'paid'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS apaid,
- CASE WHEN ai.state = 'open'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS ainvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS awaiting,
- TO_CHAR(ml.date_from, 'YYYY') AS year,
- ai.currency_id AS currency,
- MIN(ml.id) AS id
- FROM membership_membership_line ml
- JOIN (account_invoice_line ail
- LEFT JOIN account_invoice ai
- ON (ail.invoice_id = ai.id))
- ON (ml.account_invoice_line = ail.id)
- JOIN res_partner p
- ON (ml.partner = p.id)
- GROUP BY TO_CHAR(ml.date_from, 'YYYY'), ai.state,
- ai.currency_id, ml.id) AS foo
- GROUP BY year, currency)
- """)
-
-ReportPartnerMemberYear()
-
-
-class ReportPartnerMemberYearNew(osv.osv):
- '''New Membership by Years'''
-
- _name = 'report.partner_member.year_new'
- _description = __doc__
- _auto = False
- _rec_name = 'year'
- _columns = {
- 'year': fields.char('Year', size='4', readonly=True, select=1),
- 'canceled_number': fields.integer('Canceled', readonly=True),
- 'waiting_number': fields.integer('Waiting', readonly=True),
- 'invoiced_number': fields.integer('Invoiced', readonly=True),
- 'paid_number': fields.integer('Paid', readonly=True),
- 'canceled_amount': fields.float('Canceled', digits=(16, 2), readonly=True),
- 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
- 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
- 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
- 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
- select=2),
- }
-
- def init(self, cursor):
- '''Create the view'''
- cursor.execute("""
- CREATE OR REPLACE VIEW report_partner_member_year_new AS (
- SELECT
- MIN(id) AS id,
- COUNT(ncanceled) AS canceled_number,
- COUNT(npaid) AS paid_number,
- COUNT(ninvoiced) AS invoiced_number,
- COUNT(nwaiting) AS waiting_number,
- SUM(acanceled) AS canceled_amount,
- SUM(apaid) AS paid_amount,
- SUM(ainvoiced) AS invoiced_amount,
- SUM(awaiting) AS waiting_amount,
- year,
- currency
- FROM (SELECT
- CASE WHEN ai.state = 'cancel' THEN ml2.id END AS ncanceled,
- CASE WHEN ai.state = 'paid' THEN ml2.id END AS npaid,
- CASE WHEN ai.state = 'open' THEN ml2.id END AS ninvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN ml2.id END AS nwaiting,
- CASE WHEN ai.state = 'cancel'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS acanceled,
- CASE WHEN ai.state = 'paid'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS apaid,
- CASE WHEN ai.state = 'open'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS ainvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS awaiting,
- TO_CHAR(ml2.date_from, 'YYYY') AS year,
- ai.currency_id AS currency,
- MIN(ml2.id) AS id
- FROM (SELECT
- partner AS id,
- MIN(date_from) AS date_from
- FROM membership_membership_line
- GROUP BY partner
- ) AS ml1
- JOIN membership_membership_line ml2
- JOIN (account_invoice_line ail
- LEFT JOIN account_invoice ai
- ON (ail.invoice_id = ai.id))
- ON (ml2.account_invoice_line = ail.id)
- ON (ml1.id = ml2.partner AND ml1.date_from = ml2.date_from)
- JOIN res_partner p
- ON (ml2.partner = p.id)
- GROUP BY TO_CHAR(ml2.date_from, 'YYYY'), ai.state,
- ai.currency_id, ml2.id) AS foo
- GROUP BY year, currency
- )
- """)
-
-ReportPartnerMemberYearNew()
-
class account_invoice_line(osv.osv):
_inherit='account.invoice.line'
diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml
index 2ba81d2c1ee..3b1009963cb 100644
--- a/addons/membership/membership_view.xml
+++ b/addons/membership/membership_view.xml
@@ -39,7 +39,8 @@
-
+
+
@@ -110,20 +111,28 @@
+
res.partner.select
res.partner
search
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
Members
@@ -199,7 +208,6 @@
-
@@ -208,211 +216,6 @@
sequence="2"
id="menu_reporting"/>
-
-
-
-
- report.partner_member.year.tree
- report.partner_member.year
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year.tree
- report.partner_member.year
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year.graph1
- report.partner_member.year
- graph
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year.graph2
- report.partner_member.year
- graph
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year
- form
-
-
-
-
- tree
-
-
-
-
-
-
-
- tree
-
-
-
-
-
-
- graph
-
-
-
-
-
-
- graph
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year_new.tree
- report.partner_member.year_new
- tree
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year_new.tree
- report.partner_member.year_new
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year_new.graph1
- report.partner_member.year_new
- graph
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year_new.graph2
- report.partner_member.year_new
- graph
-
-
-
-
-
-
-
-
-
-
-
-
- report.partner_member.year_new
- form
-
-
-
-
- tree
-
-
-
-
-
-
- tree
-
-
-
-
-
-
- graph
-
-
-
-
-
-
- graph
-
-
-
-
-
diff --git a/addons/membership/wizard/membership_unpaid_invoice.py b/addons/membership/wizard/membership_unpaid_invoice.py
index 1b9a6ac3464..f403e78c81d 100644
--- a/addons/membership/wizard/membership_unpaid_invoice.py
+++ b/addons/membership/wizard/membership_unpaid_invoice.py
@@ -29,7 +29,7 @@ class member_unpaid_invoice(osv.osv_memory):
'product': fields.many2one('product.product','Membership product', size=64,required=True, help='Select Membership product'),
}
- def _invoice_membership(self, cr, uid, ids, context):
+ def invoice_membership(self, cr, uid, ids, context):
model_obj = self.pool.get('ir.model.data')
partners = []
result = model_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
@@ -56,4 +56,4 @@ class member_unpaid_invoice(osv.osv_memory):
member_unpaid_invoice()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: