[IMP] Cleaning of reporting (group_by, filters), adding new favourites and default views, some renaming (py and xml files)

This commit is contained in:
qdc 2014-08-21 12:53:47 +02:00 committed by Thibault Delavallée
parent 20d366595c
commit f57787e07e
78 changed files with 1202 additions and 693 deletions

View File

@ -446,6 +446,14 @@
</field> </field>
</record> </record>
<!-- Custom reports (aka filters) -->
<record id="filter_invoice_salespersons" model="ir.filters">
<field name="name">By Salespersons</field>
<field name="model_id">account.invoice</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date_invoice:month', 'user_id']}</field>
</record>
<record id="view_account_invoice_filter" model="ir.ui.view"> <record id="view_account_invoice_filter" model="ir.ui.view">
<field name="name">account.invoice.select</field> <field name="name">account.invoice.select</field>
<field name="model">account.invoice</field> <field name="model">account.invoice</field>
@ -463,14 +471,13 @@
<separator/> <separator/>
<filter domain="[('user_id','=',uid)]" help="My Invoices"/> <filter domain="[('user_id','=',uid)]" help="My Invoices"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter name="group_by_partner_id" string="Partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter name="group_by_partner_id" string="Partner" context="{'group_by':'partner_id'}"/>
<filter name="commercial_partner_id" string="Commercial Partner" domain="[]" context="{'group_by':'commercial_partner_id'}"/> <filter string="Salesperson" context="{'group_by':'user_id'}"/>
<filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Category of Product" name="category_product" context="{'group_by':'categ_id','residual_invisible':True}"/>
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> <separator/>
<filter string="Period" icon="terp-go-month" domain="[]" context="{'group_by':'period_id'}"/> <filter string="Period" context="{'group_by':'period_id'}"/>
<filter string="Invoice Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_invoice'}"/> <filter string="Due Month" context="{'group_by':'date_due'}"/>
<filter string="Due Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_due'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -582,7 +589,7 @@
<field name="search_view_id" ref="view_account_invoice_filter"/> <field name="search_view_id" ref="view_account_invoice_filter"/>
<field name="help" type="html"> <field name="help" type="html">
<p class="oe_view_nocontent_create"> <p class="oe_view_nocontent_create">
Click to create a customer refund. Click to create a customer refund.
</p><p> </p><p>
A refund is a document that credits an invoice completely or A refund is a document that credits an invoice completely or
partially. partially.

View File

@ -40,8 +40,8 @@ class analytic_entries_report(osv.osv):
'product_id': fields.many2one('product.product', 'Product', required=True), 'product_id': fields.many2one('product.product', 'Product', required=True),
'product_uom_id': fields.many2one('product.uom', 'Product Unit of Measure', required=True), 'product_uom_id': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
'amount': fields.float('Amount', readonly=True), 'amount': fields.float('Amount', readonly=True),
'unit_amount': fields.float('Quantity', readonly=True), 'unit_amount': fields.integer('Unit Amount', readonly=True),
'nbr': fields.integer('#Entries', readonly=True), 'nbr': fields.integer('# Entries', readonly=True), # TDE FIXME master: rename into nbr_entries
} }
def init(self, cr): def init(self, cr):
tools.drop_view_if_exists(cr, 'analytic_entries_report') tools.drop_view_if_exists(cr, 'analytic_entries_report')

View File

@ -7,20 +7,18 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Analytic Entries Analysis"> <search string="Analytic Entries Analysis">
<field name="date"/> <field name="date"/>
<filter string="My Entries" icon="terp-personal" domain="[('user_id','=',uid)]" help="My Entries"/> <filter string="My Entries" domain="[('user_id','=',uid)]" help="My Entries"/>
<field name="account_id" groups="analytic.group_analytic_accounting"/> <field name="account_id" groups="analytic.group_analytic_accounting"/>
<field name="product_id" /> <field name="product_id" />
<field name="user_id"/> <field name="user_id"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter string="User" name="User" icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="Partner" context="{'group_by':'partner_id'}"/>
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}"/> <filter string="Account" name="Account" context="{'group_by':'account_id'}" groups="analytic.group_analytic_accounting"/>
<filter string="Account" name="Account" icon="terp-folder-green" context="{'group_by':'account_id'}" groups="analytic.group_analytic_accounting"/> <filter string="General Account" context="{'group_by':'general_account_id'}"/>
<filter string="General Account" icon="terp-folder-orange" context="{'group_by':'general_account_id'}"/> <filter string="Journal" context="{'group_by':'journal_id'}"/>
<filter string="Journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> <separator/>
<filter string="Product Unit of Measure" icon="terp-mrp" context="{'group_by':'product_uom_id'}"/> <filter string="Month" name="Month" context="{'group_by':'date:month'}"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Date" name="Month" icon="terp-go-month" context="{'group_by':'date:month'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -30,7 +28,8 @@
<field name="model">analytic.entries.report</field> <field name="model">analytic.entries.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Analytic Entries Analysis" type="pivot"> <graph string="Analytic Entries Analysis" type="pivot">
<field name="user_id" type="row"/> <field name="account_id" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="nbr" type="measure"/> <field name="nbr" type="measure"/>
<field name="unit_amount" type="measure"/> <field name="unit_amount" type="measure"/>
<field name="amount" type="measure"/> <field name="amount" type="measure"/>
@ -42,8 +41,8 @@
<field name="res_model">analytic.entries.report</field> <field name="res_model">analytic.entries.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{'search_default_year':1,'search_default_month':1, 'group_by_no_leaf':1, 'search_default_Account':1, 'search_default_Month':1, 'group_by':[]}</field>
<field name="search_view_id" ref="view_analytic_entries_report_search"/> <field name="search_view_id" ref="view_analytic_entries_report_search"/>
<field name="context">{'group_by_no_leaf':1, 'search_default_Account':1, 'group_by':[]}</field>
<field name="help">From this view, have an analysis of your different analytic entries following the analytic account you defined matching your business need. Use the tool search to analyse information about analytic entries generated in the system.</field> <field name="help">From this view, have an analysis of your different analytic entries following the analytic account you defined matching your business need. Use the tool search to analyse information about analytic entries generated in the system.</field>
</record> </record>

View File

@ -29,7 +29,7 @@ class account_entries_report(osv.osv):
_auto = False _auto = False
_rec_name = 'date' _rec_name = 'date'
_columns = { _columns = {
'date': fields.date('Effective Date', readonly=True), 'date': fields.date('Effective Date', readonly=True), # TDE FIXME master: rename into date_effective
'date_created': fields.date('Date Created', readonly=True), 'date_created': fields.date('Date Created', readonly=True),
'date_maturity': fields.date('Date Maturity', readonly=True), 'date_maturity': fields.date('Date Maturity', readonly=True),
'ref': fields.char('Reference', readonly=True), 'ref': fields.char('Reference', readonly=True),
@ -50,7 +50,7 @@ class account_entries_report(osv.osv):
'reconcile_id': fields.many2one('account.move.reconcile', 'Reconciliation number', readonly=True), 'reconcile_id': fields.many2one('account.move.reconcile', 'Reconciliation number', readonly=True),
'partner_id': fields.many2one('res.partner','Partner', readonly=True), 'partner_id': fields.many2one('res.partner','Partner', readonly=True),
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True), 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
'quantity': fields.float('Products Quantity', digits=(16,2), readonly=True), 'quantity': fields.float('Products Quantity', digits=(16,2), readonly=True), # TDE FIXME master: rename into product_quantity
'user_type': fields.many2one('account.account.type', 'Account Type', readonly=True), 'user_type': fields.many2one('account.account.type', 'Account Type', readonly=True),
'type': fields.selection([ 'type': fields.selection([
('receivable', 'Receivable'), ('receivable', 'Receivable'),

View File

@ -36,10 +36,11 @@
<field name="model">account.entries.report</field> <field name="model">account.entries.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Entries Analysis" type="pivot"> <graph string="Entries Analysis" type="pivot">
<field name="partner_id" type="row"/> <field name="user_type" type="row"/>
<field name="debit" operator="+"/> <field name="period_id" type="col"/>
<field name="credit" operator="+"/> <field name="debit" type="measure"/>
<field name="balance" operator="+"/> <field name="credit" type="measure"/>
<field name="balance" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
@ -63,14 +64,14 @@
<field name="date"/> <field name="date"/>
<field name="date_created"/> <field name="date_created"/>
<field name="date_maturity"/> <field name="date_maturity"/>
<filter icon="terp-go-year" string="This F.Year" name="thisyear" context="{'year':'current_year'}" help="Journal Entries with period in current year"/> <filter string="This F.Year" name="thisyear" domain="['|', ('date', '=', False), '&amp;',('date','&lt;=', time.strftime('%%Y-12-31')),('date','&gt;=',time.strftime('%%Y-01-01'))]" help="Journal Entries with period in current year"/>
<filter icon="terp-go-month" string="This Period" name="period" context="{'period':'current_period'}" help="Journal Entries with period in current period"/> <filter string="This Period" name="period" context="{'period':'current_period'}" help="Journal Entries with period in current period"/>
<separator/> <separator/>
<filter string="Unposted" icon="terp-document-new" domain="[('move_state','=','draft')]" help = "entries"/> <filter string="Unposted" domain="[('move_state','=','draft')]" help = "entries"/>
<filter string="Posted" icon="terp-camera_test" domain="[('move_state','=','posted')]" help = "Posted entries"/> <filter string="Posted" domain="[('move_state','=','posted')]" help = "Posted entries"/>
<separator/> <separator/>
<filter string="Unreconciled" icon="terp-dolar_ok!" domain="[('reconcile_id','=',False), ('account_id.reconcile','=',True)]" help = "Unreconciled entries"/> <filter string="Unreconciled" domain="[('reconcile_id','=',False), ('account_id.reconcile','=',True)]" help = "Unreconciled entries"/>
<filter string="Reconciled" icon="terp-dolar" domain="[('reconcile_id','!=',False)]" help = "Reconciled entries"/> <filter string="Reconciled" domain="[('reconcile_id','!=',False)]" help = "Reconciled entries"/>
<field name="account_id"/> <field name="account_id"/>
<field name="journal_id"/> <field name="journal_id"/>
<field name="period_id"/> <field name="period_id"/>
@ -81,17 +82,13 @@
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}"/> <filter string="Partner" context="{'group_by':'partner_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':['product_id','product_uom_id'], 'quantity_visible':1}"/> <filter string="Journal" name="group_journal" context="{'group_by':'journal_id'}"/>
<filter string="Currency" name="group_currency" icon="terp-dolar" context="{'group_by':'currency_id', 'currency_id_visible':1, 'amount_currency_visible':1}"/> <filter string="Acc.Type" context="{'group_by':'user_type'}" name="usertype"/>
<filter string="Journal" name="group_journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/> <filter string="Int.Type" context="{'group_by':'type'}"/>
<filter string="Account" name="group_account" icon="terp-folder-green" context="{'group_by':'account_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Acc.Type" icon="terp-stock_symbol-selection" context="{'group_by':'user_type'}" name="usertype"/> <separator/>
<filter string="Int.Type" icon="terp-stock_symbol-selection" context="{'group_by':'type'}"/> <filter string="Entries Month" context="{'group_by':'date:month'}" help="Entries Date by Month"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Entries Month" icon="terp-go-today" context="{'group_by':'date'}" help="Entries Date by Month"/>
<filter string="Period" icon="terp-go-month" name="group_period" context="{'group_by':'period_id'}"/>
<filter string="Fiscal Year" icon="terp-go-year" context="{'group_by':'fiscalyear_id'}"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -56,7 +56,7 @@ class account_invoice_report(osv.osv):
_columns = { _columns = {
'date': fields.date('Date', readonly=True), 'date': fields.date('Date', readonly=True),
'product_id': fields.many2one('product.product', 'Product', readonly=True), 'product_id': fields.many2one('product.product', 'Product', readonly=True),
'product_qty':fields.float('Qty', readonly=True), 'product_qty':fields.float('Product Quantity', readonly=True),
'uom_name': fields.char('Reference Unit of Measure', size=128, readonly=True), 'uom_name': fields.char('Reference Unit of Measure', size=128, readonly=True),
'payment_term': fields.many2one('account.payment.term', 'Payment Term', readonly=True), 'payment_term': fields.many2one('account.payment.term', 'Payment Term', readonly=True),
'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], readonly=True), 'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], readonly=True),
@ -73,7 +73,7 @@ class account_invoice_report(osv.osv):
'price_average': fields.float('Average Price', readonly=True, group_operator="avg"), 'price_average': fields.float('Average Price', readonly=True, group_operator="avg"),
'user_currency_price_average': fields.function(_compute_amounts_in_user_currency, string="Average Price", type='float', digits_compute=dp.get_precision('Account'), multi="_compute_amounts"), 'user_currency_price_average': fields.function(_compute_amounts_in_user_currency, string="Average Price", type='float', digits_compute=dp.get_precision('Account'), multi="_compute_amounts"),
'currency_rate': fields.float('Currency Rate', readonly=True), 'currency_rate': fields.float('Currency Rate', readonly=True),
'nbr':fields.integer('# of Lines', readonly=True), 'nbr': fields.integer('# of Invoices', readonly=True), # TDE FIXME master: rename into nbr_lines
'type': fields.selection([ 'type': fields.selection([
('out_invoice','Customer Invoice'), ('out_invoice','Customer Invoice'),
('in_invoice','Supplier Invoice'), ('in_invoice','Supplier Invoice'),
@ -226,7 +226,7 @@ class account_invoice_report(osv.osv):
OR (sub.date IS NULL AND cr2.name <= NOW())) OR (sub.date IS NULL AND cr2.name <= NOW()))
ORDER BY name DESC LIMIT 1) ORDER BY name DESC LIMIT 1)
)""" % ( )""" % (
self._table, self._table,
self._select(), self._sub_select(), self._from(), self._group_by())) self._select(), self._sub_select(), self._from(), self._group_by()))

View File

@ -6,10 +6,8 @@
<field name="model">account.invoice.report</field> <field name="model">account.invoice.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Invoices Analysis" type="pivot"> <graph string="Invoices Analysis" type="pivot">
<field name="period_id" type="row"/>
<field name="categ_id" type="row"/> <field name="categ_id" type="row"/>
<field name="nbr" type="measure"/> <field name="period_id" type="col"/>
<field name="product_qty" type="measure"/>
<field name="price_total" type="measure"/> <field name="price_total" type="measure"/>
</graph> </graph>
</field> </field>
@ -58,7 +56,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Invoices Analysis"> <search string="Invoices Analysis">
<field name="date"/> <field name="date"/>
<filter string="This Year" name="year" domain="['|', ('date', '=', False), '&amp;',('date','&lt;=', time.strftime('%%Y-12-31')),('date','&gt;=',time.strftime('%%Y-01-01'))]"/> <filter string="This Year" name="thisyear" domain="['|', ('date', '=', False), '&amp;',('date','&lt;=', time.strftime('%%Y-12-31')),('date','&gt;=',time.strftime('%%Y-01-01'))]" help="Journal invoices with period in current year"/>
<separator/> <separator/>
<filter string="To Invoice" domain="[('state','=','draft')]" help = "Draft Invoices"/> <filter string="To Invoice" domain="[('state','=','draft')]" help = "Draft Invoices"/>
<filter string="Pro-forma" domain="['|', ('state','=','proforma'),('state','=','proforma2')]"/> <filter string="Pro-forma" domain="['|', ('state','=','proforma'),('state','=','proforma2')]"/>
@ -74,19 +72,14 @@
<field name="categ_id" filter_domain="[('categ_id', 'child_of', self)]"/> <field name="categ_id" filter_domain="[('categ_id', 'child_of', self)]"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Partner" name="partner_id" context="{'group_by':'partner_id','residual_visible':True}"/> <filter string="Partner" name="partner_id" context="{'group_by':'partner_id','residual_visible':True}"/>
<filter string="Commercial Partner" name="commercial_partner_id" context="{'group_by':'commercial_partner_id','residual_visible':True}"/> <filter string="Salesperson" name='user' context="{'group_by':'user_id'}"/>
<filter string="Commercial Partner's Country" name="country_id" context="{'group_by':'country_id'}"/> <filter string="Sales Team" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Salesperson" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="Category of Product" name="category_product" context="{'group_by':'categ_id','residual_invisible':True}"/>
<filter string="Due Month" icon="terp-go-today" context="{'group_by':'date_due'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Period" icon="terp-go-month" context="{'group_by':'period_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True,'residual_invisible':True}"/> <separator orientation="vertical" />
<filter string="Category of Product" name="category_product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id','residual_invisible':True}"/> <filter string="Period" context="{'group_by':'period_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Due Month" context="{'group_by':'date_due:month'}"/>
<filter string="Type" icon="terp-stock_symbol-selection" context="{'group_by':'type'}"/>
<filter string="Journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/>
<filter string="Account" icon="terp-folder-orange" context="{'group_by':'account_line_id'}"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Invoice Date" name="month" icon="terp-go-month" context="{'group_by':'date'}" help="Group by month of Invoice Date"/>
</group> </group>
</search> </search>
</field> </field>
@ -97,7 +90,7 @@
<field name="res_model">account.invoice.report</field> <field name="res_model">account.invoice.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{'search_default_current':1, 'search_default_year': 1, 'search_default_customer':1, 'group_by':[], 'group_by_no_leaf':1,}</field> <field name="context">{'search_default_current':1, 'search_default_customer':1, 'group_by':[], 'group_by_no_leaf':1,}</field>
<field name="search_view_id" ref="view_account_invoice_report_search"/> <field name="search_view_id" ref="view_account_invoice_report_search"/>
<field name="help">From this report, you can have an overview of the amount invoiced to your customer. The tool search can also be used to personalise your Invoices reports and so, match this analysis to your needs.</field> <field name="help">From this report, you can have an overview of the amount invoiced to your customer. The tool search can also be used to personalise your Invoices reports and so, match this analysis to your needs.</field>

View File

@ -38,6 +38,9 @@
<field name="fiscalyear_id"/> <field name="fiscalyear_id"/>
<field name="period_id"/> <field name="period_id"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<group expand="1" string="Group By">
<filter string="Month" context="{'group_by':'date:month'}"/>
</group>
</search> </search>
</field> </field>
</record> </record>

View File

@ -7,15 +7,15 @@
<field name="model">asset.asset.report</field> <field name="model">asset.asset.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Assets Analysis" type="pivot"> <graph string="Assets Analysis" type="pivot">
<field name="asset_id" type="row"/> <field name="asset_category_id" type="row"/>
<field name="nbr" type="measure"/> <field name="purchase_date" type="col"/>
<field name="posted_value" type="measure"/>
<field name="gross_value" type="measure"/> <field name="gross_value" type="measure"/>
<field name="depreciation_value" type="measure"/> <field name="depreciation_value" type="measure"/>
<field name="posted_value" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
<record id="view_asset_asset_report_search" model="ir.ui.view"> <record id="view_asset_asset_report_search" model="ir.ui.view">
<field name="name">asset.asset.report.search</field> <field name="name">asset.asset.report.search</field>
<field name="model">asset.asset.report</field> <field name="model">asset.asset.report</field>
@ -23,10 +23,10 @@
<search string="Assets Analysis"> <search string="Assets Analysis">
<field name="purchase_date"/> <field name="purchase_date"/>
<field name="depreciation_date"/> <field name="depreciation_date"/>
<filter string="Draft" icon="terp-document-new" domain="[('state','=','draft')]" help="Assets in draft state"/> <filter string="Draft" domain="[('state','=','draft')]" help="Assets in draft state"/>
<filter string="Running" icon="terp-check" domain="[('state','=','open')]" help="Assets in running state"/> <filter string="Running" domain="[('state','=','open')]" help="Assets in running state"/>
<separator/> <separator/>
<filter string="Posted" name="posted" icon="terp-camera_test" domain="[('move_check','=',True)]" help="Posted depreciation lines" context="{'unposted_value_visible': 0}"/> <filter string="Posted" name="posted" domain="[('move_check','=',True)]" help="Posted depreciation lines" context="{'unposted_value_visible': 0}"/>
<field name="asset_id"/> <field name="asset_id"/>
<field name="asset_category_id"/> <field name="asset_category_id"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
@ -35,24 +35,25 @@
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Asset" name="asset" context="{'group_by':'asset_id'}"/> <filter string="Asset" name="asset" context="{'group_by':'asset_id'}"/>
<filter string="Asset Category" name="asset_category" icon="terp-stock_symbol-selection" context="{'group_by':'asset_category_id'}"/> <filter string="Asset Category" name="asset_category" context="{'group_by':'asset_category_id'}"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Purchase Month" icon="terp-go-month" <separator/>
domain="[]" context="{'group_by':'purchase_date'}" help="Date of asset purchase"/> <filter string="Purchase Month" help="Date of asset purchase"
<filter string="Depreciation Month" icon="terp-go-today" context="{'group_by':'purchase_date:month'}"/>
domain="[]" context="{'group_by':'depreciation_date'}" help="Date of depreciation"/> <filter string="Depreciation Month" help="Date of depreciation"
context="{'group_by':'depreciation_date:month'}"/>
</group> </group>
</search> </search>
</field> </field>
</record> </record>
<record model="ir.actions.act_window" id="action_asset_asset_report"> <record model="ir.actions.act_window" id="action_asset_asset_report">
<field name="name">Assets Analysis</field> <field name="name">Assets Analysis</field>
<field name="res_model">asset.asset.report</field> <field name="res_model">asset.asset.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="search_view_id" ref="view_asset_asset_report_search"/> <field name="search_view_id" ref="view_asset_asset_report_search"/>
<field name="context">{'search_default_year':1,'search_default_this_month':1,'search_default_asset_category':1, 'search_default_posted':1, 'group_by':[], 'group_by_no_leaf':1}</field> <field name="context">{'group_by':[], 'group_by_no_leaf':1}</field>
<field name="help" type="html"> <field name="help" type="html">
<p> <p>
From this report, you can have an overview on all depreciation. The From this report, you can have an overview on all depreciation. The
@ -61,7 +62,7 @@
</p> </p>
</field> </field>
</record> </record>
<menuitem action="action_asset_asset_report" <menuitem action="action_asset_asset_report"
id="menu_action_asset_asset_report" id="menu_action_asset_asset_report"
parent="account.menu_finance_reporting"/> parent="account.menu_finance_reporting"/>

View File

@ -7,7 +7,8 @@
<field name="model">account_followup.stat</field> <field name="model">account_followup.stat</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Follow-up lines" type="pivot"> <graph string="Follow-up lines" type="pivot">
<field name="partner_id" type="row"/> <field name="followup_id" type="row"/>
<field name="date_followup" type="col"/>
<field name="balance" type="measure"/> <field name="balance" type="measure"/>
</graph> </graph>
</field> </field>
@ -19,19 +20,20 @@
<search string="Follow-ups Sent"> <search string="Follow-ups Sent">
<field name="date_move"/> <field name="date_move"/>
<field name="date_move_last"/> <field name="date_move_last"/>
<filter icon="terp-go-year" string="This Fiscal year" name="fiscalyear" domain="[('period_id','in','current_year')]" <filter string="This Fiscal year" name="fiscalyear" domain="[('period_id','in','current_year')]"
help="Follow-up Entries with period in current year"/> help="Follow-up Entries with period in current year"/>
<separator/> <separator/>
<filter icon="terp-camera_test" string="Not Litigation" domain="[('blocked','=', False)]" <filter string="Not Litigation" domain="[('blocked','=', False)]"
help = "Including journal entries marked as a litigation"/> help = "Including journal entries marked as a litigation"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="balance"/> <field name="balance"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" /> <filter string="Partner" context="{'group_by':'partner_id'}" />
<filter string="Litigation" icon="terp-camera_test" context="{'group_by':'blocked'}" /> <filter string="Litigation" context="{'group_by':'blocked'}" />
<filter string="Follow-up Level" icon="terp-stock_effects-object-colorize" name="followup_level" context="{'group_by':'followup_id'}" /> <filter string="Follow-up Level" name="followup_level" context="{'group_by':'followup_id'}" />
<filter string="Latest Follow-up Month" icon="terp-go-month" context="{'group_by':'date_followup'}" /> <filter string="Company" groups="base.group_multi_company" context="{'group_by':'company_id'}" />
<filter string="Company" groups="base.group_multi_company" icon="terp-go-home" context="{'group_by':'company_id'}" /> <separator/>
<filter string="Latest Follow-up Month" context="{'group_by':'date_followup:month'}" />
</group> </group>
</search> </search>
</field> </field>

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<openerp> <openerp>
<data> <data>
<record id="view_sale_receipt_report_graph" model="ir.ui.view"> <record id="view_sale_receipt_report_graph" model="ir.ui.view">
<field name="name">sale.receipt.report.graph</field> <field name="name">sale.receipt.report.graph</field>
<field name="model">sale.receipt.report</field> <field name="model">sale.receipt.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Sales Receipts Analysis" type="pivot"> <graph string="Sales Receipts Analysis" type="pivot">
<field name="account_id"/> <field name="partner_id" type="row"/>
<field name="date_due" type="col"/>
<field name="price_total" type="measure"/> <field name="price_total" type="measure"/>
</graph> </graph>
</field> </field>
@ -20,9 +20,9 @@
<search string="Sales Receipts Analysis"> <search string="Sales Receipts Analysis">
<field name="date"/> <field name="date"/>
<field name="date_due"/> <field name="date_due"/>
<filter string="Draft" icon="terp-document-new" domain="[('state','=','draft')]" help = "Draft Vouchers"/> <filter string="Draft" domain="[('state','=','draft')]" help = "Draft Vouchers"/>
<filter string="Pro-forma" icon="terp-gtk-media-pause" domain="[('state','=','proforma')]" help = "Pro-forma Vouchers"/> <filter string="Pro-forma" domain="[('state','=','proforma')]" help = "Pro-forma Vouchers"/>
<filter string="Posted" name="current" icon="terp-check" domain="[('state','not in', ('draft','cancel'))]" help = "Validated Vouchers"/> <filter string="Posted" name="current" domain="[('state','not in', ('draft','cancel'))]" help = "Validated Vouchers"/>
<field name="partner_id"/> <field name="partner_id"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="journal_id"/> <field name="journal_id"/>
@ -31,14 +31,13 @@
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Partner" name="partner" icon="terp-partner" context="{'group_by':'partner_id'}"/> <filter string="Partner" name="partner" context="{'group_by':'partner_id'}"/>
<filter string="Salesperson" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Type" context="{'group_by':'type'}"/>
<filter string="Type" icon="terp-stock_symbol-selection" context="{'group_by':'type'}"/> <filter string="Journal" context="{'group_by':'journal_id'}"/>
<filter string="Journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Due Month" icon="terp-go-today" context="{'group_by':'date_due'}"/> <separator/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Due Month" context="{'group_by':'date_due:month'}"/>
<filter string="Invoice Date" name="month" icon="terp-go-month" context="{'group_by':'date'}" help="Group by month of Invoice Date"/>
</group> </group>
</search> </search>
</field> </field>
@ -49,7 +48,7 @@
<field name="res_model">sale.receipt.report</field> <field name="res_model">sale.receipt.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{'search_default_year':1,'search_default_month':1,'search_default_current':1, 'search_default_partner':1, 'search_default_customer':1, 'group_by':[], 'group_by_no_leaf':1,}</field> <field name="context">{'search_default_year':1,'search_default_month':1,'search_default_partner':1, 'search_default_customer':1, 'group_by':[], 'group_by_no_leaf':1,}</field>
<field name="search_view_id" ref="view_sale_receipt_report_search"/> <field name="search_view_id" ref="view_sale_receipt_report_search"/>
<field name="help" type="html"> <field name="help" type="html">
<p> <p>
@ -63,6 +62,6 @@
</record> </record>
<menuitem action="action_sale_receipt_report_all" id="menu_action_sale_receipt_report_all" parent="account.menu_finance_reporting" sequence="3"/> <menuitem action="action_sale_receipt_report_all" id="menu_action_sale_receipt_report_all" parent="account.menu_finance_reporting" sequence="3"/>
</data> </data>
</openerp> </openerp>

View File

@ -74,7 +74,7 @@ Dashboard for CRM will include:
'wizard/crm_merge_opportunities_view.xml', 'wizard/crm_merge_opportunities_view.xml',
'crm_view.xml', 'crm_view.xml',
'crm_phonecall_view.xml', 'crm_phonecall_view.xml',
'crm_phonecall_menu.xml', 'crm_phonecall_menu.xml',
@ -84,6 +84,7 @@ Dashboard for CRM will include:
'calendar_event_menu.xml', 'calendar_event_menu.xml',
'report/crm_lead_report_view.xml', 'report/crm_lead_report_view.xml',
'report/crm_opportunity_report_view.xml',
'report/crm_phonecall_report_view.xml', 'report/crm_phonecall_report_view.xml',
'res_partner_view.xml', 'res_partner_view.xml',

View File

@ -552,6 +552,28 @@ Andrew</field>
<!-- <field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/> --> <!-- <field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/> -->
</record> </record>
<record id="crm_case_27" model="crm.lead">
<field name="type">opportunity</field>
<field name="name">Interest in your products</field>
<field eval="20000" name="planned_revenue"/>
<field eval="0.0" name="probability"/>
<field name="partner_name">Agrolait</field>
<field name="email_from">info@agrolait.com</field>
<field name="partner_id" ref="base.res_partner_2"/>
<field name="street">69 rue de Chimay</field>
<field name="country_id" ref="base.be"/>
<field name="city">Wavre</field>
<field name="zip">1300</field>
<field name="categ_ids" eval="[(6, 0, [categ_oppor2])]"/>
<field name="priority">2</field>
<field eval="time.strftime('%Y-%m-23')" name="date_deadline"/>
<field eval="time.strftime('%Y-%m-10')" name="date_action"/>
<field name="title_action">Send Catalogue by Email</field>
<field name="section_id" ref="sales_team.crm_case_section_2"/>
<field name="user_id" ref="base.user_demo"/>
<field name="stage_id" ref="crm.stage_lead1"/>
</record>
<!-- Some messages linked to the previous opportunities --> <!-- Some messages linked to the previous opportunities -->
<record id="msg_case15_attach1" model="ir.attachment"> <record id="msg_case15_attach1" model="ir.attachment">
<field name="datas">bWlncmF0aW9uIHRlc3Q=</field> <field name="datas">bWlncmF0aW9uIHRlc3Q=</field>

View File

@ -36,8 +36,8 @@
<field name="view_mode">kanban,tree,graph,form,calendar</field> <field name="view_mode">kanban,tree,graph,form,calendar</field>
<field name="domain">[('type','=','opportunity')]</field> <field name="domain">[('type','=','opportunity')]</field>
<field name="context">{ <field name="context">{
'stage_type': 'opportunity', 'stage_type': 'opportunity',
'default_type': 'opportunity', 'default_type': 'opportunity',
'default_user_id': uid 'default_user_id': uid
} }
</field> </field>

View File

@ -101,7 +101,7 @@
</header> </header>
<sheet> <sheet>
<div class="oe_right oe_button_box" name="buttons"> <div class="oe_right oe_button_box" name="buttons">
<button class="oe_inline oe_stat_button" type="action" <button class="oe_inline oe_stat_button" type="action"
context="{'default_opportunity_id': active_id, 'search_default_opportunity_id': active_id, 'default_partner_id': partner_id, 'default_duration': 1.0}" context="{'default_opportunity_id': active_id, 'search_default_opportunity_id': active_id, 'default_partner_id': partner_id, 'default_duration': 1.0}"
name="%(crm.crm_case_categ_phone_incoming0)d" icon="fa-phone"> name="%(crm.crm_case_categ_phone_incoming0)d" icon="fa-phone">
<div>Schedule/Log<br/>Calls</div> <div>Schedule/Log<br/>Calls</div>
@ -380,12 +380,12 @@
</header> </header>
<sheet> <sheet>
<div class="oe_right oe_button_box"> <div class="oe_right oe_button_box">
<button class="oe_inline oe_stat_button" type="action" <button class="oe_inline oe_stat_button" type="action"
name="%(crm.crm_case_categ_phone_incoming0)d" icon="fa-phone" name="%(crm.crm_case_categ_phone_incoming0)d" icon="fa-phone"
context="{'default_opportunity_id': active_id, 'search_default_opportunity_id': active_id, 'default_partner_id': partner_id, 'default_duration': 1.0}"> context="{'default_opportunity_id': active_id, 'search_default_opportunity_id': active_id, 'default_partner_id': partner_id, 'default_duration': 1.0}">
<div>Schedule/Log<br/>Calls</div> <div>Schedule/Log<br/>Calls</div>
</button> </button>
<button class="oe_inline oe_stat_button" type="object" <button class="oe_inline oe_stat_button" type="object"
context="{'partner_id': partner_id}" context="{'partner_id': partner_id}"
name="action_schedule_meeting" icon="fa-calendar"> name="action_schedule_meeting" icon="fa-calendar">
<field string="Meetings" name="meeting_count" widget="statinfo"/> <field string="Meetings" name="meeting_count" widget="statinfo"/>
@ -533,7 +533,6 @@
</field> </field>
</record> </record>
<!-- Opportunities Search View --> <!-- Opportunities Search View -->
<record id="view_crm_case_opportunities_filter" model="ir.ui.view"> <record id="view_crm_case_opportunities_filter" model="ir.ui.view">
<field name="name">CRM - Opportunities Search</field> <field name="name">CRM - Opportunities Search</field>
@ -548,6 +547,8 @@
<field name="stage_id" domain="[]"/> <field name="stage_id" domain="[]"/>
<field name="probability"/> <field name="probability"/>
<separator/> <separator/>
<filter string="New" name="new"
domain="[('probability', '=', 0), ('stage_id.sequence', '&lt;=', 1)]"/>
<filter string="Won" name="won" <filter string="Won" name="won"
domain="[('probability', '=', 100), ('stage_id.fold', '=', True)]"/> domain="[('probability', '=', 100), ('stage_id.fold', '=', True)]"/>
<filter string="Lost" name="lost" <filter string="Lost" name="lost"
@ -561,12 +562,14 @@
<separator/> <separator/>
<filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/> <filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<group expand="0" string="Group By" colspan="16"> <group expand="0" string="Group By" colspan="16">
<filter string="Salesperson" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Salesperson" context="{'group_by':'user_id'}"/>
<filter string="Team" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Country" context="{'group_by':'country_id'}" />
<filter string="Customer" help="Partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Expected Closing" domain="[]" context="{'group_by':'date_deadline'}"/> <filter string="Stage" context="{'group_by':'stage_id'}"/>
<filter string="Last Message" name="group_message_last_post" domain="[]" context="{'group_by':'message_last_post:week'}"/> <separator orientation="vertical" />
<filter string="Creation Month" context="{'group_by':'create_date:month'}" name="month"/>
<filter string="Expected Closing" context="{'group_by':'date_deadline'}"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################## ##############################################################################
# #
# OpenERP, Open Source Management Solution # OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). # Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
# #
@ -15,12 +15,12 @@
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # 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/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
import crm_lead_report import crm_lead_report
import crm_opportunity_report
import crm_phonecall_report import crm_phonecall_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,26 +19,11 @@
# #
############################################################################## ##############################################################################
from openerp.addons.crm import crm
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp import tools from openerp import tools
from openerp.addons.crm import crm
MONTHS = [ class crm_lead_report(osv.Model):
('01', 'January'),
('02', 'February'),
('03', 'March'),
('04', 'April'),
('05', 'May'),
('06', 'June'),
('07', 'July'),
('08', 'August'),
('09', 'September'),
('10', 'October'),
('11', 'November'),
('12', 'December')
]
class crm_lead_report(osv.osv):
""" CRM Lead Analysis """ """ CRM Lead Analysis """
_name = "crm.lead.report" _name = "crm.lead.report"
_auto = False _auto = False
@ -49,9 +34,10 @@ class crm_lead_report(osv.osv):
_columns = { _columns = {
'date_deadline': fields.date('Exp. Closing', readonly=True, help="Expected Closing"), 'date_deadline': fields.date('Exp. Closing', readonly=True, help="Expected Closing"),
'create_date': fields.datetime('Creation Date', readonly=True), 'create_date': fields.datetime('Creation Date', readonly=True),
'opening_date': fields.date('Assignation Date', readonly=True), 'opening_date': fields.datetime('Assignation Date', readonly=True),
'date_closed': fields.date('Close Date', readonly=True), 'date_closed': fields.datetime('Close Date', readonly=True),
'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True), 'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True),
'nbr_cases': fields.integer("# of Cases", readonly=True),
# durations # durations
'delay_open': fields.float('Delay to Assign',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to open the case"), 'delay_open': fields.float('Delay to Assign',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to open the case"),
@ -59,12 +45,12 @@ class crm_lead_report(osv.osv):
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"), 'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
'user_id':fields.many2one('res.users', 'User', readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
'country_id':fields.many2one('res.country', 'Country', readonly=True), 'country_id':fields.many2one('res.country', 'Country', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'probability': fields.float('Probability',digits=(16,2),readonly=True, group_operator="avg"), 'probability': fields.float('Probability',digits=(16,2),readonly=True, group_operator="avg"),
'planned_revenue': fields.float('Planned Revenue',digits=(16,2),readonly=True), 'planned_revenue': fields.float('Total Revenue',digits=(16,2),readonly=True), # TDE FIXME master: rename into total_revenue
'probable_revenue': fields.float('Probable Revenue', digits=(16,2),readonly=True), 'probable_revenue': fields.float('Expected Revenue', digits=(16,2),readonly=True), # TDE FIXME master: rename into expected_revenue
'stage_id': fields.many2one ('crm.case.stage', 'Stage', readonly=True, domain="[('section_ids', '=', section_id)]"), 'stage_id': fields.many2one ('crm.case.stage', 'Stage', readonly=True, domain="[('section_ids', '=', section_id)]"),
'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
@ -87,9 +73,10 @@ class crm_lead_report(osv.osv):
SELECT SELECT
id, id,
c.date_deadline, c.date_deadline,
count(id) as nbr_cases,
date(c.date_open) as opening_date, c.date_open as opening_date,
date(c.date_closed) as date_closed, c.date_closed as date_closed,
c.date_last_stage_update as date_last_stage_update, c.date_last_stage_update as date_last_stage_update,
@ -105,7 +92,7 @@ class crm_lead_report(osv.osv):
c.medium_id, c.medium_id,
c.partner_id, c.partner_id,
c.country_id, c.country_id,
c.planned_revenue, c.planned_revenue as planned_revenue,
c.planned_revenue*(c.probability/100) as probable_revenue, c.planned_revenue*(c.probability/100) as probable_revenue,
c.create_date as create_date, c.create_date as create_date,
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close, extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
@ -114,6 +101,7 @@ class crm_lead_report(osv.osv):
FROM FROM
crm_lead c crm_lead c
WHERE c.active = 'true' WHERE c.active = 'true'
GROUP BY c.id
)""") )""")

View File

@ -8,8 +8,10 @@
<field name="model">crm.lead.report</field> <field name="model">crm.lead.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Leads Analysis" type="pivot" stacked="True"> <graph string="Leads Analysis" type="pivot" stacked="True">
<field name="user_id" type="row"/> <field name="section_id" type="row"/>
<field name="create_date" interval="year" type="col"/> <field name="create_date" interval="month" type="col"/>
<field name="nbr_cases" type="measure"/>
<field name="probable_revenue" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
@ -25,30 +27,34 @@
</field> </field>
</record> </record>
<record id="view_report_crm_opportunity_graph" model="ir.ui.view">
<field name="name">crm.opportunity.report.graph</field>
<field name="model">crm.lead.report</field>
<field name="arch" type="xml">
<graph string="Leads Analysis" type="pivot" stacked="True">
<field name="date_deadline" type="row"/>
<field name="stage_id" type="col"/>
<field name="planned_revenue" type="measure"/>
</graph>
</field>
</record>
<!-- Custom reports (aka filters) --> <!-- Custom reports (aka filters) -->
<record id="filter_leads_long_term_revenue" model="ir.filters">
<field name="name">Long Term Revenue</field>
<field name="model_id">crm.lead.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['country_id', 'section_id'], 'col_group_by': ['date_deadline'], 'measures': ['planned_revenue']}</field>
</record>
<record id="filter_leads_revenue_per_lead" model="ir.filters">
<field name="name">Revenue Per Lead</field>
<field name="model_id">crm.lead.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['partner_id'], 'col_group_by': ['date_deadline:month'], 'measures': ['planned_revenue']}</field>
</record>
<record id="filter_leads_overpassed_deadline" model="ir.filters">
<field name="name">Overpassed Deadline</field>
<field name="model_id">crm.lead.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['section_id'], 'col_group_by': ['partner_id'], 'measures': ['delay_expected']}</field>
</record>
<record id="filter_leads_salesperson" model="ir.filters"> <record id="filter_leads_salesperson" model="ir.filters">
<field name="name">By Salespersons</field> <field name="name">By Salespersons</field>
<field name="model_id">crm.lead.report</field> <field name="model_id">crm.lead.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['create_date:month', user_id']}</field> <field name="context">{'group_by': ['create_date:month', 'user_id']}</field>
</record> </record>
<record id="filter_leads_country" model="ir.filters"> <record id="filter_leads_country" model="ir.filters">
<field name="name">By Country</field> <field name="name">By Country</field>
<field name="model_id">crm.lead.report</field> <field name="model_id">crm.lead.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['create_date:month', 'country_id']}</field> <field name="context">{'group_by': ['create_date:month', 'country_id']}</field>
</record> </record>
@ -91,19 +97,13 @@
<field name="date_closed"/> <field name="date_closed"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" domain="[]" context="{'group_by':'user_id'}" /> <filter string="Salesperson" context="{'group_by':'user_id'}" />
<filter string="Sales Team" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Partner" context="{'group_by':'partner_id'}" />
<filter string="Country" context="{'group_by':'country_id'}" /> <filter string="Country" context="{'group_by':'country_id'}" />
<filter string="Company" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Type" domain="[]" context="{'group_by':'type'}"/> <filter string="Stage" context="{'group_by':'stage_id'}"/>
<filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/>
<filter string="Priority" domain="[]" context="{'group_by':'priority'}" />
<separator orientation="vertical" /> <separator orientation="vertical" />
<filter string="Creation date" domain="[]" context="{'group_by':'create_date'}" name="month"/> <filter string="Creation Month" context="{'group_by':'create_date:month'}" name="month"/>
<separator orientation="vertical" />
<filter string="Exp. Closing" domain="[]" context="{'group_by':'date_deadline'}"/>
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" />
</group> </group>
</search> </search>
</field> </field>
@ -115,7 +115,7 @@
<field name="res_model">crm.lead.report</field> <field name="res_model">crm.lead.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{'search_default_lead': 1}</field> <field name="context">{}</field>
<field name="domain">[]</field> <field name="domain">[]</field>
<field name="help">Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis.</field> <field name="help">Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis.</field>
</record> </record>
@ -129,23 +129,5 @@
groups="base.group_sale_manager" groups="base.group_sale_manager"
parent="base.next_id_64" action="action_report_crm_lead" sequence="1"/> parent="base.next_id_64" action="action_report_crm_lead" sequence="1"/>
<record id="action_report_crm_opportunity" model="ir.actions.act_window">
<field name="name">Opportunities Analysis</field>
<field name="res_model">crm.lead.report</field>
<field name="view_type">form</field>
<field name="view_mode">graph</field>
<field name="context">{'search_default_opportunity': 1}</field>
<field name="domain">[]</field>
<field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_crm_opportunity_graph">
<field name="sequence" eval="2"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_crm_opportunity_graph"/>
<field name="act_window_id" ref="action_report_crm_opportunity"/>
</record>
<menuitem name="Opportunities Analysis" id="menu_report_crm_opportunities_tree"
parent="base.next_id_64" action="action_report_crm_opportunity" sequence="5"/>
</data> </data>
</openerp> </openerp>

