[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 73c5041829
commit 5e5c73e7ba
70 changed files with 1104 additions and 732 deletions

View File

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

View File

@ -40,8 +40,8 @@ class analytic_entries_report(osv.osv):
'product_id': fields.many2one('product.product', 'Product', required=True),
'product_uom_id': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
'amount': fields.float('Amount', readonly=True),
'unit_amount': fields.float('Quantity', readonly=True),
'nbr': fields.integer('#Entries', readonly=True),
'unit_amount': fields.integer('Unit Amount', readonly=True),
'nbr_entries': fields.integer('# Entries', readonly=True, oldname='nbr'),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'analytic_entries_report')
@ -49,7 +49,7 @@ class analytic_entries_report(osv.osv):
create or replace view analytic_entries_report as (
select
min(a.id) as id,
count(distinct a.id) as nbr,
count(distinct a.id) as nbr_entries,
a.date as date,
a.user_id as user_id,
a.name as name,

View File

@ -7,20 +7,18 @@
<field name="arch" type="xml">
<search string="Analytic Entries Analysis">
<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="product_id" />
<field name="user_id"/>
<group expand="0" string="Group By">
<filter string="User" name="User" icon="terp-personal" context="{'group_by':'user_id'}"/>
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}"/>
<filter string="Account" name="Account" icon="terp-folder-green" context="{'group_by':'account_id'}" groups="analytic.group_analytic_accounting"/>
<filter string="General Account" icon="terp-folder-orange" context="{'group_by':'general_account_id'}"/>
<filter string="Journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
<filter string="Product Unit of Measure" icon="terp-mrp" context="{'group_by':'product_uom_id'}"/>
<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'}"/>
<filter string="Partner" context="{'group_by':'partner_id'}"/>
<filter string="Account" name="Account" context="{'group_by':'account_id'}" groups="analytic.group_analytic_accounting"/>
<filter string="General Account" context="{'group_by':'general_account_id'}"/>
<filter string="Journal" context="{'group_by':'journal_id'}"/>
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator/>
<filter string="Month" name="Month" context="{'group_by':'date:month'}"/>
</group>
</search>
</field>
@ -30,8 +28,9 @@
<field name="model">analytic.entries.report</field>
<field name="arch" type="xml">
<graph string="Analytic Entries Analysis" type="pivot">
<field name="user_id" type="row"/>
<field name="nbr" type="measure"/>
<field name="account_id" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="nbr_entries" type="measure"/>
<field name="unit_amount" type="measure"/>
<field name="amount" type="measure"/>
</graph>
@ -42,8 +41,8 @@
<field name="res_model">analytic.entries.report</field>
<field name="view_type">form</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="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>
</record>

View File

