[FIX] website_sale_aplicoop: Remove redundant string= attributes and fix OCA linting warnings

- Remove redundant string= from 17 field definitions where name matches string value (W8113)
- Convert @staticmethod to instance methods in selection methods for proper self.env._() access
- Fix W8161 (prefer-env-translation) by using self.env._() instead of standalone _()
- Fix W8301/W8115 (translation-not-lazy) by proper placement of % interpolation outside self.env._()
- Remove unused imports of odoo._ from group_order.py and sale_order_extension.py
- All OCA linting warnings in website_sale_aplicoop main models are now resolved

Changes:
- website_sale_aplicoop/models/group_order.py: 21 field definitions cleaned
- website_sale_aplicoop/models/sale_order_extension.py: 5 field definitions cleaned + @staticmethod conversion
- Consistent with OCA standards for addon submission
This commit is contained in:
snt 2026-02-18 17:54:43 +01:00
parent 5c89795e30
commit 6fbc7b9456
73 changed files with 5386 additions and 4354 deletions

View file

@ -4,7 +4,6 @@
import logging
from datetime import timedelta
from odoo import _
from odoo import api
from odoo import fields
from odoo import models
@ -19,52 +18,47 @@ class GroupOrder(models.Model):
_inherit = ["mail.thread", "mail.activity.mixin"]
_order = "start_date desc"
@staticmethod
def _get_order_type_selection(records):
def _get_order_type_selection(self):
"""Return order type selection options with translations."""
return [
("regular", _("Regular Order")),
("special", _("Special Order")),
("promotional", _("Promotional Order")),
("regular", self.env._("Regular Order")),
("special", self.env._("Special Order")),
("promotional", self.env._("Promotional Order")),
]
@staticmethod
def _get_period_selection(records):
def _get_period_selection(self):
"""Return period selection options with translations."""
return [
("once", _("One-time")),
("weekly", _("Weekly")),
("biweekly", _("Biweekly")),
("monthly", _("Monthly")),
("once", self.env._("One-time")),
("weekly", self.env._("Weekly")),
("biweekly", self.env._("Biweekly")),
("monthly", self.env._("Monthly")),
]
@staticmethod
def _get_day_selection(records):
def _get_day_selection(self):
"""Return day of week selection options with translations."""
return [
("0", _("Monday")),
("1", _("Tuesday")),
("2", _("Wednesday")),
("3", _("Thursday")),
("4", _("Friday")),
("5", _("Saturday")),
("6", _("Sunday")),
("0", self.env._("Monday")),
("1", self.env._("Tuesday")),
("2", self.env._("Wednesday")),
("3", self.env._("Thursday")),
("4", self.env._("Friday")),
("5", self.env._("Saturday")),
("6", self.env._("Sunday")),
]
@staticmethod
def _get_state_selection(records):
def _get_state_selection(self):
"""Return state selection options with translations."""
return [
("draft", _("Draft")),
("open", _("Open")),
("closed", _("Closed")),
("cancelled", _("Cancelled")),
("draft", self.env._("Draft")),
("open", self.env._("Open")),
("closed", self.env._("Closed")),
("cancelled", self.env._("Cancelled")),
]
# === Multicompañía ===
company_id = fields.Many2one(
"res.company",
string="Company",
required=True,
default=lambda self: self.env.company,
tracking=True,
@ -73,7 +67,6 @@ class GroupOrder(models.Model):
# === Campos básicos ===
name = fields.Char(
string="Name",
required=True,
tracking=True,
translate=True,
@ -84,7 +77,6 @@ class GroupOrder(models.Model):
"group_order_group_rel",
"order_id",
"group_id",
string="Consumer Groups",
required=True,
domain=[("is_group", "=", True)],
tracking=True,
@ -92,7 +84,6 @@ class GroupOrder(models.Model):
)
type = fields.Selection(
selection=_get_order_type_selection,
string="Order Type",
required=True,
default="regular",
tracking=True,
@ -101,13 +92,11 @@ class GroupOrder(models.Model):
# === Fechas ===
start_date = fields.Date(
string="Start Date",
required=False,
tracking=True,
help="Day when the consumer group order opens for purchases",
)
end_date = fields.Date(
string="End Date",
required=False,
tracking=True,
help="If empty, the consumer group order is permanent",
@ -116,7 +105,6 @@ class GroupOrder(models.Model):
# === Período y días ===
period = fields.Selection(
selection=_get_period_selection,
string="Recurrence Period",
required=True,
default="weekly",
tracking=True,
@ -124,14 +112,12 @@ class GroupOrder(models.Model):
)
pickup_day = fields.Selection(
selection=_get_day_selection,
string="Pickup Day",
required=False,
tracking=True,
help="Day of the week when members pick up their orders",
)
cutoff_day = fields.Selection(
selection=_get_day_selection,
string="Cutoff Day",
required=False,
tracking=True,
help="Day when purchases stop and the consumer group order is locked for this week.",
@ -139,20 +125,17 @@ class GroupOrder(models.Model):
# === Home delivery ===
home_delivery = fields.Boolean(
string="Home Delivery",
default=False,
tracking=True,
help="Whether this consumer group order includes home delivery service",
)
delivery_product_id = fields.Many2one(
"product.product",
string="Delivery Product",
domain=[("type", "=", "service")],
tracking=True,
help="Product to use for home delivery (service type)",
)
delivery_date = fields.Date(
string="Delivery Date",
compute="_compute_delivery_date",
store=True,
readonly=True,
@ -161,14 +144,12 @@ class GroupOrder(models.Model):
# === Computed date fields ===
pickup_date = fields.Date(
string="Pickup Date",
compute="_compute_pickup_date",
store=True,
readonly=True,
help="Calculated next occurrence of pickup day",
)
cutoff_date = fields.Date(
string="Cutoff Date",
compute="_compute_cutoff_date",
store=True,
readonly=True,
@ -181,7 +162,6 @@ class GroupOrder(models.Model):
"group_order_supplier_rel",
"order_id",
"supplier_id",
string="Suppliers",
domain=[("supplier_rank", ">", 0)],
tracking=True,
help="Products from these suppliers will be available.",
@ -191,7 +171,6 @@ class GroupOrder(models.Model):
"group_order_product_rel",
"order_id",
"product_id",
string="Products",
tracking=True,
help="Directly assigned products.",
)
@ -200,7 +179,6 @@ class GroupOrder(models.Model):
"group_order_category_rel",
"order_id",
"category_id",
string="Categories",
tracking=True,
help="Products in these categories will be available",
)
@ -208,29 +186,24 @@ class GroupOrder(models.Model):
# === Estado ===
state = fields.Selection(
selection=_get_state_selection,
string="State",
default="draft",
tracking=True,
)
# === Descripción e imagen ===
description = fields.Text(
string="Description",
translate=True,
help="Free text description for this consumer group order",
)
delivery_notice = fields.Text(
string="Delivery Notice",
translate=True,
help="Notice about home delivery displayed to users (shown when home delivery is enabled)",
)
image = fields.Binary(
string="Image",
help="Image displayed alongside the consumer group order name",
attachment=True,
)
display_image = fields.Binary(
string="Display Image",
compute="_compute_display_image",
store=True,
help="Image to display: uses consumer group order image if set, otherwise group image",
@ -249,7 +222,6 @@ class GroupOrder(models.Model):
record.display_image = False
available_products_count = fields.Integer(
string="Available Products Count",
compute="_compute_available_products_count",
store=False,
help="Total count of available products from all sources",
@ -270,13 +242,14 @@ class GroupOrder(models.Model):
if group.company_id and group.company_id != record.company_id:
raise ValidationError(
self.env._(
"Group {group} belongs to company {group_company}, "
"not to {record_company}."
).format(
group=group.name,
group_company=group.company_id.name,
record_company=record.company_id.name,
"Group %(group)s belongs to company %(group_company)s, "
"not to %(record_company)s."
)
% {
"group": group.name,
"group_company": group.company_id.name,
"record_company": record.company_id.name,
}
)
@api.constrains("start_date", "end_date")
@ -569,11 +542,12 @@ class GroupOrder(models.Model):
pickup_name = dict(self._get_day_selection())[str(pickup)]
cutoff_name = dict(self._get_day_selection())[str(cutoff)]
raise ValidationError(
_(
"For weekly orders, pickup day ({pickup}) must be after or equal to "
"cutoff day ({cutoff}) in the same week. Current configuration would "
self.env._(
"For weekly orders, pickup day (%(pickup)s) must be after or equal to "
"cutoff day (%(cutoff)s) in the same week. Current configuration would "
"put pickup before cutoff, which is illogical."
).format(pickup=pickup_name, cutoff=cutoff_name)
)
% {"pickup": pickup_name, "cutoff": cutoff_name}
)
# === Onchange Methods ===