mirror of
https://github.com/bringout/oca-ocb-sale.git
synced 2026-04-27 07:52:03 +02:00
19.0 vanilla
This commit is contained in:
parent
79f83631d5
commit
73afc09215
6267 changed files with 1534193 additions and 1130106 deletions
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<template id="event_report_template_full_page_ticket_inherit_sale" inherit_id="event.event_report_template_full_page_ticket">
|
||||
<xpath expr="//div[hasclass('o_event_full_page_ticket_side_info_booked_by')]" position="before">
|
||||
<div t-if="attendee and attendee.sale_order_id" class="mb-2">
|
||||
<div class="o_event_full_page_ticket_font_faded o_event_full_page_ticket_small_caps fw-bold">Order Ref</div>
|
||||
<div class="o_event_full_page_ticket_small" t-field="attendee.sale_order_id"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('o_event_full_page_ticket_side_info')]" position="inside">
|
||||
<div t-if="attendee and attendee.sale_order_id" class="mb-2">
|
||||
<div class="o_event_full_page_ticket_font_faded o_event_full_page_ticket_small_caps fw-bold">Order Date</div>
|
||||
<div class="o_event_full_page_ticket_small" t-out="attendee.sale_order_id.sudo().date_order.date()"/>
|
||||
</div>
|
||||
<div t-if="attendee and attendee.sale_order_line_id.sudo().price_unit">
|
||||
<div class="o_event_full_page_ticket_font_faded o_event_full_page_ticket_small_caps fw-bold">Price</div>
|
||||
<div class="o_event_full_page_ticket_small" t-field="attendee.sale_order_line_id.sudo().price_unit"
|
||||
t-options="{'widget': 'monetary', 'display_currency': attendee.sale_order_line_id.sudo().currency_id}"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models, tools
|
||||
from odoo.addons.sale.models.sale_order import SALE_ORDER_STATE
|
||||
|
||||
|
||||
class EventSaleReport(models.Model):
|
||||
|
|
@ -16,6 +17,7 @@ class EventSaleReport(models.Model):
|
|||
event_id = fields.Many2one('event.event', string='Event', readonly=True)
|
||||
event_date_begin = fields.Date(string='Event Start Date', readonly=True)
|
||||
event_date_end = fields.Date(string='Event End Date', readonly=True)
|
||||
event_slot_id = fields.Many2one('event.slot', string='Event Slot', readonly=True)
|
||||
event_ticket_id = fields.Many2one('event.event.ticket', string='Event Ticket', readonly=True)
|
||||
event_ticket_price = fields.Float(string='Ticket price', readonly=True)
|
||||
event_registration_create_date = fields.Date(string='Registration Date', readonly=True)
|
||||
|
|
@ -31,29 +33,23 @@ class EventSaleReport(models.Model):
|
|||
sale_order_id = fields.Many2one('sale.order', readonly=True)
|
||||
sale_order_date = fields.Datetime('Order Date', readonly=True)
|
||||
sale_order_partner_id = fields.Many2one('res.partner', string='Customer', readonly=True)
|
||||
sale_order_state = fields.Selection([
|
||||
('draft', 'Quotation'),
|
||||
('sent', 'Quotation Sent'),
|
||||
('sale', 'Sales Order'),
|
||||
('done', 'Locked'),
|
||||
('cancel', 'Cancelled'),
|
||||
], string='Sale Order Status', readonly=True)
|
||||
sale_order_state = fields.Selection(
|
||||
selection=SALE_ORDER_STATE, string='Sale Order Status', readonly=True)
|
||||
sale_order_user_id = fields.Many2one('res.users', string='Salesperson', readonly=True)
|
||||
sale_order_line_id = fields.Many2one('sale.order.line', readonly=True)
|
||||
sale_price = fields.Float('Revenues', readonly=True)
|
||||
sale_price_untaxed = fields.Float('Untaxed Revenues', readonly=True)
|
||||
invoice_partner_id = fields.Many2one('res.partner', string='Invoice Address', readonly=True)
|
||||
is_paid = fields.Boolean('Is Paid', readonly=True)
|
||||
payment_status = fields.Selection(string="Payment Status", selection=[
|
||||
('to_pay', 'Not Paid'),
|
||||
('paid', 'Paid'),
|
||||
sale_status = fields.Selection(string="Payment Status", selection=[
|
||||
('to_pay', 'Not Sold'),
|
||||
('sold', 'Sold'),
|
||||
('free', 'Free'),
|
||||
])
|
||||
company_id = fields.Many2one('res.company', string='Company', readonly=True)
|
||||
|
||||
def init(self):
|
||||
tools.drop_view_if_exists(self._cr, self._table)
|
||||
self._cr.execute('CREATE OR REPLACE VIEW %s AS (%s);' % (self._table, self._query()))
|
||||
tools.drop_view_if_exists(self.env.cr, self._table)
|
||||
self.env.cr.execute('CREATE OR REPLACE VIEW %s AS (%s);' % (self._table, self._query()))
|
||||
|
||||
def _query(self, with_=None, select=None, join=None, group_by=None):
|
||||
return "\n".join([
|
||||
|
|
@ -66,7 +62,7 @@ class EventSaleReport(models.Model):
|
|||
def _with_clause(self, *with_):
|
||||
# Extra clauses formatted as `cte1 AS (SELECT ...)`, `cte2 AS (SELECT ...)`...
|
||||
return """
|
||||
WITH
|
||||
WITH
|
||||
""" + ',\n '.join(with_) if with_ else ''
|
||||
|
||||
def _select_clause(self, *select):
|
||||
|
|
@ -74,19 +70,20 @@ WITH
|
|||
return """
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (ORDER BY event_registration.id) AS id,
|
||||
|
||||
|
||||
event_registration.id AS event_registration_id,
|
||||
event_registration.company_id AS company_id,
|
||||
event_registration.event_id AS event_id,
|
||||
event_registration.event_slot_id AS event_slot_id,
|
||||
event_registration.event_ticket_id AS event_ticket_id,
|
||||
event_registration.create_date AS event_registration_create_date,
|
||||
event_registration.name AS event_registration_name,
|
||||
event_registration.state AS event_registration_state,
|
||||
event_registration.state AS event_registration_state,
|
||||
event_registration.active AS active,
|
||||
event_registration.sale_order_id AS sale_order_id,
|
||||
event_registration.sale_order_line_id AS sale_order_line_id,
|
||||
event_registration.is_paid AS is_paid,
|
||||
|
||||
event_registration.sale_status AS sale_status,
|
||||
|
||||
event_event.event_type_id AS event_type_id,
|
||||
event_event.date_begin AS event_date_begin,
|
||||
event_event.date_end AS event_date_end,
|
||||
|
|
@ -98,7 +95,7 @@ SELECT
|
|||
sale_order.partner_id AS sale_order_partner_id,
|
||||
sale_order.state AS sale_order_state,
|
||||
sale_order.user_id AS sale_order_user_id,
|
||||
|
||||
|
||||
sale_order_line.product_id AS product_id,
|
||||
CASE
|
||||
WHEN sale_order_line.product_uom_qty = 0 THEN 0
|
||||
|
|
@ -113,18 +110,14 @@ SELECT
|
|||
sale_order_line.price_subtotal
|
||||
/ CASE COALESCE(sale_order.currency_rate, 0) WHEN 0 THEN 1.0 ELSE sale_order.currency_rate END
|
||||
/ sale_order_line.product_uom_qty
|
||||
END AS sale_price_untaxed,
|
||||
CASE
|
||||
WHEN sale_order_line.price_total = 0 THEN 'free'
|
||||
WHEN event_registration.is_paid THEN 'paid'
|
||||
ELSE 'to_pay'
|
||||
END payment_status""" + (',\n ' + ',\n '.join(select) if select else '')
|
||||
END AS sale_price_untaxed""" + (',\n ' + ',\n '.join(select) if select else '')
|
||||
|
||||
def _from_clause(self, *join_):
|
||||
# Extra clauses formatted as `column1`, `column2`...
|
||||
return """
|
||||
FROM event_registration
|
||||
LEFT JOIN event_event ON event_event.id = event_registration.event_id
|
||||
LEFT JOIN event_slot ON event_slot.id = event_registration.event_slot_id
|
||||
LEFT JOIN event_event_ticket ON event_event_ticket.id = event_registration.event_ticket_id
|
||||
LEFT JOIN sale_order ON sale_order.id = event_registration.sale_order_id
|
||||
LEFT JOIN sale_order_line ON sale_order_line.id = event_registration.sale_order_line_id
|
||||
|
|
|
|||
|
|
@ -21,13 +21,14 @@
|
|||
<group col="2">
|
||||
<group string="Event">
|
||||
<field name="event_type_id"/>
|
||||
<field name="event_id"/>
|
||||
<field name="event_id" placeholder="All Events"/>
|
||||
<field name="event_date_begin"/>
|
||||
</group>
|
||||
<group string="Registration">
|
||||
<field name="event_registration_id"/>
|
||||
<field name="event_registration_name"/>
|
||||
<field name="event_registration_create_date"/>
|
||||
<field name="event_slot_id"/>
|
||||
<field name="event_ticket_id"/>
|
||||
<field name="event_registration_state"/>
|
||||
</group>
|
||||
|
|
@ -64,11 +65,12 @@
|
|||
</record>
|
||||
|
||||
<record id="event_sale_report_view_tree" model="ir.ui.view">
|
||||
<field name="name">event.sale.report.view.tree</field>
|
||||
<field name="name">event.sale.report.view.list</field>
|
||||
<field name="model">event.sale.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Revenues" edit="false" create="false">
|
||||
<list string="Revenues" edit="false" create="false">
|
||||
<field name="event_id"/>
|
||||
<field name="event_slot_id"/>
|
||||
<field name="event_ticket_id"/>
|
||||
<field name="product_id" optional="hide"/>
|
||||
<field name="event_ticket_price"/>
|
||||
|
|
@ -79,9 +81,9 @@
|
|||
<field name="invoice_partner_id" optional="hide"/>
|
||||
<field name="event_registration_name" optional="hide"/>
|
||||
<field name="sale_order_state" widget="badge"
|
||||
decoration-success="sale_order_state == 'sale' or sale_order_state == 'done'"
|
||||
decoration-success="sale_order_state == 'sale'"
|
||||
decoration-info="sale_order_state == 'draft' or sale_order_state == 'sent'"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -96,23 +98,24 @@
|
|||
<field name="company_id"/>
|
||||
<filter string="Non-free tickets" name="priced_tickets" domain="[('event_ticket_price', '!=', 0)]"/>
|
||||
<separator/>
|
||||
<filter string="Free" name="free" domain="[('payment_status', '=', 'free')]"/>
|
||||
<filter string="Pending payment" name="payment_pending" domain="[('payment_status', '=', 'to_pay')]"/>
|
||||
<filter string="Paid" name="is_paid" domain="[('payment_status', '=', 'paid')]"/>
|
||||
<filter string="Free" name="free" domain="[('sale_status', '=', 'free')]"/>
|
||||
<filter string="Pending payment" name="payment_pending" domain="[('sale_status', '=', 'to_pay')]"/>
|
||||
<filter string="Sold" name="is_sold" domain="[('sale_status', '=', 'sold')]"/>
|
||||
<separator/>
|
||||
<filter string="Registration Date" name="event_registration_create_date" date="event_registration_create_date" default_period="this_year"/>
|
||||
<filter string="Registration Date" name="event_registration_create_date" date="event_registration_create_date" default_period="year"/>
|
||||
<separator/>
|
||||
<filter string="Upcoming/Running" name="upcoming" help="Upcoming events from today"
|
||||
domain="[('event_date_end', '>=', datetime.datetime.combine(context_today(), datetime.time(0,0,0)))]"/>
|
||||
domain="[('event_date_end', '>=', 'now')]"/>
|
||||
<filter string="Past Events" name="past" help="Events that have ended"
|
||||
domain="[('event_date_end', '<', datetime.datetime.combine(context_today(), datetime.time(0,0,0)))]"/>
|
||||
<filter string="Event Start Date" name="event_date_start" date="event_date_begin" default_period="this_year"/>
|
||||
domain="[('event_date_end', '<', 'now')]"/>
|
||||
<filter string="Event Start Date" name="event_date_start" date="event_date_begin" default_period="year"/>
|
||||
<filter string="Event End Date" name="event_date_end" date="event_date_end"/>
|
||||
<group expand="0" string="Group By">
|
||||
<group>
|
||||
<filter string="Event Type" name="group_by_event_type_id" context="{'group_by': 'event_type_id' }"/>
|
||||
<filter string="Event" name="group_by_event_id" context="{'group_by': 'event_id' }"/>
|
||||
<separator/>
|
||||
<filter string="Product" name="group_by_product_id" context="{'group_by': 'product_id'}"/>
|
||||
<filter string="Slot" name="group_by_slot_id" context="{'group_by': 'event_slot_id'}"/>
|
||||
<filter string="Ticket" name="group_by_ticket_id" context="{'group_by': 'event_ticket_id'}"/>
|
||||
<separator/>
|
||||
<filter string="Registration Status" name="group_by_registration_state"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue