Newer
Older
# Copyright 2023 Le Filament (https://le-filament.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models, tools
class HallContractSaleReport(models.Model):
_name = "hall.contract.sale.report"
_description = "Sales Statistics"
_auto = False
_order = "day_date desc"
# ==== Sale fields ====
contract_id = fields.Many2one(
comodel_name="hall.contract", string="Contrat", readonly=True
)
day_date = fields.Date("Date statistique", required=True)
slot_id = fields.Many2one(
comodel_name="hall.day.slot", string="Créneau Horaire", readonly=True
)
nb_receipts = fields.Integer("Nombre de tickets")
nb_seats = fields.Integer("Nombre de couverts")
sales_excl_taxes = fields.Monetary("Total HT")
sales_incl_taxes = fields.Monetary("Total TTC")
currency_id = fields.Many2one(comodel_name="res.currency", readonly=True)
location = fields.Char("Lieu")
# ==== Contract fields ====
stand_id = fields.Many2one(comodel_name="hall.stand", string="Stand", readonly=True)
hall_id = fields.Many2one(comodel_name="hall.hall", string="Site", readonly=True)
partner_id = fields.Many2one(
comodel_name="res.partner", string="Client", readonly=True
average_ticket = fields.Monetary("Ticket moyen")
commercial_name = fields.Char("Enseigne", readonly=True)
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
type_job = fields.Selection(
selection=[
("food", "Restauration"),
("hybrid", "Hybride"),
("food_scholl", "Food school"),
("pop_up", "Pop up"),
],
string="Type",
readonly=True,
)
# ==== Other fields ====
day_name = fields.Selection(
selection=[
("1", "Lundi"),
("2", "Mardi"),
("3", "Mercredi"),
("4", "Jeudi"),
("5", "Vendredi"),
("6", "Samedi"),
("7", "Dimanche"),
],
string="Jour de la semaine",
readonly=True,
)
amount_untaxed_five = fields.Monetary("TVA 5,5% HT", readonly=True)
amount_total_five = fields.Monetary("TVA 5,5% TTC", readonly=True)
amount_untaxed_ten = fields.Monetary("TVA 10% HT", readonly=True)
amount_total_ten = fields.Monetary("TVA 10% TTC", readonly=True)
amount_untaxed_twenty = fields.Monetary("TVA 20% HT", readonly=True)
amount_total_twenty = fields.Monetary("TVA 20% TTC", readonly=True)
_depends = {
"hall.contract.sale": [
"contract_id",
"day_date",
"slot_id",
"nb_receipts",
"sales_excl_taxes",
"sales_incl_taxes",
],
"hall.contract": [
"hall_id",
"partner_id",
"manager_id",
],
}
def _select(self):
return """
SELECT
s.id,
s.contract_id,
s.day_date,
s.slot_id,
s.nb_receipts,
s.nb_seats,
s.sales_excl_taxes,
s.sales_incl_taxes,
s.currency_id,
s.location,
c.stand_id,
c.hall_id,
c.partner_id,
c.type_job,
extract(isodow from s.day_date)::varchar as day_name,
tva5.total_without_taxes as amount_untaxed_five,
tva5.total_with_taxes as amount_total_five,
tva10.total_without_taxes as amount_untaxed_ten,
tva10.total_with_taxes as amount_total_ten,
tva20.total_without_taxes as amount_untaxed_twenty,
tva20.total_with_taxes as amount_total_twenty
"""
def _from(self):
return """
FROM
hall_contract_sale s
LEFT JOIN
hall_contract c ON c.id = s.contract_id
LEFT JOIN
hall_contract_sale_tax tva5 ON tva5.sale_id = s.id and tva5.tax_rate = 0.055
LEFT JOIN
hall_contract_sale_tax tva10 ON tva10.sale_id = s.id and tva10.tax_rate = 0.1
LEFT JOIN
hall_contract_sale_tax tva20 ON tva20.sale_id = s.id and tva20.tax_rate = 0.2
"""
def init(self):
tools.drop_view_if_exists(self._cr, self._table)
self._cr.execute(
"CREATE view %s as %s %s" % (self._table, self._select(), self._from())
)