CMS · Multicentre proposals

Authors one piece of content that is published across several centres at once, with per-language fields, app and web images, channels and a store selection that can span centres.

AreaCMS
Routescms.multicentre-proposals · cms.multicentre-proposals.index · cms.multicentre-proposals.new · cms.multicentre-proposals.detail
Centre modulesmulticenter_proposals
Staff levelsroot · admin · manager
Modelscategory · commerce · language · multicentre-proposal
UI labeltitle.header.multicentre-proposals / menu.navbar.multicentre-proposals.show
Coverage3 use cases · 1 happy · 6 failure

Known issues (1)

Missing translations

These keys are used on this screen but do not exist in translations.json, so users see the raw key:

  • cms.multicentre-proposal.general-data
  • multicentreProposal

How it works

Distinguished from ordinary proposals by two things: the store selection can cover multiple centres (with a select-all helper), and translation completeness is enforced up front — _validateProposalTranslationFields(model.languages) checks every language before submit proceeds and blocks with error.all-translation-fields.required. Note the helper’s return value is inverted relative to its name (isValidated is true when a language failed), which works but reads backwards. commerce is only required when no commerces are selected, so either a single store or a multi-store selection satisfies it. Detail is read-only.

Use cases

Why someone opens this (3)

  • A retail group publishing the same campaign across all of its shopping centres.
  • Keeping brand messaging consistent without re-entering it per centre.
  • Reviewing a multicentre proposal’s reach from the detail view.

Path map

flowchart LR
    F(["Multicentre proposals"]):::feat
    F --> H1["Group-wide proposal published"]:::ok
    F -.-> X1["Incomplete translations"]:::bad
    F -.-> X2["Core content missing"]:::bad
    F -.-> X3["No stores at all"]:::bad
    F -.-> X4["Images in the description"]:::bad
    F -.-> X5["Module disabled"]:::bad
    F -.-> X6["Raw translation key on screen"]:::bad
    classDef feat fill:#6a4a8f,stroke:#6a4a8f,color:#ffffff,font-weight:bold
    classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e
    classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13

Happy paths

Group-wide proposal published

  1. User creates a multicentre proposal with name, description, images and channels.
  2. Every language’s translatable fields are completed.
  3. Stores across the participating centres are selected (or select-all is used).
  4. submit passes the translation check and the model validations and the proposal is created for each centre.

Failure paths

QA checklist

Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.

  • ✅ Group-wide proposal published
  • ⛔ Incomplete translations
  • ⛔ Core content missing
  • ⛔ No stores at all
  • ⛔ Images in the description
  • ⛔ Module disabled
  • ⛔ Raw translation key on screen

Implementation


Generated from doc/feature-inventory.json · id cms-multicentre-proposals · commit 276788ca6