View File

@ -0,0 +1,101 @@
# -*- 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 openerp.addons.crm import crm
from openerp.osv import fields, osv
from openerp import tools
class crm_opportunity_report(osv.Model):
""" CRM Opportunity Analysis """
_name = "crm.opportunity.report"
_auto = False
_description = "CRM Opportunity Analysis"
_rec_name = 'date_deadline'
_inherit = ["crm.tracking.mixin"]
_columns = {
'date_deadline': fields.date('Exp. Closing', readonly=True, help="Expected Closing"),
'create_date': fields.datetime('Creation Date', readonly=True),
'opening_date': fields.datetime('Assignation Date', readonly=True),
'date_closed': fields.datetime('Close Date', readonly=True),
'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True),
'nbr_cases': fields.integer("# of Cases", readonly=True),
# durations
'delay_open': fields.float('Delay to Assign',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to open the case"),
'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"),
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
'country_id':fields.many2one('res.country', 'Country', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
'probability': fields.float('Probability',digits=(16,2),readonly=True, group_operator="avg"),
'total_revenue': fields.float('Total Revenue',digits=(16,2),readonly=True),
'expected_revenue': fields.float('Expected Revenue', digits=(16,2),readonly=True),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', readonly=True, domain="[('section_ids', '=', section_id)]"),
'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'type':fields.selection([
('lead','Lead'),
('opportunity','Opportunity'),
],'Type', help="Type is used to separate Leads and Opportunities"),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'crm_opportunity_report')
cr.execute("""
CREATE OR REPLACE VIEW crm_opportunity_report AS (
SELECT
id,
c.date_deadline,
count(id) as nbr_cases,
c.date_open as opening_date,
c.date_closed as date_closed,
c.date_last_stage_update as date_last_stage_update,
c.user_id,
c.probability,
c.stage_id,
c.type,
c.company_id,
c.priority,
c.section_id,
c.campaign_id,
c.source_id,
c.medium_id,
c.partner_id,
c.country_id,
c.planned_revenue as total_revenue,
c.planned_revenue*(c.probability/100) as expected_revenue,
c.create_date as create_date,
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
abs(extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24)) as delay_expected,
extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open
FROM
crm_lead c
WHERE c.active = 'true'
GROUP BY c.id
)""")

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Opportunities by user and section Graph View -->
<record id="view_report_crm_opportunity_graph" model="ir.ui.view">
<field name="name">crm.opportunity.report.graph</field>
<field name="model">crm.opportunity.report</field>
<field name="arch" type="xml">
<graph string="Leads Analysis" type="pivot" stacked="True">
<field name="create_date" interval="month" type="col"/>
<field name="stage_id" type="row"/>
<field name="nbr_cases" type="measure"/>
<field name="total_revenue" type="measure"/>
</graph>
</field>
</record>
<!-- Custom reports (aka filters) -->
<record id="filter_opportunity_opportunities_cohort" model="ir.filters">
<field name="name">Opportunities Cohort</field>
<field name="model_id">crm.opportunity.report</field>
<field name="domain">[('type','=','opportunity'), ('probability', '=', 100), ('stage_id.on_change', '=', 1)]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date_closed:month'],'col_group_by': ['create_date:month'], 'measures': ['nbr_cases']}</field>
</record>
<record id="filter_opportunity_opportunities_won_per_team" model="ir.filters">
<field name="name">Opportunities Won Per Team</field>
<field name="model_id">crm.opportunity.report</field>
<field name="domain">[('type','=','opportunity'), ('probability', '=', 100), ('stage_id.on_change', '=', 1)]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['section_id'], 'col_group_by': ['date_last_stage_update:month'], 'measures': ['nbr_cases', 'delay_close']}</field>
</record>
<record id="filter_opportunity_top_opportunities" model="ir.filters">
<field name="name">Top Opportunities</field>
<field name="model_id">crm.opportunity.report</field>
<field name="domain">[('type','=','opportunity')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['partner_id'], 'col_group_by': ['date_deadline:month'], 'measures': ['nbr_cases','probability','total_revenue']}</field>
</record>
<record id="filter_opportunity_salesperson" model="ir.filters">
<field name="name">By Salespersons</field>
<field name="model_id">crm.opportunity.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['create_date:month', 'user_id']}</field>
</record>
<record id="filter_opportunity_country" model="ir.filters">
<field name="name">By Country</field>
<field name="model_id">crm.opportunity.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['create_date:month', 'country_id']}</field>
</record>
<!-- Opportunities by user and section Search View -->
<record id="view_report_crm_opportunity_filter" model="ir.ui.view">
<field name="name">crm.opportunity.report.select</field>
<field name="model">crm.opportunity.report</field>
<field name="arch" type="xml">
<search string="Opportunities Analysis">
<filter name="lead" string="Lead" domain="[('type','=', 'lead')]" help="Show only lead"/>
<filter name="opportunity" string="Opportunity" domain="[('type','=','opportunity')]" help="Show only opportunity"/>
<separator/>
<filter string="New" name="new"
domain="[('probability', '=', 0), ('stage_id.sequence', '&lt;=', 1)]"/>
<filter string="Won" name="won"
domain="[('probability', '=', 100), ('stage_id.on_change', '=', 1)]"/>
<filter string="Lost" name="lost"
domain="[('probability', '=', 0), ('stage_id.sequence', '!=', 1)]"/>
<field name="section_id" context="{'invisible_section': False}"
groups="base.group_multi_salesteams"/>
<field name="user_id" string="Salesperson"/>
<group expand="0" string="Extended Filters">
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<field name="stage_id" domain="[('section_ids', '=', 'section_id')]" />
<field name="campaign_id"/>
<field name="medium_id"/>
<field name="source_id"/>
<field name="company_id" groups="base.group_multi_company"/>
<separator orientation="vertical"/>
<field name="stage_id" widget="selection" domain="[('section_ids', '=', 'section_id')]" />
<field name="campaign_id" widget="selection"/>
<field name="medium_id" widget="selection"/>
<field name="source_id" widget="selection"/>
<separator orientation="vertical"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<newline/>
<field name="create_date"/>
<field name="opening_date"/>
<field name="date_closed"/>
</group>
<group expand="1" string="Group By">
<filter string="Salesperson" context="{'group_by':'user_id'}" />
<filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Country" context="{'group_by':'country_id'}" />
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Stage" context="{'group_by':'stage_id'}"/>
<separator orientation="vertical" />
<filter string="Creation Month" context="{'group_by':'create_date:month'}" name="month"/>
<filter string="Expiration Closing" context="{'group_by':'date_deadline:month'}" name="month" help="Expiration Closing Month"/>
</group>
</search>
</field>
</record>
<record id="action_report_crm_opportunity" model="ir.actions.act_window">
<field name="name">Opportunities Analysis</field>
<field name="res_model">crm.opportunity.report</field>
<field name="view_type">form</field>
<field name="view_mode">graph</field>
<field name="context">{'search_default_opportunity': 1}</field>
<field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field>
</record>
<record model="ir.actions.act_window.view" id="action_report_crm_opportunity_graph">
<field name="sequence" eval="2"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="view_report_crm_opportunity_graph"/>
<field name="act_window_id" ref="action_report_crm_opportunity"/>
</record>
<menuitem name="Opportunities Analysis" id="menu_report_crm_opportunities_tree"
parent="base.next_id_64" action="action_report_crm_opportunity" sequence="5"/>
</data>
</openerp>