@ -27,9 +27,9 @@ class account_entries_report(osv.osv):
_name = "account.entries.report"
_description = "Journal Items Analysis"
_auto = False
_rec_name = 'date'
_rec_name = 'date_effective'
_columns = {
'date': fields.date('Effective Date', readonly=True),
'date_effective': fields.date('Effective Date', readonly=True, oldname='date'),
'date_created': fields.date('Date Created', readonly=True),
'date_maturity': fields.date('Date Maturity', 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),
'partner_id': fields.many2one('res.partner','Partner', readonly=True),
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
'quantity': fields.float('Products Quantity', digits=(16,2), readonly=True),
'product_quantity': fields.float('Products Quantity', digits=(16,2), readonly=True, oldname='quantity'),
'user_type': fields.many2one('account.account.type', 'Account Type', readonly=True),
'type': fields.selection([
('receivable', 'Receivable'),
@ -67,7 +67,7 @@ class account_entries_report(osv.osv):
'company_id': fields.many2one('res.company', 'Company', readonly=True),
}
_order = 'date desc'
_order = 'date_effective desc'
def search(self, cr, uid, args, offset=0, limit=None, order=None,
context=None, count=False):
@ -110,7 +110,7 @@ class account_entries_report(osv.osv):
create or replace view account_entries_report as (
select
l.id as id,
am.date as date,
am.date as date_effective,
l.date_maturity as date_maturity,
l.date_created as date_created,
am.ref as ref,
@ -129,7 +129,7 @@ class account_entries_report(osv.osv):
a.type as type,
a.user_type as user_type,
1 as nbr,
l.quantity as quantity,
l.quantity as product_quantity,
l.currency_id as currency_id,
l.amount_currency as amount_currency,
l.debit as debit,

View File

@ -6,12 +6,12 @@
<field name="model">account.entries.report</field>
<field name="arch" type="xml">
<tree colors="blue:move_state == 'draft';black:move_state == 'posted'" create="false" string="Entries Analysis">
<field name="date" invisible="1"/>
<field name="date_effective" invisible="1"/>
<field name="date_created" invisible="1"/>
<field name="date_maturity" invisible="1"/>
<field name="ref" invisible="1"/>
<field name="nbr" sum="# of Entries "/>
<field name="quantity" sum="# of Products Qty " invisible="not context.get('quantity_visible', False)"/>
<field name="product_quantity" sum="# of Products Qty " invisible="not context.get('product_quantity_visible', False)"/>
<field name="amount_currency" invisible="not context.get('amount_currency_visible', False)"/>
<field name="currency_id" invisible="not context.get('currency_id_visible', False)"/>
<field name="debit"/>
@ -36,10 +36,11 @@
<field name="model">account.entries.report</field>
<field name="arch" type="xml">
<graph string="Entries Analysis" type="pivot">
<field name="partner_id" type="row"/>
<field name="debit" operator="+"/>
<field name="credit" operator="+"/>
<field name="balance" operator="+"/>
<field name="user_type" type="row"/>
<field name="period_id" type="col"/>
<field name="debit" type="measure"/>
<field name="credit" type="measure"/>
<field name="balance" type="measure"/>
</graph>
</field>
</record>
@ -60,17 +61,17 @@
<field name="model">account.entries.report</field>
<field name="arch" type="xml">
<search string="Entries Analysis">
<field name="date"/>
<field name="date_effective"/>
<field name="date_created"/>
<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 icon="terp-go-month" string="This Period" name="period" context="{'period':'current_period'}" help="Journal Entries with period in current period"/>
<filter string="This F.Year" name="thisyear" domain="['|', ('date_effective', '=', False), '&amp;',('date_effective','&lt;=', time.strftime('%%Y-12-31')),('date_effective','&gt;=',time.strftime('%%Y-01-01'))]" help="Journal Entries with period in current year"/>
<filter string="This Period" name="period" context="{'period':'current_period'}" help="Journal Entries with period in current period"/>
<separator/>
<filter string="Unposted" icon="terp-document-new" domain="[('move_state','=','draft')]" help = "entries"/>
<filter string="Posted" icon="terp-camera_test" domain="[('move_state','=','posted')]" help = "Posted entries"/>
<filter string="Unposted" domain="[('move_state','=','draft')]" help = "entries"/>
<filter string="Posted" domain="[('move_state','=','posted')]" help = "Posted entries"/>
<separator/>
<filter string="Unreconciled" icon="terp-dolar_ok!" 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="Unreconciled" domain="[('reconcile_id','=',False), ('account_id.reconcile','=',True)]" help = "Unreconciled entries"/>
<filter string="Reconciled" domain="[('reconcile_id','!=',False)]" help = "Reconciled entries"/>
<field name="account_id"/>
<field name="journal_id"/>
<field name="period_id"/>
@ -81,17 +82,13 @@
<field name="company_id" groups="base.group_multi_company"/>
</group>
<group expand="1" string="Group By">
<filter string="Partner" icon="terp-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="Currency" name="group_currency" icon="terp-dolar" context="{'group_by':'currency_id', 'currency_id_visible':1, 'amount_currency_visible':1}"/>
<filter string="Journal" name="group_journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/>
<filter string="Account" name="group_account" icon="terp-folder-green" context="{'group_by':'account_id'}"/>
<filter string="Acc.Type" icon="terp-stock_symbol-selection" context="{'group_by':'user_type'}" name="usertype"/>
<filter string="Int.Type" icon="terp-stock_symbol-selection" context="{'group_by':'type'}"/>
<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'}"/>
<filter string="Partner" context="{'group_by':'partner_id'}"/>
<filter string="Journal" name="group_journal" context="{'group_by':'journal_id'}"/>
<filter string="Acc.Type" context="{'group_by':'user_type'}" name="usertype"/>
<filter string="Int.Type" context="{'group_by':'type'}"/>
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator/>
<filter string="Entries Month" context="{'group_by':'date_effective:month'}" help="Entries Date by Month"/>
</group>
</search>
</field>

View File

@ -56,7 +56,7 @@ class account_invoice_report(osv.osv):
_columns = {
'date': fields.date('Date', 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),
'payment_term': fields.many2one('account.payment.term', 'Payment Term', 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"),
'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),
'nbr':fields.integer('# of Lines', readonly=True),
'nbr_invoices':fields.integer('# of Invoices', readonly=True, oldname='nbr'),
'type': fields.selection([
('out_invoice','Customer Invoice'),
('in_invoice','Supplier Invoice'),
@ -120,7 +120,7 @@ class account_invoice_report(osv.osv):
select_str = """
SELECT sub.id, sub.date, sub.product_id, sub.partner_id, sub.country_id,
sub.payment_term, sub.period_id, sub.uom_name, sub.currency_id, sub.journal_id,
sub.fiscal_position, sub.user_id, sub.company_id, sub.nbr, sub.type, sub.state,
sub.fiscal_position, sub.user_id, sub.company_id, sub.nbr_invoices, sub.type, sub.state,
sub.categ_id, sub.date_due, sub.account_id, sub.account_line_id, sub.partner_bank_id,
sub.product_qty, sub.price_total / cr.rate as price_total, sub.price_average /cr.rate as price_average,
cr.rate as currency_rate, sub.residual / cr.rate as residual, sub.commercial_partner_id as commercial_partner_id
@ -142,7 +142,7 @@ class account_invoice_report(osv.osv):
ELSE u.name
END AS uom_name,
ai.currency_id, ai.journal_id, ai.fiscal_position, ai.user_id, ai.company_id,
count(ail.*) AS nbr,
count(ail.*) AS nbr_invoices,
ai.type, ai.state, pt.categ_id, ai.date_due, ai.account_id, ail.account_id AS account_line_id,
ai.partner_bank_id,
SUM(CASE
@ -226,7 +226,7 @@ class account_invoice_report(osv.osv):
OR (sub.date IS NULL AND cr2.name <= NOW()))
ORDER BY name DESC LIMIT 1)
)""" % (
self._table,
self._table,
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="arch" type="xml">
<graph string="Invoices Analysis" type="pivot">
<field name="period_id" type="row"/>
<field name="categ_id" type="row"/>
<field name="nbr" type="measure"/>
<field name="product_qty" type="measure"/>
<field name="period_id" type="col"/>
<field name="price_total" type="measure"/>
</graph>
</field>
@ -58,7 +56,7 @@
<field name="arch" type="xml">
<search string="Invoices Analysis">
<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/>
<filter string="To Invoice" domain="[('state','=','draft')]" help = "Draft Invoices"/>
<filter string="Pro-forma" domain="['|', ('state','=','proforma'),('state','=','proforma2')]"/>
@ -74,19 +72,14 @@
<field name="categ_id" filter_domain="[('categ_id', 'child_of', self)]"/>
<group expand="1" string="Group By">
<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="Commercial Partner's Country" name="country_id" context="{'group_by':'country_id'}"/>
<filter string="Salesperson" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/>
<filter string="Due Month" icon="terp-go-today" context="{'group_by':'date_due'}"/>
<filter string="Period" icon="terp-go-month" context="{'group_by':'period_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True,'residual_invisible':True}"/>
<filter string="Category of Product" name="category_product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id','residual_invisible':True}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<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"/>
<filter string="Salesperson" name='user' context="{'group_by':'user_id'}"/>
<filter string="Sales Team" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Category of Product" name="category_product" context="{'group_by':'categ_id','residual_invisible':True}"/>
<filter string="Status" context="{'group_by':'state'}"/>
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator orientation="vertical" />
<filter string="Period" context="{'group_by':'period_id'}"/>
<filter string="Due Month" context="{'group_by':'date_due:month'}"/>
</group>
</search>
</field>
@ -97,7 +90,7 @@
<field name="res_model">account.invoice.report</field>
<field name="view_type">form</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="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="period_id"/>
<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>
</field>
</record>

View File

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

View File

@ -7,7 +7,8 @@
<field name="model">account_followup.stat</field>
<field name="arch" type="xml">
<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"/>
</graph>
</field>
@ -19,19 +20,20 @@
<search string="Follow-ups Sent">
<field name="date_move"/>
<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"/>
<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"/>
<field name="partner_id"/>
<field name="balance"/>
<group expand="1" string="Group By">
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" />
<filter string="Litigation" icon="terp-camera_test" 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="Latest Follow-up Month" icon="terp-go-month" context="{'group_by':'date_followup'}" />
<filter string="Company" groups="base.group_multi_company" icon="terp-go-home" context="{'group_by':'company_id'}" />
<filter string="Partner" context="{'group_by':'partner_id'}" />
<filter string="Litigation" context="{'group_by':'blocked'}" />
<filter string="Follow-up Level" name="followup_level" context="{'group_by':'followup_id'}" />
<filter string="Company" groups="base.group_multi_company" context="{'group_by':'company_id'}" />
<separator/>
<filter string="Latest Follow-up Month" context="{'group_by':'date_followup:month'}" />
</group>
</search>
</field>

View File

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

View File

@ -74,7 +74,7 @@ Dashboard for CRM will include:
'wizard/crm_merge_opportunities_view.xml',
'crm_view.xml',
'crm_phonecall_view.xml',
'crm_phonecall_menu.xml',
@ -84,6 +84,7 @@ Dashboard for CRM will include:
'calendar_event_menu.xml',
'report/crm_lead_report_view.xml',
'report/crm_opportunity_report_view.xml',
'report/crm_phonecall_report_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')"/> -->
</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 -->
<record id="msg_case15_attach1" model="ir.attachment">
<field name="datas">bWlncmF0aW9uIHRlc3Q=</field>

View File

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

View File

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

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@ -15,12 +15,12 @@
# 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/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import crm_lead_report
import crm_opportunity_report
import crm_phonecall_report
# 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 import tools
from openerp.addons.crm import crm
MONTHS = [
('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):
class crm_lead_report(osv.Model):
""" CRM Lead Analysis """
_name = "crm.lead.report"
_auto = False
@ -49,9 +34,10 @@ class crm_lead_report(osv.osv):
_columns = {
'date_deadline': fields.date('Exp. Closing', readonly=True, help="Expected Closing"),
'create_date': fields.datetime('Creation Date', readonly=True),
'opening_date': fields.date('Assignation Date', readonly=True),
'date_closed': fields.date('Close 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"),
@ -59,12 +45,12 @@ class crm_lead_report(osv.osv):
'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),
'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"),
'planned_revenue': fields.float('Planned Revenue',digits=(16,2),readonly=True),
'probable_revenue': fields.float('Probable Revenue', digits=(16,2),readonly=True),
'total_revenue': fields.float('Total Revenue',digits=(16,2),readonly=True, oldname='planned_revenue'),
'expected_revenue': fields.float('Expected Revenue', digits=(16,2),readonly=True, oldname='probable_revenue'),
'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),
@ -87,9 +73,10 @@ class crm_lead_report(osv.osv):
SELECT
id,
c.date_deadline,
count(id) as nbr_cases,
date(c.date_open) as opening_date,
date(c.date_closed) as date_closed,
c.date_open as opening_date,
c.date_closed as date_closed,
c.date_last_stage_update as date_last_stage_update,
@ -105,8 +92,8 @@ class crm_lead_report(osv.osv):
c.medium_id,
c.partner_id,
c.country_id,
c.planned_revenue,
c.planned_revenue*(c.probability/100) as probable_revenue,
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,
@ -114,6 +101,7 @@ class crm_lead_report(osv.osv):
FROM
crm_lead c
WHERE c.active = 'true'
GROUP BY c.id
)""")

View File

@ -8,8 +8,10 @@
<field name="model">crm.lead.report</field>
<field name="arch" type="xml">
<graph string="Leads Analysis" type="pivot" stacked="True">
<field name="user_id" type="row"/>
<field name="create_date" interval="year" type="col"/>
<field name="section_id" type="row"/>
<field name="create_date" interval="month" type="col"/>
<field name="nbr_cases" type="measure"/>
<field name="expected_revenue" type="measure"/>
</graph>
</field>
</record>
@ -25,30 +27,34 @@
</field>
</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) -->
<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': ['total_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': ['total_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">
<field name="name">By Salespersons</field>
<field name="model_id">crm.lead.report</field>
<field name="domain">[]</field>
<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 id="filter_leads_country" model="ir.filters">
<field name="name">By Country</field>
<field name="model_id">crm.lead.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['create_date:month', 'country_id']}</field>
</record>
@ -91,19 +97,13 @@
<field name="date_closed"/>
</group>
<group expand="1" string="Group By">
<filter string="Salesperson" domain="[]" context="{'group_by':'user_id'}" />
<filter string="Sales Team" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Partner" context="{'group_by':'partner_id'}" />
<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" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Type" domain="[]" context="{'group_by':'type'}"/>
<filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/>
<filter string="Priority" domain="[]" context="{'group_by':'priority'}" />
<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 date" domain="[]" context="{'group_by':'create_date'}" 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'}" />
<filter string="Creation Month" context="{'group_by':'create_date:month'}" name="month"/>
</group>
</search>
</field>
@ -115,7 +115,7 @@
<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_lead': 1}</field>
<field name="context">{}</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>
</record>
@ -129,23 +129,5 @@
groups="base.group_sale_manager"
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>
</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"
_description = "Phone calls by user and section"
_auto = False
_columns = {
'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority'),
'nbr': fields.integer('# of Cases', readonly=True),
'nbr_cases': fields.integer('# of Cases', readonly=True, oldname='nbr'),
'state': fields.selection(AVAILABLE_STATES, 'Status', readonly=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"),
@ -54,8 +54,8 @@ class crm_phonecall_report(osv.osv):
('object_id.model', '=', 'crm.phonecall')]"),
'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
'opening_date': fields.date('Opening Date', readonly=True, select=True),
'date_closed': fields.date('Close Date', readonly=True, select=True),
'opening_date': fields.datetime('Opening Date', readonly=True, select=True),
'date_closed': fields.datetime('Close Date', readonly=True, select=True),
}
def init(self, cr):
@ -68,8 +68,8 @@ class crm_phonecall_report(osv.osv):
create or replace view crm_phonecall_report as (
select
id,
date(c.date_open) as opening_date,
date(c.date_closed) as date_closed,
c.date_open as opening_date,
c.date_closed as date_closed,
c.state,
c.user_id,
c.section_id,
@ -78,7 +78,7 @@ class crm_phonecall_report(osv.osv):
c.duration,
c.company_id,
c.priority,
1 as nbr,
1 as nbr_cases,
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_open-c.create_date))/(3600*24) as delay_open

View File

@ -9,14 +9,38 @@
<field name="model">crm.phonecall.report</field>
<field name="arch" type="xml">
<graph orientation="horizontal" string="Phone calls" type="pivot" stacked="True">
<field name="user_id" type="row"/>
<!-- <field name="state" type="col"/> -->
<field name="nbr" type="measure"/>
<field name="section_id" type="row"/>
<field name="create_date" interval="month" type="col"/>
<field name="nbr_cases" type="measure"/>
<field name="duration" type="measure"/>
</graph>
</field>
</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_cases', '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_cases']}</field>
</record>
<!-- Phone calls by user and section Search 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="arch" type="xml">
<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"/>
<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"/>
<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"/>
<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"/>
<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}"
groups="base.group_multi_salesteams"/>
<field name="user_id" string="Salesperson"/>
@ -45,14 +69,12 @@
<field name="date_closed"/>
</group>
<group expand="1" string="Group By">
<filter string="Salesperson" name="Salesperson" icon="terp-personal" domain="[]" 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="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" />
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}" />
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" />
<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"/>
<filter string="Salesperson" name="Salesperson" context="{'group_by':'user_id'}" />
<filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Customer" context="{'group_by':'partner_id'}" />
<filter string="Status" context="{'group_by':'state'}" />
<separator/>
<filter string="Creation Month" context="{'group_by':'create_date:month'}" help="Month of call"/>
</group>
</search>
</field>
@ -65,7 +87,7 @@
<field name="res_model">crm.phonecall.report</field>
<field name="view_type">form</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="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>

View File

@ -39,7 +39,7 @@ class crm_claim_report(osv.osv):
_columns = {
'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'nbr_claims': fields.integer('# of Claims', readonly=True, oldname='nbr'),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
'create_date': fields.datetime('Create Date', readonly=True, select=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),
'priority': fields.selection(AVAILABLE_PRIORITIES, 'Priority'),
'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),
'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):
@ -70,7 +71,7 @@ class crm_claim_report(osv.osv):
select
min(c.id) as id,
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.user_id,
c.stage_id,
@ -78,7 +79,8 @@ class crm_claim_report(osv.osv):
c.partner_id,
c.company_id,
c.categ_id,
count(*) as nbr,
c.name as subject,
count(*) as nbr_claims,
c.priority as priority,
c.type_action as type_action,
c.create_date as create_date,

View File

@ -10,12 +10,20 @@
<field name="arch" type="xml">
<graph string="Claims" type="pivot" stacked="True">
<field name="stage_id" type="row"/>
<field name="user_id" type="col"/>
<field name="nbr" type="measure"/>
<field name="section_id" type="col"/>
<field name="nbr_claims" type="measure"/>
</graph>
</field>
</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 -->
<record id="view_report_crm_claim_filter" model="ir.ui.view">
@ -23,13 +31,11 @@
<field name="model">crm.claim.report</field>
<field name="arch" type="xml">
<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/>
<!-- 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" icon="terp-go-home" context="{'invisible_section': False}" domain="[]" help="My company"
invisible="1"/>
<filter string="My Company" context="{'invisible_section': False}" domain="[('company_id.user_ids','=',uid)]" help="My Company"/>
<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="user_id" string="Salesperson"/>
<field name="section_id" string="Sales Team" context="{'invisible_section': False}"
@ -45,15 +51,14 @@
<field name="date_deadline" />
</group>
<group expand="1" string="Group By">
<filter string="Salesperson" name="Salesperson" icon="terp-personal" domain="[]" 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="Partner" name="partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}" />
<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="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}" />
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type_action'}" help="Action Type"/>
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Claim Date" icon="terp-go-month" domain="[]" context="{'group_by':'claim_date'}" help="Month of claim"/>
<filter string="Salesperson" name="Salesperson" context="{'group_by':'user_id'}" />
<filter string="Sales Team" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Partner" name="partner" context="{'group_by':'partner_id'}" />
<filter string="Stage" context="{'group_by':'stage_id'}" />
<filter string="Category" context="{'group_by':'categ_id'}" />
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator/>
<filter string="Claim Month" context="{'group_by':'claim_date:month'}" help="Month of claim"/>
</group>
</search>
</field>

View File

@ -42,7 +42,7 @@ class crm_helpdesk_report(osv.osv):
'date': fields.datetime('Date', readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'nbr_requests': fields.integer('# of Requests', readonly=True, oldname='nbr'),
'state': fields.selection(AVAILABLE_STATES, 'Status', readonly=True),
'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg"),
'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True),
@ -55,8 +55,8 @@ class crm_helpdesk_report(osv.osv):
domain="[('section_id','=',section_id),\
('object_id.model', '=', 'crm.helpdesk')]"),
'planned_cost': fields.float('Planned Costs'),
'create_date': fields.date('Creation Date' , readonly=True, select=True),
'date_closed': fields.date('Close Date', readonly=True, select=True),
'create_date': fields.datetime('Creation 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"),
'email': fields.integer('# Emails', size=128, readonly=True),
}
@ -74,8 +74,8 @@ class crm_helpdesk_report(osv.osv):
select
min(c.id) as id,
c.date as date,
date(c.create_date) as create_date,
date(c.date_closed) as date_closed,
c.create_date,
c.date_closed,
c.state,
c.user_id,
c.section_id,
@ -86,7 +86,7 @@ class crm_helpdesk_report(osv.osv):
c.categ_id,
c.channel_id,
c.planned_cost,
count(*) as nbr,
count(*) as nbr_requests,
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
(SELECT count(id) FROM mail_message WHERE model='crm.helpdesk' AND res_id=c.id AND type = 'email') AS email,
abs(avg(extract('epoch' from (c.date_deadline - c.date_closed)))/(3600*24)) as delay_expected

View File

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

View File

@ -59,7 +59,7 @@
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/>
<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>
<filter name="unassigned" position="after">
@ -148,7 +148,7 @@
if context.get('active_model') == 'crm.lead':
ids = []
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'):
ids = context['active_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),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"),
'partner_id': fields.many2one('res.partner', 'Customer' , readonly=True),
'opening_date': fields.date('Opening Date', readonly=True),
'date_closed': fields.date('Close Date', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'opening_date': fields.datetime('Opening Date', readonly=True),
'date_closed': fields.datetime('Close Date', readonly=True),
'nbr_cases': fields.integer('# of Cases', readonly=True, oldname='nbr'),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'type':fields.selection([
('lead','Lead'),
('opportunity','Opportunity')
('opportunity','Opportunity')
],'Type', help="Type is used to separate Leads and Opportunities"),
}
def init(self, cr):
@ -68,8 +68,8 @@ class crm_lead_report_assign(osv.osv):
CREATE OR REPLACE VIEW crm_lead_report_assign AS (
SELECT
c.id,
date(c.date_open) as opening_date,
date(c.date_closed) as date_closed,
c.date_open as opening_date,
c.date_closed as date_closed,
c.date_assign,
c.user_id,
c.probability,
@ -85,8 +85,8 @@ class crm_lead_report_assign(osv.osv):
c.partner_assigned_id,
p.grade_id,
p.date as partner_date,
c.planned_revenue*(c.probability/100) as probable_revenue,
1 as nbr,
c.planned_revenue*(c.probability/100) as probable_revenue,
1 as nbr_cases,
c.create_date as create_date,
extract('epoch' from (c.write_date-c.create_date))/(3600*24) as delay_close,
extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24) as delay_expected,

View File

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

View File

@ -36,7 +36,7 @@ class crm_partner_report_assign(osv.osv):
'date_partnership' : fields.date('Partnership Date'),
'country_id':fields.many2one('res.country', 'Country', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
'opp': fields.integer('# of Opportunity', readonly=True),
'nbr_opportunities': fields.integer('# of Opportunity', readonly=True, oldname='opp'),
'turnover': fields.float('Turnover', readonly=True),
'period_id': fields.many2one('account.period', 'Invoice Period', readonly=True),
}
@ -58,7 +58,7 @@ class crm_partner_report_assign(osv.osv):
p.date_partnership,
p.user_id,
p.section_id,
(SELECT count(id) FROM crm_lead WHERE partner_assigned_id=p.id) AS opp,
(SELECT count(id) FROM crm_lead WHERE partner_assigned_id=p.id) AS nbr_opportunities,
i.price_total as turnover,
i.period_id
FROM

View File

@ -13,23 +13,17 @@
<field name="grade_id"/>
<field name="activation"/>
<group expand="1" string="Group By">
<filter string="Salesperson" name="user" icon="terp-personal"
domain="[]" context="{'group_by':'user_id'}" />
<filter string="Country" icon="terp-go-home" name="group_country" context="{'group_by':'country_id'}" />
<filter string="Sales Team" icon="terp-personal+"
domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Activation" name="group_activation" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'activation'}" />
<filter string="Grade" name="group_grade" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'grade_id'}" />
<filter string="Partner" name="" icon="terp-stock_symbol-selection"
domain="[]" context="{'group_by':'partner_id'}" />
<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'}" />
<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="Partner" name=""
context="{'group_by':'partner_id'}" />
<separator/>
<filter string="Date Partnership" name="group_date_partnership"
context="{'group_by':'date_partnership'}" />
<filter string="Date Review" name="group_date_review"
context="{'group_by':'date_review'}" />
</group>
</search>
</field>
@ -41,7 +35,7 @@
<field name="arch" type="xml">
<graph string="Opportunities Assignment Analysis" type="pivot" stacked="True">
<field name="grade_id" type="row"/>
<field name="opp" type="measure"/>
<field name="nbr_opportunities" type="measure"/>
<field name="turnover" type="measure"/>
</graph>
</field>

View File

@ -34,7 +34,8 @@ class report_event_registration(models.Model):
draft_state = fields.Integer(' # No of Draft Registrations')
confirm_state = fields.Integer(' # No of Confirmed Registrations')
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')
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)
@ -58,6 +59,7 @@ class report_event_registration(models.Model):
e.company_id AS company_id,
e.date_begin AS event_date,
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 ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state,
e.type AS event_type,

View File

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

View File

@ -4,10 +4,10 @@
<record model="ir.actions.act_window" id="action_fleet_reporting_costs">
<field name="name">Costs Analysis</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_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">
<p>
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">
<field name="name">Indicative Costs Analysis</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_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">
<p>
Odoo helps you managing the costs for your different vehicles
@ -38,17 +38,17 @@
</p>
</field>
</record>
<menuitem name="Fleet" parent="base.menu_reporting" id="menu_fleet_reporting" sequence="50" groups="group_fleet_manager"/>
<menuitem id="menu_fleet_reporting_costs"
parent="menu_fleet_reporting"
action="action_fleet_reporting_costs"
<menuitem id="menu_fleet_reporting_costs"
parent="menu_fleet_reporting"
action="action_fleet_reporting_costs"
sequence="1"
groups="group_fleet_manager"/>
<menuitem id="menu_fleet_reporting_indicative_costs"
parent="menu_fleet_reporting"
action="action_fleet_reporting_costs_non_effective"
<menuitem id="menu_fleet_reporting_indicative_costs"
parent="menu_fleet_reporting"
action="action_fleet_reporting_costs_non_effective"
sequence="2"
groups="group_fleet_manager"/>
</data>

View File

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

View File

@ -51,14 +51,15 @@
<search string="Hr Attendance Search">
<field name="name" string="Attendance"/>
<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'))]" />
<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"/>
<group expand="0" string="Group By">
<filter name="employee" string="Employee" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
<filter name="name" string="Date" icon="terp-personal" domain="[]" context="{'group_by':'name'}"/>
<filter name="employee" string="Employee" context="{'group_by':'employee_id'}"/>
<separator/>
<filter name="name" string="Month" context="{'group_by':'name'}"/>
</group>
</search>
</field>
@ -152,7 +153,7 @@
<field name="active" position="before">
<label for="state" 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="absent" string="Sign In" type="object" context="{'type':'sign_in'}" groups="base.group_hr_user"/>
</div>
@ -162,5 +163,3 @@
</data>
</openerp>

View File

@ -28,12 +28,12 @@ class hr_evaluation_report(osv.Model):
_description = "Evaluations Statistics"
_auto = False
_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),
'overpass_delay': fields.float('Overpassed Deadline', digits=(16, 2), readonly=True),
'deadline': fields.date("Deadline", readonly=True),
'request_id': fields.many2one('survey.user_input', 'Request_id', readonly=True),
'closed': fields.date("closed", readonly=True),
'request_id': fields.many2one('survey.user_input', 'Request ID', readonly=True),
'close_date': fields.date("Close Date", readonly=True, oldname='closed'),
'plan_id': fields.many2one('hr_evaluation.plan', 'Plan', readonly=True),
'employee_id': fields.many2one('hr.employee', "Employee", readonly=True),
'rating': fields.selection([
@ -43,7 +43,7 @@ class hr_evaluation_report(osv.Model):
('3', 'Exceeds expectations'),
('4', 'Significantly exceeds expectations'),
], "Overall Rating", readonly=True),
'nbr': fields.integer('# of Requests', readonly=True),
'nbr_requests': fields.integer('# of Requests', readonly=True, oldname='nbr'),
'state': fields.selection([
('draft', 'Draft'),
('wait', 'Plan In Progress'),
@ -68,14 +68,14 @@ class hr_evaluation_report(osv.Model):
create or replace view hr_evaluation_report as (
select
min(l.id) as id,
date(s.create_date) as create_date,
s.create_date as create_date,
s.employee_id,
l.request_id,
s.plan_id,
s.rating,
s.date as deadline,
s.date_close as closed,
count(l.*) as nbr,
s.date_close as close_date,
count(l.*) as nbr_requests,
s.state,
avg(extract('epoch' from age(s.create_date,CURRENT_DATE)))/(3600*24) as delay_date,
avg(extract('epoch' from age(s.date,CURRENT_DATE)))/(3600*24) as overpass_delay
@ -97,4 +97,3 @@ class hr_evaluation_report(osv.Model):
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

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

View File

@ -35,7 +35,7 @@ class hr_expense_report(osv.osv):
'create_date': fields.datetime('Creation Date', readonly=True),
'product_id':fields.many2one('product.product', 'Product', 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),
'date_confirm': fields.date('Confirmation 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),
'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')),
'nbr':fields.integer('# of Lines', readonly=True),
'nbr_lines':fields.integer('# of Lines', readonly=True, oldname='nbr'),
'no_of_products':fields.integer('# of Products', readonly=True),
'no_of_account':fields.integer('# of Accounts', readonly=True),
'state': fields.selection([
@ -83,7 +83,7 @@ class hr_expense_report(osv.osv):
s.company_id as company_id,
sum(l.unit_quantity*l.unit_amount) as price_total,
(sum(l.unit_quantity*l.unit_amount)/sum(case when l.unit_quantity=0 or u.factor=0 then 1 else l.unit_quantity * u.factor end))::decimal(16,2) as price_average,
count(*) as nbr,
count(*) as nbr_lines,
(select unit_quantity from hr_expense_line where id=l.id and product_id is not null) as no_of_products,
(select analytic_account from hr_expense_line where id=l.id and analytic_account is not null) as no_of_account,
s.state

View File

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

View File

@ -1,6 +1,20 @@
<openerp>
<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">
<field name="name">hr.holidays.filter</field>
<field name="model">hr.holidays</field>
@ -8,27 +22,26 @@
<search string="Search Leave">
<field name="name"/>
<separator/>
<filter icon="terp-check" domain="[('state','=','draft')]" string="To Confirm"/>
<filter icon="terp-camera_test" 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','=','draft')]" string="To Confirm"/>
<filter domain="[('state','in',('confirm','validate1'))]" string="To Approve" name="approve"/>
<filter domain="[('state','=','validate')]" string="Validated" name="validated"/>
<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/>
<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/>
<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="department_id"/>
<field name="holiday_status_id"/>
<group expand="0" string="Group By">
<filter name="group_name" string="Description" domain="[]" 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" icon="terp-personal" domain="[]" context="{'group_by':'employee_id'}"/>
<filter name="group_category" string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'category_id'}"/>
<filter string="Manager" icon="terp-personal" domain="[]" context="{'group_by':'manager_id'}"/>
<filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id','set_visible':True}"/>
<filter name="group_type" string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'holiday_status_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
<filter name="group_name" string="Description" context="{'group_by':'name'}"/>
<filter name="group_employee" string="Employee" context="{'group_by':'employee_id'}"/>
<filter name="group_category" string="Category" context="{'group_by':'category_id'}"/>
<filter string="Manager" context="{'group_by':'manager_id'}"/>
<filter name="group_type" string="Type" context="{'group_by':'holiday_status_id'}"/>
<separator/>
<filter name="group_date_from" string="Start Month" context="{'group_by':'date_from:month'}"/>
</group>
</search>
</field>
@ -40,9 +53,9 @@
<field name="name">Leave Request</field>
<field name="model">hr.holidays</field>
<field name="arch" type="xml">
<calendar string="Leave Request" color="employee_id"
date_start="date_from" date_stop="date_to"
quick_add="False" avatar_model="hr.employee">
<calendar string="Leave Request" color="employee_id"
date_start="date_from" date_stop="date_to"
quick_add="False" avatar_model="hr.employee">
<field name="employee_id"/>
<field name="holiday_status_id"/>
</calendar>
@ -483,10 +496,10 @@
</group>
</xpath>
<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"
class="oe_stat_button"
icon="fa-calendar"
icon="fa-calendar"
groups="base.group_hr_user">
<field name="leaves_count" widget="statinfo" string="Leaves"/>
</button>

View File

@ -7,7 +7,7 @@
<field name="arch" type="xml">
<graph string="Recruitment Analysis" type="pivot">
<field name="stage_id" type="row"/>
<field name="date_create" interval="week" type="col"/>
<field name="job_id" type="col"/>
</graph>
</field>
</record>
@ -16,23 +16,20 @@
<record id="filter_recruitment_report_recruiter" model="ir.filters">
<field name="name">By Recruiter</field>
<field name="model_id">hr.recruitment.report</field>
<field name="domain">[]</field>
<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 id="filter_recruitment_report_job" model="ir.filters">
<field name="name">By Job</field>
<field name="model_id">hr.recruitment.report</field>
<field name="domain">[]</field>
<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 id="filter_recruitment_report_departmnet" model="ir.filters">
<field name="name">By Department</field>
<field name="model_id">hr.recruitment.report</field>
<field name="domain">[]</field>
<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 id="view_hr_recruitment_report_search" model="ir.ui.view">
@ -48,7 +45,7 @@
<filter string="Unassigned" domain="[('user_id', '=', False)]"/>
<filter string="My" domain="[('user_id', '=', uid)]"/>
<separator/>
<filter string="New" domain="[('sequence', '=', 1)]"/>
<filter string="New" domain="[('stage_id.sequence', '=', 1)]"/>
<separator/>
<group expand="0" string="Extended Filters">
<field name="priority"/>
@ -60,14 +57,11 @@
<group expand="1" string="Group By">
<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="Partner" context="{'group_by':'partner_id'}" />
<filter string="Jobs" name="job" context="{'group_by':'job_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="Last Stage Update" context="{'group_by':'date_last_stage_update'}" />
<filter string="Creation Date" context="{'group_by':'date_create'}" help="Creation Date"/>
<separator/>
<filter string="Creation Week" context="{'group_by':'date_create:week'}" help="Creation Week"/>
</group>
</search>
</field>
@ -78,7 +72,7 @@
<field name="res_model">hr.recruitment.report</field>
<field name="view_type">form</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"/>
</record>
<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),
'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True),
'company_id': fields.many2one('res.company', 'Company',readonly=True),
'cost': fields.float('#Cost',readonly=True, digits_compute=dp.get_precision('Account')),
'quantity': fields.float('Time',readonly=True),
'cost': fields.float('Cost', readonly=True, digits_compute=dp.get_precision('Account')),
'time': fields.float('Time', readonly=True, oldname='quantity'),
}
def _select(self):
@ -25,7 +25,7 @@ class hr_timesheet_report(osv.osv):
SELECT min(hat.id) as id,
aal.date as date,
sum(aal.amount) as cost,
sum(aal.unit_amount) as quantity,
sum(aal.unit_amount) as time,
aal.account_id as account_id,
aal.journal_id as journal_id,
aal.product_id as product_id,

View File

@ -7,13 +7,13 @@
<field name="arch" type="xml">
<graph string="Timesheet" type="pivot">
<field name="user_id" type="row"/>
<field name="date" interval="day" type="col"/>
<field name="quantity" type="measure"/>
<field name="cost" type="measure"/>
<field name="date" interval="month" type="col"/>
<field name="time" type="measure"/>
</graph>
</field>
</record>
<record id="view_hr_timesheet_report_search" model="ir.ui.view">
<field name="name">hr.timesheet.report.search</field>
<field name="model">hr.timesheet.report</field>
@ -21,7 +21,7 @@
<search string="Timesheet">
<field name="account_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...">
<field name="general_account_id"/>
<field name="product_id"/>
@ -30,12 +30,10 @@
<field name="date"/>
</group>
<group expand="1" string="Group By">
<filter string="User" name="group_user_id" icon="terp-personal" context="{'group_by':'user_id'}"/>
<filter string="Product" name="product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
<filter string="Analytic Account" name="analytic_account" icon="terp-folder-green" context="{'group_by':'account_id'}"/>
<filter string="General Account" name="general_account" icon="terp-folder-orange" context="{'group_by':'general_account_id'}"/>
<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"/>
<filter string="User" name="group_user_id" context="{'group_by':'user_id'}"/>
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator/>
<filter string="Month" context="{'group_by':'date:month'}" help="Group by month of date"/>
</group>
</search>
</field>
@ -46,7 +44,7 @@
<field name="res_model">hr.timesheet.report</field>
<field name="view_type">form</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>
<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"
_columns = {
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True),
'nbr': fields.integer('#Nbr',readonly=True),
'total_diff': fields.float('#Total Diff',readonly=True),
'total_timesheet': fields.float('#Total Timesheet',readonly=True),
'total_attendance': fields.float('#Total Attendance',readonly=True),
'nbr': fields.integer('# Nbr Timesheet',readonly=True),
'total_diff': fields.float('# Total Diff',readonly=True),
'total_timesheet': fields.float('# Total Timesheet',readonly=True),
'total_attendance': fields.float('# Total Attendance',readonly=True),
'department_id':fields.many2one('hr.department','Department',readonly=True),
'date_from': fields.date('Date from',readonly=True,),
'date_to': fields.date('Date to',readonly=True),
@ -47,16 +47,16 @@ class hr_timesheet_report(osv.osv):
htss.date_to,
count(*) as nbr,
(SELECT sum(day.total_difference)
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_diff,
(SELECT sum(day.total_timesheet)
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_timesheet,
(SELECT sum(day.total_attendance)
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
FROM hr_timesheet_sheet_sheet AS sheet
LEFT JOIN hr_timesheet_sheet_sheet_day AS day
ON (sheet.id = day.sheet_id) where sheet.id=htss.id) as total_attendance,
aal.to_invoice,
htss.department_id,

View File

@ -7,9 +7,9 @@
<field name="inherit_id" ref="hr_timesheet.view_hr_timesheet_report_graph"/>
<field name="arch" type="xml">
<field name="user_id" position="after">
<field name="state" type="row"/>
<field name="to_invoice" type="row"/>
</field>
<field name="cost" position="after">
<field name="time" position="after">
<field name="total_diff" type="measure"/>
<field name="total_timesheet" type="measure"/>
<field name="total_attendance" type="measure"/>
@ -17,15 +17,31 @@
</field>
</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">
<field name="name">timesheet.report.search</field>
<field name="model">hr.timesheet.report</field>
<field name="inherit_id" ref="hr_timesheet.view_hr_timesheet_report_search"/>
<field name="arch" type="xml">
<field name="account_id" position="before">
<filter icon="terp-document-new" string="Draft" domain="[('state','=','draft')]"/>
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','confirm')]"/>
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/>
<filter string="Draft" domain="[('state','=','draft')]"/>
<filter string="Confirmed" domain="[('state','=','confirm')]"/>
<filter string="Done" domain="[('state','=','done')]"/>
</field>
<field name="general_account_id" position="after">
<field name="to_invoice"/>
@ -33,14 +49,10 @@
<field name="date_to"/>
<field name="date_from"/>
</field>
<filter name="product" position="before">
<filter string="Department" icon="terp-personal+" context="{'group_by':'department_id'}"/>
</filter>
<filter name="analytic_account" position="before">
<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 name="group_user_id" position="after">
<filter string="Department" context="{'group_by':'department_id'}"/>
<filter string="Type of Invoicing" context="{'group_by':'to_invoice'}"/>
<filter string="Status" context="{'group_by':'state'}"/>
</filter>
</field>
</record>

View File

@ -33,10 +33,10 @@
<field name="arch" type="xml">
<search string="Advices Analysis">
<group>
<filter icon="terp-document-new" 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="Draft" domain="[('state','=','draft')]" help="Payment Advices which are in draft state"/>
<filter string="Confirm" name="confirm" domain="[('state','=','confirm')]" help="Payment Advices which are in confirm state"/>
<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"/>
<field name="date"/>
<separator orientation="vertical"/>
@ -55,16 +55,14 @@
</group>
<newline/>
<group expand="1" string="Group By">
<filter string="Employee" icon="terp-personal" context="{'group_by':'employee_id'}" />
<filter string="Bank" icon="terp-go-home" context="{'group_by':'bank_id'}"/>
<filter string="Employee" context="{'group_by':'employee_id'}" />
<filter string="Bank" context="{'group_by':'bank_id'}"/>
<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"/>
<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"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day 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"/>
<filter string="Month" name="order_month" context="{'group_by':'month'}" help="Month of Payment Advices"/>
</group>
</search>
</field>

View File

@ -32,10 +32,10 @@
<field name="arch" type="xml">
<search string="Payslip Analysis">
<group>
<filter icon="terp-document-new" 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="Draft" domain="[('state','=','draft')]" help="Payslips which are in draft state"/>
<filter string="Done" name="done" domain="[('state','=','done')]" help="Payslips which are in done state"/>
<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"/>
<field name="date_from"/>
<field name="date_to"/>
@ -51,19 +51,16 @@
</group>
<newline/>
<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="Category" name="category" context="{'group_by':'category_id'}" />
<filter string="Payslip Line" context="{'group_by':'name'}" />
<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"/>
<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"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day 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"/>
<filter string="Month" name="order_month" context="{'group_by':'month'}" help="Month of Payslip"/>
</group>
</search>
</field>

View File

@ -1,6 +1,18 @@
<?xml version="1.0"?>
<openerp>
<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">
<field name="name">campaign.analysis.tree</field>
<field name="model">campaign.analysis</field>
@ -30,24 +42,21 @@
<field name="arch" type="xml">
<search string="Campaign Analysis">
<field name="date"/>
<filter icon="terp-gtk-go-back-rtl" string="To Do" domain="[('state','=','todo')]"/>
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/>
<filter icon="terp-emblem-important" string="Exceptions" domain="[('state','=','exception')]"/>
<filter string="To Do" domain="[('state','=','todo')]"/>
<filter string="Done" domain="[('state','=','done')]"/>
<filter string="Exceptions" domain="[('state','=','exception')]"/>
<field name="campaign_id"/>
<field name="activity_id"/>
<field name="segment_id"/>
<field name="partner_id"/>
<field name="country_id"/>
<group expand="0" string="Group By">
<filter string="Campaign" name="Campaign" icon="terp-gtk-jump-to-rtl" context="{'group_by':'campaign_id'}" />
<filter string="Segment" name="Segment" icon="terp-stock_symbol-selection" context="{'group_by':'segment_id'}"/>
<filter string="Activity" name="activity" icon="terp-stock_align_left_24" context="{'group_by':'activity_id'}"/>
<filter string="Resource" icon="terp-accessories-archiver" context="{'group_by':'res_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}"/>
<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'}"/>
<filter string="Campaign" name="Campaign" context="{'group_by':'campaign_id'}" />
<filter string="Segment" name="Segment" context="{'group_by':'segment_id'}"/>
<filter string="Activity" name="activity" context="{'group_by':'activity_id'}"/>
<filter string="Status" context="{'group_by':'state'}"/>
<separator/>
<filter string="Month" context="{'group_by':'month'}"/>
</group>
</search>
</field>
@ -57,8 +66,8 @@
<field name="name">Campaign Analysis</field>
<field name="res_model">campaign.analysis</field>
<field name="view_type">form</field>
<field name="view_mode">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="view_mode">graph,tree</field>
<field name="context">{'group_by': [], 'group_by_no_leaf':1}</field>
<field name="search_view_id" ref="view_campaign_analysis_search"/>
</record>

View File

@ -53,7 +53,8 @@ class report_membership(osv.osv):
'membership_id': fields.many2one('product.product', 'Membership Product', readonly=True),
'membership_state': fields.selection(STATE, 'Current Membership State', readonly=True),
'user_id': fields.many2one('res.users', '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):
@ -64,6 +65,7 @@ class report_membership(osv.osv):
SELECT
MIN(id) AS id,
partner_id,
count(membership_id) as quantity,
user_id,
membership_state,
associate_member_id,

View File

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

View File

@ -28,7 +28,7 @@ class mrp_workorder(osv.osv):
_description = "Work Order Report"
_auto = False
_columns = {
'nbr': fields.integer('# of Lines', readonly=True),
'nbr_lines': fields.integer('# of Lines', readonly=True, oldname='nbr'),
'date': fields.date('Date', 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),
@ -54,7 +54,7 @@ class mrp_workorder(osv.osv):
wl.production_id as production_id,
wl.workcenter_id as workcenter_id,
sum(wl.cycle) as total_cycles,
count(*) as nbr,
count(*) as nbr_lines,
sum(mp.product_qty) as product_qty,
wl.state as state
from mrp_production_workcenter_line wl

View File

@ -9,32 +9,55 @@
<field name="model">mrp.workorder</field>
<field name="arch" type="xml">
<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="nbr" type="measure"/>
<field name="total_hours" type="measure"/>
<field name="total_cycles" type="measure"/>
</graph>
</field>
</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">
<field name="name">mrp.workorder.select</field>
<field name="model">mrp.workorder</field>
<field name="arch" type="xml">
<search string="Search">
<field name="date"/>
<filter string="Current" icon="terp-check" domain="[('state','not in',('draft','cancel','done'))]"/>
<filter icon="terp-check" string="Started" domain="[('state','=','startworking')]"/>
<filter icon="terp-camera_test" string="Done" domain="[('state','=','done')]"/>
<filter string="Current" domain="[('state','not in',('draft','cancel','done'))]"/>
<filter string="Started" name="started" domain="[('state','=','startworking')]"/>
<filter string="Done" name="done" domain="[('state','=','done')]"/>
<field name="product_id" />
<field name="workcenter_id"/>
<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" icon="terp-go-home" context="{'group_by':'workcenter_id'}" />
<filter string="Production" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'production_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Date Planned" name="terp-go-month" icon="terp-go-month" context="{'group_by':'date:month'}" help="Planned Month"/>
<filter string="Work Center" name="Workcenter" context="{'group_by':'workcenter_id'}" />
<filter string="Production" context="{'group_by':'production_id'}"/>
<filter string="Status" context="{'group_by':'state'}"/>
<filter string="Product" name="Product" context="{'group_by':'product_id'}" />
<separator/>
<filter string="Month Planned" name="terp-go-month" context="{'group_by':'date:month'}" help="Planned Month"/>
</group>
</search>
</field>

View File

@ -26,6 +26,7 @@ class pos_order_report(osv.osv):
_name = "report.pos.order"
_description = "Point of Sale Orders Statistics"
_auto = False
_columns = {
'date': fields.datetime('Date Order', 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"),
'location_id':fields.many2one('stock.location', 'Location', readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True),
'nbr':fields.integer('# of Lines', readonly=True),
'product_qty':fields.integer('# of Qty', readonly=True),
'nbr_lines':fields.integer('# of Lines', readonly=True, oldname='nbr'),
'product_qty':fields.integer('Product Quantity', readonly=True),
'journal_id': fields.many2one('account.journal', 'Journal'),
'delay_validation': fields.integer('Delay Validation'),
'product_categ_id': fields.many2one('product.category', 'Product Category', readonly=True),
}
_order = 'date desc'
@ -51,7 +53,7 @@ class pos_order_report(osv.osv):
create or replace view report_pos_order as (
select
min(l.id) as id,
count(*) as nbr,
count(*) as nbr_lines,
s.date_order as date,
sum(l.qty * u.factor) as product_qty,
sum(l.qty * l.price_unit) as price_total,
@ -64,14 +66,15 @@ class pos_order_report(osv.osv):
s.location_id as location_id,
s.company_id as company_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
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_template pt on (pt.id=p.product_tmpl_id)
left join product_uom u on (u.id=pt.uom_id)
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
having
sum(l.qty * u.factor) != 0)""")

View File

@ -6,11 +6,9 @@
<field name="model">report.pos.order</field>
<field name="arch" type="xml">
<graph string="Point of Sale Analysis" type="pivot">
<field name="date" interval="day" type="row"/>
<field name="nbr" type="measure"/>
<field name="product_categ_id" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="product_qty" type="measure"/>
<field name="average_price" type="measure"/>
<field name="total_discount" type="measure"/>
<field name="price_total" type="measure"/>
</graph>
</field>
@ -22,22 +20,22 @@
<field name="arch" type="xml">
<search string="Point of Sale Analysis">
<field name="date"/>
<filter icon="terp-dolar" string="Invoiced" domain="[('state','=',('invoiced'))]"/>
<filter icon="terp-dolar" string="Not Invoiced" domain="[('state','=',('paid'))]"/>
<filter string="Invoiced" domain="[('state','=',('invoiced'))]"/>
<filter string="Not Invoiced" domain="[('state','=',('paid'))]"/>
<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/>
<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="user_id"/>
<field name="partner_id"/>
<field name="user_id"/>
<group expand="1" string="Group By">
<filter string="Salesperson" icon="terp-personal" name="User" context="{'group_by':'user_id'}"/>
<filter string="Customer" icon="terp-personal" context="{'group_by':'partner_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
<filter string="Stock Location" context="{'group_by': 'location_id'}"/>
<filter string="Order Date" icon="terp-go-month" context="{'group_by':'date:month'}" help="Month of order date"/>
<filter string="Salesperson" name="User" context="{'group_by':'user_id'}"/>
<filter string="Product Category" context="{'group_by':'product_categ_id'}"/>
<filter string="Product" context="{'group_by':'product_id'}"/>
<separator/>
<filter string="Order Month" context="{'group_by':'date:month'}" help="Month of order date"/>
</group>
</search>
</field>
@ -49,7 +47,7 @@
<field name="view_type">form</field>
<field name="view_mode">graph</field>
<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>
<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:
default = {}
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
return super(task, self).copy_data(cr, uid, id, default, context)
def _is_template(self, cr, uid, ids, field_name, arg, context=None):
res = {}
for task in self.browse(cr, uid, ids, context=context):
@ -1313,6 +1313,7 @@ class project_task_history_cumulative(osv.osv):
_columns = {
'end_date': fields.date('End Date'),
'nbr_tasks': fields.integer('# of Tasks', readonly=True),
'project_id': fields.many2one('project.project', 'Project'),
}
@ -1329,11 +1330,16 @@ class project_task_history_cumulative(osv.osv):
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.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,
t.project_id
FROM
project_task_history AS h
JOIN project_task AS t ON (h.task_id = t.id)
GROUP BY
h.id,
h.task_id,
t.project_id
) AS history
)

View File

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

View File

@ -7,8 +7,10 @@
<field name="model">project.task.history.cumulative</field>
<field name="arch" type="xml">
<graph string="Project Tasks" type="bar" stacked="True">
<field name="date" 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="remaining_hours" type="measure"/>
</graph>
@ -32,6 +34,15 @@
<filter string="Unassigned Tasks" domain="[('user_id','=',False)]"/>
<separator/>
<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>
</field>
</record>

View File

@ -31,11 +31,11 @@ class report_project_task_user(osv.osv):
'name': fields.char('Task Summary', readonly=True),
'user_id': fields.many2one('res.users', 'Assigned To', 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),
'date_end': fields.date('Ending Date', readonly=True),
'date_end': fields.datetime('Ending Date', 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),
'hours_planned': fields.float('Planned Hours', readonly=True),
'hours_effective': fields.float('Effective Hours', readonly=True),
@ -48,12 +48,13 @@ class report_project_task_user(osv.osv):
'opening_days': fields.float('Days to Assign', digits=(16,2), readonly=True, group_operator="avg",
help="Number of Days to Open the task"),
'delay_endings_days': fields.float('Overpassed Deadline', digits=(16,2), readonly=True),
'nbr': fields.integer('# of tasks', readonly=True),
'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')],
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),
'partner_id': fields.many2one('res.partner', 'Contact', readonly=True),
'stage_id': fields.many2one('project.task.type', 'Stage'),
'nbr_tasks': fields.integer('# of Tasks', readonly=True, oldname='nbr'),
}
_order = 'name desc, project_id'
@ -62,11 +63,11 @@ class report_project_task_user(osv.osv):
cr.execute("""
CREATE view report_project_task_user as
SELECT
(select 1 ) AS nbr,
(select 1 ) AS nbr_tasks,
t.id as id,
date(t.date_start) as date_start,
date(t.date_end) as date_end,
date(t.date_last_stage_update) as date_last_stage_update,
t.date_start as date_start,
t.date_end as date_end,
t.date_last_stage_update as date_last_stage_update,
t.date_deadline as date_deadline,
abs((extract('epoch' from (t.write_date-t.date_start)))/(3600*24)) as no_of_days,
t.user_id,
@ -79,6 +80,7 @@ class report_project_task_user(osv.osv):
t.company_id,
t.partner_id,
t.stage_id as stage_id,
t.kanban_state as state,
remaining_hours as remaining_hours,
total_hours as total_hours,
t.delay_hours as hours_delay,

View File

@ -12,27 +12,33 @@
<field name="arch" type="xml">
<graph string="Tasks Analysis" type="pivot">
<field name="project_id" type="row"/>
<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"/>
<field name="nbr_tasks" type="measure"/>
</graph>
</field>
</record>
<!-- 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_tasks']}</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">
<field name="name">By Responsible</field>
<field name="model_id">report.project.task.user</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id', 'user_id']}</field>
</record>
<record id="filter_task_report_reviewer" model="ir.filters">
<field name="name">By Reviewer</field>
<field name="model_id">report.project.task.user</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id', 'reviewer_id']}</field>
</record>
@ -50,7 +56,7 @@
<field name="user_id"/>
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<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)]"/>
<separator/>
<filter string="New" name="new" domain="[('stage_id.sequence', '&lt;=', 1)]"/>
@ -60,12 +66,12 @@
</group>
<group expand="1" string="Group By">
<filter string="Project" name="project" context="{'group_by':'project_id'}"/>
<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="Task" context="{'group_by':'name'}"/>
<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="Assignation date" context="{'group_by':'date_start:month'}" help="Creation Date"/>
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" help="Last Stage Update"/>
<separator/>
<filter string="Assignation Month" context="{'group_by':'date_start:month'}" help="Creation Date"/>
</group>
</search>
</field>

View File

@ -9,7 +9,7 @@
<field name="name">Issues</field>
<field name="res_model">project.issue</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="domain" eval=""/>
<field name="search_view_id" ref="view_project_issue_filter"/>
@ -50,6 +50,13 @@
<field name="act_window_id" ref="project_issue_categ_act0"/>
</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"
action="project_issue_categ_act0" sequence="15"/>
</data>

View File

@ -52,7 +52,7 @@
options="{'fold_field': 'fold'}"/>
</header>
<sheet string="Issue">
<div class="oe_right">
<div class="oe_right">
<field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/>
</div>
<label for="name" class="oe_edit_only"/>
@ -63,7 +63,7 @@
<field name="categ_ids" widget="many2many_tags"/>
<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']}"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="email_from"/>
@ -155,12 +155,15 @@
<separator/>
<filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<group expand="0" string="Group By" >
<filter string="Responsible" name="group_user_id" icon="terp-personal" domain="[]" 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="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
<filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
<filter string="Creation Month" name="group_create_date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/>
<filter string="Last Message" name="group_message_last_post" domain="[]" context="{'group_by':'message_last_post:week'}"/>
<filter string="Assigned to" name="Responsible" context="{'group_by':'user_id'}" />
<filter string="Project" name="project" context="{'group_by':'project_id'}" />
<filter string="Task" context="{'group_by':'task_id'}"/>
<filter string="Priority" context="{'group_by':'priority'}" />
<filter string="Stage" context="{'group_by':'stage_id'}"/>
<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>
</search>
</field>
@ -237,6 +240,17 @@
</field>
</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 -->
<record model="ir.ui.view" id="project_feature_tree_view">
@ -262,7 +276,7 @@
<field name="name">Issues</field>
<field name="view_mode">kanban,tree,form,calendar,graph</field>
<field name="context">{
'search_default_project_id': [active_id],
'search_default_project_id': [active_id],
'default_project_id': active_id,
}
</field>
@ -287,7 +301,7 @@
<label for="use_issues"/>
</xpath>
<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">
<field string="Issues" name="issue_count" widget="statinfo"/>
</button>
@ -357,14 +371,14 @@
<field name="priority" eval="50"/>
<field name="arch" type="xml">
<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}"
attrs="{'invisible': [('customer', '=', False)]}"
icon="fa-bug" groups="project.group_project_user">
<field string="Issues" name="issue_count" widget="statinfo"/>
</button>
</button>
</xpath>
</field>
</record>

View File

@ -31,12 +31,12 @@ class project_issue_report(osv.osv):
_columns = {
'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
'opening_date': fields.date('Date of Opening', readonly=True),
'create_date': fields.date('Create Date', readonly=True),
'date_closed': fields.date('Date of Closing', readonly=True),
'date_last_stage_update': fields.date('Last Stage Update', readonly=True),
'opening_date': fields.datetime('Date of Opening', readonly=True),
'create_date': fields.datetime('Create Date', readonly=True),
'date_closed': fields.datetime('Date of Closing', readonly=True),
'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True),
'stage_id': fields.many2one('project.task.type', 'Stage'),
'nbr': fields.integer('# of Issues', readonly=True),
'nbr_issues': fields.integer('# of Issues', readonly=True, oldname='nbr'),
'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"),
'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."),
'task_id': fields.many2one('project.task', 'Task'),
'email': fields.integer('# Emails', size=128, readonly=True),
'reviewer_id': fields.many2one('res.users', 'Reviewer', readonly=True),
}
def init(self, cr):
@ -60,9 +61,9 @@ class project_issue_report(osv.osv):
CREATE OR REPLACE VIEW project_issue_report AS (
SELECT
c.id as id,
date(c.date_open) as opening_date,
date(c.create_date) as create_date,
date(c.date_last_stage_update) as date_last_stage_update,
c.date_open as opening_date,
c.create_date as create_date,
c.date_last_stage_update as date_last_stage_update,
c.user_id,
c.working_hours_open,
c.working_hours_close,
@ -73,16 +74,18 @@ class project_issue_report(osv.osv):
c.priority as priority,
c.project_id as project_id,
c.version_id as version_id,
1 as nbr,
1 as nbr_issues,
c.partner_id,
c.channel,
c.task_id,
c.day_open as delay_open,
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
project_issue c
LEFT JOIN project_task t on c.task_id = t.id
WHERE c.active= 'true'
)""")

View File

@ -6,18 +6,23 @@
<field name="model">project.issue.report</field>
<field name="arch" type="xml">
<graph orientation="horizontal" string="Project Issue" type="pivot" stacked="True">
<field name="nbr" type="measure"/>
<field name="user_id" type="row"/>
<field name="stage_id" type="row"/>
<field name="project_id" type="row"/>
<field name="create_date" interval="month" type="col"/>
<field name="nbr_issues" type="measure"/>
</graph>
</field>
</record>
<!-- 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">
<field name="name">By Responsible</field>
<field name="model_id">project.issue.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['project_id', 'user_id']}</field>
</record>
@ -32,22 +37,19 @@
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="version_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)]"/>
<separator/>
<filter string="New" name="new" domain="[('stage_id.sequence', '&lt;=', 1)]"/>
<group expand="1" string="Group By">
<filter string="Assigned to" name="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" />
<filter string="Contact" icon="terp-partner" context="{'group_by':'partner_id'}" />
<filter string="Sale Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
<filter string="Project" name="project" icon="terp-folder-violet" context="{'group_by':'project_id'}" />
<filter string="Task" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'task_id'}"/>
<filter string="Version" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'version_id'}"/>
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
<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'}"/>
<filter string="Assigned to" name="Responsible" context="{'group_by':'user_id'}" />
<filter string="Project" name="project" context="{'group_by':'project_id'}" />
<filter string="Task" context="{'group_by':'task_id'}"/>
<filter string="Priority" context="{'group_by':'priority'}" />
<filter string="Stage" context="{'group_by':'stage_id'}"/>
<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"/>
</group>
</search>
</field>

