[IMP]: membership: Use multi in function field.separate report in report folder.

bzr revid: atp@tinyerp.co.in-20100607063342-sle8bcwuq0sn7b65
This commit is contained in:
atp (Open ERP) 2010-06-07 12:03:42 +05:30
parent e2bc76f938
commit e7af840d3d
52 changed files with 467 additions and 418 deletions

1
addons/membership/__init__.py Normal file → Executable file
View File

@ -21,5 +21,6 @@
import membership
import wizard
import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

4
addons/membership/__openerp__.py Normal file → Executable file
View File

@ -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'],
'demo_xml': ['membership_demo.xml'
],
'installable': True,
'active': False,
'certificate': '0042907796381',

0
addons/membership/demo_data.xml Normal file → Executable file
View File

0
addons/membership/i18n/ar.po Normal file → Executable file
View File

0
addons/membership/i18n/bg.po Normal file → Executable file
View File

0
addons/membership/i18n/bs.po Normal file → Executable file
View File

0
addons/membership/i18n/ca.po Normal file → Executable file
View File

0
addons/membership/i18n/cs.po Normal file → Executable file
View File

0
addons/membership/i18n/de.po Normal file → Executable file
View File

0
addons/membership/i18n/es.po Normal file → Executable file
View File

0
addons/membership/i18n/es_AR.po Normal file → Executable file
View File

0
addons/membership/i18n/et.po Normal file → Executable file
View File

0
addons/membership/i18n/fi.po Normal file → Executable file
View File

0
addons/membership/i18n/fr.po Normal file → Executable file
View File

0
addons/membership/i18n/hr.po Normal file → Executable file
View File

0
addons/membership/i18n/hu.po Normal file → Executable file
View File

0
addons/membership/i18n/id.po Normal file → Executable file
View File

0
addons/membership/i18n/it.po Normal file → Executable file
View File

0
addons/membership/i18n/ko.po Normal file → Executable file
View File

0
addons/membership/i18n/lt.po Normal file → Executable file
View File

0
addons/membership/i18n/membership.pot Normal file → Executable file
View File

0
addons/membership/i18n/nl.po Normal file → Executable file
View File

0
addons/membership/i18n/nl_BE.po Normal file → Executable file
View File

0
addons/membership/i18n/pl.po Normal file → Executable file
View File

0
addons/membership/i18n/pt.po Normal file → Executable file
View File

0
addons/membership/i18n/pt_BR.po Normal file → Executable file
View File

0
addons/membership/i18n/ro.po Normal file → Executable file
View File

0
addons/membership/i18n/ru.po Normal file → Executable file
View File

0
addons/membership/i18n/sk.po Normal file → Executable file
View File

0
addons/membership/i18n/sl.po Normal file → Executable file
View File

0
addons/membership/i18n/sq.po Normal file → Executable file
View File

0
addons/membership/i18n/sv.po Normal file → Executable file
View File

0
addons/membership/i18n/tlh.po Normal file → Executable file
View File

0
addons/membership/i18n/tr.po Normal file → Executable file
View File

0
addons/membership/i18n/uk.po Normal file → Executable file
View File

0
addons/membership/i18n/vi.po Normal file → Executable file
View File

0
addons/membership/i18n/zh_CN.po Normal file → Executable file
View File

0
addons/membership/i18n/zh_TW.po Normal file → Executable file
View File

247
addons/membership/membership.py Normal file → Executable file
View File

@ -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'
@ -702,4 +541,4 @@ class account_invoice_line(osv.osv):
return result
account_invoice_line()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

0
addons/membership/membership_data.xml Normal file → Executable file
View File

0
addons/membership/membership_demo.xml Normal file → Executable file
View File

225
addons/membership/membership_view.xml Normal file → Executable file
View File