View File

@ -38,12 +38,12 @@ class crm_phonecall_report(osv.osv):
_name = "crm.phonecall.report" _name = "crm.phonecall.report"
_description = "Phone calls by user and section" _description = "Phone calls by user and section"
_auto = False _auto = False
_columns = { _columns = {
'user_id':fields.many2one('res.users', 'User', readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority'), 'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority'),
'nbr': fields.integer('# of Cases', readonly=True), 'nbr': fields.integer('# of Cases', readonly=True), # TDE FIXME master: rename into nbr_cases
'state': fields.selection(AVAILABLE_STATES, 'Status', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'Status', readonly=True),
'create_date': fields.datetime('Create Date', readonly=True, select=True), 'create_date': fields.datetime('Create Date', readonly=True, select=True),
'delay_close': fields.float('Delay to close', digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"), 'delay_close': fields.float('Delay to close', digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"),
@ -54,8 +54,8 @@ class crm_phonecall_report(osv.osv):
('object_id.model', '=', 'crm.phonecall')]"), ('object_id.model', '=', 'crm.phonecall')]"),
'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'opening_date': fields.date('Opening Date', readonly=True, select=True), 'opening_date': fields.datetime('Opening Date', readonly=True, select=True),
'date_closed': fields.date('Close Date', readonly=True, select=True), 'date_closed': fields.datetime('Close Date', readonly=True, select=True),
} }
def init(self, cr): def init(self, cr):
@ -68,8 +68,8 @@ class crm_phonecall_report(osv.osv):
create or replace view crm_phonecall_report as ( create or replace view crm_phonecall_report as (
select select
id, id,
date(c.date_open) as opening_date, c.date_open as opening_date,
date(c.date_closed) as date_closed, c.date_closed as date_closed,
c.state, c.state,
c.user_id, c.user_id,
c.section_id, c.section_id,

View File

@ -9,14 +9,38 @@
<field name="model">crm.phonecall.report</field> <field name="model">crm.phonecall.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph orientation="horizontal" string="Phone calls" type="pivot" stacked="True"> <graph orientation="horizontal" string="Phone calls" type="pivot" stacked="True">
<field name="user_id" type="row"/> <field name="section_id" type="row"/>
<!-- <field name="state" type="col"/> --> <field name="create_date" interval="month" type="col"/>
<field name="nbr" type="measure"/> <field name="nbr" type="measure"/>
<field name="duration" type="measure"/> <field name="duration" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
<!-- Custom reports (aka filters) -->
<record id="filter_crm_phonecall_sales_team" model="ir.filters">
<field name="name">By Sales Team</field>
<field name="model_id">crm.phonecall.report</field>
<field name="domain">[('state','=','done')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['section_id'], 'col_group_by': ['categ_id'], 'measures': ['nbr', 'duration']}</field>
</record>
<record id="filter_crm_phonecall_delay_to_close" model="ir.filters">
<field name="name">Delay To Close</field>
<field name="model_id">crm.phonecall.report</field>
<field name="domain">[('state','=','done')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['section_id'], 'col_group_by': ['categ_id'], 'measures': ['delay_close']}</field>
</record>
<record id="filter_crm_phonecall_phone_call_to_do" model="ir.filters">
<field name="name">Phone Calls To Do</field>
<field name="model_id">crm.phonecall.report</field>
<field name="domain">[('state','in',('draft','open'))]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['section_id'], 'measures': ['nbr']}</field>
</record>
<!-- Phone calls by user and section Search View --> <!-- Phone calls by user and section Search View -->
<record id="view_report_crm_phonecall_filter" model="ir.ui.view"> <record id="view_report_crm_phonecall_filter" model="ir.ui.view">
@ -24,17 +48,17 @@
<field name="model">crm.phonecall.report</field> <field name="model">crm.phonecall.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Search"> <search string="Search">
<filter icon="terp-gtk-go-back-rtl" string="Todo" domain="[('state','in',('draft','open'))]" <filter string="Todo" name="todo" domain="[('state','in',('draft','open'))]"
help="Phone calls which are in draft and open state"/> help="Phone calls which are in draft and open state"/>
<filter icon="terp-camera_test" string="Held" domain="[('state','=','done')]" <filter string="Held" name="held" domain="[('state','=','done')]"
help="Phone calls which are in closed state"/> help="Phone calls which are in closed state"/>
<filter icon="gtk-media-pause" string="Not Held" domain="[('state','=','pending')]" <filter string="Not Held" domain="[('state','=','pending')]"
help="Phone calls which are in pending state"/> help="Phone calls which are in pending state"/>
<separator/> <separator/>
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" <filter string="My Sales Team(s)" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]"
help="Phone calls that are assigned to one of the sale teams I manage" groups="base.group_multi_salesteams"/> help="Phone calls that are assigned to one of the sale teams I manage" groups="base.group_multi_salesteams"/>
<separator/> <separator/>
<filter icon="terp-personal" string="My Phone Calls" help="Phone Calls that are assigned to me" domain="[('user_id','=',uid)]" /> <filter string="My Phone Calls" help="Phone Calls that are assigned to me" domain="[('user_id','=',uid)]" />
<field name="section_id" string="Sales Team" context="{'invisible_section': False}" <field name="section_id" string="Sales Team" context="{'invisible_section': False}"
groups="base.group_multi_salesteams"/> groups="base.group_multi_salesteams"/>
<field name="user_id" string="Salesperson"/> <field name="user_id" string="Salesperson"/>
@ -45,14 +69,12 @@
<field name="date_closed"/> <field name="date_closed"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" name="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" /> <filter string="Salesperson" name="Salesperson" context="{'group_by':'user_id'}" />
<filter string="Sales Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" /> <filter string="Customer" context="{'group_by':'partner_id'}" />
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" /> <filter string="Status" context="{'group_by':'state'}" />
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}" /> <separator/>
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" /> <filter string="Creation Month" context="{'group_by':'create_date:month'}" help="Month of call"/>
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Creation Date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date:month'}" help="Month of call"/>
</group> </group>
</search> </search>
</field> </field>
@ -65,7 +87,7 @@
<field name="res_model">crm.phonecall.report</field> <field name="res_model">crm.phonecall.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{"search_default_year":1,"search_default_Salesperson":1,"search_default_This Month":1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
<field name="view_id" ref="view_report_crm_phonecall_graph"/> <field name="view_id" ref="view_report_crm_phonecall_graph"/>
<field name="search_view_id" ref="view_report_crm_phonecall_filter"/> <field name="search_view_id" ref="view_report_crm_phonecall_filter"/>
<field name="help">From this report, you can analyse the performance of your sales team, based on their phone calls. You can group or filter the information according to several criteria and drill down the information, by adding more groups in the report.</field> <field name="help">From this report, you can analyse the performance of your sales team, based on their phone calls. You can group or filter the information according to several criteria and drill down the information, by adding more groups in the report.</field>

View File

@ -39,7 +39,7 @@ class crm_claim_report(osv.osv):
_columns = { _columns = {
'user_id':fields.many2one('res.users', 'User', readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True), 'nbr': fields.integer('# of Claims', readonly=True), # TDE FIXME master: rename into nbr_claims
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'create_date': fields.datetime('Create Date', readonly=True, select=True), 'create_date': fields.datetime('Create Date', readonly=True, select=True),
'claim_date': fields.datetime('Claim Date', readonly=True), 'claim_date': fields.datetime('Claim Date', readonly=True),
@ -52,10 +52,11 @@ class crm_claim_report(osv.osv):
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'priority': fields.selection(AVAILABLE_PRIORITIES, 'Priority'), 'priority': fields.selection(AVAILABLE_PRIORITIES, 'Priority'),
'type_action': fields.selection([('correction','Corrective Action'),('prevention','Preventive Action')], 'Action Type'), 'type_action': fields.selection([('correction','Corrective Action'),('prevention','Preventive Action')], 'Action Type'),
'date_closed': fields.date('Close Date', readonly=True, select=True), 'date_closed': fields.datetime('Close Date', readonly=True, select=True),
'date_deadline': fields.date('Deadline', readonly=True, select=True), 'date_deadline': fields.date('Deadline', readonly=True, select=True),
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"), 'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
'email': fields.integer('# Emails', size=128, readonly=True) 'email': fields.integer('# Emails', size=128, readonly=True),
'subject': fields.char('Claim Subject', readonly=True)
} }
def init(self, cr): def init(self, cr):
@ -70,7 +71,7 @@ class crm_claim_report(osv.osv):
select select
min(c.id) as id, min(c.id) as id,
c.date as claim_date, c.date as claim_date,
date(c.date_closed) as date_closed, c.date_closed as date_closed,
c.date_deadline as date_deadline, c.date_deadline as date_deadline,
c.user_id, c.user_id,
c.stage_id, c.stage_id,
@ -78,6 +79,7 @@ class crm_claim_report(osv.osv):
c.partner_id, c.partner_id,
c.company_id, c.company_id,
c.categ_id, c.categ_id,
c.name as subject,
count(*) as nbr, count(*) as nbr,
c.priority as priority, c.priority as priority,
c.type_action as type_action, c.type_action as type_action,

View File

@ -10,12 +10,20 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Claims" type="pivot" stacked="True"> <graph string="Claims" type="pivot" stacked="True">
<field name="stage_id" type="row"/> <field name="stage_id" type="row"/>
<field name="user_id" type="col"/> <field name="section_id" type="col"/>
<field name="nbr" type="measure"/> <field name="nbr" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
<!-- CRM Claim Report Custom reports (aka filters) -->
<record id="filter_report_crm_claim_workload" model="ir.filters">
<field name="name">Workload</field>
<field name="model_id">crm.claim.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['subject'], 'measures': ['email', 'delay_close']}</field>
</record>
<!-- CRM Claim Report Search View --> <!-- CRM Claim Report Search View -->
<record id="view_report_crm_claim_filter" model="ir.ui.view"> <record id="view_report_crm_claim_filter" model="ir.ui.view">
@ -23,13 +31,11 @@
<field name="model">crm.claim.report</field> <field name="model">crm.claim.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Search"> <search string="Search">
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/> <filter string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" />
<filter string="My Sales Team(s)" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/>
<separator/> <separator/>
<!-- A 'My Company' filter makes no sense regarding record rules, and is not possible to do (uid is not a company): remove me in 8.0 --> <filter string="My Company" context="{'invisible_section': False}" domain="[('company_id.user_ids','=',uid)]" help="My Company"/>
<filter string="My Company" icon="terp-go-home" context="{'invisible_section': False}" domain="[]" help="My company"
invisible="1"/>
<separator/> <separator/>
<filter icon="terp-personal" string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" />
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<field name="user_id" string="Salesperson"/> <field name="user_id" string="Salesperson"/>
<field name="section_id" string="Sales Team" context="{'invisible_section': False}" <field name="section_id" string="Sales Team" context="{'invisible_section': False}"
@ -45,15 +51,14 @@
<field name="date_deadline" /> <field name="date_deadline" />
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" name="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" /> <filter string="Salesperson" name="Salesperson" context="{'group_by':'user_id'}" />
<filter string="Sales Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Partner" name="partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}" /> <filter string="Partner" name="partner" context="{'group_by':'partner_id'}" />
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}" /> <filter string="Stage" context="{'group_by':'stage_id'}" />
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" /> <filter string="Category" context="{'group_by':'categ_id'}" />
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}" /> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type_action'}" help="Action Type"/> <separator/>
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Claim Month" context="{'group_by':'claim_date:month'}" help="Month of claim"/>
<filter string="Claim Date" icon="terp-go-month" domain="[]" context="{'group_by':'claim_date'}" help="Month of claim"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -42,7 +42,7 @@ class crm_helpdesk_report(osv.osv):
'date': fields.datetime('Date', readonly=True), 'date': fields.datetime('Date', readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True), 'nbr': fields.integer('# of Requests', readonly=True), # TDE FIXME master: rename into nbr_requests
'state': fields.selection(AVAILABLE_STATES, 'Status', readonly=True), 'state': fields.selection(AVAILABLE_STATES, 'Status', readonly=True),
'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg"), 'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg"),
'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True),
@ -55,8 +55,8 @@ class crm_helpdesk_report(osv.osv):
domain="[('section_id','=',section_id),\ domain="[('section_id','=',section_id),\
('object_id.model', '=', 'crm.helpdesk')]"), ('object_id.model', '=', 'crm.helpdesk')]"),
'planned_cost': fields.float('Planned Costs'), 'planned_cost': fields.float('Planned Costs'),
'create_date': fields.date('Creation Date' , readonly=True, select=True), 'create_date': fields.datetime('Creation Date' , readonly=True, select=True),
'date_closed': fields.date('Close Date', readonly=True, select=True), 'date_closed': fields.datetime('Close Date', readonly=True, select=True),
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"), 'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
'email': fields.integer('# Emails', size=128, readonly=True), 'email': fields.integer('# Emails', size=128, readonly=True),
} }
@ -74,8 +74,8 @@ class crm_helpdesk_report(osv.osv):
select select
min(c.id) as id, min(c.id) as id,
c.date as date, c.date as date,
date(c.create_date) as create_date, c.create_date,
date(c.date_closed) as date_closed, c.date_closed,
c.state, c.state,
c.user_id, c.user_id,
c.section_id, c.section_id,

View File

@ -10,7 +10,8 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph orientation="horizontal" string="Helpdesk" type="pivot" stacked="True"> <graph orientation="horizontal" string="Helpdesk" type="pivot" stacked="True">
<field name="state" type="row"/> <field name="state" type="row"/>
<field name="user_id" type="row"/> <field name="section_id" type="col"/>
<field name="date" interval="month" type="col"/>
<field name="nbr" type="measure"/> <field name="nbr" type="measure"/>
</graph> </graph>
</field> </field>
@ -23,17 +24,17 @@
<field name="model">crm.helpdesk.report</field> <field name="model">crm.helpdesk.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Search"> <search string="Search">
<filter string="New" icon="terp-check" domain="[('state','=','draft')]" /> <filter string="New" domain="[('state','=','draft')]" />
<filter string="Open" icon="terp-camera_test" domain="[('state','=','open')]" /> <filter string="Open" domain="[('state','=','open')]" />
<filter string="Closed" icon="terp-dialog-close" domain="[('state','=','cancel')]" /> <filter string="Closed" domain="[('state','=','cancel')]" />
<separator/> <separator/>
<filter icon="terp-personal" string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" /> <filter string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" />
<separator/> <separator/>
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/> <filter string="My Sales Team(s)" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/>
<separator/> <separator/>
<filter string="My Company" icon="terp-go-home" context="{'invisible_section': False}" domain="[('section_id.user_id.company_id','=',uid)]" help="My company"/> <filter string="My Company" context="{'invisible_section': False}" domain="[('company_id.user_ids','=',uid)]" help="My Company"/>
<field name="user_id" string="Salesperson"/> <field name="user_id" string="Salesperson"/>
<field name="section_id" string="Sales Team" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/> <field name="section_id" string="Sales Team" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/> <field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
<group expand="0" string="Extended Filters..." groups="base.group_no_one"> <group expand="0" string="Extended Filters..." groups="base.group_no_one">
@ -43,13 +44,13 @@
<field name="date_closed" string="Close Date"/> <field name="date_closed" string="Close Date"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Salesperson" context="{'group_by':'user_id'}"/>
<filter string="Sales Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}" /> <filter string="Partner" context="{'group_by':'partner_id'}" />
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" /> <filter string="Status" context="{'group_by':'state'}" />
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" /> <filter string="Company" groups="base.group_multi_company" context="{'group_by':'company_id'}" />
<filter string="Company" icon="terp-go-home" domain="[]" groups="base.group_multi_company" context="{'group_by':'company_id'}" /> <separator/>
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}" help="Month of helpdesk requests"/> <filter string="Month" context="{'group_by':'date:month'}" help="Month of helpdesk requests"/>
</group> </group>
</search> </search>
</field> </field>
@ -80,4 +81,3 @@
</data> </data>
</openerp> </openerp>

View File

@ -59,7 +59,7 @@
<field name="model">crm.lead</field> <field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<filter string="Customer" position="after"> <filter string="Stage" position="after">
<filter string="Assigned Partner" domain="[]" context="{'group_by':'partner_assigned_id'}"/> <filter string="Assigned Partner" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
</filter> </filter>
<filter name="unassigned" position="after"> <filter name="unassigned" position="after">
@ -148,7 +148,7 @@
if context.get('active_model') == 'crm.lead': if context.get('active_model') == 'crm.lead':
ids = [] ids = []
if context.get('active_domain'): if context.get('active_domain'):
ids = self.search(cr, uid, context['active_domain'], context=context) ids = self.search(cr, uid, context['active_domain'], context=context)
elif context.get('active_ids'): elif context.get('active_ids'):
ids = context['active_ids'] ids = context['active_ids']
if ids: if ids:

View File

@ -47,14 +47,14 @@ class crm_lead_report_assign(osv.osv):
'probable_revenue': fields.float('Probable Revenue', digits=(16,2),readonly=True), 'probable_revenue': fields.float('Probable Revenue', digits=(16,2),readonly=True),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"), 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"),
'partner_id': fields.many2one('res.partner', 'Customer' , readonly=True), 'partner_id': fields.many2one('res.partner', 'Customer' , readonly=True),
'opening_date': fields.date('Opening Date', readonly=True), 'opening_date': fields.datetime('Opening Date', readonly=True),
'date_closed': fields.date('Close Date', readonly=True), 'date_closed': fields.datetime('Close Date', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True), 'nbr': fields.integer('# of Cases', readonly=True), # TDE FIXME master: rename into nbr_cases
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'), 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'type':fields.selection([ 'type':fields.selection([
('lead','Lead'), ('lead','Lead'),
('opportunity','Opportunity') ('opportunity','Opportunity')
],'Type', help="Type is used to separate Leads and Opportunities"), ],'Type', help="Type is used to separate Leads and Opportunities"),
} }
def init(self, cr): def init(self, cr):
@ -68,8 +68,8 @@ class crm_lead_report_assign(osv.osv):
CREATE OR REPLACE VIEW crm_lead_report_assign AS ( CREATE OR REPLACE VIEW crm_lead_report_assign AS (
SELECT SELECT
c.id, c.id,
date(c.date_open) as opening_date, c.date_open as opening_date,
date(c.date_closed) as date_closed, c.date_closed as date_closed,
c.date_assign, c.date_assign,
c.user_id, c.user_id,
c.probability, c.probability,
@ -85,7 +85,7 @@ class crm_lead_report_assign(osv.osv):
c.partner_assigned_id, c.partner_assigned_id,
p.grade_id, p.grade_id,
p.date as partner_date, p.date as partner_date,
c.planned_revenue*(c.probability/100) as probable_revenue, c.planned_revenue*(c.probability/100) as probable_revenue,
1 as nbr, 1 as nbr,
c.create_date as create_date, c.create_date as create_date,
extract('epoch' from (c.write_date-c.create_date))/(3600*24) as delay_close, extract('epoch' from (c.write_date-c.create_date))/(3600*24) as delay_close,

View File

@ -22,19 +22,15 @@
<field name="date_closed"/> <field name="date_closed"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" name="user" icon="terp-personal" <filter string="Salesperson" name="user"
domain="[]" context="{'group_by':'user_id'}" /> context="{'group_by':'user_id'}" />
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_assigned_id'}" /> <filter string="Sales Team" context="{'group_by':'section_id'}"
<filter string="Country" icon="terp-go-home" context="{'group_by':'country_id'}" /> groups="base.group_multi_salesteams"/>
<filter string="Sales Team" icon="terp-personal+" <filter string="Country" context="{'group_by':'country_id'}" />
domain="[]" <filter string="Stage" context="{'group_by':'stage_id'}"/>
context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Company" context="{'group_by':'company_id'}" />
<filter string="Grade" name="group_grade" icon="terp-stock_symbol-selection" <separator/>
domain="[]" context="{'group_by':'grade_id'}" /> <filter string="Assign Month" context="{'group_by':'date_assign:month'}"/>
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" />
<filter string="Assign Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_assign:month'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -47,10 +43,10 @@
<field name="model">crm.lead.report.assign</field> <field name="model">crm.lead.report.assign</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Lead Assign" type="pivot" stacked="True"> <graph string="Lead Assign" type="pivot" stacked="True">
<field name="grade_id" type="row"/> <field name="stage_id" type="row"/>
<field name="date_assign" interval="month" type="row"/> <field name="date_assign" interval="month" type="col"/>
<field name="nbr" type="measure"/> <field name="delay_open" type="measure"/>
<field name="probable_revenue" type="measure"/> <field name="probability" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>

View File

@ -36,7 +36,7 @@ class crm_partner_report_assign(osv.osv):
'date_partnership' : fields.date('Partnership Date'), 'date_partnership' : fields.date('Partnership Date'),
'country_id':fields.many2one('res.country', 'Country', readonly=True), 'country_id':fields.many2one('res.country', 'Country', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
'opp': fields.integer('# of Opportunity', readonly=True), 'opp': fields.integer('# of Opportunity', readonly=True), # TDE FIXME master: rename into nbr_opportunities
'turnover': fields.float('Turnover', readonly=True), 'turnover': fields.float('Turnover', readonly=True),
'period_id': fields.many2one('account.period', 'Invoice Period', readonly=True), 'period_id': fields.many2one('account.period', 'Invoice Period', readonly=True),
} }

View File

@ -13,23 +13,17 @@
<field name="grade_id"/> <field name="grade_id"/>
<field name="activation"/> <field name="activation"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" name="user" icon="terp-personal" <filter string="Salesperson" name="user"
domain="[]" context="{'group_by':'user_id'}" /> context="{'group_by':'user_id'}" />
<filter string="Country" icon="terp-go-home" name="group_country" context="{'group_by':'country_id'}" /> <filter string="Sales Team"
<filter string="Sales Team" icon="terp-personal+" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Partner" name=""
<filter string="Activation" name="group_activation" icon="terp-stock_symbol-selection" context="{'group_by':'partner_id'}" />
domain="[]" context="{'group_by':'activation'}" /> <separator/>
<filter string="Grade" name="group_grade" icon="terp-stock_symbol-selection" <filter string="Date Partnership" name="group_date_partnership"
domain="[]" context="{'group_by':'grade_id'}" /> context="{'group_by':'date_partnership'}" />
<filter string="Partner" name="" icon="terp-stock_symbol-selection" <filter string="Date Review" name="group_date_review"
domain="[]" context="{'group_by':'partner_id'}" /> context="{'group_by':'date_review'}" />
<filter string="Invoice Period" name="group_period_id" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'period_id'}" />
<filter string="Date Partnership" name="group_date_partnership" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'date_partnership'}" />
<filter string="Date Review" name="group_date_review" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'date_review'}" />
</group> </group>
</search> </search>
</field> </field>

View File

