diff --git a/backend/services/falukantService.js b/backend/services/falukantService.js index 7d6bb26..06a150d 100644 --- a/backend/services/falukantService.js +++ b/backend/services/falukantService.js @@ -2954,7 +2954,7 @@ class FalukantService extends BaseService { /** * Zertifikat: abgeschlossene Produktionen über alle Regionen/Niederlassungen. - * Pro (Produkt, Kalendertag) nur ein Zähler – mehrere Niederlassungen in verschiedenen Regionen werden zusammengeführt. + * Es zählt jede abgeschlossene Produktion (ein Datensatz in falukant_log.production). * Filter bei gesetztem countSince wie Daemon (GET_PRODUCTION_CERTIFICATE_INPUT_ROWS): * COALESCE(production_timestamp, production_date::timestamp) >= countSince. * @@ -2970,12 +2970,8 @@ class FalukantService extends BaseService { const rows = await sequelize.query( ` SELECT COUNT(*)::int AS cnt - FROM ( - SELECT 1 - FROM falukant_log.production - WHERE producer_id = :producerId${sinceClause} - GROUP BY product_id, production_date - ) AS sub + FROM falukant_log.production + WHERE producer_id = :producerId${sinceClause} `, { replacements, type: sequelize.QueryTypes.SELECT } ); diff --git a/frontend/src/i18n/locales/ceb/falukant.json b/frontend/src/i18n/locales/ceb/falukant.json index 8f5c2d5..e037678 100644 --- a/frontend/src/i18n/locales/ceb/falukant.json +++ b/frontend/src/i18n/locales/ceb/falukant.json @@ -161,6 +161,7 @@ "scoreMetMinimumsMissing": "Ang weighted score igo na unta para sa level {next}, pero naa pay kulang nga minimum nga kinahanglanon.", "notReady": "Para sa level {next}, kinahanglan maabot ang minimum nga mga kinahanglanon ug ang score threshold nga {threshold}." }, + "scoreHowToRaise": "Ang score threshold mosaka pinaagi sa weighted points: knowledge (45%), completed productions (30%), office status (8%), reputation status (7%), house status (5%), ug nobility status (5%). Para sa paspas nga progreso, i-prioritize ang knowledge ug daghang completed productions.", "factors": "Karon nga mga bili", "requirements": "Mga kinahanglanon sa sunod nga level", "productionsSince": "Mga produksyon sugod sa {date} ra ang ihap (sukad sa katapusang pag-asenso, bangkaruta, o panununod).", diff --git a/frontend/src/i18n/locales/de/falukant.json b/frontend/src/i18n/locales/de/falukant.json index d27feed..ec6344a 100644 --- a/frontend/src/i18n/locales/de/falukant.json +++ b/frontend/src/i18n/locales/de/falukant.json @@ -181,6 +181,7 @@ "scoreMetMinimumsMissing": "Die gewichtete Wertung reicht grundsätzlich für Stufe {next}, aber mindestens eine Mindestanforderung ist noch nicht erfüllt.", "notReady": "Für Stufe {next} müssen sowohl die Mindestanforderungen als auch die Wertungsgrenze von {threshold} erfüllt sein." }, + "scoreHowToRaise": "Die Wertungsgrenze steigt über gewichtete Punkte: Wissen (45%), abgeschlossene Produktionen (30%), Amtsstatus (8%), Ansehensstatus (7%), Hausstatus (5%) und Adelsstatus (5%). Für schnelle Fortschritte sind Wissen + viele abgeschlossene Produktionen die stärksten Hebel.", "factors": "Aktuelle Werte", "requirements": "Bedingungen für die nächste Stufe", "productionsSince": "Nur Produktionen ab {date} zählen (seit letztem Aufstieg, Bankrott oder Erbfolge).", diff --git a/frontend/src/i18n/locales/en/falukant.json b/frontend/src/i18n/locales/en/falukant.json index 3eba021..10a9101 100644 --- a/frontend/src/i18n/locales/en/falukant.json +++ b/frontend/src/i18n/locales/en/falukant.json @@ -161,6 +161,7 @@ "scoreMetMinimumsMissing": "The weighted score is generally high enough for level {next}, but at least one minimum requirement is still missing.", "notReady": "For level {next}, both the minimum requirements and the score threshold of {threshold} must be met." }, + "scoreHowToRaise": "The score threshold rises via weighted points: knowledge (45%), completed productions (30%), office status (8%), reputation status (7%), house status (5%), and nobility status (5%). For fastest progress, focus on knowledge + many completed productions.", "factors": "Current values", "requirements": "Requirements for the next level", "productionsSince": "Only productions on or after {date} count (since last promotion, bankruptcy, or succession).", diff --git a/frontend/src/i18n/locales/es/falukant.json b/frontend/src/i18n/locales/es/falukant.json index 6fc963c..dbcb1b8 100644 --- a/frontend/src/i18n/locales/es/falukant.json +++ b/frontend/src/i18n/locales/es/falukant.json @@ -180,6 +180,7 @@ "scoreMetMinimumsMissing": "La puntuación ponderada ya sería suficiente para el nivel {next}, pero todavía falta al menos un requisito mínimo.", "notReady": "Para el nivel {next} deben cumplirse tanto los requisitos mínimos como el umbral de puntuación de {threshold}." }, + "scoreHowToRaise": "El umbral de puntuación sube por puntos ponderados: conocimiento (45%), producciones completadas (30%), estatus de cargo (8%), estatus de reputación (7%), estatus de casa (5%) y estatus nobiliario (5%). Para avanzar rápido, prioriza conocimiento + muchas producciones completadas.", "factors": "Valores actuales", "requirements": "Condiciones para el siguiente nivel", "productionsSince": "Solo cuentan producciones desde el {date} (desde el último ascenso, quiebra o sucesión).", diff --git a/frontend/src/i18n/locales/fr/falukant.json b/frontend/src/i18n/locales/fr/falukant.json index d3f29f2..34e97a4 100644 --- a/frontend/src/i18n/locales/fr/falukant.json +++ b/frontend/src/i18n/locales/fr/falukant.json @@ -180,6 +180,7 @@ "scoreMetMinimumsMissing": "La note pondérée est généralement suffisante pour le niveau {next}, mais au moins une exigence minimale n'est pas encore remplie.", "notReady": "Pour le niveau {next}, les exigences minimales et la limite de notation de {threshold} doivent être remplies." }, + "scoreHowToRaise": "Le seuil de note monte via des points pondérés : connaissance (45%), productions terminées (30%), statut d'office (8%), statut de réputation (7%), statut de maison (5%) et statut de noblesse (5%). Pour progresser vite, concentrez-vous sur la connaissance et de nombreuses productions terminées.", "factors": "Valeurs actuelles", "requirements": "Conditions pour la prochaine étape", "productionsSince": "Seules les productions à partir du {date} comptent (depuis la dernière promotion, faillite ou succession).", diff --git a/frontend/src/views/falukant/OverviewView.vue b/frontend/src/views/falukant/OverviewView.vue index a4fd058..c739592 100644 --- a/frontend/src/views/falukant/OverviewView.vue +++ b/frontend/src/views/falukant/OverviewView.vue @@ -119,6 +119,9 @@

{{ certificateProgressHint }}

+

+ {{ $t('falukant.overview.certificate.scoreHowToRaise') }} +

@@ -917,6 +920,12 @@ export default { color: var(--color-text-secondary); } +.certificate-panel__howto { + margin: -8px 0 16px; + color: var(--color-text-secondary); + font-size: 0.92rem; +} + .certificate-panel__productions-since { margin: 6px 0 0; font-size: 0.85rem;