@ -110,23 +110,28 @@
</tree>
</field>
</record>
<record id="view_res_partner_member_filter" model="ir.ui.view">
<field name="name">res.partner.select</field>
<field name="model">res.partner</field>
<field name="type">search</field>
<field name="arch" type="xml">
<field name="category_id" position="after">
<field name="membership_state" select="1">
<filter icon="terp-partner" domain="[('membership_state', '=', 'paid')]" help="Paid Members"/>
<filter icon="terp-partner" domain="[('membership_state', '=', 'free')]" help="Free Members"/>
<filter icon="terp-partner" domain="[('associate_member', '!=', False), ('membership_state', '!=', 'none')]" help="Associated Members"/>
<filter icon="terp-partner" domain="[('membership_state', '=', 'invoiced')]" help="Invoiced Members"/>
<filter icon="terp-partner" domain="[('membership_state', '=', 'waiting')]" help="Future Members"/>
<filter icon="terp-partner" domain="[('membership_state', '=', 'old')]" help="Old Members"/>
<filter icon="terp-partner" domain="[('membership_state', '=', 'paid')]" string="Paid Members" />
<filter icon="terp-partner" domain="[('membership_state', '=', 'invoiced')]" string="Invoiced Members" />
<filter icon="terp-partner" domain="[('membership_state', '=', 'waiting')]" string="Future Members" />
<separator orientation="vertical"/>
<field name="membership_state">
<field name="membership_start"/>
</field>
<newline/>
<group expand="1" string="Group By..." position="after">
<filter string="Associate Members" icon="terp-partner" domain="[]" context="{'group_by': 'associate_member'}"/>
</group>
</field>
</field>
</record>
<record model="ir.actions.act_window" id="action_membership_members">
<field name="name">Members</field>
@ -202,7 +207,6 @@
</field>
</page>
</notebook>
</field>
</record>
@ -211,211 +215,6 @@
sequence="2"
id="menu_reporting"/>
<!-- REPORTING/MEMBERSHIP BY YEAR -->
<record model="ir.ui.view" id="view_report_partner_member_year_tree1">
<field name="name">report.partner_member.year.tree</field>
<field name="model">report.partner_member.year</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Membership by Years">
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_tree2">
<field name="name">report.partner_member.year.tree</field>
<field name="model">report.partner_member.year</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Membership by Years">
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
<field name="currency"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_graph1">
<field name="name">report.partner_member.year.graph1</field>
<field name="model">report.partner_member.year</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
</graph>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_graph2">
<field name="name">report.partner_member.year.graph2</field>
<field name="model">report.partner_member.year</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
</graph>
</field>
</record>
<record model="ir.actions.act_window" id="action_report_partner_member_year_tree">
<field name="res_model">report.partner_member.year</field>
<field name="view_type">form</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view1">
<field name="sequence" eval="3"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_tree1"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view4">
<field name="sequence" eval="4"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_tree2"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view2">
<field name="sequence" eval="1"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_graph1"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view3">
<field name="sequence" eval="2"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_graph2"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<menuitem name="Membership by Years" parent="menu_reporting"
action="action_report_partner_member_year_tree"
id="menu_report_partner_member_year"/>
<!-- REPORTING/NEW MEMBERSHIP BY YEAR -->
<record model="ir.ui.view" id="view_report_partner_member_year_new_tree1">
<field name="name">report.partner_member.year_new.tree</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="New Membership by Years">
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_new_tree2">
<field name="name">report.partner_member.year_new.tree</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="New Membership by Years">
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
<field name="currency"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_new_graph1">
<field name="name">report.partner_member.year_new.graph1</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="New Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
</graph>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_new_graph2">
<field name="name">report.partner_member.year_new.graph2</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="New Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
</graph>
</field>
</record>
<record model="ir.actions.act_window" id="action_report_partner_member_year_new_tree">
<field name="res_model">report.partner_member.year_new</field>
<field name="view_type">form</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view4">
<field name="sequence" eval="4"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_new_tree2"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view1">
<field name="sequence" eval="3"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_new_tree1"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view2">
<field name="sequence" eval="1"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_new_graph1"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view3">
<field name="sequence" eval="2"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_new_graph2"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<menuitem name="New Membership by Years" parent="menu_reporting"
action="action_report_partner_member_year_new_tree"
id="menu_report_partner_member_year_new"/>
<!-- View for product.product object inherited from product module................ -->
<record model="ir.ui.view" id="view_product_form_inherit1">