@ -34,7 +34,8 @@ class report_event_registration(models.Model):
draft_state = fields.Integer(' # No of Draft Registrations') draft_state = fields.Integer(' # No of Draft Registrations')
confirm_state = fields.Integer(' # No of Confirmed Registrations') confirm_state = fields.Integer(' # No of Confirmed Registrations')
seats_max = fields.Integer('Max Seats') seats_max = fields.Integer('Max Seats')
nbevent = fields.Integer('Number of Registrations') nbevent = fields.Integer('Number of Events')
nbregistration = fields.Integer('Number of Registrations')
event_type = fields.Many2one('event.type', 'Event Type') event_type = fields.Many2one('event.type', 'Event Type')
registration_state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Attended'), ('cancel', 'Cancelled')], 'Registration State', readonly=True, required=True) registration_state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Attended'), ('cancel', 'Cancelled')], 'Registration State', readonly=True, required=True)
event_state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'Event State', readonly=True, required=True) event_state = fields.Selection([('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'Event State', readonly=True, required=True)
@ -58,6 +59,7 @@ class report_event_registration(models.Model):
e.company_id AS company_id, e.company_id AS company_id,
e.date_begin AS event_date, e.date_begin AS event_date,
count(r.id) AS nbevent, count(r.id) AS nbevent,
sum(r.nb_register) AS nbregistration,
CASE WHEN r.state IN ('draft') THEN r.nb_register ELSE 0 END AS draft_state, CASE WHEN r.state IN ('draft') THEN r.nb_register ELSE 0 END AS draft_state,
CASE WHEN r.state IN ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state, CASE WHEN r.state IN ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state,
e.type AS event_type, e.type AS event_type,

View File

@ -9,7 +9,7 @@
<graph string="Event on Registration" type="pivot" > <graph string="Event on Registration" type="pivot" >
<field name="event_type" type="row"/> <field name="event_type" type="row"/>
<field name="event_date" interval="month" type="col"/> <field name="event_date" interval="month" type="col"/>
<field name="nbevent" type="measure"/> <field name="nbregistration" type="measure"/>
<field name="confirm_state" type="measure"/> <field name="confirm_state" type="measure"/>
</graph> </graph>
</field> </field>
@ -21,10 +21,10 @@
<field name="model">report.event.registration</field> <field name="model">report.event.registration</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Event on Registration"> <search string="Event on Registration">
<filter icon="terp-document-new" string="New" domain="[('event_state','=','draft')]" help="Events which are in New state"/> <filter string="New" domain="[('event_state','=','draft')]" help="Events which are in New state"/>
<filter icon="terp-check" string="Confirm" domain="[('event_state','=','confirm')]" help="Events which are in confirm state"/> <filter string="Confirm" domain="[('event_state','=','confirm')]" help="Events which are in confirm state"/>
<separator/> <separator/>
<filter icon="terp-personal" string="My Events" help="My Events" domain="[('user_id','=',uid)]"/> <filter string="My Events" help="My Events" domain="[('user_id','=',uid)]"/>
<field name="event_id" string="Event"/> <field name="event_id" string="Event"/>
<field name="user_id"/> <field name="user_id"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
@ -33,18 +33,16 @@
</group> </group>
<newline/> <newline/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Participant / Contact" icon="terp-personal" context="{'group_by':'name_registration'}" help="Registration contact"/> <filter string="Participant" context="{'group_by':'name_registration'}" help="Registration contact"/>
<filter string="Register" icon="terp-personal" context="{'group_by':'user_id_registration'}" help="Registration contact" groups="base.group_no_one"/> <filter string="Event Type" context="{'group_by':'event_type'}"/>
<filter string="Event Responsible" name="user_id" icon="terp-personal" context="{'group_by': 'user_id'}"/> <filter string="Event" name="event" context="{'group_by':'event_id', 'max_reg_event_visible':0}"/>
<filter string="Event" name="event" icon="terp-crm" context="{'group_by':'event_id', 'max_reg_event_visible':0}"/> <filter string="Event State" context="{'group_by':'event_state'}"/>
<filter string="Event Type" icon="terp-crm" context="{'group_by':'event_type'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Event State" icon="terp-stock_effects-object-colorize" context="{'group_by':'event_state'}"/> <separator/>
<filter string="Registration State" icon="terp-stock_effects-object-colorize" context="{'group_by':'registration_state'}"/> <filter string="Event Month" context="{'group_by':'event_date:month'}" help="Event Beginning Date"/>
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Event Date" domain="[]" context="{'group_by':'event_date'}" help="Event Beginning Date"/>
</group> </group>
<group expand="0" string="Display"> <group expand="0" string="Display">
<filter icon="terp-camera_test" string="Show Confirmed Registrations" <filter string="Show Confirmed Registrations" domain="[('event_state','&lt;&gt;','draft')]"
help="Registrations in confirmed or done state" context="{'no_of_draft_invisible':1}"/> help="Registrations in confirmed or done state" context="{'no_of_draft_invisible':1}"/>
</group> </group>
</search> </search>

View File

@ -4,10 +4,10 @@
<record model="ir.actions.act_window" id="action_fleet_reporting_costs"> <record model="ir.actions.act_window" id="action_fleet_reporting_costs">
<field name="name">Costs Analysis</field> <field name="name">Costs Analysis</field>
<field name="res_model">fleet.vehicle.cost</field> <field name="res_model">fleet.vehicle.cost</field>
<field name="view_id" ref="fleet_vehicle_costs_report"></field> <field name="view_id" ref="fleet_vehicle_effective_costs_report"></field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{"search_default_parent_false" : True,"search_default_groupby_year" : True, "search_default_groupby_cost_subtype" : True,"search_default_groupby_vehicle_id" : True}</field> <field name="context">{"search_default_parent_false" : True,}</field>
<field name="help" type="html"> <field name="help" type="html">
<p> <p>
Odoo helps you managing the costs for your different vehicles Odoo helps you managing the costs for your different vehicles
@ -23,10 +23,10 @@
<record model="ir.actions.act_window" id="action_fleet_reporting_costs_non_effective"> <record model="ir.actions.act_window" id="action_fleet_reporting_costs_non_effective">
<field name="name">Indicative Costs Analysis</field> <field name="name">Indicative Costs Analysis</field>
<field name="res_model">fleet.vehicle.cost</field> <field name="res_model">fleet.vehicle.cost</field>
<field name="view_id" ref="fleet_vehicle_costs_report"></field> <field name="view_id" ref="fleet_vehicle_indicative_costs_report"></field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{"search_default_parent_true" : True,"search_default_groupby_cost_subtype" : True,"search_default_groupby_parent_id" : True,}</field> <field name="context">{"search_default_parent_true" : True,}</field>
<field name="help" type="html"> <field name="help" type="html">
<p> <p>
Odoo helps you managing the costs for your different vehicles Odoo helps you managing the costs for your different vehicles
@ -38,17 +38,17 @@
</p> </p>
</field> </field>
</record> </record>
<menuitem name="Fleet" parent="base.menu_reporting" id="menu_fleet_reporting" sequence="50" groups="group_fleet_manager"/> <menuitem name="Fleet" parent="base.menu_reporting" id="menu_fleet_reporting" sequence="50" groups="group_fleet_manager"/>
<menuitem id="menu_fleet_reporting_costs" <menuitem id="menu_fleet_reporting_costs"
parent="menu_fleet_reporting" parent="menu_fleet_reporting"
action="action_fleet_reporting_costs" action="action_fleet_reporting_costs"
sequence="1" sequence="1"
groups="group_fleet_manager"/> groups="group_fleet_manager"/>
<menuitem id="menu_fleet_reporting_indicative_costs" <menuitem id="menu_fleet_reporting_indicative_costs"
parent="menu_fleet_reporting" parent="menu_fleet_reporting"
action="action_fleet_reporting_costs_non_effective" action="action_fleet_reporting_costs_non_effective"
sequence="2" sequence="2"
groups="group_fleet_manager"/> groups="group_fleet_manager"/>
</data> </data>

View File

@ -82,7 +82,7 @@
</p> </p>
</field> </field>
</record> </record>
<record model='ir.ui.view' id='fleet_vehicle_model_brand_tree'> <record model='ir.ui.view' id='fleet_vehicle_model_brand_tree'>
<field name="name">fleet.vehicle.model.brand.tree</field> <field name="name">fleet.vehicle.model.brand.tree</field>
<field name="model">fleet.vehicle.model.brand</field> <field name="model">fleet.vehicle.model.brand</field>
@ -162,7 +162,7 @@
<tree string="State" editable="bottom"> <tree string="State" editable="bottom">
<field name="sequence" widget="handler" invisible="1"/> <field name="sequence" widget="handler" invisible="1"/>
<field name="name" /> <field name="name" />
</tree> </tree>
</field> </field>
</record> </record>
@ -196,8 +196,8 @@
<header> <header>
<field name="state_id" widget="statusbar" clickable="True" /> <field name="state_id" widget="statusbar" clickable="True" />
</header> </header>
<sheet> <sheet>
<field name="image_medium" widget='image' class="oe_left oe_avatar"/> <field name="image_medium" widget='image' class="oe_left oe_avatar"/>
<div class="oe_title"> <div class="oe_title">
<label for="model_id" class="oe_edit_only"/> <label for="model_id" class="oe_edit_only"/>
<h1> <h1>
@ -211,47 +211,47 @@
<field name="tag_ids" widget="many2many_tags" /> <field name="tag_ids" widget="many2many_tags" />
</div> </div>
<div class="oe_right oe_button_box"> <div class="oe_right oe_button_box">
<button name="return_action_to_open" <button name="return_action_to_open"
type="object" type="object"
class="oe_stat_button" class="oe_stat_button"
icon="fa-book" icon="fa-book"
context="{'xml_id':'fleet_vehicle_log_contract_act'}" context="{'xml_id':'fleet_vehicle_log_contract_act'}"
help="show the contract for this vehicle"> help="show the contract for this vehicle">
<field name="contract_count" widget="statinfo" string="Contracts"/> <field name="contract_count" widget="statinfo" string="Contracts"/>
</button> </button>
<button name="act_show_log_cost" <button name="act_show_log_cost"
type="object" type="object"
class="oe_stat_button" class="oe_stat_button"
icon="fa-usd" icon="fa-usd"
help="show all the costs for this vehicle" help="show all the costs for this vehicle"
groups="fleet.group_fleet_manager"> groups="fleet.group_fleet_manager">
<field name="cost_count" widget="statinfo" string="Costs"/> <field name="cost_count" widget="statinfo" string="Costs"/>
</button> </button>
<button name="return_action_to_open" <button name="return_action_to_open"
type="object" type="object"
class="oe_stat_button" class="oe_stat_button"
icon="fa-wrench" icon="fa-wrench"
context="{'xml_id':'fleet_vehicle_log_services_act'}" context="{'xml_id':'fleet_vehicle_log_services_act'}"
help="show the services logs for this vehicle" > help="show the services logs for this vehicle" >
<field name="service_count" widget="statinfo" string="Services"/> <field name="service_count" widget="statinfo" string="Services"/>
</button> </button>
<button name="return_action_to_open" <button name="return_action_to_open"
type="object" type="object"
class="oe_stat_button" class="oe_stat_button"
icon="fa-flask" icon="fa-flask"
context="{'xml_id':'fleet_vehicle_log_fuel_act'}" context="{'xml_id':'fleet_vehicle_log_fuel_act'}"
help="show the fuel logs for this vehicle" > help="show the fuel logs for this vehicle" >
<field name="fuel_logs_count" widget="statinfo" string="Fuel"/> <field name="fuel_logs_count" widget="statinfo" string="Fuel"/>
</button> </button>
<button name="return_action_to_open" <button name="return_action_to_open"
type="object" type="object"
class="oe_stat_button" class="oe_stat_button"
icon="fa-tachometer" icon="fa-tachometer"
context="{'xml_id':'fleet_vehicle_odometer_act'}" context="{'xml_id':'fleet_vehicle_odometer_act'}"
help="show the odometer logs for this vehicle" > help="show the odometer logs for this vehicle" >
<field name="odometer_count" widget="statinfo" string="Odometer"/> <field name="odometer_count" widget="statinfo" string="Odometer"/>
</button> </button>
</div> </div>
<group col="2" string="General Properties"> <group col="2" string="General Properties">
<group > <group >
<field name="driver_id" /> <field name="driver_id" />
@ -355,7 +355,7 @@
<field name="contract_renewal_overdue" /> <field name="contract_renewal_overdue" />
<field name="contract_renewal_name" /> <field name="contract_renewal_name" />
<field name="contract_renewal_total" /> <field name="contract_renewal_total" />
<templates> <templates>
<t t-name="kanban-box"> <t t-name="kanban-box">
<div class="oe_kanban_vignette oe_semantic_html_override"> <div class="oe_kanban_vignette oe_semantic_html_override">
@ -384,7 +384,7 @@
</span> </span>
</a> </a>
</t> </t>
<ul> <ul>
<li> <li>
<t t-if="record.driver_id.raw_value"><field name="driver_id"/></t> <t t-if="record.driver_id.raw_value"><field name="driver_id"/></t>
@ -392,7 +392,7 @@
<li> <li>
<t t-if="record.location.raw_value"><field name="location"/></t> <t t-if="record.location.raw_value"><field name="location"/></t>
</li> </li>
</ul> </ul>
<field name="tag_ids"/> <field name="tag_ids"/>
@ -403,7 +403,7 @@
</kanban> </kanban>
</field> </field>
</record> </record>
<record model='ir.actions.act_window' id='fleet_vehicle_act'> <record model='ir.actions.act_window' id='fleet_vehicle_act'>
<field name="name">Vehicles</field> <field name="name">Vehicles</field>
@ -412,7 +412,7 @@
<field name="view_mode">kanban,tree,form</field> <field name="view_mode">kanban,tree,form</field>
<field name="help" type="html"> <field name="help" type="html">
<p class="oe_view_nocontent_create"> <p class="oe_view_nocontent_create">
Click to create a new vehicle. Click to create a new vehicle.
</p><p> </p><p>
You will be able to manage your fleet by keeping track of the You will be able to manage your fleet by keeping track of the
contracts, services, fixed and recurring costs, odometers and contracts, services, fixed and recurring costs, odometers and
@ -507,7 +507,7 @@
</record> </record>
<act_window <act_window
id="act_renew_contract" id="act_renew_contract"
name="Renew Contract" name="Renew Contract"
res_model="fleet.vehicle.log.contract" res_model="fleet.vehicle.log.contract"
@ -555,7 +555,7 @@
<field name="view_mode">tree,form,graph</field> <field name="view_mode">tree,form,graph</field>
<field name="help" type="html"> <field name="help" type="html">
<p class="oe_view_nocontent_create"> <p class="oe_view_nocontent_create">
Click to create a new contract. Click to create a new contract.
</p><p> </p><p>
Manage all your contracts (leasing, insurances, etc.) with Manage all your contracts (leasing, insurances, etc.) with
their related services, costs. Odoo will automatically warn their related services, costs. Odoo will automatically warn
@ -600,7 +600,7 @@
</tree> </tree>
</field> </field>
</record> </record>
<record model='ir.ui.view' id='fleet_vehicle_odometer_search'> <record model='ir.ui.view' id='fleet_vehicle_odometer_search'>
<field name="name">fleet.vehicle.odometer.search</field> <field name="name">fleet.vehicle.odometer.search</field>
<field name="model">fleet.vehicle.odometer</field> <field name="model">fleet.vehicle.odometer</field>
@ -622,7 +622,7 @@
<field name="model">fleet.vehicle.odometer</field> <field name="model">fleet.vehicle.odometer</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Odometer Values Per Vehicle"> <graph string="Odometer Values Per Vehicle">
<field name="vehicle_id" type="row"/> <field name="vehicle_id" type="row"/>
<field name="value" type="measure"/> <field name="value" type="measure"/>
</graph> </graph>
</field> </field>
@ -636,7 +636,7 @@
<field name="context">{"search_default_groupby_vehicle" : True}</field> <field name="context">{"search_default_groupby_vehicle" : True}</field>
<field name="help" type="html"> <field name="help" type="html">
<p class="oe_view_nocontent_create"> <p class="oe_view_nocontent_create">
Click to create a new odometer log. Click to create a new odometer log.
</p> </p>
<p> <p>
Here you can add various odometer entries for all vehicles. Here you can add various odometer entries for all vehicles.
@ -692,11 +692,11 @@
<field name="model">fleet.vehicle.log.fuel</field> <field name="model">fleet.vehicle.log.fuel</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Fuel Logs"> <tree string="Fuel Logs">
<field name="date" /> <field name="date" />
<field name="vehicle_id" /> <field name="vehicle_id" />
<field name="odometer" invisible="1"/> <field name="odometer" invisible="1"/>
<field name="odometer_unit" invisible="1"/> <field name="odometer_unit" invisible="1"/>
<field name="purchaser_id" /> <field name="purchaser_id" />
<field name="inv_ref" invisible="1"/> <field name="inv_ref" invisible="1"/>
<field name="vendor_id" invisible="1"/> <field name="vendor_id" invisible="1"/>
<field name="liter" /> <field name="liter" />
@ -705,7 +705,7 @@
</tree> </tree>
</field> </field>
</record> </record>
<record model='ir.ui.view' id='fleet_vehicle_log_fuel_search'> <record model='ir.ui.view' id='fleet_vehicle_log_fuel_search'>
<field name="name">fleet.vehicle.log.fuel.search</field> <field name="name">fleet.vehicle.log.fuel.search</field>
<field name="model">fleet.vehicle.log.fuel</field> <field name="model">fleet.vehicle.log.fuel</field>
@ -742,7 +742,7 @@
<field name="context">{"search_default_groupby_vehicle" : True}</field> <field name="context">{"search_default_groupby_vehicle" : True}</field>
<field name="help" type="html"> <field name="help" type="html">
<p class="oe_view_nocontent_create"> <p class="oe_view_nocontent_create">
Click to create a new fuel log. Click to create a new fuel log.
</p><p> </p><p>
Here you can add refuelling entries for all vehicles. You can Here you can add refuelling entries for all vehicles. You can
also filter logs of a particular vehicle using the search also filter logs of a particular vehicle using the search
@ -821,7 +821,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Services Costs Per Month" stacked="True"> <graph string="Services Costs Per Month" stacked="True">
<field name="date" type="row"/> <field name="date" type="row"/>
<field name="vehicle_id" type="row"/> <field name="vehicle_id" type="row"/>
<field name="cost_amount" type="measure"/> <field name="cost_amount" type="measure"/>
</graph> </graph>
</field> </field>
@ -845,7 +845,7 @@
<field name="view_mode">tree,form,graph</field> <field name="view_mode">tree,form,graph</field>
<field name="help" type="html"> <field name="help" type="html">
<p class="oe_view_nocontent_create"> <p class="oe_view_nocontent_create">
Click to create a new service entry. Click to create a new service entry.
</p><p> </p><p>
Odoo helps you keeping track of all the services done Odoo helps you keeping track of all the services done
on your vehicle. Services can be of many type: occasional on your vehicle. Services can be of many type: occasional
@ -898,15 +898,26 @@
</field> </field>
</record> </record>
<record model='ir.ui.view' id='fleet_vehicle_costs_report'> <record model='ir.ui.view' id='fleet_vehicle_effective_costs_report'>
<field name="name">fleet.vehicle.cost.graph</field> <field name="name">fleet.vehicle.cost.graph</field>
<field name="model">fleet.vehicle.cost</field> <field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Vehicles costs" type="pivot"> <graph string="Vehicles costs" type="pivot">
<field name="date" interval="year" type="row"/>
<field name="vehicle_id" type="row"/> <field name="vehicle_id" type="row"/>
<field name="cost_type" type="row"/>
<field name="date" interval="year" type="col"/>
<field name="amount" type="measure"/>
</graph>
</field>
</record>
<record model='ir.ui.view' id='fleet_vehicle_indicative_costs_report'>
<field name="name">fleet.vehicle.cost.graph</field>
<field name="model">fleet.vehicle.cost</field>
<field name="arch" type="xml">
<graph string="Vehicles costs" type="pivot">
<field name="parent_id" type="row"/>
<field name="cost_type" type="col"/> <field name="cost_type" type="col"/>
<!-- <field name="cost_subtype_id"/> -->
<field name="amount" type="measure"/> <field name="amount" type="measure"/>
</graph> </graph>
</field> </field>
@ -924,12 +935,13 @@
<filter name="parent_false" domain="[('parent_id','=',False)]" string="Effective Costs"/> <filter name="parent_false" domain="[('parent_id','=',False)]" string="Effective Costs"/>
<filter name="parent_true" domain="[('parent_id','!=',False)]" string="Indicative Costs"/> <filter name="parent_true" domain="[('parent_id','!=',False)]" string="Indicative Costs"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter name="groupby_year" context="{'group_by' : 'date:year'}" string="Year"/> <filter name="groupby_cost_type" context="{'group_by': 'cost_type'}" string="Cost Type"/>
<filter name="groupby_date" context="{'group_by' : 'date'}" string="Vehicle Costs Month" help="Vehicle Costs by Month"/> <filter name="groupby_cost_subtype_id" context="{'group_by': 'cost_subtype_id'}" string="Cost Subtype"/>
<filter name="groupby_cost_type" context="{'group_by' : 'cost_type'}" string="Cost Type"/> <filter name="groupby_vehicle_id" context="{'group_by': 'vehicle_id'}" string="Vehicle"/>
<filter name="groupby_cost_subtype_id" context="{'group_by' : 'cost_subtype_id'}" string="Cost Subtype"/> <filter name="groupby_parent_id" context="{'group_by': 'parent_id'}" string="Parent"/>
<filter name="groupby_vehicle_id" context="{'group_by' : 'vehicle_id'}" string="Vehicle"/> <separator/>
<filter name="groupby_parent_id" context="{'group_by' : 'parent_id'}" string="Parent"/> <filter name="groupby_date" context="{'group_by': 'date:month'}" string="Month" help="Vehicle Costs by Month"/>
<filter name="groupby_year" context="{'group_by': 'date:year'}" string="Year"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -51,14 +51,15 @@
<search string="Hr Attendance Search"> <search string="Hr Attendance Search">
<field name="name" string="Attendance"/> <field name="name" string="Attendance"/>
<field name="action"/> <field name="action"/>
<filter icon="terp-go-today" string="Today" name="today" domain="[('name','&gt;=',current_date),('name','&lt;=',current_date)]" /> <filter string="Today" name="today" domain="[('name','&gt;=',current_date),('name','&lt;=',current_date)]" />
<filter string="Current Month" domain="[('name','&gt;=', datetime.datetime.now().strftime('%Y-%m-01'))]" /> <filter string="Current Month" domain="[('name','&gt;=', datetime.datetime.now().strftime('%Y-%m-01'))]" />
<separator/> <separator/>
<filter icon="terp-stock_align_left_24" string="My Attendance" domain="[('employee_id.user_id.id', '=', uid)]" /> <filter string="My Attendance" domain="[('employee_id.user_id.id', '=', uid)]" />
<field name="employee_id"/> <field name="employee_id"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter name="employee" string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/> <filter name="employee" string="Employee" context="{'group_by':'employee_id'}"/>
<filter name="name" string="Date" icon="terp-personal" domain="[]" context="{'group_by':'name'}"/> <separator/>
<filter name="name" string="Month" context="{'group_by':'name'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -152,7 +153,7 @@
<field name="active" position="before"> <field name="active" position="before">
<label for="state" groups="base.group_hr_attendance"/> <label for="state" groups="base.group_hr_attendance"/>
<div groups="base.group_hr_attendance"> <div groups="base.group_hr_attendance">
<field name="state" class="oe_inline"/> - <field name="state" class="oe_inline"/> -
<button class="oe_link" name="attendance_action_change" states="present" string="Sign Out" type="object" context="{'type':'sign_out'}" groups="base.group_hr_user"/> <button class="oe_link" name="attendance_action_change" states="present" string="Sign Out" type="object" context="{'type':'sign_out'}" groups="base.group_hr_user"/>
<button class="oe_link" name="attendance_action_change" states="absent" string="Sign In" type="object" context="{'type':'sign_in'}" groups="base.group_hr_user"/> <button class="oe_link" name="attendance_action_change" states="absent" string="Sign In" type="object" context="{'type':'sign_in'}" groups="base.group_hr_user"/>
</div> </div>
@ -162,5 +163,3 @@
</data> </data>
</openerp> </openerp>

View File

@ -28,12 +28,12 @@ class hr_evaluation_report(osv.Model):
_description = "Evaluations Statistics" _description = "Evaluations Statistics"
_auto = False _auto = False
_columns = { _columns = {
'create_date': fields.date('Create Date', readonly=True), 'create_date': fields.datetime('Create Date', readonly=True),
'delay_date': fields.float('Delay to Start', digits=(16, 2), readonly=True), 'delay_date': fields.float('Delay to Start', digits=(16, 2), readonly=True),
'overpass_delay': fields.float('Overpassed Deadline', digits=(16, 2), readonly=True), 'overpass_delay': fields.float('Overpassed Deadline', digits=(16, 2), readonly=True),
'deadline': fields.date("Deadline", readonly=True), 'deadline': fields.date("Deadline", readonly=True),
'request_id': fields.many2one('survey.user_input', 'Request_id', readonly=True), 'request_id': fields.many2one('survey.user_input', 'Request ID', readonly=True),
'closed': fields.date("closed", readonly=True), 'closed': fields.date("Close Date", readonly=True), # TDE FIXME master: rename into date_close
'plan_id': fields.many2one('hr_evaluation.plan', 'Plan', readonly=True), 'plan_id': fields.many2one('hr_evaluation.plan', 'Plan', readonly=True),
'employee_id': fields.many2one('hr.employee', "Employee", readonly=True), 'employee_id': fields.many2one('hr.employee', "Employee", readonly=True),
'rating': fields.selection([ 'rating': fields.selection([
@ -43,7 +43,7 @@ class hr_evaluation_report(osv.Model):
('3', 'Exceeds expectations'), ('3', 'Exceeds expectations'),
('4', 'Significantly exceeds expectations'), ('4', 'Significantly exceeds expectations'),
], "Overall Rating", readonly=True), ], "Overall Rating", readonly=True),
'nbr': fields.integer('# of Requests', readonly=True), 'nbr': fields.integer('# of Requests', readonly=True), # TDE FIXME master: rename into nbr_requests
'state': fields.selection([ 'state': fields.selection([
('draft', 'Draft'), ('draft', 'Draft'),
('wait', 'Plan In Progress'), ('wait', 'Plan In Progress'),
@ -68,7 +68,7 @@ class hr_evaluation_report(osv.Model):
create or replace view hr_evaluation_report as ( create or replace view hr_evaluation_report as (
select select
min(l.id) as id, min(l.id) as id,
date(s.create_date) as create_date, s.create_date as create_date,
s.employee_id, s.employee_id,
l.request_id, l.request_id,
s.plan_id, s.plan_id,
@ -97,4 +97,3 @@ class hr_evaluation_report(osv.Model):
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -8,7 +8,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Appraisal Analysis" type="pivot" stacked="True"> <graph string="Appraisal Analysis" type="pivot" stacked="True">
<field name="employee_id" type="row"/> <field name="employee_id" type="row"/>
<field name="state" type="col"/> <field name="create_date" interval="month" type="col"/>
<field name="nbr" type="measure"/> <field name="nbr" type="measure"/>
</graph> </graph>
</field> </field>
@ -19,9 +19,9 @@
<field name="model">hr.evaluation.report</field> <field name="model">hr.evaluation.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Appraisal Analysis"> <search string="Appraisal Analysis">
<filter string="In Progress" icon="terp-camera_test" domain="[('state', '=' ,'wait')]" help = "In progress Evaluations"/> <filter string="In Progress" domain="[('state', '=' ,'wait')]" help = "In progress Evaluations"/>
<filter string="Final Validation" icon="terp-camera_test" domain="[('state','=','progress')]" help = "Final Validation Evaluations"/> <filter string="Final Validation" domain="[('state','=','progress')]" help = "Final Validation Evaluations"/>
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/> <filter string="Done" domain="[('state','=','done')]"/>
<field name="employee_id"/> <field name="employee_id"/>
<field name="plan_id"/> <field name="plan_id"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
@ -31,11 +31,12 @@
<field name="create_date"/> <field name="create_date"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Employee" name="employee" icon="terp-personal" context="{'group_by':'employee_id'}"/> <filter string="Employee" name="employee" context="{'group_by':'employee_id'}"/>
<filter string="Plan" icon="terp-stock_align_left_24" context="{'group_by':'plan_id'}"/> <filter string="Plan" context="{'group_by':'plan_id'}"/>
<filter string="Appreciation" icon="terp-face-plain" context="{'group_by':'rating'}"/> <filter string="Appreciation" context="{'group_by':'rating'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Creation Date" icon="terp-go-month" context="{'group_by':'create_date'}" help="Creation Date"/> <separator/>
<filter string="Month" context="{'group_by':'create_date:month'}" help="Creation Month"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -35,7 +35,7 @@ class hr_expense_report(osv.osv):
'create_date': fields.datetime('Creation Date', readonly=True), 'create_date': fields.datetime('Creation Date', readonly=True),
'product_id':fields.many2one('product.product', 'Product', readonly=True), 'product_id':fields.many2one('product.product', 'Product', readonly=True),
'journal_id': fields.many2one('account.journal', 'Force Journal', readonly=True), 'journal_id': fields.many2one('account.journal', 'Force Journal', readonly=True),
'product_qty':fields.float('Qty', readonly=True), 'product_qty':fields.float('Product Quantity', readonly=True),
'employee_id': fields.many2one('hr.employee', "Employee's Name", readonly=True), 'employee_id': fields.many2one('hr.employee', "Employee's Name", readonly=True),
'date_confirm': fields.date('Confirmation Date', readonly=True), 'date_confirm': fields.date('Confirmation Date', readonly=True),
'date_valid': fields.date('Validation Date', readonly=True), 'date_valid': fields.date('Validation Date', readonly=True),
@ -48,7 +48,7 @@ class hr_expense_report(osv.osv):
'delay_confirm':fields.float('Delay to Confirm', readonly=True), 'delay_confirm':fields.float('Delay to Confirm', readonly=True),
'analytic_account': fields.many2one('account.analytic.account','Analytic account',readonly=True), 'analytic_account': fields.many2one('account.analytic.account','Analytic account',readonly=True),
'price_average':fields.float('Average Price', readonly=True, digits_compute=dp.get_precision('Account')), 'price_average':fields.float('Average Price', readonly=True, digits_compute=dp.get_precision('Account')),
'nbr':fields.integer('# of Lines', readonly=True), 'nbr':fields.integer('# of Lines', readonly=True), # TDE FIXME master: rename into nbr_lines
'no_of_products':fields.integer('# of Products', readonly=True), 'no_of_products':fields.integer('# of Products', readonly=True),
'no_of_account':fields.integer('# of Accounts', readonly=True), 'no_of_account':fields.integer('# of Accounts', readonly=True),
'state': fields.selection([ 'state': fields.selection([

View File

@ -8,11 +8,9 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Expenses Analysis" type="pivot" stacked="True"> <graph string="Expenses Analysis" type="pivot" stacked="True">
<field name="employee_id" type="row"/> <field name="employee_id" type="row"/>
<field name="state" type="row"/> <field name="create_date" interval="month" type="col"/>
<field name="nbr" type="measure"/>
<field name="no_of_products" type="measure"/>
<field name="price_average" type="measure"/>
<field name="price_total" type="measure"/> <field name="price_total" type="measure"/>
<field name="price_average" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
@ -22,9 +20,9 @@
<field name="model">hr.expense.report</field> <field name="model">hr.expense.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Expenses Analysis"> <search string="Expenses Analysis">
<filter string="Waiting" icon="terp-gtk-media-pause" domain="[('state', '=' ,'confirm')]" help = "Confirm Expenses"/> <filter string="Waiting" domain="[('state', '=' ,'confirm')]" help="Confirm Expenses"/>
<filter string="Approved" icon="terp-check" domain="[('state','=','accepted')]" help = "Approved Expenses"/> <filter string="Approved" domain="[('state','=','accepted')]" help="Approved Expenses"/>
<filter string="Done" icon="terp-dolar" domain="[('state','=', 'done')]" help = "Done Expenses"/> <filter string="Done" domain="[('state','=', 'done')]" help="Done Expenses"/>
<field name="employee_id"/> <field name="employee_id"/>
<field name="department_id"/> <field name="department_id"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
@ -36,14 +34,13 @@
<field name="date_valid"/> <field name="date_valid"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Employee" name="employee" icon="terp-personal" context="{'group_by':'employee_id'}"/> <filter string="Validation User" name="User" context="{'group_by':'user_id'}"/>
<filter string="Validation User" name="User" icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="Department" context="{'group_by':'department_id'}"/>
<filter string="Department" icon="terp-personal+" context="{'group_by':'department_id'}"/> <filter string="Product" context="{'group_by':'product_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Analytic account" icon="terp-folder-green" context="{'group_by':'analytic_account'}" groups="analytic.group_analytic_accounting"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <separator/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Create Month" context="{'group_by':'create_date:month'}" help="Creation Date"/>
<filter string="Create Date" icon="terp-go-month" context="{'group_by':'create_date'}" help="Creation Date"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -1,6 +1,20 @@
<openerp> <openerp>
<data> <data>
<!-- Graph report -->
<record id="view_evaluation_report_graph" model="ir.ui.view">
<field name="name">hr.holidays.graph</field>
<field name="model">hr.holidays</field>
<field name="arch" type="xml">
<graph string="Appraisal Analysis" type="pivot" stacked="True">
<field name="employee_id" type="row"/>
<field name="holiday_status_id" type="row"/>
<field name="date_from" type="col"/>
<field name="number_of_days" type="measure"/>
</graph>
</field>
</record>
<record id="view_hr_holidays_filter" model="ir.ui.view"> <record id="view_hr_holidays_filter" model="ir.ui.view">
<field name="name">hr.holidays.filter</field> <field name="name">hr.holidays.filter</field>
<field name="model">hr.holidays</field> <field name="model">hr.holidays</field>
@ -8,27 +22,26 @@
<search string="Search Leave"> <search string="Search Leave">
<field name="name"/> <field name="name"/>
<separator/> <separator/>
<filter icon="terp-check" domain="[('state','=','draft')]" string="To Confirm"/> <filter domain="[('state','=','draft')]" string="To Confirm"/>
<filter icon="terp-camera_test" domain="[('state','in',('confirm','validate1'))]" string="To Approve" name="approve"/> <filter domain="[('state','in',('confirm','validate1'))]" string="To Approve" name="approve"/>
<filter icon="terp-camera_test" domain="[('state','=','validate')]" string="Validated" name="validated"/> <filter domain="[('state','=','validate')]" string="Validated" name="validated"/>
<separator/> <separator/>
<filter icon="terp-go-year" name="year" string="Year" domain="[('holiday_status_id.active','=',True)]" help="Filters only on allocations and requests that belong to an holiday type that is 'active' (active field is True)"/> <filter name="year" string="Year" domain="[('holiday_status_id.active','=',True)]" help="Filters only on allocations and requests that belong to an holiday type that is 'active' (active field is True)"/>
<separator/> <separator/>
<filter string="My Requests" icon="terp-personal" name="my_leaves" domain="[('employee_id.user_id','=', uid)]" help="My Leave Requests"/> <filter string="My Requests" name="my_leaves" domain="[('employee_id.user_id','=', uid)]" help="My Leave Requests"/>
<separator/> <separator/>
<filter string="My Department Leaves" icon="terp-personal+" help="My Department Leaves" domain="[('department_id.manager_id','=',uid)]"/> <filter string="My Department Leaves" help="My Department Leaves" domain="[('department_id.manager_id','=',uid)]"/>
<field name="employee_id"/> <field name="employee_id"/>
<field name="department_id"/> <field name="department_id"/>
<field name="holiday_status_id"/> <field name="holiday_status_id"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter name="group_name" string="Description" domain="[]" context="{'group_by':'name'}"/> <filter name="group_name" string="Description" context="{'group_by':'name'}"/>
<filter name="group_date_from" string="Start Month" icon="terp-personal" domain="[]" context="{'group_by':'date_from'}"/> <filter name="group_employee" string="Employee" context="{'group_by':'employee_id'}"/>
<filter name="group_employee" string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/> <filter name="group_category" string="Category" context="{'group_by':'category_id'}"/>
<filter name="group_category" string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'category_id'}"/> <filter string="Manager" context="{'group_by':'manager_id'}"/>
<filter string="Manager" icon="terp-personal" domain="[]" context="{'group_by':'manager_id'}"/> <filter name="group_type" string="Type" context="{'group_by':'holiday_status_id'}"/>
<filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id','set_visible':True}"/> <separator/>
<filter name="group_type" string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'holiday_status_id'}"/> <filter name="group_date_from" string="Start Month" context="{'group_by':'date_from:month'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -40,9 +53,9 @@
<field name="name">Leave Request</field> <field name="name">Leave Request</field>
<field name="model">hr.holidays</field> <field name="model">hr.holidays</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<calendar string="Leave Request" color="employee_id" <calendar string="Leave Request" color="employee_id"
date_start="date_from" date_stop="date_to" date_start="date_from" date_stop="date_to"
quick_add="False" avatar_model="hr.employee"> quick_add="False" avatar_model="hr.employee">
<field name="employee_id"/> <field name="employee_id"/>
<field name="holiday_status_id"/> <field name="holiday_status_id"/>
</calendar> </calendar>
@ -483,10 +496,10 @@
</group> </group>
</xpath> </xpath>
<xpath expr="//div[@name='button_box']" position="inside"> <xpath expr="//div[@name='button_box']" position="inside">
<button name="%(act_hr_employee_holiday_request)d" <button name="%(act_hr_employee_holiday_request)d"
type="action" type="action"
class="oe_stat_button" class="oe_stat_button"
icon="fa-calendar" icon="fa-calendar"
groups="base.group_hr_user"> groups="base.group_hr_user">
<field name="leaves_count" widget="statinfo" string="Leaves"/> <field name="leaves_count" widget="statinfo" string="Leaves"/>
</button> </button>

View File

@ -7,7 +7,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Recruitment Analysis" type="pivot"> <graph string="Recruitment Analysis" type="pivot">
<field name="stage_id" type="row"/> <field name="stage_id" type="row"/>
<field name="date_create" interval="week" type="col"/> <field name="job_id" type="col"/>
</graph> </graph>
</field> </field>
</record> </record>
@ -16,23 +16,20 @@
<record id="filter_recruitment_report_recruiter" model="ir.filters"> <record id="filter_recruitment_report_recruiter" model="ir.filters">
<field name="name">By Recruiter</field> <field name="name">By Recruiter</field>
<field name="model_id">hr.recruitment.report</field> <field name="model_id">hr.recruitment.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date_create:month', 'user_id']}</field> <field name="context">{'group_by': ['date_create:month', 'user_id'], 'col_group_by': ['date_create:month']}</field>
</record> </record>
<record id="filter_recruitment_report_job" model="ir.filters"> <record id="filter_recruitment_report_job" model="ir.filters">
<field name="name">By Job</field> <field name="name">By Job</field>
<field name="model_id">hr.recruitment.report</field> <field name="model_id">hr.recruitment.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date_create:month', 'job_id']}</field> <field name="context">{'group_by': ['date_create:month', 'job_id'], 'col_group_by': ['date_create:month']}</field>
</record> </record>
<record id="filter_recruitment_report_departmnet" model="ir.filters"> <record id="filter_recruitment_report_departmnet" model="ir.filters">
<field name="name">By Department</field> <field name="name">By Department</field>
<field name="model_id">hr.recruitment.report</field> <field name="model_id">hr.recruitment.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date_create:month', 'department_id']}</field> <field name="context">{'group_by': ['date_create:month', 'department_id'], 'col_group_by': ['date_create:month']}</field>
</record> </record>
<record id="view_hr_recruitment_report_search" model="ir.ui.view"> <record id="view_hr_recruitment_report_search" model="ir.ui.view">
@ -48,7 +45,7 @@
<filter string="Unassigned" domain="[('user_id', '=', False)]"/> <filter string="Unassigned" domain="[('user_id', '=', False)]"/>
<filter string="My" domain="[('user_id', '=', uid)]"/> <filter string="My" domain="[('user_id', '=', uid)]"/>
<separator/> <separator/>
<filter string="New" domain="[('sequence', '=', 1)]"/> <filter string="New" domain="[('stage_id.sequence', '=', 1)]"/>
<separator/> <separator/>
<group expand="0" string="Extended Filters"> <group expand="0" string="Extended Filters">
<field name="priority"/> <field name="priority"/>
@ -60,14 +57,11 @@
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Responsible" name='User' context="{'group_by':'user_id'}"/> <filter string="Responsible" name='User' context="{'group_by':'user_id'}"/>
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Partner" context="{'group_by':'partner_id'}" />
<filter string="Jobs" name="job" context="{'group_by':'job_id'}"/> <filter string="Jobs" name="job" context="{'group_by':'job_id'}"/>
<filter string="Department" name="department" context="{'group_by':'department_id'}"/> <filter string="Department" name="department" context="{'group_by':'department_id'}"/>
<filter string="Degree" name="degree" context="{'group_by':'type_id'}"/>
<filter string="Last Stage" help="Match this group by with a specific stage filter in order to analyse the recruitment process" context="{'group_by':'last_stage_id'}"/>
<filter string="Stage" context="{'group_by':'stage_id'}" /> <filter string="Stage" context="{'group_by':'stage_id'}" />
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" /> <separator/>
<filter string="Creation Date" context="{'group_by':'date_create'}" help="Creation Date"/> <filter string="Creation Week" context="{'group_by':'date_create:week'}" help="Creation Week"/>
</group> </group>
</search> </search>
</field> </field>
@ -78,7 +72,7 @@
<field name="res_model">hr.recruitment.report</field> <field name="res_model">hr.recruitment.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{'search_default_year': 1, 'group_by_no_leaf':1,'group_by':[]}</field> <field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
<field name="search_view_id" ref="view_hr_recruitment_report_search"/> <field name="search_view_id" ref="view_hr_recruitment_report_search"/>
</record> </record>
<menuitem action="action_hr_recruitment_report_all" id="menu_hr_recruitment_report_all" parent="hr.menu_hr_reporting" sequence="0"/> <menuitem action="action_hr_recruitment_report_all" id="menu_hr_recruitment_report_all" parent="hr.menu_hr_reporting" sequence="0"/>

View File

@ -16,8 +16,8 @@ class hr_timesheet_report(osv.osv):
'user_id': fields.many2one('res.users', 'User',readonly=True), 'user_id': fields.many2one('res.users', 'User',readonly=True),
'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True), 'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True),
'company_id': fields.many2one('res.company', 'Company',readonly=True), 'company_id': fields.many2one('res.company', 'Company',readonly=True),
'cost': fields.float('#Cost',readonly=True, digits_compute=dp.get_precision('Account')), 'cost': fields.float('Cost', readonly=True, digits_compute=dp.get_precision('Account')),
'quantity': fields.float('Time',readonly=True), 'quantity': fields.float('Time', readonly=True), # TDE FIXME master: rename into time
} }
def _select(self): def _select(self):

View File

@ -7,13 +7,13 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Timesheet" type="pivot"> <graph string="Timesheet" type="pivot">
<field name="user_id" type="row"/> <field name="user_id" type="row"/>
<field name="date" interval="day" type="col"/> <field name="date" interval="month" type="col"/>
<field name="quantity" type="measure"/> <field name="quantity" type="measure"/>
<field name="cost" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
<record id="view_hr_timesheet_report_search" model="ir.ui.view"> <record id="view_hr_timesheet_report_search" model="ir.ui.view">
<field name="name">hr.timesheet.report.search</field> <field name="name">hr.timesheet.report.search</field>
<field name="model">hr.timesheet.report</field> <field name="model">hr.timesheet.report</field>
@ -21,7 +21,7 @@
<search string="Timesheet"> <search string="Timesheet">
<field name="account_id"/> <field name="account_id"/>
<field name="user_id"/> <field name="user_id"/>
<filter string="This Month" name="month" icon="terp-go-year" domain="[('date','&lt;=', time.strftime('%Y-%m-%d')),('date','&gt;=',time.strftime('%Y-%m-01'))]" help="month"/> <filter string="This Month" name="month" domain="[('date','&lt;=', time.strftime('%Y-%m-%d')),('date','&gt;=',time.strftime('%Y-%m-01'))]" help="month"/>
<group expand="0" string="Extended Filters..."> <group expand="0" string="Extended Filters...">
<field name="general_account_id"/> <field name="general_account_id"/>
<field name="product_id"/> <field name="product_id"/>
@ -30,12 +30,10 @@
<field name="date"/> <field name="date"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="User" name="group_user_id" icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="User" name="group_user_id" context="{'group_by':'user_id'}"/>
<filter string="Product" name="product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Analytic Account" name="analytic_account" icon="terp-folder-green" context="{'group_by':'account_id'}"/> <separator/>
<filter string="General Account" name="general_account" icon="terp-folder-orange" context="{'group_by':'general_account_id'}"/> <filter string="Month" context="{'group_by':'date:month'}" help="Group by month of date"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Date" icon="terp-go-month" context="{'group_by':'date'}" help="Group by month of date"/>
</group> </group>
</search> </search>
</field> </field>
@ -46,7 +44,7 @@
<field name="res_model">hr.timesheet.report</field> <field name="res_model">hr.timesheet.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="context">{'search_default_group_user_id':1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
</record> </record>
<menuitem action="action_hr_timesheet_report_stat_all" id="menu_hr_timesheet_report_all" <menuitem action="action_hr_timesheet_report_stat_all" id="menu_hr_timesheet_report_all"

View File

@ -26,10 +26,10 @@ class hr_timesheet_report(osv.osv):
_inherit = "hr.timesheet.report" _inherit = "hr.timesheet.report"
_columns = { _columns = {
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True), 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True),
'nbr': fields.integer('#Nbr',readonly=True), 'nbr': fields.integer('# Nbr Timesheet',readonly=True),
'total_diff': fields.float('#Total Diff',readonly=True), 'total_diff': fields.float('# Total Diff',readonly=True),
'total_timesheet': fields.float('#Total Timesheet',readonly=True), 'total_timesheet': fields.float('# Total Timesheet',readonly=True),
'total_attendance': fields.float('#Total Attendance',readonly=True), 'total_attendance': fields.float('# Total Attendance',readonly=True),
'department_id':fields.many2one('hr.department','Department',readonly=True), 'department_id':fields.many2one('hr.department','Department',readonly=True),
'date_from': fields.date('Date from',readonly=True,), 'date_from': fields.date('Date from',readonly=True,),
'date_to': fields.date('Date to',readonly=True), 'date_to': fields.date('Date to',readonly=True),
@ -47,16 +47,16 @@ class hr_timesheet_report(osv.osv):
htss.date_to, htss.date_to,
count(*) as nbr, count(*) as nbr,
(SELECT sum(day.total_difference) (SELECT sum(day.total_difference)
FROM hr_timesheet_sheet_sheet AS sheet FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_diff, ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_diff,
(SELECT sum(day.total_timesheet) (SELECT sum(day.total_timesheet)
FROM hr_timesheet_sheet_sheet AS sheet FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_timesheet, ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_timesheet,
(SELECT sum(day.total_attendance) (SELECT sum(day.total_attendance)
FROM hr_timesheet_sheet_sheet AS sheet FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_attendance, ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_attendance,
aal.to_invoice, aal.to_invoice,
htss.department_id, htss.department_id,

View File

@ -7,9 +7,9 @@
<field name="inherit_id" ref="hr_timesheet.view_hr_timesheet_report_graph"/> <field name="inherit_id" ref="hr_timesheet.view_hr_timesheet_report_graph"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="user_id" position="after"> <field name="user_id" position="after">
<field name="state" type="row"/> <field name="to_invoice" type="row"/>
</field> </field>
<field name="cost" position="after"> <field name="quantity" position="after">
<field name="total_diff" type="measure"/> <field name="total_diff" type="measure"/>
<field name="total_timesheet" type="measure"/> <field name="total_timesheet" type="measure"/>
<field name="total_attendance" type="measure"/> <field name="total_attendance" type="measure"/>
@ -17,15 +17,31 @@
</field> </field>
</record> </record>
<!-- Custom reports (aka filters) -->
<record id="filter_hr_timesheet_report_internal_timesheets" model="ir.filters">
<field name="name">Internal Timesheet</field>
<field name="model_id">hr.timesheet.report</field>
<field name="domain">[('state','=','done'), ('date','&lt;=', time.strftime('%Y-%m-%d')),('date','&gt;=',time.strftime('%Y-%m-01'))]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['user_id'], 'col_group_by': ['department_id'], 'measures': ['time']}</field>
</record>
<record id="filter_hr_timesheet_report_external_timesheets" model="ir.filters">
<field name="name">External Timesheet</field>
<field name="model_id">hr.timesheet.report</field>
<field name="domain">[('state','=','done'), ('date','&lt;=', time.strftime('%Y-%m-%d')),('date','&gt;=',time.strftime('%Y-%m-01'))]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['company_id', 'to_invoice'], 'col_group_by': ['user_id'], 'measures': ['time','cost']}</field>
</record>
<record id="view_timesheet_report_search" model="ir.ui.view"> <record id="view_timesheet_report_search" model="ir.ui.view">
<field name="name">timesheet.report.search</field> <field name="name">timesheet.report.search</field>
<field name="model">hr.timesheet.report</field> <field name="model">hr.timesheet.report</field>
<field name="inherit_id" ref="hr_timesheet.view_hr_timesheet_report_search"/> <field name="inherit_id" ref="hr_timesheet.view_hr_timesheet_report_search"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="account_id" position="before"> <field name="account_id" position="before">
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]"/> <filter string="Draft" domain="[('state','=','draft')]"/>
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','confirm')]"/> <filter string="Confirmed" domain="[('state','=','confirm')]"/>
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/> <filter string="Done" domain="[('state','=','done')]"/>
</field> </field>
<field name="general_account_id" position="after"> <field name="general_account_id" position="after">
<field name="to_invoice"/> <field name="to_invoice"/>
@ -33,14 +49,10 @@
<field name="date_to"/> <field name="date_to"/>
<field name="date_from"/> <field name="date_from"/>
</field> </field>
<filter name="product" position="before"> <filter name="group_user_id" position="after">
<filter string="Department" icon="terp-personal+" context="{'group_by':'department_id'}"/> <filter string="Department" context="{'group_by':'department_id'}"/>
</filter> <filter string="Type of Invoicing" context="{'group_by':'to_invoice'}"/>
<filter name="analytic_account" position="before"> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Type of Invoicing" icon="terp-stock_symbol-selection" context="{'group_by':'to_invoice'}"/>
</filter>
<filter name="general_account" position="after">
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
</filter> </filter>
</field> </field>
</record> </record>

View File

@ -33,10 +33,10 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Advices Analysis"> <search string="Advices Analysis">
<group> <group>
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Payment Advices which are in draft state"/> <filter string="Draft" domain="[('state','=','draft')]" help="Payment Advices which are in draft state"/>
<filter icon="terp-check" string="Confirm" name="confirm" domain="[('state','=','confirm')]" help="Payment Advices which are in confirm state"/> <filter string="Confirm" name="confirm" domain="[('state','=','confirm')]" help="Payment Advices which are in confirm state"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter icon="terp-camera_test" string="NEFT" domain="[('neft','=',True)]" help="Advices which are paid using NEFT transfer"/> <filter string="NEFT" domain="[('neft','=',True)]" help="Advices which are paid using NEFT transfer"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<field name="date"/> <field name="date"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
@ -55,16 +55,14 @@
</group> </group>
<newline/> <newline/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Employee" icon="terp-personal" context="{'group_by':'employee_id'}" /> <filter string="Employee" context="{'group_by':'employee_id'}" />
<filter string="Bank" icon="terp-go-home" context="{'group_by':'bank_id'}"/> <filter string="Bank" context="{'group_by':'bank_id'}"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/> <filter string="Company" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day of Payment Advices"/> <filter string="Month" name="order_month" context="{'group_by':'month'}" help="Month of Payment Advices"/>
<filter string="Month" name="order_month" icon="terp-go-month" context="{'group_by':'month'}" help="Month of Payment Advices"/>
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Year of Payment Advices"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -32,10 +32,10 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Payslip Analysis"> <search string="Payslip Analysis">
<group> <group>
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]" help="Payslips which are in draft state"/> <filter string="Draft" domain="[('state','=','draft')]" help="Payslips which are in draft state"/>
<filter icon="terp-check" string="Done" name="done" domain="[('state','=','done')]" help="Payslips which are in done state"/> <filter string="Done" name="done" domain="[('state','=','done')]" help="Payslips which are in done state"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter icon="terp-camera_test" string="Paid" domain="[('paid','=',True)]" help="Payslips which are paid"/> <filter string="Paid" domain="[('paid','=',True)]" help="Payslips which are paid"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<field name="date_from"/> <field name="date_from"/>
<field name="date_to"/> <field name="date_to"/>
@ -51,19 +51,16 @@
</group> </group>
<newline/> <newline/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Employee" name="employee" icon="terp-personal" context="{'group_by':'employee_id'}" /> <filter string="Employee" name="employee" context="{'group_by':'employee_id'}" />
<filter string="Structure" context="{'group_by':'struct_id'}" /> <filter string="Structure" context="{'group_by':'struct_id'}" />
<filter string="Category" name="category" context="{'group_by':'category_id'}" /> <filter string="Category" name="category" context="{'group_by':'category_id'}" />
<filter string="Payslip Line" context="{'group_by':'name'}" /> <filter string="Payslip Line" context="{'group_by':'name'}" />
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/> <filter string="Company" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day of Payslip"/> <filter string="Month" name="order_month" context="{'group_by':'month'}" help="Month of Payslip"/>
<filter string="Month" name="order_month" icon="terp-go-month" context="{'group_by':'month'}" help="Month of Payslip"/>
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Year of Payslip"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -1,6 +1,18 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<openerp> <openerp>
<data> <data>
<record id="view_report_campaign_analysis_graph" model="ir.ui.view">
<field name="name">campaign.analysis.graph</field>
<field name="model">campaign.analysis</field>
<field name="arch" type="xml">
<graph string="Marketing Reports" type="pivot" stacked="True">
<field name="segment_id" type="row"/>
<field name="month" type="col"/>
</graph>
</field>
</record>
<record id="view_campaign_analysis_tree" model="ir.ui.view"> <record id="view_campaign_analysis_tree" model="ir.ui.view">
<field name="name">campaign.analysis.tree</field> <field name="name">campaign.analysis.tree</field>
<field name="model">campaign.analysis</field> <field name="model">campaign.analysis</field>
@ -30,24 +42,21 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Campaign Analysis"> <search string="Campaign Analysis">
<field name="date"/> <field name="date"/>
<filter icon="terp-gtk-go-back-rtl" string="To Do" domain="[('state','=','todo')]"/> <filter string="To Do" domain="[('state','=','todo')]"/>
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/> <filter string="Done" domain="[('state','=','done')]"/>
<filter icon="terp-emblem-important" string="Exceptions" domain="[('state','=','exception')]"/> <filter string="Exceptions" domain="[('state','=','exception')]"/>
<field name="campaign_id"/> <field name="campaign_id"/>
<field name="activity_id"/> <field name="activity_id"/>
<field name="segment_id"/> <field name="segment_id"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="country_id"/> <field name="country_id"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter string="Campaign" name="Campaign" icon="terp-gtk-jump-to-rtl" context="{'group_by':'campaign_id'}" /> <filter string="Campaign" name="Campaign" context="{'group_by':'campaign_id'}" />
<filter string="Segment" name="Segment" icon="terp-stock_symbol-selection" context="{'group_by':'segment_id'}"/> <filter string="Segment" name="Segment" context="{'group_by':'segment_id'}"/>
<filter string="Activity" name="activity" icon="terp-stock_align_left_24" context="{'group_by':'activity_id'}"/> <filter string="Activity" name="activity" context="{'group_by':'activity_id'}"/>
<filter string="Resource" icon="terp-accessories-archiver" context="{'group_by':'res_id'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <separator/>
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}"/> <filter string="Month" context="{'group_by':'month'}"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}"/>
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}"/>
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -57,8 +66,8 @@
<field name="name">Campaign Analysis</field> <field name="name">Campaign Analysis</field>
<field name="res_model">campaign.analysis</field> <field name="res_model">campaign.analysis</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree</field> <field name="view_mode">graph,tree</field>
<field name="context">{'search_default_year': 1,"search_default_This Month":1,'group_by': [], 'search_default_Campaign': 1, 'search_default_Segment': 1, 'group_by_no_leaf':1}</field> <field name="context">{'group_by': [], 'group_by_no_leaf':1}</field>
<field name="search_view_id" ref="view_campaign_analysis_search"/> <field name="search_view_id" ref="view_campaign_analysis_search"/>
</record> </record>

View File

@ -44,6 +44,7 @@ professional emails and reuse templates in a few clicks.
'data/mass_mailing_data.xml', 'data/mass_mailing_data.xml',
'wizard/mail_compose_message_view.xml', 'wizard/mail_compose_message_view.xml',
'wizard/test_mailing.xml', 'wizard/test_mailing.xml',
'views/mass_mailing_report.xml',
'views/mass_mailing.xml', 'views/mass_mailing.xml',
'views/res_config.xml', 'views/res_config.xml',
'views/res_partner.xml', 'views/res_partner.xml',

View File

@ -5,3 +5,4 @@ import mass_mailing_stats
import mail_mail import mail_mail
import mail_thread import mail_thread
import res_config import res_config
import mass_mailing_report

View File

@ -30,6 +30,7 @@ class MassMailingContact(osv.Model):
be able to deal with large contact list to email without bloating the partner be able to deal with large contact list to email without bloating the partner
base.""" base."""
_name = 'mail.mass_mailing.contact' _name = 'mail.mass_mailing.contact'
_inherit = 'mail.thread'
_description = 'Mass Mailing Contact' _description = 'Mass Mailing Contact'
_order = 'email' _order = 'email'
_rec_name = 'email' _rec_name = 'email'

View File

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
from openerp.osv import fields, osv
from openerp import tools
class MassMailingReport(osv.Model):
_name = 'mail.statistics.report'
_auto = False
_description = 'Mass Mailing Statistics'
_columns = {
'scheduled_date': fields.datetime('Scheduled Date', readonly=True),
'name': fields.char('Mass Mail', readonly=True),
'campaign': fields.char('Mass Mail Campaign', readonly=True),
'sent': fields.integer('Sent', readonly=True),
'delivered': fields.integer('Delivered', readonly=True),
'opened': fields.integer('Opened', readonly=True),
'bounced': fields.integer('Bounced', readonly=True),
'replied': fields.integer('Replied', readonly=True),
'state': fields.selection(
[('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')],
string='Status', readonly=True,
),
'email_from': fields.char('From', readonly=True),
}
def init(self, cr):
"""Mass Mail Statistical Report: based on mail.mail.statistics that models the various
statistics collected for each mailing, and mail.mass_mailing model that models the
various mailing performed. """
tools.drop_view_if_exists(cr, 'mail_statistics_report')
cr.execute("""
CREATE OR REPLACE VIEW mail_statistics_report AS (
SELECT
min(ms.id) as id,
ms.scheduled as scheduled_date,
mm.name as name,
mc.name as campaign,
count(ms.bounced) as bounced,
count(ms.sent) as sent,
(count(ms.sent) - count(ms.bounced)) as delivered,
count(ms.opened) as opened,
count(ms.replied) as replied,
mm.state,
mm.email_from
FROM
mail_mail_statistics as ms
left join mail_mass_mailing as mm ON (ms.mass_mailing_id=mm.id)
left join mail_mass_mailing_campaign as mc ON (ms.mass_mailing_campaign_id=mc.id)
GROUP BY ms.scheduled, mm.name, mc.name, mm.state, mm.email_from
)""")

View File

@ -7,4 +7,5 @@ access_mass_mailing_campaign,mail.mass_mailing.campaign,model_mail_mass_mailing_
access_mass_mailing_campaign_system,mail.mass_mailing.campaign.system,model_mail_mass_mailing_campaign,base.group_system,1,1,1,1 access_mass_mailing_campaign_system,mail.mass_mailing.campaign.system,model_mail_mass_mailing_campaign,base.group_system,1,1,1,1
access_mass_mailing,mail.mass_mailing,model_mail_mass_mailing,base.group_user,1,1,1,0 access_mass_mailing,mail.mass_mailing,model_mail_mass_mailing,base.group_user,1,1,1,0
access_mass_mailing_system,mail.mass_mailing.system,model_mail_mass_mailing,base.group_system,1,1,1,1 access_mass_mailing_system,mail.mass_mailing.system,model_mail_mass_mailing,base.group_system,1,1,1,1
access_mail_mail_statistics,mail.mail.statistics,model_mail_mail_statistics,base.group_user,1,1,1,1 access_mail_mail_statistics,mail.mail.statistics,model_mail_mail_statistics,base.group_user,1,1,1,1
access_mail_statistics_report,mail.statistics.report,model_mail_statistics_report,base.group_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
7 access_mass_mailing_campaign_system mail.mass_mailing.campaign.system model_mail_mass_mailing_campaign base.group_system 1 1 1 1
8 access_mass_mailing mail.mass_mailing model_mail_mass_mailing base.group_user 1 1 1 0
9 access_mass_mailing_system mail.mass_mailing.system model_mail_mass_mailing base.group_system 1 1 1 1
10 access_mail_mail_statistics mail.mail.statistics model_mail_mail_statistics base.group_user 1 1 1 1
11 access_mail_statistics_report mail.statistics.report model_mail_statistics_report base.group_user 1 1 1 1

View File

@ -228,11 +228,16 @@
<field name="name" string="Mailings"/> <field name="name" string="Mailings"/>
<field name="mass_mailing_campaign_id"/> <field name="mass_mailing_campaign_id"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter string="State" name="group_state"
context="{'group_by': 'state'}"/>
<filter string="Campaign" name="group_mass_mailing_campaign_id" <filter string="Campaign" name="group_mass_mailing_campaign_id"
groups="mass_mailing.group_mass_mailing_campaign" groups="mass_mailing.group_mass_mailing_campaign"
context="{'group_by': 'mass_mailing_campaign_id'}"/> context="{'group_by': 'mass_mailing_campaign_id'}"/>
<filter string="State" name="group_state"
context="{'group_by': 'state'}"/>
<filter string="Sent By" domain="[]"
context="{'group_by':'email_from'}"/>
<separator/>
<filter string="Sent Month"
domain="[]" context="{'group_by':'sent_date:month'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -419,6 +424,17 @@
</field> </field>
</record> </record>
<record id="view_mail_mass_mailing_graph" model="ir.ui.view">
<field name="name">mail.mass_mailing.graph</field>
<field name="model">mail.mass_mailing</field>
<field name="arch" type="xml">
<graph string="Mass Mailing" type="bar" stacked="True">
<field name="mass_mailing_campaign_id" type="row"/>
<field name="sent_date" interval="month" type="col"/>
</graph>
</field>
</record>
<record id="action_view_mass_mailings" model="ir.actions.act_window"> <record id="action_view_mass_mailings" model="ir.actions.act_window">
<field name="name">Mass Mailings</field> <field name="name">Mass Mailings</field>
<field name="res_model">mail.mass_mailing</field> <field name="res_model">mail.mass_mailing</field>
@ -438,7 +454,7 @@
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field> <field name="view_mode">kanban,tree,form</field>
<field name="context">{ <field name="context">{
'search_default_mass_mailing_campaign_id': [active_id], 'search_default_mass_mailing_campaign_id': [active_id],
'default_mass_mailing_campaign_id': active_id, 'default_mass_mailing_campaign_id': active_id,
} }
</field> </field>

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_mail_statistics_report_graph" model="ir.ui.view">
<field name="name">mail.statistics.report.graph</field>
<field name="model">mail.statistics.report</field>
<field name="arch" type="xml">
<graph string="Mass Mailing Statistics" type="pivot" stacked="True">
<field name="campaign" type="row"/>
<field name="sent" type="measure"/>
<field name="delivered" type="measure"/>
<field name="opened" type="measure"/>
<field name="bounced" type="measure"/>
<field name="replied" type="measure"/>
</graph>
</field>
</record>
<record id="view_mail_statistics_report_search" model="ir.ui.view">
<field name="name">mail.statistics.report.search</field>
<field name="model">mail.statistics.report</field>
<field name="arch" type="xml">
<search string="Mass Mailing Statistics">
<group expand="0" string="Extended Filters...">
<field name="scheduled_date"/>
</group>
<group expand="1" string="Group By...">
<filter string="Mass Mailing Campaign"
domain="[]" context="{'group_by':'campaign'}"/>
<filter string="State" domain="[]"
context="{'group_by':'state'}"/>
<filter string="Sent By" domain="[]"
context="{'group_by':'email_from'}"/>
<separator/>
<filter string="Scheduled Month"
domain="[]" context="{'group_by':'scheduled_date:month'}"/>
</group>
</search>
</field>
</record>
<!-- Actions and Menuitems -->
<record id="action_mail_statistics_report" model="ir.actions.act_window">
<field name="name">Mass Mailing Analysis</field>
<field name="res_model">mail.statistics.report</field>
<field name="view_type">form</field>
<field name="view_mode">graph</field>
<field name="help">Mass Mailing Statistics allows you to check different mailing related information like number of bounced mails, opened mails, replied mails. You can sort out your analysis by different groups to get accurate grained analysis.</field>
</record>
<record id="action_mail_mass_mailing_report_graph" model="ir.actions.act_window.view">
<field name="view_mode">graph</field>
<field name="view_id" ref="view_mail_statistics_report_graph"/>
<field name="act_window_id" ref="action_mail_statistics_report"/>
</record>
<menuitem name="Mass Mailing Analysis" id="menu_mass_mailing_report" sequence="1"
parent="base.marketing_reporting_menu" action="action_mail_statistics_report"/>
</data>
</openerp>

View File

@ -30,11 +30,15 @@ class TestMassMailing(osv.TransientModel):
'reply_to': mailing.reply_to, 'reply_to': mailing.reply_to,
'email_to': test_mail, 'email_to': test_mail,
'subject': mailing.name, 'subject': mailing.name,
'body_html': mailing.body_html, 'body_html': '',
'auto_delete': True, 'notification': True,
'mailing_id': wizard.mass_mailing_id.id, 'mailing_id': mailing.id,
} }
mail_ids.append(Mail.create(cr, uid, mail_values, context=context)) mail_mail_obj = Mail.browse(cr, uid, Mail.create(cr, uid, mail_values, context=context), context=context)
unsubscribe_url = Mail._get_unsubscribe_url(cr, uid, mail_mail_obj, test_mail, context=context)
body = tools.append_content_to_html(mailing.body_html, unsubscribe_url, plaintext=False, container_tag='p')
Mail.write(cr, uid, mail_mail_obj.id, {'body_html': mailing.body_html}, context=context)
mail_ids.append(mail_mail_obj.id)
Mail.send(cr, uid, mail_ids, context=context) Mail.send(cr, uid, mail_ids, context=context)
self.pool['mail.mass_mailing'].write(cr, uid, [mailing.id], {'state': 'test'}, context=context) self.pool['mail.mass_mailing'].write(cr, uid, [mailing.id], {'state': 'test'}, context=context)
return True return True

View File

@ -53,7 +53,8 @@ class report_membership(osv.osv):
'membership_id': fields.many2one('product.product', 'Membership Product', readonly=True), 'membership_id': fields.many2one('product.product', 'Membership Product', readonly=True),
'membership_state': fields.selection(STATE, 'Current Membership State', readonly=True), 'membership_state': fields.selection(STATE, 'Current Membership State', readonly=True),
'user_id': fields.many2one('res.users', 'Salesperson', readonly=True), 'user_id': fields.many2one('res.users', 'Salesperson', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True) 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'quantity': fields.integer("Quantity", readonly=True),
} }
def init(self, cr): def init(self, cr):
@ -64,6 +65,7 @@ class report_membership(osv.osv):
SELECT SELECT
MIN(id) AS id, MIN(id) AS id,
partner_id, partner_id,
count(membership_id) as quantity,
user_id, user_id,
membership_state, membership_state,
associate_member_id, associate_member_id,

View File

@ -7,24 +7,24 @@
<field name="model">report.membership</field> <field name="model">report.membership</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Membership"> <search string="Membership">
<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="Forecast" 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"/> <filter string="Revenue Done" name="Revenue" context="{'paid_old_totearned_visible':0}" help="This will display paid, old and total earned columns"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="membership_id"/> <field name="membership_id"/>
<field name="user_id"/> <field name="user_id"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" icon="terp-personal" name="salesman" <filter string="Salesperson" name="salesman"
domain="[]" context="{'group_by':'user_id'}"/> context="{'group_by':'user_id'}"/>
<filter string="Associated Partner" icon="terp-partner" name="associate_member_id" <filter string="Associated Partner" name="associate_member_id"
domain="[]" context="{'group_by':'associate_member_id'}"/> context="{'group_by':'associate_member_id'}"/>
<filter string="Membership Product" icon="terp-accessories-archiver" name="product" <filter string="Membership Product" name="product"
domain="[]" context="{'group_by':'membership_id'}"/> context="{'group_by':'membership_id'}"/>
<filter string="Current Membership State" icon="terp-stock_effects-object-colorize" <filter string="Current Membership State"
domain="[]" context="{'group_by':'membership_state'}"/> context="{'group_by':'membership_state'}"/>
<filter string="Company" icon="terp-go-home" <filter string="Company"
domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Date" name="start_date" icon="terp-go-year" <filter string="Month" name="start_date"
domain="[]" context="{'group_by':'start_date:year'}"/> context="{'group_by':'start_date:month'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -35,7 +35,11 @@
<field name="model">report.membership</field> <field name="model">report.membership</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Membership" type="pivot"> <graph string="Membership" type="pivot">
<field name="membership_id" type="row"/>
<field name="start_date" interval="month" type="col"/>
<field name="quantity" type="measure"/>
<field name="num_paid" type="measure"/> <field name="num_paid" type="measure"/>
<field name="num_invoiced" type="measure"/>
<field name="tot_earned" type="measure"/> <field name="tot_earned" type="measure"/>
</graph> </graph>
</field> </field>

View File

@ -28,7 +28,7 @@ class mrp_workorder(osv.osv):
_description = "Work Order Report" _description = "Work Order Report"
_auto = False _auto = False
_columns = { _columns = {
'nbr': fields.integer('# of Lines', readonly=True), 'nbr': fields.integer('# of Lines', readonly=True), # TDE FIXME master: rename into nbr_lines
'date': fields.date('Date', readonly=True), 'date': fields.date('Date', readonly=True),
'product_id': fields.many2one('product.product', 'Product', readonly=True), 'product_id': fields.many2one('product.product', 'Product', readonly=True),
'product_qty': fields.float('Product Qty', digits_compute=dp.get_precision('Product Unit of Measure'), readonly=True), 'product_qty': fields.float('Product Qty', digits_compute=dp.get_precision('Product Unit of Measure'), readonly=True),

View File

@ -9,32 +9,55 @@
<field name="model">mrp.workorder</field> <field name="model">mrp.workorder</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Work Orders" type="pivot"> <graph string="Work Orders" type="pivot">
<field name="state" type="row"/> <field name="workcenter_id" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="product_qty" type="measure"/> <field name="product_qty" type="measure"/>
<field name="nbr" type="measure"/>
<field name="total_hours" type="measure"/> <field name="total_hours" type="measure"/>
<field name="total_cycles" type="measure"/> <field name="total_cycles" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
<!-- Custom reports (aka filters) -->
<record id="filter_mrp_workorder_workload" model="ir.filters">
<field name="name">Workload</field>
<field name="model_id">mrp.workorder</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['workcenter_id'], 'col_group_by': ['date:month'], 'measures': ['total_hours', 'total_cycles']}</field>
</record>
<record id="filter_mrp_workorder_quantity_produced" model="ir.filters">
<field name="name">Quantity Produced</field>
<field name="model_id">mrp.workorder</field>
<field name="domain">[('state','=','done')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['workcenter_id'], 'col_group_by': ['date:month'], 'measures': ['total_hours', 'total_cycles']}</field>
</record>
<record id="filter_mrp_workorder_current_production" model="ir.filters">
<field name="name">Current Production</field>
<field name="model_id">mrp.workorder</field>
<field name="domain">[('state','=','startworking')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['workcenter_id'], 'col_group_by': ['product_id'], 'measures': ['product_qty', 'total_hours']}</field>
</record>
<record id="view_report_mrp_workorder_filter" model="ir.ui.view"> <record id="view_report_mrp_workorder_filter" model="ir.ui.view">
<field name="name">mrp.workorder.select</field> <field name="name">mrp.workorder.select</field>
<field name="model">mrp.workorder</field> <field name="model">mrp.workorder</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Search"> <search string="Search">
<field name="date"/> <field name="date"/>
<filter string="Current" icon="terp-check" domain="[('state','not in',('draft','cancel','done'))]"/> <filter string="Current" domain="[('state','not in',('draft','cancel','done'))]"/>
<filter icon="terp-check" string="Started" domain="[('state','=','startworking')]"/> <filter string="Started" name="started" domain="[('state','=','startworking')]"/>
<filter icon="terp-camera_test" string="Done" domain="[('state','=','done')]"/> <filter string="Done" name="done" domain="[('state','=','done')]"/>
<field name="product_id" /> <field name="product_id" />
<field name="workcenter_id"/> <field name="workcenter_id"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Product" name="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}" /> <filter string="Work Center" name="Workcenter" context="{'group_by':'workcenter_id'}" />
<filter string="Work Center" name="Workcenter" icon="terp-go-home" context="{'group_by':'workcenter_id'}" /> <filter string="Production" context="{'group_by':'production_id'}"/>
<filter string="Production" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'production_id'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Product" name="Product" context="{'group_by':'product_id'}" />
<filter string="Date Planned" name="terp-go-month" icon="terp-go-month" context="{'group_by':'date:month'}" help="Planned Month"/> <separator/>
<filter string="Month Planned" name="terp-go-month" context="{'group_by':'date:month'}" help="Planned Month"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -26,6 +26,7 @@ class pos_order_report(osv.osv):
_name = "report.pos.order" _name = "report.pos.order"
_description = "Point of Sale Orders Statistics" _description = "Point of Sale Orders Statistics"
_auto = False _auto = False
_columns = { _columns = {
'date': fields.datetime('Date Order', readonly=True), 'date': fields.datetime('Date Order', readonly=True),
'partner_id':fields.many2one('res.partner', 'Partner', readonly=True), 'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
@ -38,10 +39,11 @@ class pos_order_report(osv.osv):
'average_price': fields.float('Average Price', readonly=True,group_operator="avg"), 'average_price': fields.float('Average Price', readonly=True,group_operator="avg"),
'location_id':fields.many2one('stock.location', 'Location', readonly=True), 'location_id':fields.many2one('stock.location', 'Location', readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True), 'company_id':fields.many2one('res.company', 'Company', readonly=True),
'nbr':fields.integer('# of Lines', readonly=True), 'nbr':fields.integer('# of Lines', readonly=True), # TDE FIXME master: rename into nbr_lines
'product_qty':fields.integer('# of Qty', readonly=True), 'product_qty':fields.integer('Product Quantity', readonly=True),
'journal_id': fields.many2one('account.journal', 'Journal'), 'journal_id': fields.many2one('account.journal', 'Journal'),
'delay_validation': fields.integer('Delay Validation'), 'delay_validation': fields.integer('Delay Validation'),
'product_categ_id': fields.many2one('product.category', 'Product Category', readonly=True),
} }
_order = 'date desc' _order = 'date desc'
@ -64,14 +66,15 @@ class pos_order_report(osv.osv):
s.location_id as location_id, s.location_id as location_id,
s.company_id as company_id, s.company_id as company_id,
s.sale_journal as journal_id, s.sale_journal as journal_id,
l.product_id as product_id l.product_id as product_id,
pt.categ_id as product_categ_id
from pos_order_line as l from pos_order_line as l
left join pos_order s on (s.id=l.order_id) left join pos_order s on (s.id=l.order_id)
left join product_product p on (p.id=l.product_id) left join product_product p on (p.id=l.product_id)
left join product_template pt on (pt.id=p.product_tmpl_id) left join product_template pt on (pt.id=p.product_tmpl_id)
left join product_uom u on (u.id=pt.uom_id) left join product_uom u on (u.id=pt.uom_id)
group by group by
s.date_order, s.partner_id,s.state, s.date_order, s.partner_id,s.state, pt.categ_id,
s.user_id,s.location_id,s.company_id,s.sale_journal,l.product_id,s.create_date s.user_id,s.location_id,s.company_id,s.sale_journal,l.product_id,s.create_date
having having
sum(l.qty * u.factor) != 0)""") sum(l.qty * u.factor) != 0)""")

View File

@ -6,11 +6,9 @@
<field name="model">report.pos.order</field> <field name="model">report.pos.order</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Point of Sale Analysis" type="pivot"> <graph string="Point of Sale Analysis" type="pivot">
<field name="date" interval="day" type="row"/> <field name="product_categ_id" type="row"/>
<field name="nbr" type="measure"/> <field name="date" interval="month" type="col"/>
<field name="product_qty" type="measure"/> <field name="product_qty" type="measure"/>
<field name="average_price" type="measure"/>
<field name="total_discount" type="measure"/>
<field name="price_total" type="measure"/> <field name="price_total" type="measure"/>
</graph> </graph>
</field> </field>
@ -22,22 +20,22 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Point of Sale Analysis"> <search string="Point of Sale Analysis">
<field name="date"/> <field name="date"/>
<filter icon="terp-dolar" string="Invoiced" domain="[('state','=',('invoiced'))]"/> <filter string="Invoiced" domain="[('state','=',('invoiced'))]"/>
<filter icon="terp-dolar" string="Not Invoiced" domain="[('state','=',('paid'))]"/> <filter string="Not Invoiced" domain="[('state','=',('paid'))]"/>
<separator/> <separator/>
<filter icon="terp-go-year" string="Year" name="year" domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')),('date','&gt;=',time.strftime('%%Y-01-01'))]" help="POS ordered created during current year"/> <filter string="Year" name="year" domain="[('date','&lt;=', time.strftime('%%Y-%%m-%%d')),('date','&gt;=',time.strftime('%%Y-01-01'))]" help="POS ordered created during current year"/>
<separator/> <separator/>
<filter icon="terp-personal" string="My Sales" help="My Sales" domain="[('user_id','=',uid)]"/> <filter string="My Sales" help="My Sales" domain="[('user_id','=',uid)]"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="user_id"/> <field name="user_id"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="user_id"/> <field name="user_id"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" icon="terp-personal" name="User" context="{'group_by':'user_id'}"/> <filter string="Salesperson" name="User" context="{'group_by':'user_id'}"/>
<filter string="Customer" icon="terp-personal" context="{'group_by':'partner_id'}"/> <filter string="Product Category" context="{'group_by':'product_categ_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> <filter string="Product" context="{'group_by':'product_id'}"/>
<filter string="Stock Location" context="{'group_by': 'location_id'}"/> <separator/>
<filter string="Order Date" icon="terp-go-month" context="{'group_by':'date:month'}" help="Month of order date"/> <filter string="Order Month" context="{'group_by':'date:month'}" help="Month of order date"/>
</group> </group>
</search> </search>
</field> </field>
@ -49,7 +47,7 @@
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="search_view_id" ref="view_report_pos_order_search"/> <field name="search_view_id" ref="view_report_pos_order_search"/>
<field name="context">{'search_default_year':1, 'group_by_no_leaf':1,'group_by':['product_id']}</field> <field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
</record> </record>
<menuitem action="action_report_pos_order_all" id="menu_report_pos_order_all" parent="menu_point_rep" sequence="3"/> <menuitem action="action_report_pos_order_all" id="menu_report_pos_order_all" parent="menu_point_rep" sequence="3"/>

View File

@ -699,10 +699,10 @@ class task(osv.osv):
if default is None: if default is None:
default = {} default = {}
if not default.get('name'): if not default.get('name'):
current = self.browse(cr, uid, id, context=context) current = self.browse(cr, uid, id, context=context)
default['name'] = _("%s (copy)") % current.name default['name'] = _("%s (copy)") % current.name
return super(task, self).copy_data(cr, uid, id, default, context) return super(task, self).copy_data(cr, uid, id, default, context)
def _is_template(self, cr, uid, ids, field_name, arg, context=None): def _is_template(self, cr, uid, ids, field_name, arg, context=None):
res = {} res = {}
for task in self.browse(cr, uid, ids, context=context): for task in self.browse(cr, uid, ids, context=context):
@ -1313,6 +1313,7 @@ class project_task_history_cumulative(osv.osv):
_columns = { _columns = {
'end_date': fields.date('End Date'), 'end_date': fields.date('End Date'),
'nbr_tasks': fields.integer('# of Tasks', readonly=True),
'project_id': fields.many2one('project.project', 'Project'), 'project_id': fields.many2one('project.project', 'Project'),
} }
@ -1329,11 +1330,16 @@ class project_task_history_cumulative(osv.osv):
h.id AS history_id, h.id AS history_id,
h.date+generate_series(0, CAST((coalesce(h.end_date, DATE 'tomorrow')::date - h.date) AS integer)-1) AS date, h.date+generate_series(0, CAST((coalesce(h.end_date, DATE 'tomorrow')::date - h.date) AS integer)-1) AS date,
h.task_id, h.type_id, h.user_id, h.kanban_state, h.task_id, h.type_id, h.user_id, h.kanban_state,
count(h.task_id) as nbr_tasks,
greatest(h.remaining_hours, 1) AS remaining_hours, greatest(h.planned_hours, 1) AS planned_hours, greatest(h.remaining_hours, 1) AS remaining_hours, greatest(h.planned_hours, 1) AS planned_hours,
t.project_id t.project_id
FROM FROM
project_task_history AS h project_task_history AS h
JOIN project_task AS t ON (h.task_id = t.id) JOIN project_task AS t ON (h.task_id = t.id)
GROUP BY
h.id,
h.task_id,
t.project_id
) AS history ) AS history
) )

View File

@ -30,7 +30,7 @@
<field name="project_id"/> <field name="project_id"/>
<field name="reviewer_id"/> <field name="reviewer_id"/>
<field name="user_id"/> <field name="user_id"/>
<field name="stage_id" domain="[]"/> <field name="stage_id"/>
<filter string="My Tasks" domain="[('user_id','=',uid)]"/> <filter string="My Tasks" domain="[('user_id','=',uid)]"/>
<filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/> <filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/>
<separator/> <separator/>
@ -38,12 +38,14 @@
<separator/> <separator/>
<filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/> <filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter string="Reviewers" name="group_reviewer_id" domain="[]" context="{'group_by':'reviewer_id'}"/> <filter string="Project" name="project" context="{'group_by':'project_id'}"/>
<filter string="Users" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Task" context="{'group_by':'name'}"/>
<filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <filter string="Assigned to" name="User" context="{'group_by':'user_id'}"/>
<filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Stage" name="Stage" context="{'group_by':'stage_id'}"/>
<filter string="Last Stage Update" icon="terp-go-month" domain="[]" context="{'group_by':'date_last_stage_update'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Last Message" name="group_message_last_post" domain="[]" context="{'group_by':'message_last_post:week'}"/> <separator/>
<filter string="Last Message" name="group_message_last_post" context="{'group_by':'message_last_post:week'}"/>
<filter string="Assignation Month" context="{'group_by':'date_start:month'}" help="Creation Date"/>
</group> </group>
</search> </search>
</field> </field>
@ -54,7 +56,7 @@
<field name="res_model">project.task</field> <field name="res_model">project.task</field>
<field name="view_mode">kanban,tree,form,calendar,gantt,graph</field> <field name="view_mode">kanban,tree,form,calendar,gantt,graph</field>
<field name="context">{ <field name="context">{
'search_default_project_id': [active_id], 'search_default_project_id': [active_id],
'default_project_id': active_id, 'default_project_id': active_id,
'active_test': False, 'active_test': False,
}</field> }</field>
@ -98,7 +100,7 @@
</div> </div>
</div> </div>
<div class="oe_right oe_button_box" name="buttons" groups="base.group_user"> <div class="oe_right oe_button_box" name="buttons" groups="base.group_user">
<button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}" <button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"
name="%(act_project_project_2_project_task_all)d" icon="fa-tasks"> name="%(act_project_project_2_project_task_all)d" icon="fa-tasks">
<field string="Tasks" name="task_count" widget="statinfo"/> <field string="Tasks" name="task_count" widget="statinfo"/>
</button> </button>
@ -108,8 +110,8 @@
</div> </div>
<group> <group>
<group col="4"> <group col="4">
<field name="user_id" string="Project Manager" <field name="user_id" string="Project Manager"
attrs="{'readonly':[('state','in',['close', 'cancelled'])]}" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"
context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_manager']}"/> context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_manager']}"/>
<newline/> <newline/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/> <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
@ -204,9 +206,9 @@
<field name="user_id" string="Project Manager"/> <field name="user_id" string="Project Manager"/>
<field name="partner_id" string="Contact" filter_domain="[('partner_id', 'child_of', self)]"/> <field name="partner_id" string="Contact" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Group By"> <group expand="0" string="Group By">
<filter string="Manager" name="Manager" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Manager" name="Manager" context="{'group_by':'user_id'}"/>
<filter string="Contact" name="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter string="Contact" name="Partner" context="{'group_by':'partner_id'}"/>
<filter string="Parent" name="Parent" help="Parent" icon="terp-folder-blue" domain = "[]" context="{'group_by':'parent_id'}"/> <filter string="Parent" name="Parent" help="Parent" context="{'group_by':'parent_id'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -383,7 +385,7 @@
options="{'fold_field': 'fold'}"/> options="{'fold_field': 'fold'}"/>
</header> </header>
<sheet string="Task"> <sheet string="Task">
<div class="oe_right"> <div class="oe_right">
<field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/> <field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/>
</div> </div>
<h1> <h1>
@ -558,7 +560,7 @@
<field name="message_unread" invisible="1"/> <field name="message_unread" invisible="1"/>
<field name="sequence" invisible="not context.get('seq_visible', False)"/> <field name="sequence" invisible="not context.get('seq_visible', False)"/>
<field name="name"/> <field name="name"/>
<field name="project_id" icon="gtk-indent" invisible="context.get('user_invisible', False)"/> <field name="project_id" invisible="context.get('user_invisible', False)"/>
<field name="user_id" invisible="context.get('user_invisible', False)"/> <field name="user_id" invisible="context.get('user_invisible', False)"/>
<field name="delegated_user_id" invisible="context.get('show_delegated', True)"/> <field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
<field name="total_hours" invisible="1"/> <field name="total_hours" invisible="1"/>
@ -602,7 +604,6 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Project Tasks" type="bar"> <graph string="Project Tasks" type="bar">
<field name="project_id" type="row"/> <field name="project_id" type="row"/>
<field name="planned_hours" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
@ -680,7 +681,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Tasks Stages"> <search string="Tasks Stages">
<field name="name" string="Tasks Stages"/> <field name="name" string="Tasks Stages"/>
<filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/> <filter string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
</search> </search>
</field> </field>
</record> </record>

