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,
tag_ids = fields.Many2many(
comodel_name="hall.contract.tag",
string="Etiquette",
compute="_compute_tags",
search="_search_tags",
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)
comodel_name="hall.hall", string="Site", readonly=True
comodel_name="res.partner", string="Client", readonly=True
commercial_name = fields.Char("Enseigne", readonly=True)
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",
# ------------------------------------------------------
# Compute functions
# ------------------------------------------------------
self.tag_ids = self.env["hall.contract.tag"].search([])
def _search_tags(self, operator, value):
return [("contract_id.tag_ids", operator, value)]
# ------------------------------------------------------
# Query functions
# ------------------------------------------------------
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,
s.amount_untaxed_five,
s.amount_total_five,
s.amount_untaxed_ten,
s.amount_total_ten,
s.amount_untaxed_twenty,
s.amount_total_twenty
"""
def _from(self):
return """
FROM
hall_contract_sale s
LEFT JOIN
hall_contract c ON c.id = s.contract_id
"""
def _clause(self):
return """
"""
def init(self):
tools.drop_view_if_exists(self._cr, self._table)
self._cr.execute(
"CREATE view %s as %s %s %s"
% (self._table, self._select(), self._from(), self._clause())