[MERGE] sale,pos_sale,website_sale: prepare for sale_enterprise
We want to add a dashboard view for sale in enterprise, for this we need to make changes in the way views are defined on the actions (use act_window.views) in sale. We also need to modify the demo data in order to have beutiful display in demo mode. Task: #59409 Closes #25940
This commit is contained in:
@@ -56,7 +56,10 @@ class SaleReport(models.Model):
|
||||
(select sum(t.volume*l.qty/u.factor) from pos_order_line l
|
||||
join product_product p on (l.product_id=p.id)
|
||||
left join product_template t on (p.product_tmpl_id=t.id)
|
||||
left join uom_uom u on (u.id=t.uom_id)) AS volume
|
||||
left join uom_uom u on (u.id=t.uom_id)) AS volume,
|
||||
l.discount as discount,
|
||||
sum((l.price_unit * l.discount / 100.0 / COALESCE(cr.rate, 1.0))) as discount_amount,
|
||||
NULL as order_id
|
||||
'''
|
||||
|
||||
for field in fields.keys():
|
||||
|
||||
@@ -46,6 +46,11 @@ class SaleReport(models.Model):
|
||||
weight = fields.Float('Gross Weight', readonly=True)
|
||||
volume = fields.Float('Volume', readonly=True)
|
||||
|
||||
discount = fields.Float('Discount %', readonly=True)
|
||||
discount_amount = fields.Float('Discount Amount', readonly=True)
|
||||
|
||||
order_id = fields.Integer('Order ID', readonly=True)
|
||||
|
||||
def _query(self, with_clause='', fields={}, groupby='', from_clause=''):
|
||||
with_ = """currency_rate as (%s) %s""" % (self.env['res.currency']._select_companies_rates(), with_clause)
|
||||
|
||||
@@ -78,7 +83,10 @@ class SaleReport(models.Model):
|
||||
partner.country_id as country_id,
|
||||
partner.commercial_partner_id as commercial_partner_id,
|
||||
sum(p.weight * l.product_uom_qty / u.factor * u2.factor) as weight,
|
||||
sum(p.volume * l.product_uom_qty / u.factor * u2.factor) as volume
|
||||
sum(p.volume * l.product_uom_qty / u.factor * u2.factor) as volume,
|
||||
l.discount as discount,
|
||||
sum((l.price_unit * l.discount / 100.0 / COALESCE(cr.rate, 1.0))) as discount_amount,
|
||||
s.id as order_id
|
||||
"""
|
||||
|
||||
for field in fields.values():
|
||||
@@ -117,7 +125,9 @@ class SaleReport(models.Model):
|
||||
s.team_id,
|
||||
p.product_tmpl_id,
|
||||
partner.country_id,
|
||||
partner.commercial_partner_id %s
|
||||
partner.commercial_partner_id,
|
||||
l.discount,
|
||||
s.id %s
|
||||
""" % (groupby)
|
||||
|
||||
return 'WITH %s (SELECT %s FROM %s WHERE l.product_id IS NOT NULL GROUP BY %s)' % (with_, select_, from_, groupby_)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<field name="name">sale.report.graph</field>
|
||||
<field name="model">sale.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Sales Analysis">
|
||||
<graph string="Sales Analysis" type="line">
|
||||
<field name="date" type="row" interval="day"/>
|
||||
<field name="price_subtotal" type="measure"/>
|
||||
</graph>
|
||||
@@ -31,9 +31,12 @@
|
||||
<search string="Sales Analysis">
|
||||
<field name="date"/>
|
||||
<filter string="Date" name="year" invisible="1" date="date" default_period="this_year"/>
|
||||
<filter name="Quotations" string="Quotations" domain="[('state','in', ('draft', 'sent'))]"/>
|
||||
<filter name="Sales" string="Sales" domain="[('state','not in',('draft', 'cancel', 'sent'))]"/>
|
||||
<filter name="Quotations" string="Quotations" domain="[('state','=', 'draft')]"/>
|
||||
<filter name="quotation_sent" string="Quotation Sent" domain="[('state', '=', 'sent')]"/>
|
||||
<filter name="Sales" string="Sales Orders" domain="[('state','not in',('draft', 'cancel', 'sent'))]"/>
|
||||
<separator/>
|
||||
<filter name="to_invoice" string="To Invoice" domain="[('invoice_status', '=', 'to invoice')]"/>
|
||||
<filter name="fully_invoiced" string="Fully Invoiced" domain="[('invoice_status', '=', 'invoiced')]"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="user_id"/>
|
||||
|
||||
@@ -566,7 +566,7 @@
|
||||
<field name="partner_id" operator="child_of"/>
|
||||
<field name="user_id"/>
|
||||
<field name="team_id" string="Sales Team"/>
|
||||
<field name="analytic_account_id"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
|
||||
<!-- We only allow to search on the following sale order line fields (product, name) because the other fields, such as price, quantity, ...
|
||||
will not be searched as often, and if they need to be searched it's usually in the context of products
|
||||
and then they can be searched from the page listing the sale order lines related to a product (from the product itself).
|
||||
@@ -649,6 +649,48 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_order_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="sale.view_order_tree"/>
|
||||
<field name="act_window_id" ref="action_orders"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_order_kanban" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_kanban"/>
|
||||
<field name="act_window_id" ref="action_orders"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_order_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="sale.view_order_form"/>
|
||||
<field name="act_window_id" ref="action_orders"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_order_calendar" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="4"/>
|
||||
<field name="view_mode">calendar</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_calendar"/>
|
||||
<field name="act_window_id" ref="action_orders"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_order_pivot" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="5"/>
|
||||
<field name="view_mode">pivot</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_pivot"/>
|
||||
<field name="act_window_id" ref="action_orders"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_order_graph" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="6"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_graph"/>
|
||||
<field name="act_window_id" ref="action_orders"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_sale_order"
|
||||
name="Orders"
|
||||
action="action_orders"
|
||||
@@ -732,9 +774,6 @@
|
||||
<field name="name">Quotations</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="view_quotation_tree"/>
|
||||
<field name="view_mode">tree,kanban,form,calendar,pivot,graph</field>
|
||||
<field name="search_view_id" ref="sale_order_view_search_inherit_quotation"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
@@ -745,6 +784,48 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_quotation_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="sale.view_quotation_tree"/>
|
||||
<field name="act_window_id" ref="action_quotations"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_quotation_kanban" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_kanban"/>
|
||||
<field name="act_window_id" ref="action_quotations"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_quotation_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="sale.view_order_form"/>
|
||||
<field name="act_window_id" ref="action_quotations"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_quotation_calendar" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="4"/>
|
||||
<field name="view_mode">calendar</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_calendar"/>
|
||||
<field name="act_window_id" ref="action_quotations"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_quotation_pivot" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="5"/>
|
||||
<field name="view_mode">pivot</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_pivot"/>
|
||||
<field name="act_window_id" ref="action_quotations"/>
|
||||
</record>
|
||||
|
||||
<record id="sale_order_action_view_quotation_graph" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="6"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="sale.view_sale_order_graph"/>
|
||||
<field name="act_window_id" ref="action_quotations"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_sale_quotations"
|
||||
action="action_quotations_with_onboarding"
|
||||
parent="sale_order_menu"
|
||||
|
||||
@@ -572,4 +572,10 @@
|
||||
<!-- action_confirm for confirmation date -->
|
||||
<function model="sale.order" name="action_confirm" eval="[[ref('website_sale_order_14')]]"/>
|
||||
|
||||
<function model="sale.order" name="_set_demo_create_date">
|
||||
<value eval="[ref('website_sale_order_1'), ref('website_sale_order_2'), ref('website_sale_order_3'), ref('website_sale_order_4'),
|
||||
ref('website_sale_order_5'), ref('website_sale_order_6'), ref('website_sale_order_7')]"/>
|
||||
<value eval="(datetime.now()-timedelta(days=8)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</function>
|
||||
|
||||
</odoo>
|
||||
|
||||
@@ -256,3 +256,9 @@ class SaleOrder(models.Model):
|
||||
self.payment_tx_id.state = 'done'
|
||||
else:
|
||||
raise ValidationError(_("The quote should be sent and the payment acquirer type should be manual or wire transfer"))
|
||||
|
||||
def _set_demo_create_date(self, create_date):
|
||||
self.env.cr.execute("""UPDATE sale_order SET create_date=%s WHERE id IN %s """, (create_date, tuple(self.ids)))
|
||||
self.modified(['create_date'])
|
||||
if self.env.recompute and self.env.context.get('recompute', True):
|
||||
self.recompute()
|
||||
|
||||
Reference in New Issue
Block a user