View File

@ -7,8 +7,10 @@
<field name="model">project.task.history.cumulative</field> <field name="model">project.task.history.cumulative</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Project Tasks" type="bar" stacked="True"> <graph string="Project Tasks" type="bar" stacked="True">
<field name="date" type="row"/>
<field name="type_id" type="row"/> <field name="type_id" type="row"/>
<field name="kanban_state" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="nbr_tasks" type="measure"/>
<field name="planned_hours" type="measure"/> <field name="planned_hours" type="measure"/>
<field name="remaining_hours" type="measure"/> <field name="remaining_hours" type="measure"/>
</graph> </graph>
@ -32,6 +34,15 @@
<filter string="Unassigned Tasks" domain="[('user_id','=',False)]"/> <filter string="Unassigned Tasks" domain="[('user_id','=',False)]"/>
<separator/> <separator/>
<filter string="My Projects" domain="[('project_id.user_id','=',uid)]"/> <filter string="My Projects" domain="[('project_id.user_id','=',uid)]"/>
<group expand="1" string="Group By">
<filter string="Project" name="project" context="{'group_by':'project_id'}"/>
<filter string="Task" context="{'group_by':'task_id'}"/>
<filter string="Assigned to" name="User" context="{'group_by':'user_id'}"/>
<filter string="Stage" context="{'group_by':'type_id'}"/>
<filter string="Status" context="{'group_by':'kanban_state'}"/>
<separator/>
<filter string="Month" context="{'group_by':'date:month'}" help="Creation Date"/>
</group>
</search> </search>
</field> </field>
</record> </record>