0
addons/membership/process/membership_process.xml Normal file → Executable file
View File

View File

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import report_membership

View File

@ -0,0 +1,175 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields, osv
import tools
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()

View File

@ -0,0 +1,211 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- REPORTING/MEMBERSHIP BY YEAR -->
<record model="ir.ui.view" id="view_report_partner_member_year_tree1">
<field name="name">report.partner_member.year.tree</field>
<field name="model">report.partner_member.year</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Membership by Years">
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_tree2">
<field name="name">report.partner_member.year.tree</field>
<field name="model">report.partner_member.year</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Membership by Years">
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
<field name="currency"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_graph1">
<field name="name">report.partner_member.year.graph1</field>
<field name="model">report.partner_member.year</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
</graph>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_graph2">
<field name="name">report.partner_member.year.graph2</field>
<field name="model">report.partner_member.year</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
</graph>
</field>
</record>
<record model="ir.actions.act_window" id="action_report_partner_member_year_tree">
<field name="res_model">report.partner_member.year</field>
<field name="view_type">form</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view1">
<field name="sequence" eval="3"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_tree1"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view4">
<field name="sequence" eval="4"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_tree2"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view2">
<field name="sequence" eval="1"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_graph1"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_tree_view3">
<field name="sequence" eval="2"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_graph2"/>
<field name="act_window_id" ref="action_report_partner_member_year_tree"/>
</record>
<menuitem name="Membership by Years" parent="menu_reporting"
action="action_report_partner_member_year_tree"
id="menu_report_partner_member_year"/>
<!-- REPORTING/NEW MEMBERSHIP BY YEAR -->
<record model="ir.ui.view" id="view_report_partner_member_year_new_tree1">
<field name="name">report.partner_member.year_new.tree</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="New Membership by Years">
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_new_tree2">
<field name="name">report.partner_member.year_new.tree</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="New Membership by Years">
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
<field name="currency"/>
<field name="year"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_new_graph1">
<field name="name">report.partner_member.year_new.graph1</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="New Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_number"/>
<field name="waiting_number"/>
<field name="invoiced_number"/>
<field name="paid_number"/>
</graph>
</field>
</record>
<record model="ir.ui.view" id="view_report_partner_member_year_new_graph2">
<field name="name">report.partner_member.year_new.graph2</field>
<field name="model">report.partner_member.year_new</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="New Membership by Years" type="bar">
<field name="year"/>
<field name="canceled_amount"/>
<field name="waiting_amount"/>
<field name="invoiced_amount"/>
<field name="paid_amount"/>
</graph>
</field>
</record>
<record model="ir.actions.act_window" id="action_report_partner_member_year_new_tree">
<field name="res_model">report.partner_member.year_new</field>
<field name="view_type">form</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view4">
<field name="sequence" eval="4"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_new_tree2"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view1">
<field name="sequence" eval="3"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_report_partner_member_year_new_tree1"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view2">
<field name="sequence" eval="1"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_new_graph1"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<record model="ir.actions.act_window.view" id="action_report_partner_member_year_new_tree_view3">
<field name="sequence" eval="2"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_partner_member_year_new_graph2"/>
<field name="act_window_id" ref="action_report_partner_member_year_new_tree"/>
</record>
<menuitem name="New Membership by Years" parent="menu_reporting"
action="action_report_partner_member_year_new_tree"
id="menu_report_partner_member_year_new"/>
</data>
</openerp>

0
addons/membership/security/ir.model.access.csv Normal file → Executable file
View File

0
addons/membership/wizard/__init__.py Normal file → Executable file
View File

0
addons/membership/wizard/membership_invoice.py Normal file → Executable file
View File

0
addons/membership/wizard/membership_invoice_view.xml Normal file → Executable file
View File

0
addons/membership/wizard/membership_unpaid_invoice.py Normal file → Executable file
View File

View File