View File

@ -31,7 +31,7 @@ class purchase_report(osv.osv):
_description = "Purchases Orders"
_auto = False
_columns = {
'date': fields.date('Order Date', readonly=True, help="Date on which this document has been created"),
'date_order': fields.datetime('Order Date', readonly=True, oldname='date', help="Date on which this document has been created"),
'state': fields.selection([('draft', 'Request for Quotation'),
('confirmed', 'Waiting Supplier Ack'),
('approved', 'Approved'),
@ -52,23 +52,23 @@ class purchase_report(osv.osv):
'user_id':fields.many2one('res.users', 'Responsible', 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),
'quantity': fields.float('Quantity', readonly=True),
'unit_quantity': fields.integer('Unit Quantity', readonly=True, oldname='quantity'),
'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average 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"),
'nbr': fields.integer('# of Lines', readonly=True),
'nbr_lines': fields.integer('# of Lines', readonly=True, oldname='nbr'),
'category_id': fields.many2one('product.category', 'Category', readonly=True)
}
_order = 'date desc, price_total desc'
_order = 'date_order desc, price_total desc'
def init(self, cr):
tools.sql.drop_view_if_exists(cr, 'purchase_report')
cr.execute("""
create or replace view purchase_report as (
select
min(l.id) as id,
date(s.date_order) as date,
s.date_order as date_order,
s.state,
s.date_approve,
s.minimum_planned_date as expected_date,
@ -83,10 +83,10 @@ class purchase_report(osv.osv):
t.categ_id as category_id,
t.uom_id as product_uom,
s.location_id as location_id,
sum(l.product_qty/u.factor*u2.factor) as quantity,
sum(l.product_qty/u.factor*u2.factor) as unit_quantity,
extract(epoch from age(s.date_approve,s.date_order))/(24*60*60)::decimal(16,2) as delay,
extract(epoch from age(l.date_planned,s.date_order))/(24*60*60)::decimal(16,2) as delay_pass,
count(*) as nbr,
count(*) as nbr_lines,
sum(l.price_unit*l.product_qty)::decimal(16,2) as price_total,
avg(100.0 * (l.price_unit*l.product_qty) / NULLIF(ip.value_float*l.product_qty/u.factor*u2.factor, 0.0))::decimal(16,2) as negociation,
sum(ip.value_float*l.product_qty/u.factor*u2.factor)::decimal(16,2) as price_standard,

View File

@ -7,23 +7,45 @@
<field name="arch" type="xml">
<graph string="Purchase Orders Statistics" type="pivot">
<field name="partner_id" type="row"/>
<field name="product_id" type="row"/>
<field name="nbr" type="measure"/>
<field name="quantity" type="measure"/>
<field name="price_average" type="measure"/>
<field name="price_standard" type="measure"/>
<field name="date_order" interval="month" type="col"/>
<field name="price_total" type="measure"/>
<field name="unit_quantity" type="measure"/>
<field name="price_average" type="measure"/>
</graph>
</field>
</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_order:month'], 'measures': ['unit_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">
<field name="name">report.purchase.order.search</field>
<field name="model">purchase.report</field>
<field name="arch" type="xml">
<search string="Purchase Orders">
<filter icon="terp-document-new" 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="Quotations" name="quotes" domain="[('state','=','draft')]"/>
<filter string="Orders" name="orders" domain="[('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]"/>
<field name="partner_id"/>
<field name="product_id"/>
<group expand="0" string="Extended Filters">
@ -32,22 +54,18 @@
<field name="location_id"/>
<field name="picking_type_id"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="date"/>
<field name="date_order"/>
<field name="date_approve"/>
<field name="expected_date"/>
</group>
<group expand="1" string="Group By">
<filter string="Supplier" name="group_partner_id" icon="terp-personal" context="{'group_by':'partner_id'}"/>
<filter string="Responsible" name="Responsible" icon="terp-personal" context="{'group_by':'user_id'}"/>
<filter string="Validated by" icon="terp-personal" context="{'group_by':'validator'}"/>
<filter string="Product" name="group_product_id" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
<filter string="Category" name="group_category_id" icon="terp-stock_symbol-selection" context="{'group_by':'category_id'}"/>
<filter string="Warehouse" icon="terp-go-home" context="{'group_by':'picking_type_id'}"/>
<filter string="Reference UOM" name="group_product_uom" icon="terp-mrp" context="{'group_by':'product_uom'}"/>
<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"/>
<filter string="Supplier" name="group_partner_id" context="{'group_by':'partner_id'}"/>
<filter string="Responsible" name="Responsible" context="{'group_by':'user_id'}"/>
<filter string="Category of product" name="group_category_id" context="{'group_by':'category_id'}"/>
<filter string="Status" context="{'group_by':'state'}"/>
<filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<separator/>
<filter string="Order Month" context="{'group_by':'date_order:month'}" help="Order of Day"/>
</group>
</search>
</field>
@ -59,7 +77,7 @@
<field name="view_type">form</field>
<field name="view_mode">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>
</record>

View File

@ -26,10 +26,10 @@ class sale_report(osv.osv):
_name = "sale.report"
_description = "Sales Orders Statistics"
_auto = False
_rec_name = 'date'
_rec_name = 'date_order'
_columns = {
'date': fields.datetime('Date Order', readonly=True),
'date_order': fields.datetime('Date Order', readonly=True, oldname='date'),
'date_confirm': fields.date('Date Confirm', readonly=True),
'product_id': fields.many2one('product.product', 'Product', 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),
'delay': fields.float('Commitment Delay', digits=(16,2), readonly=True),
'categ_id': fields.many2one('product.category','Category of Product', readonly=True),
'nbr': fields.integer('# of Lines', readonly=True),
'nbr_lines': fields.integer('# of Lines', readonly=True, oldname='nbr'),
'state': fields.selection([
('draft', 'Quotation'),
('waiting_date', 'Waiting Schedule'),
@ -55,7 +55,7 @@ class sale_report(osv.osv):
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
}
_order = 'date desc'
_order = 'date_order desc'
def _select(self):
select_str = """
@ -64,8 +64,8 @@ class sale_report(osv.osv):
t.uom_id as product_uom,
sum(l.product_uom_qty / u.factor * u2.factor) as product_uom_qty,
sum(l.product_uom_qty * l.price_unit * (100.0-l.discount) / 100.0) as price_total,
count(*) as nbr,
s.date_order as date,
count(*) as nbr_lines,
s.date_order as date_order,
s.date_confirm as date_confirm,
s.partner_id as partner_id,
s.user_id as user_id,
@ -82,7 +82,7 @@ class sale_report(osv.osv):
def _from(self):
from_str = """
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_template t on (p.product_tmpl_id=t.id)
left join product_uom u on (u.id=l.product_uom)

View File

@ -7,34 +7,38 @@
<field name="model">sale.report</field>
<field name="arch" type="xml">
<graph string="Sales Analysis" type="pivot" stacked="True">
<field name="user_id" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="section_id" type="row"/>
<field name="date_order" interval="month" type="col"/>
<field name="price_total" type="measure"/>
</graph>
</field>
</record>
<!-- 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_order','&lt;=', time.strftime('%%Y-12-31')), '&amp;', ('date_order','&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">
<field name="name">By Salespersons</field>
<field name="model_id">sale.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date:month', 'user_id']}</field>
<field name="context">{'group_by': ['date_order:month', 'user_id']}</field>
</record>
<record id="filter_sale_report_salesteam" model="ir.filters">
<field name="name">By Salesteam</field>
<field name="model_id">sale.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date:month', 'section_id']}</field>
<field name="context">{'group_by': ['date_order:month', 'section_id']}</field>
</record>
<record id="filter_isale_report_product" model="ir.filters">
<field name="name">By Product</field>
<field name="model_id">sale.report</field>
<field name="domain">[]</field>
<field name="user_id" eval="False"/>
<field name="context">{'group_by': ['date:month', 'product_id']}</field>
<field name="context">{'group_by': ['date_order:month', 'product_id']}</field>
</record>
<record id="view_order_product_search" model="ir.ui.view">
@ -42,10 +46,9 @@
<field name="model">sale.report</field>
<field name="arch" type="xml">
<search string="Sales Analysis">
<field name="date"/>
<field name="date_order"/>
<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'))]"/>
<separator/>
<filter string="This Year" name="year" invisible="1" domain="[('date_order','&lt;=', time.strftime('%%Y-12-31')),('date_order','&gt;=',time.strftime('%%Y-01-01'))]"/>
<filter name="Quotations" domain="[('state','in',('draft','sent'))]"/>
<filter name="Sales" string="Sales" domain="[('state','not in',('draft','sent','cancel'))]"/>
<separator/>
@ -58,16 +61,14 @@
<field name="company_id" groups="base.group_multi_company"/>
</group>
<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="Partner" icon="terp-partner" name="Customer" context="{'group_by':'partner_id'}"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True}"/>
<filter string="Reference Unit of Measure" icon="terp-mrp" context="{'group_by':'product_uom'}"/>
<filter string="Category of Product" icon="terp-stock_symbol-selection" name="Category" context="{'group_by':'categ_id'}"/>
<filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'analytic_account_id'}" groups="analytic.group_analytic_accounting"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<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"/>
<filter string="Customer" name="Customer" context="{'group_by':'partner_id'}"/>
<filter string="Category of Product" name="Category" context="{'group_by':'categ_id'}"/>
<filter string="Status" context="{'group_by':'state'}"/>
<filter string="Company" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
<separator/>
<filter string="Order Month" context="{'group_by':'date_order:month'}" help="Ordered date of the sales order"/>
</group>
</search>
</field>
@ -80,7 +81,7 @@
<field name="view_mode">graph</field>
<field name="search_view_id" ref="view_order_product_search"/>
<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>
</record>

View File

@ -167,7 +167,7 @@
<field name="th_weight" invisible="1"/>
<field name="product_id"
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)"/>
<field name="name"/>
<field name="product_uom_qty"
@ -500,7 +500,7 @@
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<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">
<field string="Sales" name="sales_count" widget="statinfo" />
</button>
@ -514,7 +514,7 @@
<field name="inherit_id" ref="product.product_template_only_form_view"/>
<field name="arch" type="xml">
<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">
<field string="Sales" name="sales_count" widget="statinfo" />
</button>
@ -535,7 +535,7 @@
</xpath>
</field>
</record>
<!-- Update account invoice list view!-->
<record model="ir.ui.view" id="account_invoice_tree">
<field name="name">Account Invoice</field>
@ -559,7 +559,7 @@
<xpath expr="//field[@name='user_id']" position="after">
<field name="section_id" groups="base.group_multi_salesteams"/>
</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"/>
</xpath>
</field>

View File

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