View File

@ -31,11 +31,11 @@ class report_project_task_user(osv.osv):
'name': fields.char('Task Summary', readonly=True), 'name': fields.char('Task Summary', readonly=True),
'user_id': fields.many2one('res.users', 'Assigned To', readonly=True), 'user_id': fields.many2one('res.users', 'Assigned To', readonly=True),
'reviewer_id': fields.many2one('res.users', 'Reviewer', readonly=True), 'reviewer_id': fields.many2one('res.users', 'Reviewer', readonly=True),
'date_start': fields.date('Assignation Date', readonly=True), 'date_start': fields.datetime('Assignation Date', readonly=True),
'no_of_days': fields.integer('# of Days', size=128, readonly=True), 'no_of_days': fields.integer('# of Days', size=128, readonly=True),
'date_end': fields.date('Ending Date', readonly=True), 'date_end': fields.datetime('Ending Date', readonly=True),
'date_deadline': fields.date('Deadline', readonly=True), 'date_deadline': fields.date('Deadline', readonly=True),
'date_last_stage_update': fields.date('Last Stage Update', readonly=True), 'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True),
'project_id': fields.many2one('project.project', 'Project', readonly=True), 'project_id': fields.many2one('project.project', 'Project', readonly=True),
'hours_planned': fields.float('Planned Hours', readonly=True), 'hours_planned': fields.float('Planned Hours', readonly=True),
'hours_effective': fields.float('Effective Hours', readonly=True), 'hours_effective': fields.float('Effective Hours', readonly=True),
@ -48,9 +48,10 @@ class report_project_task_user(osv.osv):
'opening_days': fields.float('Days to Assign', digits=(16,2), readonly=True, group_operator="avg", 'opening_days': fields.float('Days to Assign', digits=(16,2), readonly=True, group_operator="avg",
help="Number of Days to Open the task"), help="Number of Days to Open the task"),
'delay_endings_days': fields.float('Overpassed Deadline', digits=(16,2), readonly=True), 'delay_endings_days': fields.float('Overpassed Deadline', digits=(16,2), readonly=True),
'nbr': fields.integer('# of tasks', readonly=True), 'nbr': fields.integer('# of Tasks', readonly=True), # TDE FIXME master: rename into nbr_tasks
'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')],
string='Priority', size=1, readonly=True), string='Priority', size=1, readonly=True),
'state': fields.selection([('normal', 'In Progress'),('blocked', 'Blocked'),('done', 'Ready for next stage')],'Status', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'partner_id': fields.many2one('res.partner', 'Contact', readonly=True), 'partner_id': fields.many2one('res.partner', 'Contact', readonly=True),
'stage_id': fields.many2one('project.task.type', 'Stage'), 'stage_id': fields.many2one('project.task.type', 'Stage'),
@ -64,9 +65,9 @@ class report_project_task_user(osv.osv):
SELECT SELECT
(select 1 ) AS nbr, (select 1 ) AS nbr,
t.id as id, t.id as id,
date(t.date_start) as date_start, t.date_start as date_start,
date(t.date_end) as date_end, t.date_end as date_end,
date(t.date_last_stage_update) as date_last_stage_update, t.date_last_stage_update as date_last_stage_update,
t.date_deadline as date_deadline, t.date_deadline as date_deadline,
abs((extract('epoch' from (t.write_date-t.date_start)))/(3600*24)) as no_of_days, abs((extract('epoch' from (t.write_date-t.date_start)))/(3600*24)) as no_of_days,
t.user_id, t.user_id,
@ -79,6 +80,7 @@ class report_project_task_user(osv.osv):
t.company_id, t.company_id,
t.partner_id, t.partner_id,
t.stage_id as stage_id, t.stage_id as stage_id,
t.kanban_state as state,
remaining_hours as remaining_hours, remaining_hours as remaining_hours,
total_hours as total_hours, total_hours as total_hours,
t.delay_hours as hours_delay, t.delay_hours as hours_delay,

View File

@ -13,26 +13,32 @@
<graph string="Tasks Analysis" type="pivot"> <graph string="Tasks Analysis" type="pivot">
<field name="project_id" type="row"/> <field name="project_id" type="row"/>
<field name="nbr" type="measure"/> <field name="nbr" type="measure"/>
<field name="no_of_days" type="measure"/>
<field name="total_hours" type="measure"/>
<field name="hours_planned" type="measure"/>
<field name="remaining_hours" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
<!-- Custom reports (aka filters) --> <!-- Custom reports (aka filters) -->
<record id="filter_task_report_task_pipe" model="ir.filters">
<field name="name">Task Pipe</field>
<field name="model_id">report.project.task.user</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id'], 'col_group_by': ['stage_id'], 'measures': ['nbr']}</field>
</record>
<record id="filter_task_report_workload" model="ir.filters">
<field name="name">Workload</field>
<field name="model_id">report.project.task.user</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id'], 'measures': ['total_hours','hours_planned','remaining_hours']}</field>
</record>
<record id="filter_task_report_responsible" model="ir.filters"> <record id="filter_task_report_responsible" model="ir.filters">
<field name="name">By Responsible</field> <field name="name">By Responsible</field>
<field name="model_id">report.project.task.user</field> <field name="model_id">report.project.task.user</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id', 'user_id']}</field> <field name="context">{'group_by': ['project_id', 'user_id']}</field>
</record> </record>
<record id="filter_task_report_reviewer" model="ir.filters"> <record id="filter_task_report_reviewer" model="ir.filters">
<field name="name">By Reviewer</field> <field name="name">By Reviewer</field>
<field name="model_id">report.project.task.user</field> <field name="model_id">report.project.task.user</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id', 'reviewer_id']}</field> <field name="context">{'group_by': ['project_id', 'reviewer_id']}</field>
</record> </record>
@ -50,7 +56,7 @@
<field name="user_id"/> <field name="user_id"/>
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="stage_id"/> <field name="stage_id"/>
<filter string="My Task" domain="[('user_id','=',uid)]" /> <filter string="My Task" domain="[('user_id','=',uid)]"/>
<filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/> <filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/>
<separator/> <separator/>
<filter string="New" name="new" domain="[('stage_id.sequence', '&lt;=', 1)]"/> <filter string="New" name="new" domain="[('stage_id.sequence', '&lt;=', 1)]"/>
@ -60,12 +66,12 @@
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Project" name="project" context="{'group_by':'project_id'}"/> <filter string="Project" name="project" context="{'group_by':'project_id'}"/>
<filter string="Task" context="{'group_by':'name'}" /> <filter string="Task" context="{'group_by':'name'}"/>
<filter string="Contact" context="{'group_by':'partner_id'}" /> <filter string="Assigned to" name="User" context="{'group_by':'user_id'}"/>
<filter string="Assigned to" name="User" context="{'group_by':'user_id'}" /> <filter string="Stage" name="Stage" context="{'group_by':'stage_id'}"/>
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Assignation date" context="{'group_by':'date_start:month'}" help="Creation Date"/> <separator/>
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" help="Last Stage Update"/> <filter string="Assignation Month" context="{'group_by':'date_start:month'}" help="Creation Date"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -9,7 +9,7 @@
<field name="name">Issues</field> <field name="name">Issues</field>
<field name="res_model">project.issue</field> <field name="res_model">project.issue</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">kanban,tree,calendar</field> <field name="view_mode">kanban,tree,calendar,form,graph</field>
<field name="view_id" eval="False"/> <field name="view_id" eval="False"/>
<field name="domain" eval=""/> <field name="domain" eval=""/>
<field name="search_view_id" ref="view_project_issue_filter"/> <field name="search_view_id" ref="view_project_issue_filter"/>
@ -50,6 +50,13 @@
<field name="act_window_id" ref="project_issue_categ_act0"/> <field name="act_window_id" ref="project_issue_categ_act0"/>
</record> </record>
<record model="ir.actions.act_window.view" id="action_crm_tag_graph_view0">
<field name="sequence" eval="4"/>
<field name="view_mode">graph</field>
<field name="view_id" ref="project_issue_graph_view"/>
<field name="act_window_id" ref="project_issue_categ_act0"/>
</record>
<menuitem name="Issues" id="menu_project_issue_track" parent="project.menu_project_management" <menuitem name="Issues" id="menu_project_issue_track" parent="project.menu_project_management"
action="project_issue_categ_act0" sequence="15"/> action="project_issue_categ_act0" sequence="15"/>
</data> </data>

View File

@ -52,7 +52,7 @@
options="{'fold_field': 'fold'}"/> options="{'fold_field': 'fold'}"/>
</header> </header>
<sheet string="Issue"> <sheet string="Issue">
<div class="oe_right"> <div class="oe_right">
<field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/> <field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/>
</div> </div>
<label for="name" class="oe_edit_only"/> <label for="name" class="oe_edit_only"/>
@ -63,7 +63,7 @@
<field name="categ_ids" widget="many2many_tags"/> <field name="categ_ids" widget="many2many_tags"/>
<group> <group>
<group> <group>
<field name="user_id" <field name="user_id"
context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/> context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/> <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="email_from"/> <field name="email_from"/>
@ -155,12 +155,15 @@
<separator/> <separator/>
<filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/> <filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<group expand="0" string="Group By" > <group expand="0" string="Group By" >
<filter string="Responsible" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Assigned to" name="Responsible" context="{'group_by':'user_id'}" />
<filter string="Contact" name="group_partner_id" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/> <filter string="Project" name="project" context="{'group_by':'project_id'}" />
<filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <filter string="Task" context="{'group_by':'task_id'}"/>
<filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Priority" context="{'group_by':'priority'}" />
<filter string="Creation Month" name="group_create_date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/> <filter string="Stage" context="{'group_by':'stage_id'}"/>
<filter string="Last Message" name="group_message_last_post" domain="[]" context="{'group_by':'message_last_post:week'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator/>
<filter string="Create Day" context="{'group_by':'create_date:day'}" help="Create Date"/>
<filter string="Last Message" name="group_message_last_post" context="{'group_by':'message_last_post:week'}"/>
</group> </group>
</search> </search>
</field> </field>
@ -237,6 +240,17 @@
</field> </field>
</record> </record>
<record model="ir.ui.view" id="project_issue_graph_view">
<field name="name">Project Issue Tracker Graph</field>
<field name="model">project.issue</field>
<field name="arch" type="xml">
<graph string="Project Issues" type="bar">
<field name="project_id" type="row"/>
<field name="create_date" interval="month" type="col"/>
</graph>
</field>
</record>
<!-- Feature Requests --> <!-- Feature Requests -->
<record model="ir.ui.view" id="project_feature_tree_view"> <record model="ir.ui.view" id="project_feature_tree_view">
@ -262,7 +276,7 @@
<field name="name">Issues</field> <field name="name">Issues</field>
<field name="view_mode">kanban,tree,form,calendar,graph</field> <field name="view_mode">kanban,tree,form,calendar,graph</field>
<field name="context">{ <field name="context">{
'search_default_project_id': [active_id], 'search_default_project_id': [active_id],
'default_project_id': active_id, 'default_project_id': active_id,
} }
</field> </field>
@ -287,7 +301,7 @@
<label for="use_issues"/> <label for="use_issues"/>
</xpath> </xpath>
<xpath expr='//div[@name="buttons"]' position='inside'> <xpath expr='//div[@name="buttons"]' position='inside'>
<button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_issues','=', 0)]}" <button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"
name="%(act_project_project_2_project_issue_all)d" icon="fa-bug"> name="%(act_project_project_2_project_issue_all)d" icon="fa-bug">
<field string="Issues" name="issue_count" widget="statinfo"/> <field string="Issues" name="issue_count" widget="statinfo"/>
</button> </button>
@ -357,14 +371,14 @@
<field name="priority" eval="50"/> <field name="priority" eval="50"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//div[@name='buttons']" position="inside"> <xpath expr="//div[@name='buttons']" position="inside">
<button class="oe_inline oe_stat_button" type="action" name="%(action_view_issues)d" <button class="oe_inline oe_stat_button" type="action" name="%(action_view_issues)d"
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
attrs="{'invisible': [('customer', '=', False)]}" attrs="{'invisible': [('customer', '=', False)]}"
icon="fa-bug" groups="project.group_project_user"> icon="fa-bug" groups="project.group_project_user">
<field string="Issues" name="issue_count" widget="statinfo"/> <field string="Issues" name="issue_count" widget="statinfo"/>
</button> </button>
</xpath> </xpath>
</field> </field>
</record> </record>

View File

@ -31,12 +31,12 @@ class project_issue_report(osv.osv):
_columns = { _columns = {
'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True), 'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True),
'opening_date': fields.date('Date of Opening', readonly=True), 'opening_date': fields.datetime('Date of Opening', readonly=True),
'create_date': fields.date('Create Date', readonly=True), 'create_date': fields.datetime('Create Date', readonly=True),
'date_closed': fields.date('Date of Closing', readonly=True), 'date_closed': fields.datetime('Date of Closing', readonly=True),
'date_last_stage_update': fields.date('Last Stage Update', readonly=True), 'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True),
'stage_id': fields.many2one('project.task.type', 'Stage'), 'stage_id': fields.many2one('project.task.type', 'Stage'),
'nbr': fields.integer('# of Issues', readonly=True), 'nbr': fields.integer('# of Issues', readonly=True), # TDE FIXME master: rename into nbr_issues
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True, group_operator="avg"), 'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True, group_operator="avg"),
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True, group_operator="avg"), 'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True, group_operator="avg"),
'delay_open': fields.float('Avg. Delay to Open', digits=(16,2), readonly=True, group_operator="avg", 'delay_open': fields.float('Avg. Delay to Open', digits=(16,2), readonly=True, group_operator="avg",
@ -52,6 +52,7 @@ class project_issue_report(osv.osv):
'channel': fields.char('Channel', readonly=True, help="Communication Channel."), 'channel': fields.char('Channel', readonly=True, help="Communication Channel."),
'task_id': fields.many2one('project.task', 'Task'), 'task_id': fields.many2one('project.task', 'Task'),
'email': fields.integer('# Emails', size=128, readonly=True), 'email': fields.integer('# Emails', size=128, readonly=True),
'reviewer_id': fields.many2one('res.users', 'Reviewer', readonly=True),
} }
def init(self, cr): def init(self, cr):
@ -60,9 +61,9 @@ class project_issue_report(osv.osv):
CREATE OR REPLACE VIEW project_issue_report AS ( CREATE OR REPLACE VIEW project_issue_report AS (
SELECT SELECT
c.id as id, c.id as id,
date(c.date_open) as opening_date, c.date_open as opening_date,
date(c.create_date) as create_date, c.create_date as create_date,
date(c.date_last_stage_update) as date_last_stage_update, c.date_last_stage_update as date_last_stage_update,
c.user_id, c.user_id,
c.working_hours_open, c.working_hours_open,
c.working_hours_close, c.working_hours_close,
@ -79,10 +80,12 @@ class project_issue_report(osv.osv):
c.task_id, c.task_id,
c.day_open as delay_open, c.day_open as delay_open,
c.day_close as delay_close, c.day_close as delay_close,
(SELECT count(id) FROM mail_message WHERE model='project.issue' AND res_id=c.id) AS email (SELECT count(id) FROM mail_message WHERE model='project.issue' AND res_id=c.id) AS email,
t.reviewer_id
FROM FROM
project_issue c project_issue c
LEFT JOIN project_task t on c.task_id = t.id
WHERE c.active= 'true' WHERE c.active= 'true'
)""") )""")

