CRM · Store CSV import
Bulk store create/update from CSV with ~30 mappable attributes including address, categories, social handles, IBAN, fiscal name, tenant code, Fideliza code, surfaces and gift-card settings.
| Area | CRM |
| Routes | crm.commerces.import |
| Centre modules | crm |
| Staff levels | root · admin · commerce |
| Models | commerce · load |
| UI label | import-csv.column-database |
| Coverage | 3 use cases · 1 happy · 3 failure |
How it works
Same engine as the customer import but with the store attribute list and no channel requirement. Notably mappable: company-reference-number, fideliza-code, tenant-code, pin, sale-price, surface, showcase-surface, commerce-admins, commerce-tags, gift-card-active, gift-card-fiscal-name. The tightest permission of any import — root/admin only.
Use cases
Why someone opens this (3)
- Onboarding a centre’s full tenant list in one pass.
- Bulk-updating tenant codes before enabling the Yardi export.
- Mass-assigning store labels or administrators.
Path map
flowchart LR F(["Store CSV import"]):::feat F --> H1["Stores bulk-updated"]:::ok F -.-> X1["Duplicate column mapping"]:::bad F -.-> X2["Rows rejected"]:::bad F -.-> X3["Insufficient permission"]:::bad classDef feat fill:#157068,stroke:#157068,color:#ffffff,font-weight:bold classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13
Happy paths
Stores bulk-updated
- Admin downloads the store template, fills it and uploads.
- Columns auto-map; the match key is set to id (default for non-user models).
load.validate()passes and the import job is queued.- Store directory reflects the changes.
Failure paths
Duplicate column mapping
Cause — Two CSV columns mapped to one attribute.
What happens —
error.load.repeated-fields.
Rows rejected
Cause — Invalid category, unknown zone, malformed URL per row.
What happens — Reported in
informative-message.import-csv.error; the frontend does no per-row pre-validation.
Insufficient permission
Cause — Role is not root/admin.
What happens — The import route’s
cancheck rejects entry.
QA checklist
Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.
- ✅ Stores bulk-updated
- ⛔ Duplicate column mapping
- ⛔ Rows rejected
- ⛔ Insufficient permission
Implementation
app/controllers/crm/commerces/import.jsapp/routes/crm/commerces/import.jsapp/components/nf-import.js
Translation keys (4)
Key English import-csv.column-csvCSV Field import-csv.column-databaseDatabase field error.load.repeated-fieldsThere are fields have been selected more than once. Please select a single database field for each CSV column. informative-message.import-csv.errorThe following errors have occurred
Related
- Same area — Customer list & filtering · Customer create & edit · Customer deletion with unsubscribe notice · Customer CSV export with column picker · Customer CSV import · Children CSV import · AI natural-language customer filter · Save current filters as a segment · Segment list, refresh & export · Segment builder with automatic tag actions · Segment categories · User tags (user types) · Customer receipts tab & ticket-stamp generation · Customer loyalty — raffle tickets · Customer loyalty — cards & stamps · Customer loyalty — rewards · Customer loyalty — coupon exchanges · Customer children (dependants) · Receipt verification queue · Store list, filters & exports · Store create & edit · Store labels (store types) · Customer action log (dormant)
- Shares data with — Activity editor (loyalty mechanics, rules & targeting) · Proposal editor (content, coupon, push, AI images) · Multicentre proposals · Store sales declaration & month closing · Sales status overview & Yardi export · Annual sales statement · Intranet communications (threads, confirmations, authorisations) · Files management
Generated from doc/feature-inventory.json · id crm-commerce-import · commit 276788ca6