[IMP] membership: members analysis

bzr revid: qdp-launchpad@tinyerp.com-20101014143924-d2zt7ogyyr3he4u9
This commit is contained in:
qdp-launchpad@tinyerp.com 2010-10-14 16:39:24 +02:00
parent bc2d6be4e6
commit da4fb1246f
2 changed files with 77 additions and 69 deletions

View File

@ -36,7 +36,7 @@ STATE = [
class report_membership(osv.osv):
'''Membership by Years'''
'''Membership Analysis'''
_name = 'report.membership'
_description = __doc__
@ -52,17 +52,15 @@ class report_membership(osv.osv):
('11', 'November'), ('12', 'December')], 'Month', readonly=True),
'date_from': fields.datetime('Start Date', readonly=True, help="Start membership date"),
'date_to': fields.datetime('End Date', readonly=True, help="End membership date"),
'num_canceled': fields.integer('# Canceled', readonly=True),
'num_old': fields.integer('# Old', readonly=True),
'num_waiting': fields.integer('# Waiting', readonly=True),
'num_invoiced': fields.integer('# Invoiced', readonly=True),
'num_free': fields.integer('# Free', readonly=True),
'num_paid': fields.integer('# Paid', readonly=True),
'tot_pending': fields.float('Pending Amount', digits_compute= dp.get_precision('Account'), readonly=True),
'tot_earned': fields.float('Earned Amount', digits_compute= dp.get_precision('Account'), readonly=True),
'state':fields.selection(STATE, 'Membership State'),
'partner_id': fields.many2one('res.partner', 'Members', readonly=True),
'partner_id': fields.many2one('res.partner', 'Member', readonly=True),
'associate_member_id': fields.many2one('res.partner', 'Associate Member', readonly=True),
'membership_id': fields.many2one('product.product', 'Membership Product', readonly=True),
'membership_state': fields.selection(STATE, 'Current Membership State', readonly=True),
'user_id': fields.many2one('res.users', 'Salesman', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True)
}
@ -71,63 +69,77 @@ class report_membership(osv.osv):
'''Create the view'''
tools.drop_view_if_exists(cr, 'report_membership')
cr.execute("""
CREATE OR REPLACE VIEW report_membership AS (
CREATE OR REPLACE VIEW report_membership AS (
SELECT
MIN(id) AS id,
COUNT(num_canceled) AS num_canceled,
COUNT(num_old) AS num_old,
partner_id,
user_id,
membership_state,
associate_member_id,
membership_amount,
date_from,
date_to,
year,
month,
COUNT(num_waiting) AS num_waiting,
COUNT(num_invoiced) AS num_invoiced,
COUNT(num_free) AS num_free,
COUNT(num_paid) AS num_paid,
SUM(tot_pending) AS tot_pending,
SUM(tot_earned) AS tot_earned,
year,
month,
date_from,
date_to,
partner_id,
membership_id,
company_id,
user_id,
state
company_id
FROM
(SELECT
CASE WHEN ml.state = 'canceled' THEN ml.id END AS num_canceled,
CASE WHEN ml.state = 'old' THEN ml.id END AS num_old,
MIN(p.id) AS id,
p.id AS partner_id,
p.user_id AS user_id,
p.membership_state AS membership_state,
p.associate_member AS associate_member_id,
p.membership_amount AS membership_amount,
TO_CHAR(p.membership_start, 'YYYY-MM-DD') AS date_from,
TO_CHAR(p.membership_stop, 'YYYY-MM-DD') AS date_to,
TO_CHAR(p.membership_start, 'YYYY') AS year,
TO_CHAR(p.membership_start,'MM') AS month,
CASE WHEN ml.state = 'waiting' THEN ml.id END AS num_waiting,
CASE WHEN ml.state = 'invoiced' THEN ml.id END AS num_invoiced,
CASE WHEN ml.state = 'free' THEN ml.id END AS num_free,
CASE WHEN ml.state = 'paid' THEN ml.id END AS num_paid,
CASE WHEN ml.state IN ('waiting', 'invoiced') THEN SUM(il.price_subtotal) ELSE 0 END AS tot_pending,
CASE WHEN ml.state IN ('old', 'paid') THEN SUM(il.price_subtotal) ELSE 0 END AS tot_earned,
TO_CHAR(ml.date_from, 'YYYY') AS year,
TO_CHAR(ml.date_from, 'MM') AS month,
TO_CHAR(ml.date_from, 'YYYY-MM-DD') AS date_from,
TO_CHAR(ml.date_to, 'YYYY-MM-DD') AS date_to,
ml.partner AS partner_id,
MIN(ml.id) AS id,
CASE WHEN ml.state = 'paid' OR p.membership_state = 'old' THEN SUM(il.price_subtotal) ELSE 0 END AS tot_earned,
ml.membership_id AS membership_id,
p.user_id AS user_id,
ml.company_id AS company_id,
ml.state AS state
FROM membership_membership_line ml
p.company_id AS company_id
FROM res_partner p
LEFT JOIN membership_membership_line ml ON (ml.partner = p.id)
LEFT JOIN account_invoice_line il ON (ml.account_invoice_line = il.id)
LEFT JOIN account_invoice ai ON (il.invoice_id = ai.id)
LEFT JOIN res_partner p ON (ml.partner = p.id)
WHERE p.membership_state != 'none'
GROUP BY
TO_CHAR(ml.date_from, 'YYYY'),
TO_CHAR(ml.date_from, 'MM'),
TO_CHAR(ml.date_from, 'YYYY-MM-DD'),
TO_CHAR(ml.date_to, 'YYYY-MM-DD'),
ml.partner,
ml.id,
p.user_id,
ml.company_id,
ml.state,
ml.membership_id) AS foo
GROUP BY year, month, date_from, date_to, partner_id, user_id, membership_id, company_id, state)
""")
p.id,
p.user_id,
p.membership_state,
p.associate_member,
p.membership_amount,
TO_CHAR(p.membership_start, 'YYYY-MM-DD'),
TO_CHAR(p.membership_stop, 'YYYY-MM-DD'),
TO_CHAR(p.membership_start, 'YYYY'),
TO_CHAR(p.membership_start,'MM'),
ml.membership_id,
p.company_id,
ml.state,
ml.id
) AS foo
GROUP BY
year,
month,
date_from,
date_to,
partner_id,
user_id,
membership_id,
company_id,
membership_state,
associate_member_id,
membership_amount
)""")
report_membership()

View File

@ -10,24 +10,21 @@
<field name="type">tree</field>
<field name="arch" type="xml">
<tree colors="blue:state in ('draft');black:state in ('open','free');gray:state in ('done','cancel') " string="Membership">
<field name="state" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="partner_id" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="user_id" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="membership_id" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="num_canceled" invisible="context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="num_waiting" invisible="context.get('free_cancel_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="num_invoiced" invisible="context.get('free_cancel_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="tot_pending" invisible="context.get('free_cancel_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="num_paid" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False)"/>
<field name="num_old" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False)"/>
<field name="tot_earned" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False)"/>
<field name="num_free" invisible="context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="date_from" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="date_to" invisible="context.get('free_cancel_visible', False) or context.get('waiting_invoiced_totpending_visible', False) or context.get('paid_old_totearned_visible', False)"/>
<field name="partner_id"/>
<field name="membership_state"/>
<field name="associate_member_id" invisible="1"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="user_id" invisible="1"/>
<field name="membership_id"/>
<field name="num_waiting" invisible="context.get('waiting_invoiced_totpending_visible', True)"/>
<field name="num_invoiced" invisible="context.get('waiting_invoiced_totpending_visible', True)"/>
<field name="tot_pending" invisible="context.get('waiting_invoiced_totpending_visible', True)"/>
<field name="num_paid" invisible="context.get('paid_old_totearned_visible', True)"/>
<field name="tot_earned" invisible="context.get('paid_old_totearned_visible', True)"/>
<field name="year" invisible="1"/>
<field name="month" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="state" invisible="1"/>
</tree>
</field>
</record>
@ -44,9 +41,8 @@
<filter string="Last 30 Days" icon="terp-go-month" name="month"
domain="[('date_from','&lt;=', time.strftime('%%Y-%%m-%%d')), ('date_from','&gt;',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"/>
<separator orientation="vertical"/>
<filter string="Cancel &amp; Free" icon="terp-check" context="{'free_cancel_visible':1}" help="This will display free and cancel column"/>
<filter string="Forecast" icon="terp-check" context="{'waiting_invoiced_totpending_visible':1}" help="This will display waiting, invoiced and total pending columns"/>
<filter string="Revenue Done" name="Revenue" icon="terp-check" context="{'paid_old_totearned_visible':1}" help="This will display paid, old and total earned columns"/>
<filter string="Forecast" icon="terp-gtk-jump-to-ltr" context="{'waiting_invoiced_totpending_visible':0}" help="This will display waiting, invoiced and total pending columns"/>
<filter string="Revenue Done" name="Revenue" icon="terp-dolar" context="{'paid_old_totearned_visible':0}" help="This will display paid, old and total earned columns"/>
<separator orientation="vertical"/>
<field name="partner_id"/>
<field name="membership_id"/>
@ -57,13 +53,13 @@
<group expand="1" string="Group By..." colspan="4" col="12">
<filter string="Salesman" icon="terp-personal" name="salesman"
domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Partner" icon="terp-partner" name="partner"
domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Associated Partner" icon="terp-partner" name="associate_member_id"
domain="[]" context="{'group_by':'associate_member_id'}"/>
<separator orientation="vertical"/>
<filter string="Membership Product" icon="terp-product" name="product"
domain="[]" context="{'group_by':'membership_id'}"/>
<filter string="Membership State" icon="terp-stock_effects-object-colorize"
domain="[]" context="{'group_by':'state'}"/>
<filter string="Current Membership State" icon="terp-stock_effects-object-colorize"
domain="[]" context="{'group_by':'membership_state'}"/>
<separator orientation="vertical" groups="base.group_multi_company"/>
<filter string="Company" icon="terp-go-home"
domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
@ -96,7 +92,7 @@
<field name="res_model">report.membership</field>
<field name="view_type">form</field>
<field name="search_view_id" ref="view_report_membership_search"/>
<field name="context">{"search_default_member":1, 'search_default_Revenue':1}</field>
<field name="context">{"search_default_member":1, 'search_default_Revenue':1, 'search_default_salesman':1, }</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_membership_tree_view1">
@ -114,7 +110,7 @@
<field name="act_window_id" ref="action_report_membership_tree"/>
</record>
<menuitem name="Membership Analysis" parent="base.menu_report_association"
<menuitem name="Members Analysis" parent="base.menu_report_association"
action="action_report_membership_tree"
id="menu_report_membership"
groups="base.group_partner_manager"/>