View File

@ -6,18 +6,23 @@
<field name="model">project.issue.report</field> <field name="model">project.issue.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph orientation="horizontal" string="Project Issue" type="pivot" stacked="True"> <graph orientation="horizontal" string="Project Issue" type="pivot" stacked="True">
<field name="project_id" type="row"/>
<field name="create_date" interval="month" type="col"/>
<field name="nbr" type="measure"/> <field name="nbr" type="measure"/>
<field name="user_id" type="row"/>
<field name="stage_id" type="row"/>
</graph> </graph>
</field> </field>
</record> </record>
<!-- Custom reports (aka filters) --> <!-- Custom reports (aka filters) -->
<record id="filter_issue_report_delay" model="ir.filters">
<field name="name">Delay</field>
<field name="model_id">project.issue.report</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id'], 'measures': ['delay_close', 'delay_open']}</field>
</record>
<record id="filter_issue_report_responsible" model="ir.filters"> <record id="filter_issue_report_responsible" model="ir.filters">
<field name="name">By Responsible</field> <field name="name">By Responsible</field>
<field name="model_id">project.issue.report</field> <field name="model_id">project.issue.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id', 'user_id']}</field> <field name="context">{'group_by': ['project_id', 'user_id']}</field>
</record> </record>
@ -32,22 +37,19 @@
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="version_id"/> <field name="version_id"/>
<field name="stage_id"/> <field name="stage_id"/>
<filter string="My Task" domain="[('user_id','=',uid)]" /> <filter string="My Issues" domain="[('user_id','=',uid)]" />
<filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/> <filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/>
<separator/> <separator/>
<filter string="New" name="new" domain="[('stage_id.sequence', '&lt;=', 1)]"/> <filter string="New" name="new" domain="[('stage_id.sequence', '&lt;=', 1)]"/>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Assigned to" name="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" /> <filter string="Assigned to" name="Responsible" context="{'group_by':'user_id'}" />
<filter string="Contact" icon="terp-partner" context="{'group_by':'partner_id'}" /> <filter string="Project" name="project" context="{'group_by':'project_id'}" />
<filter string="Sale Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Task" context="{'group_by':'task_id'}"/>
<filter string="Project" name="project" icon="terp-folder-violet" context="{'group_by':'project_id'}" /> <filter string="Priority" context="{'group_by':'priority'}" />
<filter string="Task" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'task_id'}"/> <filter string="Stage" context="{'group_by':'stage_id'}"/>
<filter string="Version" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'version_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" /> <separator/>
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Create Day" context="{'group_by':'create_date:day'}" help="Create Date"/>
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Create Date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" help="Create Date"/>
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}"/>
</group> </group>
</search> </search>
</field> </field>

