Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sales Analysis by cancellation reason #402

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions sale_cancel_reason/__openerp__.py
Expand Up @@ -20,8 +20,8 @@
#

{'name': 'Sale Cancel Reason',
'version': '8.0.1.1.0',
'author': "Camptocamp,Odoo Community Association (OCA)",
'version': '8.0.1.2.0',
'author': "Camptocamp,Jamotion,Odoo Community Association (OCA)",
'category': 'Sale',
'license': 'AGPL-3',
'complexity': 'normal',
Expand Down
21 changes: 19 additions & 2 deletions sale_cancel_reason/i18n/de.po
Expand Up @@ -4,6 +4,7 @@
#
# Translators:
# Rudolf Schnapka <rs@techno-flex.de>, 2015
# Sébastien Pulver <sp@jamotion.ch>, 2017
msgid ""
msgstr ""
"Project-Id-Version: sale-workflow (8.0)\n"
Expand All @@ -23,6 +24,11 @@ msgstr ""
msgid " Ask a reason for the sale order cancellation."
msgstr "Begründung für die Auftragsstornierung erfragen."

#. module: sale_cancel_reason
#: field:sale.report,ordnbr:0
msgid "# of Orders"
msgstr "# Aufträge"

#. module: sale_cancel_reason
#: view:sale.order.cancel:sale_cancel_reason.view_sale_order_cancel
msgid "Cancel"
Expand All @@ -31,13 +37,19 @@ msgstr "Abbrechen"
#. module: sale_cancel_reason
#: view:sale.order:sale_cancel_reason.view_order_form
msgid "Cancel Order"
msgstr "Auftrag stronieren"
msgstr "Auftrag stornieren"

#. module: sale_cancel_reason
#: view:sale.order:sale_cancel_reason.view_order_form
msgid "Cancel Quotation"
msgstr "Angebot stornieren"

#. module: sale_cancel_reason
#: view:sale.order:sale_cancel_reason.view_sales_order_filter
#: field:sale.report,cancel_reason_id:0
msgid "Cancellation Reason"
msgstr "Stornogrund"

#. module: sale_cancel_reason
#: view:sale.order:sale_cancel_reason.view_order_form
msgid "Cancellation reason:"
Expand Down Expand Up @@ -99,7 +111,12 @@ msgstr "Zuletzt akualisiert durch"
#: field:sale.order.cancel,write_date:0
#: field:sale.order.cancel.reason,write_date:0
msgid "Last Updated on"
msgstr "Zuletzt akualisiert am"
msgstr "Zuletzt aktualisiert am"

#. module: sale_cancel_reason
#: view:sale.order:sale_cancel_reason.view_sales_order_filter
msgid "Lost"
msgstr "Verloren"

#. module: sale_cancel_reason
#: model:sale.order.cancel.reason,name:sale_cancel_reason.cancel_reason_other_provider
Expand Down
32 changes: 32 additions & 0 deletions sale_cancel_reason/model/sale.py
Expand Up @@ -37,3 +37,35 @@ class SaleOrderCancelReason(models.Model):
_description = 'Sale Order Cancel Reason'

name = fields.Char('Reason', required=True, translate=True)


class SaleReport(models.Model):
_inherit = 'sale.report'

cancel_reason_id = fields.Many2one(
comodel_name="sale.order.cancel.reason",
string="Cancellation Reason",
readonly=True,
)

ordnbr = fields.Float(
string="# of Orders",
readonly=True,
)

def _select(self):
select_str = super(SaleReport, self)._select()
select_str += """,
s.cancel_reason_id,
count(*) / (select count(*) from sale_order_line
where order_id = s.id)::FLOAT ordnbr
"""
return select_str

def _group_by(self):
group_by_str = super(SaleReport, self)._group_by()
group_by_str += """,
s.cancel_reason_id,
s.id
"""
return group_by_str
30 changes: 29 additions & 1 deletion sale_cancel_reason/view/sale_view.xml
Expand Up @@ -20,14 +20,42 @@
</xpath>
<xpath expr="/form/sheet/h1[1]" position="after">
<h2 attrs="{'invisible': [('state', '!=', 'cancel')]}">
<label for="cancel_reason_id" string="Cancellation reason:"/>
<label for="cancel_reason_id" string="Cancellation Reason:"/>
<field name="cancel_reason_id" class="oe_inline"
options='{"no_open": True}' />
</h2>
</xpath>
</field>
</record>

<record id="view_sales_order_filter" model="ir.ui.view">
<field name="name">sale.order.list.select</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_sales_order_filter"/>
<field name="arch" type="xml">
<filter string="To Invoice" position="after">
<filter name="lost" string="Lost" domain="[('state', '=', 'cancel')]"/>
</filter>
<filter string="Order Month" position="after">
<separator/>
<filter string="Cancellation Reason" domain="[('state', '=', 'cancel')]"
context="{'group_by': 'cancel_reason_id'}"/>
</filter>

</field>
</record>

<record id="view_order_product_search" model="ir.ui.view">
<field name="name">sale.report.view_search.inherit</field>
<field name="model">sale.report</field>
<field name="inherit_id" ref="sale.view_order_product_search"/>
<field name="arch" type="xml">
<filter name="Sales" position="after">
<filter name="Lost" domain="[('state', '=', 'cancel')]"/>
</filter>
</field>
</record>

<record model="ir.ui.view" id="view_sale_order_cancel_reason_form">
<field name="name">Sale Order Cancel Reason</field>
<field name="model">sale.order.cancel.reason</field>
Expand Down