[IMP]: membership: Use multi in function field.separate report in report folder.
authoratp (Open ERP) <atp@tinyerp.co.in>
Mon, 7 Jun 2010 06:33:42 +0000 (12:03 +0530)
committeratp (Open ERP) <atp@tinyerp.co.in>
Mon, 7 Jun 2010 06:33:42 +0000 (12:03 +0530)
bzr revid: atp@tinyerp.co.in-20100607063342-sle8bcwuq0sn7b65

52 files changed:
addons/membership/__init__.py [changed mode: 0644->0755]
addons/membership/__openerp__.py [changed mode: 0644->0755]
addons/membership/demo_data.xml [changed mode: 0644->0755]
addons/membership/i18n/ar.po [changed mode: 0644->0755]
addons/membership/i18n/bg.po [changed mode: 0644->0755]
addons/membership/i18n/bs.po [changed mode: 0644->0755]
addons/membership/i18n/ca.po [changed mode: 0644->0755]
addons/membership/i18n/cs.po [changed mode: 0644->0755]
addons/membership/i18n/de.po [changed mode: 0644->0755]
addons/membership/i18n/es.po [changed mode: 0644->0755]
addons/membership/i18n/es_AR.po [changed mode: 0644->0755]
addons/membership/i18n/et.po [changed mode: 0644->0755]
addons/membership/i18n/fi.po [changed mode: 0644->0755]
addons/membership/i18n/fr.po [changed mode: 0644->0755]
addons/membership/i18n/hr.po [changed mode: 0644->0755]
addons/membership/i18n/hu.po [changed mode: 0644->0755]
addons/membership/i18n/id.po [changed mode: 0644->0755]
addons/membership/i18n/it.po [changed mode: 0644->0755]
addons/membership/i18n/ko.po [changed mode: 0644->0755]
addons/membership/i18n/lt.po [changed mode: 0644->0755]
addons/membership/i18n/membership.pot [changed mode: 0644->0755]
addons/membership/i18n/nl.po [changed mode: 0644->0755]
addons/membership/i18n/nl_BE.po [changed mode: 0644->0755]
addons/membership/i18n/pl.po [changed mode: 0644->0755]
addons/membership/i18n/pt.po [changed mode: 0644->0755]
addons/membership/i18n/pt_BR.po [changed mode: 0644->0755]
addons/membership/i18n/ro.po [changed mode: 0644->0755]
addons/membership/i18n/ru.po [changed mode: 0644->0755]
addons/membership/i18n/sk.po [changed mode: 0644->0755]
addons/membership/i18n/sl.po [changed mode: 0644->0755]
addons/membership/i18n/sq.po [changed mode: 0644->0755]
addons/membership/i18n/sv.po [changed mode: 0644->0755]
addons/membership/i18n/tlh.po [changed mode: 0644->0755]
addons/membership/i18n/tr.po [changed mode: 0644->0755]
addons/membership/i18n/uk.po [changed mode: 0644->0755]
addons/membership/i18n/vi.po [changed mode: 0644->0755]
addons/membership/i18n/zh_CN.po [changed mode: 0644->0755]
addons/membership/i18n/zh_TW.po [changed mode: 0644->0755]
addons/membership/membership.py [changed mode: 0644->0755]
addons/membership/membership_data.xml [changed mode: 0644->0755]
addons/membership/membership_demo.xml [changed mode: 0644->0755]
addons/membership/membership_view.xml [changed mode: 0644->0755]
addons/membership/process/membership_process.xml [changed mode: 0644->0755]
addons/membership/report/__init__.py [new file with mode: 0755]
addons/membership/report/report_membership.py [new file with mode: 0755]
addons/membership/report/report_membership_view.xml [new file with mode: 0755]
addons/membership/security/ir.model.access.csv [changed mode: 0644->0755]
addons/membership/wizard/__init__.py [changed mode: 0644->0755]
addons/membership/wizard/membership_invoice.py [changed mode: 0644->0755]
addons/membership/wizard/membership_invoice_view.xml [changed mode: 0644->0755]
addons/membership/wizard/membership_unpaid_invoice.py [changed mode: 0644->0755]
addons/membership/wizard/membership_unpaid_invoice_view.xml [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 4ae17c8..7e377bc
@@ -21,5 +21,6 @@
 
 import membership
 import wizard
+import report
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
old mode 100644 (file)
new mode 100755 (executable)
index 49297bc..709a098
@@ -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',
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 23f9cd1..73e7d4f
@@ -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'''
-        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
-            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'''
+    
+    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):
-            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']
+                 partner_id = partner.associate_member.id
             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:
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 00dde26..e6eac33
                 </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>
                         </field>
                     </page>
                 </notebook>
-
             </field>
         </record>
 
             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">
diff --git a/addons/membership/report/__init__.py b/addons/membership/report/__init__.py
new file mode 100755 (executable)
index 0000000..dd247c5
--- /dev/null
@@ -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
diff --git a/addons/membership/report/report_membership.py b/addons/membership/report/report_membership.py
new file mode 100755 (executable)
index 0000000..50273fb
--- /dev/null
@@ -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()
\ No newline at end of file
diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml
new file mode 100755 (executable)
index 0000000..6f15636
--- /dev/null
@@ -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>            
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)