View File

@ -31,7 +31,7 @@ class purchase_report(osv.osv):
_description = "Purchases Orders" _description = "Purchases Orders"
_auto = False _auto = False
_columns = { _columns = {
'date': fields.date('Order Date', readonly=True, help="Date on which this document has been created"), 'date': fields.datetime('Order Date', readonly=True, help="Date on which this document has been created"), # TDE FIXME master: rename into date_order
'state': fields.selection([('draft', 'Request for Quotation'), 'state': fields.selection([('draft', 'Request for Quotation'),
('confirmed', 'Waiting Supplier Ack'), ('confirmed', 'Waiting Supplier Ack'),
('approved', 'Approved'), ('approved', 'Approved'),
@ -52,12 +52,12 @@ class purchase_report(osv.osv):
'user_id':fields.many2one('res.users', 'Responsible', readonly=True), 'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
'delay':fields.float('Days to Validate', digits=(16,2), readonly=True), 'delay':fields.float('Days to Validate', digits=(16,2), readonly=True),
'delay_pass':fields.float('Days to Deliver', digits=(16,2), readonly=True), 'delay_pass':fields.float('Days to Deliver', digits=(16,2), readonly=True),
'quantity': fields.float('Quantity', readonly=True), 'quantity': fields.integer('Unit Quantity', readonly=True), # TDE FIXME master: rename into unit_quantity
'price_total': fields.float('Total Price', readonly=True), 'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average Price', readonly=True, group_operator="avg"), 'price_average': fields.float('Average Price', readonly=True, group_operator="avg"),
'negociation': fields.float('Purchase-Standard Price', readonly=True, group_operator="avg"), 'negociation': fields.float('Purchase-Standard Price', readonly=True, group_operator="avg"),
'price_standard': fields.float('Products Value', readonly=True, group_operator="sum"), 'price_standard': fields.float('Products Value', readonly=True, group_operator="sum"),
'nbr': fields.integer('# of Lines', readonly=True), 'nbr': fields.integer('# of Lines', readonly=True), # TDE FIXME master: rename into nbr_lines
'category_id': fields.many2one('product.category', 'Category', readonly=True) 'category_id': fields.many2one('product.category', 'Category', readonly=True)
} }
@ -68,7 +68,7 @@ class purchase_report(osv.osv):
create or replace view purchase_report as ( create or replace view purchase_report as (
select select
min(l.id) as id, min(l.id) as id,
date(s.date_order) as date, s.date_order as date,
s.state, s.state,
s.date_approve, s.date_approve,
s.minimum_planned_date as expected_date, s.minimum_planned_date as expected_date,

View File

@ -7,23 +7,45 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Purchase Orders Statistics" type="pivot"> <graph string="Purchase Orders Statistics" type="pivot">
<field name="partner_id" type="row"/> <field name="partner_id" type="row"/>
<field name="product_id" type="row"/> <field name="date" interval="month" type="col"/>
<field name="nbr" type="measure"/> <field name="price_total" type="measure"/>
<field name="quantity" type="measure"/> <field name="quantity" type="measure"/>
<field name="price_average" type="measure"/> <field name="price_average" type="measure"/>
<field name="price_standard" type="measure"/>
<field name="price_total" type="measure"/>
</graph> </graph>
</field> </field>
</record> </record>
<!-- Custom reports (aka filters) -->
<record id="filter_purchase_order_monthly_purchases" model="ir.filters">
<field name="name">Monthly Purchases</field>
<field name="model_id">purchase.report</field>
<field name="domain">[('state','&lt;&gt;','cancel')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['category_id'], 'col_group_by': ['date:month'], 'measures': ['quantity']}</field>
</record>
<record id="filter_purchase_order_price_per_supplier" model="ir.filters">
<field name="name">Price Per Supplier</field>
<field name="model_id">purchase.report</field>
<field name="domain">[('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['partner_id'], 'col_group_by': ['product_id'], 'measures': ['price_average']}</field>
</record>
<record id="filter_purchase_order_average_delivery_time" model="ir.filters">
<field name="name">Average Delivery Time</field>
<field name="model_id">purchase.report</field>
<field name="domain">[('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['partner_id'], 'measures': ['delay_pass']}</field>
</record>
<record id="view_purchase_order_search" model="ir.ui.view"> <record id="view_purchase_order_search" model="ir.ui.view">
<field name="name">report.purchase.order.search</field> <field name="name">report.purchase.order.search</field>
<field name="model">purchase.report</field> <field name="model">purchase.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Purchase Orders"> <search string="Purchase Orders">
<filter icon="terp-document-new" string="Quotations" name="quotes" domain="[('state','=','draft')]"/> <filter string="Quotations" name="quotes" domain="[('state','=','draft')]"/>
<filter icon="terp-gtk-jump-to-rtl" string="Orders" name="orders" domain="[('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]"/> <filter string="Orders" name="orders" domain="[('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="product_id"/> <field name="product_id"/>
<group expand="0" string="Extended Filters"> <group expand="0" string="Extended Filters">
@ -37,17 +59,13 @@
<field name="expected_date"/> <field name="expected_date"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Supplier" name="group_partner_id" icon="terp-personal" context="{'group_by':'partner_id'}"/> <filter string="Supplier" name="group_partner_id" context="{'group_by':'partner_id'}"/>
<filter string="Responsible" name="Responsible" icon="terp-personal" context="{'group_by':'user_id'}"/> <filter string="Responsible" name="Responsible" context="{'group_by':'user_id'}"/>
<filter string="Validated by" icon="terp-personal" context="{'group_by':'validator'}"/> <filter string="Category of product" name="group_category_id" context="{'group_by':'category_id'}"/>
<filter string="Product" name="group_product_id" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Category" name="group_category_id" icon="terp-stock_symbol-selection" context="{'group_by':'category_id'}"/> <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Warehouse" icon="terp-go-home" context="{'group_by':'picking_type_id'}"/> <separator/>
<filter string="Reference UOM" name="group_product_uom" icon="terp-mrp" context="{'group_by':'product_uom'}"/> <filter string="Order Month" context="{'group_by':'date:month'}" help="Order of Day"/>
<filter string="Destination" icon="terp-gtk-jump-to-ltr" context="{'group_by':'location_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Order Date" icon="terp-go-month" context="{'group_by':'date:month'}" help="Order of Day"/>
</group> </group>
</search> </search>
</field> </field>
@ -59,7 +77,7 @@
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="view_id" ref="view_purchase_order_graph"></field> <field name="view_id" ref="view_purchase_order_graph"></field>
<field name="context">{'search_default_year':1,'search_default_month':1, 'search_default_orders': 1, 'group_by_no_leaf':1,'group_by':[]}</field> <field name="context">{'search_default_orders': 1, 'group_by_no_leaf':1,'group_by':[]}</field>
<field name="help">Purchase Analysis allows you to easily check and analyse your company purchase history and performance. From this menu you can track your negotiation performance, the delivery performance of your suppliers, etc.</field> <field name="help">Purchase Analysis allows you to easily check and analyse your company purchase history and performance. From this menu you can track your negotiation performance, the delivery performance of your suppliers, etc.</field>
</record> </record>

View File

@ -29,7 +29,7 @@ class sale_report(osv.osv):
_rec_name = 'date' _rec_name = 'date'
_columns = { _columns = {
'date': fields.datetime('Date Order', readonly=True), 'date': fields.datetime('Date Order', readonly=True), # TDE FIXME master: rename into date_order
'date_confirm': fields.date('Date Confirm', readonly=True), 'date_confirm': fields.date('Date Confirm', readonly=True),
'product_id': fields.many2one('product.product', 'Product', readonly=True), 'product_id': fields.many2one('product.product', 'Product', readonly=True),
'product_uom': fields.many2one('product.uom', 'Unit of Measure', readonly=True), 'product_uom': fields.many2one('product.uom', 'Unit of Measure', readonly=True),
@ -41,7 +41,7 @@ class sale_report(osv.osv):
'price_total': fields.float('Total Price', readonly=True), 'price_total': fields.float('Total Price', readonly=True),
'delay': fields.float('Commitment Delay', digits=(16,2), readonly=True), 'delay': fields.float('Commitment Delay', digits=(16,2), readonly=True),
'categ_id': fields.many2one('product.category','Category of Product', readonly=True), 'categ_id': fields.many2one('product.category','Category of Product', readonly=True),
'nbr': fields.integer('# of Lines', readonly=True), 'nbr': fields.integer('# of Lines', readonly=True), # TDE FIXME master: rename into nbr_lines
'state': fields.selection([ 'state': fields.selection([
('draft', 'Quotation'), ('draft', 'Quotation'),
('waiting_date', 'Waiting Schedule'), ('waiting_date', 'Waiting Schedule'),
@ -82,7 +82,7 @@ class sale_report(osv.osv):
def _from(self): def _from(self):
from_str = """ from_str = """
sale_order_line l sale_order_line l
join sale_order s on (l.order_id=s.id) join sale_order s on (l.order_id=s.id)
left join product_product p on (l.product_id=p.id) left join product_product p on (l.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id) left join product_template t on (p.product_tmpl_id=t.id)
left join product_uom u on (u.id=l.product_uom) left join product_uom u on (u.id=l.product_uom)

View File

@ -7,7 +7,7 @@
<field name="model">sale.report</field> <field name="model">sale.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<graph string="Sales Analysis" type="pivot" stacked="True"> <graph string="Sales Analysis" type="pivot" stacked="True">
<field name="user_id" type="row"/> <field name="section_id" type="row"/>
<field name="date" interval="month" type="col"/> <field name="date" interval="month" type="col"/>
<field name="price_total" type="measure"/> <field name="price_total" type="measure"/>
</graph> </graph>
@ -15,24 +15,28 @@
</record> </record>
<!-- Custom reports (aka filters) --> <!-- Custom reports (aka filters) -->
<record id="filter_sale_report_sales_funnel" model="ir.filters">
<field name="name">Sales Funnel</field>
<field name="model_id">sale.report</field>
<field name="domain">['&amp;', ('date','&lt;=', time.strftime('%%Y-12-31')), '&amp;', ('date','&gt;=',time.strftime('%%Y-01-01')), '|', ('state','in',('draft','sent')), ('state','not in',('draft','sent','cancel'))]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['state'], 'measures': ['price_total']}</field>
</record>
<record id="filter_sale_report_salespersons" model="ir.filters"> <record id="filter_sale_report_salespersons" model="ir.filters">
<field name="name">By Salespersons</field> <field name="name">By Salespersons</field>
<field name="model_id">sale.report</field> <field name="model_id">sale.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date:month', 'user_id']}</field> <field name="context">{'group_by': ['date:month', 'user_id']}</field>
</record> </record>
<record id="filter_sale_report_salesteam" model="ir.filters"> <record id="filter_sale_report_salesteam" model="ir.filters">
<field name="name">By Salesteam</field> <field name="name">By Salesteam</field>
<field name="model_id">sale.report</field> <field name="model_id">sale.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date:month', 'section_id']}</field> <field name="context">{'group_by': ['date:month', 'section_id']}</field>
</record> </record>
<record id="filter_isale_report_product" model="ir.filters"> <record id="filter_isale_report_product" model="ir.filters">
<field name="name">By Product</field> <field name="name">By Product</field>
<field name="model_id">sale.report</field> <field name="model_id">sale.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/> <field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date:month', 'product_id']}</field> <field name="context">{'group_by': ['date:month', 'product_id']}</field>
</record> </record>
@ -44,8 +48,7 @@
<search string="Sales Analysis"> <search string="Sales Analysis">
<field name="date"/> <field name="date"/>
<field name="date_confirm"/> <field name="date_confirm"/>
<filter string="This Year" name="year" domain="[('date','&lt;=', time.strftime('%%Y-12-31')),('date','&gt;=',time.strftime('%%Y-01-01'))]"/> <filter string="This Year" name="year" invisible="1" domain="[('date','&lt;=', time.strftime('%%Y-12-31')),('date','&gt;=',time.strftime('%%Y-01-01'))]"/>
<separator/>
<filter name="Quotations" domain="[('state','in',('draft','sent'))]"/> <filter name="Quotations" domain="[('state','in',('draft','sent'))]"/>
<filter name="Sales" string="Sales" domain="[('state','not in',('draft','sent','cancel'))]"/> <filter name="Sales" string="Sales" domain="[('state','not in',('draft','sent','cancel'))]"/>
<separator/> <separator/>
@ -58,16 +61,14 @@
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
</group> </group>
<group expand="1" string="Group By"> <group expand="1" string="Group By">
<filter string="Salesperson" icon="terp-personal" name="User" context="{'group_by':'user_id'}"/> <filter string="Salesperson" name="User" context="{'group_by':'user_id'}"/>
<filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Partner" icon="terp-partner" name="Customer" context="{'group_by':'partner_id'}"/> <filter string="Customer" name="Customer" context="{'group_by':'partner_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True}"/> <filter string="Category of Product" name="Category" context="{'group_by':'categ_id'}"/>
<filter string="Reference Unit of Measure" icon="terp-mrp" context="{'group_by':'product_uom'}"/> <filter string="Status" context="{'group_by':'state'}"/>
<filter string="Category of Product" icon="terp-stock_symbol-selection" name="Category" context="{'group_by':'categ_id'}"/> <filter string="Company" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
<filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'analytic_account_id'}" groups="analytic.group_analytic_accounting"/> <separator/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> <filter string="Order Month" context="{'group_by':'date:month'}" help="Ordered date of the sales order"/>
<filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
<filter string="Order Date" icon="terp-go-today" context="{'group_by':'date'}" help="Ordered date of the sales order"/>
</group> </group>
</search> </search>
</field> </field>
@ -80,7 +81,7 @@
<field name="view_mode">graph</field> <field name="view_mode">graph</field>
<field name="search_view_id" ref="view_order_product_search"/> <field name="search_view_id" ref="view_order_product_search"/>
<field name="view_id" ref="view_order_product_graph"/> <field name="view_id" ref="view_order_product_graph"/>
<field name="context">{'search_default_Sales':1, 'search_default_year': 1, 'group_by_no_leaf':1,'group_by':[]}</field> <field name="context">{'search_default_Sales':1, 'group_by_no_leaf':1,'group_by':[]}</field>
<field name="help">This report performs analysis on your quotations and sales orders. Analysis check your sales revenues and sort it by different group criteria (salesman, partner, product, etc.) Use this report to perform analysis on sales not having invoiced yet. If you want to analyse your turnover, you should use the Invoice Analysis report in the Accounting application.</field> <field name="help">This report performs analysis on your quotations and sales orders. Analysis check your sales revenues and sort it by different group criteria (salesman, partner, product, etc.) Use this report to perform analysis on sales not having invoiced yet. If you want to analyse your turnover, you should use the Invoice Analysis report in the Accounting application.</field>
</record> </record>

View File

@ -167,7 +167,7 @@
<field name="th_weight" invisible="1"/> <field name="th_weight" invisible="1"/>
<field name="product_id" <field name="product_id"
context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}"
groups="base.group_user" groups="base.group_user"
on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, False, product_uos_qty, False, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/> on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, False, product_uos_qty, False, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/>
<field name="name"/> <field name="name"/>
<field name="product_uom_qty" <field name="product_uom_qty"
@ -500,7 +500,7 @@
<field name="inherit_id" ref="product.product_normal_form_view"/> <field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//div[@name='buttons']" position="inside"> <xpath expr="//div[@name='buttons']" position="inside">
<button class="oe_inline oe_stat_button" name="%(action_order_line_product_tree)d" <button class="oe_inline oe_stat_button" name="%(action_order_line_product_tree)d"
type="action" groups="base.group_sale_salesman" icon="fa-strikethrough"> type="action" groups="base.group_sale_salesman" icon="fa-strikethrough">
<field string="Sales" name="sales_count" widget="statinfo" /> <field string="Sales" name="sales_count" widget="statinfo" />
</button> </button>
@ -514,7 +514,7 @@
<field name="inherit_id" ref="product.product_template_only_form_view"/> <field name="inherit_id" ref="product.product_template_only_form_view"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//div[@name='buttons']" position="inside"> <xpath expr="//div[@name='buttons']" position="inside">
<button class="oe_inline oe_stat_button" name="action_view_sales" <button class="oe_inline oe_stat_button" name="action_view_sales"
type="object" groups="base.group_sale_salesman" icon="fa-strikethrough"> type="object" groups="base.group_sale_salesman" icon="fa-strikethrough">
<field string="Sales" name="sales_count" widget="statinfo" /> <field string="Sales" name="sales_count" widget="statinfo" />
</button> </button>
@ -535,7 +535,7 @@
</xpath> </xpath>
</field> </field>
</record> </record>
<!-- Update account invoice list view!--> <!-- Update account invoice list view!-->
<record model="ir.ui.view" id="account_invoice_tree"> <record model="ir.ui.view" id="account_invoice_tree">
<field name="name">Account Invoice</field> <field name="name">Account Invoice</field>
@ -559,7 +559,7 @@
<xpath expr="//field[@name='user_id']" position="after"> <xpath expr="//field[@name='user_id']" position="after">
<field name="section_id" groups="base.group_multi_salesteams"/> <field name="section_id" groups="base.group_multi_salesteams"/>
</xpath> </xpath>
<xpath expr="//group/filter[@string='Due Month']" position="after"> <xpath expr="//group/filter[@string='Status']" position="after">
<filter string="Sales Team" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/> <filter string="Sales Team" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
</xpath> </xpath>
</field> </field>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data> <data>
<!-- Filters too specific to propose directly to the user
<record id="view_order_product_search_sale_stock_inherit" model="ir.ui.view"> <record id="view_order_product_search_sale_stock_inherit" model="ir.ui.view">
<field name="name">sale.report.search.sale.stock</field> <field name="name">sale.report.search.sale.stock</field>
<field name="model">sale.report</field> <field name="model">sale.report</field>
@ -15,5 +16,6 @@
</xpath> </xpath>
</field> </field>
</record> </record>
-->
</data> </data>
</openerp> </openerp>