[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

@ -1,8 +1,8 @@
# CSS Architecture - Website Sale Aplicoop
**Refactoring Date**: 7 de febrero de 2026
**Status**: ✅ Complete
**Previous Size**: 2,986 líneas en 1 archivo
**Refactoring Date**: 7 de febrero de 2026
**Status**: ✅ Complete
**Previous Size**: 2,986 líneas en 1 archivo
**New Size**: ~400 líneas distribuidas en 15 archivos modulares
---
@ -59,43 +59,43 @@ website_sale_aplicoop/static/src/css/
## 📊 Desglose de Archivos
### **base/** - Fundamentos
- **variables.css** (~80 líneas)
- **variables.css** (~80 líneas)
Colores, tipografía, espaciados, sombras, transiciones, z-index
- **utilities.css** (~15 líneas)
- **utilities.css** (~15 líneas)
Clases utilitarias reutilizables (.sr-only, .text-muted, etc)
### **layout/** - Estructura Global
- **pages.css** (~70 líneas)
- **pages.css** (~70 líneas)
Fondos de página, gradientes, pseudo-elementos (::before)
- **header.css** (~100 líneas)
- **header.css** (~100 líneas)
Headers, navegación, títulos, información de pedidos
- **responsive.css** (~200 líneas)
- **responsive.css** (~200 líneas)
Todas las media queries (4 breakpoints: 992px, 768px, 576px, etc)
### **components/** - Elementos Reutilizables
- **product-card.css** (~80 líneas)
- **product-card.css** (~80 líneas)
Tarjetas de producto con hover, imagen, título, precio
- **order-card.css** (~100 líneas)
- **order-card.css** (~100 líneas)
Tarjetas de orden (Eskaera) con metadatos, badges
- **cart.css** (~150 líneas)
- **cart.css** (~150 líneas)
Carrito lateral, items, total, botones save/reload
- **buttons.css** (~80 líneas)
- **buttons.css** (~80 líneas)
Botones primarios, checkout, acciones
- **quantity-control.css** (~100 líneas)
- **quantity-control.css** (~100 líneas)
Control de cantidad (spinners + input numérico)
- **forms.css** (~70 líneas)
- **forms.css** (~70 líneas)
Inputs, selects, checkboxes, labels
- **alerts.css** (~50 líneas)
- **alerts.css** (~50 líneas)
Alertas, notificaciones, toasts
### **sections/** - Layouts Específicos de Página
- **products-grid.css** (~25 líneas)
- **products-grid.css** (~25 líneas)
Grid de productos con responsive
- **order-list.css** (~40 líneas)
- **order-list.css** (~40 líneas)
Lista de órdenes (Eskaera page)
- **checkout.css** (~100 líneas)
- **checkout.css** (~100 líneas)
Tabla de checkout, totales, summary
- **info-cards.css** (~50 líneas)
- **info-cards.css** (~50 líneas)
Tarjetas de información, metadatos
---
@ -183,7 +183,7 @@ Permitiría mejor nesting y variables más poderosas.
## 📈 Cambios Visuales
**NINGUNO** - La refactorización es solo organizacional
**NINGUNO** - La refactorización es solo organizacional
El CSS compilado genera **exactamente el mismo output** que antes.
---
@ -231,6 +231,6 @@ grep -r "components/\|sections/\|base/\|layout/" css/website_sale.css
---
**Mantenido por**: Equipo de Frontend
**Última actualización**: 7 de febrero de 2026
**Mantenido por**: Equipo de Frontend
**Última actualización**: 7 de febrero de 2026
**Licencia**: AGPL-3.0

View file

@ -16,26 +16,27 @@
--info-color: #17a2b8;
--light-color: #f8f9fa;
--dark-color: #2d3748;
/* Text colors */
--text-primary: #1a202c;
--text-secondary: #4a5568;
--text-muted: #6b7280;
/* Border colors */
--border-light: #e2e8f0;
--border-medium: #cbd5e0;
--border-dark: #718096;
/* ========== TYPOGRAPHY ========== */
--font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
--font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
Arial, sans-serif;
--font-weight-light: 300;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
--font-weight-extrabold: 800;
/* ========== SPACING ========== */
--spacing-xs: 0.25rem;
--spacing-sm: 0.5rem;
@ -43,23 +44,23 @@
--spacing-lg: 1.5rem;
--spacing-xl: 2rem;
--spacing-2xl: 3rem;
/* ========== BORDER RADIUS ========== */
--radius-sm: 0.25rem;
--radius-md: 0.5rem;
--radius-lg: 0.75rem;
--radius-xl: 1rem;
/* ========== SHADOWS ========== */
--shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 25px rgba(0, 0, 0, 0.12);
/* ========== TRANSITIONS ========== */
--transition-fast: 200ms ease;
--transition-normal: 320ms cubic-bezier(.2, .9, .2, 1);
--transition-normal: 320ms cubic-bezier(0.2, 0.9, 0.2, 1);
--transition-slow: 500ms ease;
/* ========== Z-INDEX ========== */
--z-dropdown: 1000;
--z-sticky: 1020;

View file

@ -17,7 +17,8 @@
border: 1px solid rgba(90, 103, 216, 0.12);
border-radius: 0.75rem;
box-shadow: 0 6px 18px rgba(28, 37, 80, 0.06);
transition: transform 320ms cubic-bezier(.2, .9, .2, 1), box-shadow 320ms, border-color 320ms, background 320ms;
transition: transform 320ms cubic-bezier(0.2, 0.9, 0.2, 1), box-shadow 320ms, border-color 320ms,
background 320ms;
overflow: hidden;
display: flex;
flex-direction: column;
@ -139,7 +140,7 @@
}
.eskaera-order-card .btn::before {
content: '';
content: "";
position: absolute;
top: 50%;
left: 50%;

View file

@ -51,7 +51,11 @@
}
.product-card:hover .card-body {
background: linear-gradient(135deg, rgba(108, 117, 125, 0.10) 0%, rgba(108, 117, 125, 0.08) 100%);
background: linear-gradient(
135deg,
rgba(108, 117, 125, 0.1) 0%,
rgba(108, 117, 125, 0.08) 100%
);
}
.product-card .card-title {

View file

@ -21,7 +21,7 @@
.add-to-cart-form .input-group {
width: 100%;
gap: 0;
padding: 0;
padding: 0;
display: flex;
align-items: center;
justify-content: center;

View file

@ -5,7 +5,7 @@
/**
* Tag Filter Badges Component
*
*
* Styles for interactive tag filter badges in the product search/filter bar.
* Badges toggle between secondary (unselected) and primary (selected) states.
*/
@ -65,7 +65,7 @@
.tag-filter-badges {
gap: 0.375rem;
}
.tag-filter-badge {
padding: 0.375rem 0.625rem;
font-size: 0.8125rem;

View file

@ -4,13 +4,15 @@
* Page backgrounds and main layout structures
*/
html, body {
html,
body {
background-color: transparent !important;
background: transparent !important;
}
body.website_published {
background: linear-gradient(135deg,
background: linear-gradient(
135deg,
color-mix(in srgb, var(--primary-color) 30%, white),
color-mix(in srgb, var(--primary-color) 60%, black)
) !important;
@ -32,21 +34,24 @@ body.website_published .eskaera-checkout-page {
.eskaera-page,
.eskaera-generic-page {
background: linear-gradient(180deg,
background: linear-gradient(
180deg,
color-mix(in srgb, var(--primary-color) 10%, white),
color-mix(in srgb, var(--primary-color) 70%, black)
) !important;
}
.eskaera-shop-page {
background: linear-gradient(135deg,
background: linear-gradient(
135deg,
color-mix(in srgb, var(--primary-color) 10%, white),
color-mix(in srgb, var(--primary-color) 10%, rgb(135, 135, 135))
) !important;
}
.eskaera-checkout-page {
background: linear-gradient(-135deg,
background: linear-gradient(
-135deg,
color-mix(in srgb, var(--primary-color) 0%, white),
color-mix(in srgb, var(--primary-color) 60%, black)
) !important;
@ -54,29 +59,54 @@ body.website_published .eskaera-checkout-page {
.eskaera-page::before,
.eskaera-generic-page::before {
background-image:
radial-gradient(circle at 20% 50%, color-mix(in srgb, var(--primary-color, white) 20%, transparent) 0%, transparent 50%),
radial-gradient(circle at 80% 80%, color-mix(in srgb, var(--primary-color) 25%, transparent) 0%, transparent 50%),
radial-gradient(circle at 40% 20%, color-mix(in srgb, var(--primary-color, white) 15%, transparent) 0%, transparent 50%);
background-image: radial-gradient(
circle at 20% 50%,
color-mix(in srgb, var(--primary-color, white) 20%, transparent) 0%,
transparent 50%
),
radial-gradient(
circle at 80% 80%,
color-mix(in srgb, var(--primary-color) 25%, transparent) 0%,
transparent 50%
),
radial-gradient(
circle at 40% 20%,
color-mix(in srgb, var(--primary-color, white) 15%, transparent) 0%,
transparent 50%
);
}
.eskaera-shop-page::before {
background-image:
radial-gradient(circle at 15% 30%, color-mix(in srgb, var(--primary-color, white) 18%, transparent) 0%, transparent 50%),
radial-gradient(circle at 85% 70%, color-mix(in srgb, var(--primary-color) 22%, transparent) 0%, transparent 50%);
background-image: radial-gradient(
circle at 15% 30%,
color-mix(in srgb, var(--primary-color, white) 18%, transparent) 0%,
transparent 50%
),
radial-gradient(
circle at 85% 70%,
color-mix(in srgb, var(--primary-color) 22%, transparent) 0%,
transparent 50%
);
}
.eskaera-checkout-page::before {
background-image:
radial-gradient(circle at 20% 50%, color-mix(in srgb, var(--primary-color, white) 20%, transparent) 0%, transparent 50%),
radial-gradient(circle at 80% 80%, color-mix(in srgb, var(--primary-color) 25%, transparent) 0%, transparent 50%);
background-image: radial-gradient(
circle at 20% 50%,
color-mix(in srgb, var(--primary-color, white) 20%, transparent) 0%,
transparent 50%
),
radial-gradient(
circle at 80% 80%,
color-mix(in srgb, var(--primary-color) 25%, transparent) 0%,
transparent 50%
);
}
.eskaera-page::before,
.eskaera-shop-page::before,
.eskaera-generic-page::before,
.eskaera-checkout-page::before {
content: '';
content: "";
position: absolute;
top: 0;
left: 0;

View file

@ -17,20 +17,20 @@
.cart-items {
max-height: 400px;
}
#cart-items-container {
width: 100%;
padding: 0.75rem;
}
.list-group-item {
padding: 0.75rem;
}
.list-group-item h6 {
font-size: 0.95rem;
}
.list-group-item strong {
min-width: 70px;
}
@ -43,7 +43,7 @@
.cart-header h5 {
font-size: 1.25rem;
}
.cart-title-lg {
font-size: 1.25rem;
}
@ -476,13 +476,13 @@
.product-tags {
font-size: 1.1rem !important;
}
/* Scale down quantity input for 6-column layout */
.add-to-cart-form .product-qty {
font-size: 0.85rem;
max-width: 55px;
}
.add-to-cart-form .qty-decrease,
.add-to-cart-form .qty-increase {
font-size: 0.75rem;
@ -495,13 +495,13 @@
.product-tags {
font-size: 1.25rem !important;
}
/* Scale down quantity input for 5-column layout */
.add-to-cart-form .product-qty {
font-size: 0.9rem;
max-width: 60px;
}
.add-to-cart-form .qty-decrease,
.add-to-cart-form .qty-increase {
font-size: 0.8rem;

View file

@ -19,7 +19,7 @@
grid-template-columns: 1fr 1fr;
gap: 0.5rem;
align-items: start;
margin-top: 0.5rem;
margin-top: 0.5rem;
}
.card-meta-compact {

View file

@ -3,7 +3,7 @@
/**
* Website Sale Aplicoop - Main CSS Index File
* This file imports all component stylesheets in the correct order
*
*
* Architecture:
* 1. Base & Variables (colors, spacing, typography)
* 2. Layout & Pages (page backgrounds, containers)
@ -15,36 +15,36 @@
/* ============================================
1. BASE & VARIABLES
============================================ */
@import 'base/variables.css';
@import 'base/utilities.css';
@import "base/variables.css";
@import "base/utilities.css";
/* ============================================
2. LAYOUT & PAGES
============================================ */
@import 'layout/pages.css';
@import 'layout/header.css';
@import "layout/pages.css";
@import "layout/header.css";
/* ============================================
3. COMPONENTS (Reusable UI elements)
============================================ */
@import 'components/product-card.css';
@import 'components/order-card.css';
@import 'components/cart.css';
@import 'components/buttons.css';
@import 'components/quantity-control.css';
@import 'components/forms.css';
@import 'components/alerts.css';
@import 'components/tag-filter.css';
@import "components/product-card.css";
@import "components/order-card.css";
@import "components/cart.css";
@import "components/buttons.css";
@import "components/quantity-control.css";
@import "components/forms.css";
@import "components/alerts.css";
@import "components/tag-filter.css";
/* ============================================
4. SECTIONS (Page-specific layouts)
============================================ */
@import 'sections/products-grid.css';
@import 'sections/order-list.css';
@import 'sections/checkout.css';
@import 'sections/info-cards.css';
@import "sections/products-grid.css";
@import "sections/order-list.css";
@import "sections/checkout.css";
@import "sections/info-cards.css";
/* ============================================
5. RESPONSIVE DESIGN (Media queries)
============================================ */
@import 'layout/responsive.css';
@import "layout/responsive.css";