Konfiguration
Detta avsnitt vägleder dig genom processen att installera och konfigurera vår e-handelsplattform för att snabbt komma igång med din digitala butik. Följ dessa steg noggrant för att säkerställa en smidig installation och optimal konfiguration.
Installation av e-handelsplattformen
Detta avsnitt guidar dig genom stegen för att framgångsrikt installera vår e-handelsplattform på din server eller lokala utvecklingsmiljö. Följ dessa instruktioner noggrant för att säkerställa en smidig installationsprocess.
Steg 1: Konfiguration
Stegg 2: Anpassning och Teman
HandlaOnline — Master Enterprise Platform Documentation
OBS (svensk arkivväg): Texten nedan är i nuläget samma som i den engelska mastern (HANDLAONLINE_MASTER_DOCUMENTATION.md). Filen {{PH_2}} finns så att importen väljer den som källa först; översätt till svenska sektion för sektion vid behov.
Audience: enterprise customers, business owners, ecommerce managers, B2B sales operations, administrators, support staff, partners, onboarding teams.
Purpose: a single authoritative reference describing what HandlaOnline is, what it can do today, who uses it, how each module works in business terms, and how operational workflows are executed end-to-end.
Style: business‑oriented, operations-focused, professional, descriptive. Every functional claim is grounded in the actual platform implementation. Confidence levels (VERIFIED, PARTIAL, UNKNOWN) are stated explicitly for each major capability.
Document type: single master document — do not split.
1. Platform Overview
1.1 What HandlaOnline is
HandlaOnline is an integrated digital commerce platform designed to run B2B and B2C webshops, a content management system (CMS), and an order/customer operations layer on a single technical foundation. It is built and operated by DataPartner and is positioned for Swedish and Nordic companies that need to digitalise sales while keeping master data, pricing, discounts and order flow synchronised with their back-office (ERP) system.
The platform is more than a webshop. It is a commerce operations system, combining:
- a storefront for B2C consumers and B2B business buyers,
- a CMS for marketing pages, forms, documents and media,
- a product information layer synchronised with an ERP (Visma-shaped data),
- a customer & company directory mirrored from the ERP,
- an order capture, validation, and export pipeline with email confirmations and XML export,
- an operations dashboard for administrators,
- and an integration layer (XML sync, REST API, Klarna Checkout).
Confidence: VERIFIED.
1.2 What it is used for
HandlaOnline is used by companies that need to:
- Sell digitally to businesses (B2B) with customer-specific prices, discount letters (kundrabattbrev), invoice payment and contracted terms.
- Sell directly to consumers (B2C) with a fast, modern storefront and Klarna Checkout as the payment experience.
- Operate both modes from a single platform with a shared catalog, shared media, and shared content.
- Keep their webshop catalog, customers, contacts, prices, discounts and orders synchronised with their ERP so that web and finance work on the same data foundation.
- Run marketing pages, blog posts, downloadable documents, contact forms and other content-driven activities through an admin dashboard.
- Provide their B2B customers with self-service tools: order history, order templates ("mallorder"), reorder from a previous order, calendar view of orders, and delivery management.
1.3 Core value proposition
| Value pillar | Description |
| Unified B2B + B2C | Same product database, same admin, same checkout codebase. Display mode (B2B / B2C / CMS) is configured per installation. |
| ERP-synchronised | Customers, contacts, articles, price lists, discounts and orders flow between web and Visma-shaped ERP through XML sync. |
| Customer-specific commerce | Logged-in B2B customers see their own prices, discount letters, allowed assortment and delivery addresses. |
| Operational efficiency | Repeat ordering via templates, reorder from history, calendar planning, multi-step checkout, comments per row and per order. |
| Enterprise control | Granular admin roles, full audit (session logs, statistics, sent-email log), CSP-hardened security, REST API access keys with logs. |
| Marketing-ready | Built-in CMS with page builder, components, elements, forms, documents, blog scaffolding, SEO tooling, schema.org, sitemap automation. |
Confidence: VERIFIED.
1.4 Where HandlaOnline fits in the operating model
HandlaOnline is positioned between three operational domains:
- Front-of-house commerce — public storefront, category browsing, product pages, search, cart, checkout, customer self-service.
- Back-of-house operations — admin dashboard for catalog, content, customers, orders, settings, shipping, discounts, integrations.
- System layer — XML sync with the ERP, REST API for external machines, payments (Klarna), email pipelines, sitemap and SEO.
This three-layer model means that one platform handles what the customer sees, what staff does, and how data moves between systems — without requiring separate webshop, CMS, and middleware tools.
2. Business Model Overview
2.1 Three operating display modes
HandlaOnline supports three high-level "display modes" that determine how the storefront behaves. The active mode is configured per installation by the Super Admin and stored as the {{PH_1}} in the system display table.
| Mode | What it does | Typical customer profile |
| CMS | Content-only mode. Catalog and webshop are hidden from anonymous visitors. Admin and Super Admin users automatically render as CMS mode when logged in. | Companies using HandlaOnline as a marketing site or staged before the webshop is launched. |
| B2B | Business-to-business mode. Access to the webshop and prices can be gated by login (the {{PH_1}} and {{PH_2}} flags). Customer-specific prices and discounts apply. Invoice (faktura) payment. | Wholesalers, distributors, branded manufacturers selling to companies. |
| B2C | Consumer mode. Open browsing, public prices, and Klarna Checkout as primary payment. Optional support for showing a B2B private-customer toggle. | Retailers, brands, direct-to-consumer stores. |
Confidence: VERIFIED.
2.2 Multi-segment selling on one site
The platform is designed so that a single installation can serve mixed audiences. In a B2C installation, an authenticated B2B customer can still receive their own prices and addresses because pricing is driven by the {{PH_1}} (customer number) and {{PH_2}} (customer discount/agreement number) attached to their account.
Conversely, a B2B installation can declare which customer category ({{PH_1}}) represents a "private customer" so the platform applies consumer-style rules to that segment without breaking the B2B model. This is configured under Admin → Customer settings → choice_off_private_customer.
Confidence: VERIFIED.
2.3 Commercial behaviours that change by mode
| Behaviour | CMS | B2B | B2C |
| Catalog visible to guests | No | Conditional (show_webshop) | Yes |
| Prices visible to guests | No | Conditional (show_prices) | Yes |
| Login required for purchase | N/A | Yes | No |
| Klarna Checkout | No | No (B2B blocked from Klarna for invoice integrity) | Yes |
| Invoice ("Skicka order") | No | Yes (for business customers) | No |
| Customer-specific prices | No | Yes (kundrbtnr / prislista) | If logged-in customer has price agreement |
| Template / repeat orders | No | Yes | Optional |
| Calendar of orders | No | Yes | Optional |
| Multiple delivery addresses | No | Yes (leverans / faktura / kundkontakt) | Limited |
Confidence: VERIFIED.
2.4 Revenue scenarios supported today
- Pure B2B operations — Companies sell to vetted business customers using login-gated catalogs, customer-specific pricing, invoice payment, template orders for repeat purchases, and ERP-synced order export.
- Pure B2C retail — Companies sell consumer products using public browsing, Klarna Checkout, and standardised confirmation emails.
- Mixed model — Single site serves both businesses and consumers, distinguishing by login + customer category.
- Catalog-and-quote (CMS + login wall) — Show product information publicly but require login to see prices and place orders.
3. Platform Architecture Overview
This section provides the minimum architectural context needed by an enterprise customer to understand how the system is deployed, integrated, and operated. It deliberately avoids low-level developer detail.
3.1 High-level building blocks
┌─────────────────────────────────────────────────────────────┐
│ Front-of-house │
│ Storefront · Cart · Checkout · Klarna · User Self-Service │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ Operations layer │
│ Admin Dashboard · CMS · Catalog · Orders · Customers │
│ Settings · Shipping · Marketing · Reporting │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ System layer │
│ XML Sync (Visma) · REST API · API Keys · Email · Sitemap │
│ Statistics · Session logs · Security headers · CSP │
└─────────────────────────────────────────────────────────────┘
Confidence: VERIFIED.
3.2 Front, admin, and super-admin
The platform exposes three clearly separated user-facing areas:
| Area | URL pattern | Audience |
| Storefront | /, /kategori/..., /produkt/..., /cart, /checkout, /myaccount | All visitors and logged-in customers. |
| Admin Dashboard | /admin/... | Daily operators (Admin role): catalog, content, customers, orders, settings, shipping. |
| Super Admin Dashboard | /sadmin/... | Platform owners: XML sync, API keys, system users, languages, display-mode setup. |
Each area uses its own header/menu layout but shares the same underlying engine.
Confidence: VERIFIED.
3.3 Integration model
HandlaOnline integrates with the surrounding business systems through three well-defined channels:
- XML Sync (file-based, batch) — The dominant integration path. The ERP drops XML files into a sync folder; the platform parses, validates, stages, and applies them through stored procedures into the production tables. Outgoing orders are exported as Visma-shaped XML for re-import into the ERP.
- REST API (JSON, machine-to-machine) — A versioned API (
/api/v1/...) protected by API keys and secrets, supporting structured sync, status checks, customer endpoints and an order-export endpoint scaffold.
- Klarna Checkout — Direct API integration for B2C payment, including iframe rendering, server-side push (webhook) confirmation, and Klarna order acknowledge.
Confidence: VERIFIED.
3.4 Data foundation
The data model can be grouped into three families:
| Family | Examples | Source of truth |
| ERP-shaped data ({{PH_1}}) | visma_artiklar, visma_kund, visma_kundkontakt, visma_prisl, visma_pris, visma_kundrbtheader, visma_kundrbtrows, visma_levsaett, visma_speditor, visma_orderhead, visma_orderrow, visma_betvillk, visma_kundkat, visma_artgrp | ERP — synchronised inbound via XML sync |
| Web layer ({{PH_1}}) | web_orders, web_order_details, web_cart, web_cart_items, web_cart_rowtxt, web_cart_ordertxt, web_productcategories, web_product_images, web_productfilters, web_producttillhor, web_producttegenskaper, web_prislist_settings, web_wishlist, web_template_orderhead, web_template_orderrow, web_kundrbtnr_pricces | HandlaOnline — owned by the platform |
| System layer ({{PH_1}} and platform tables) | sys_display, sys_display_elements, sys_modules, sys_company_settings, webshop_general_settings, statistics, session_logs, sent_emails, unique_slugs, auth_*, api_keys, api_access_logs, api_error_logs, api_sync_logs | HandlaOnline — owned by the platform |
Confidence: VERIFIED.
3.5 Deployment context
- The platform runs as a PHP web application (CodeIgniter 4 framework) backed by a MySQL database.
- The storefront uses Vue.js 3 (mounted across templates) and the Metronic admin theme for the dashboards.
- A scheduled CLI command (
php spark sync:files) drives XML synchronisation; another (php spark generate:sitemaps) regenerates the sitemap.
- Email is delivered via the standard email transport configured per installation, and every outbound mail is logged in
sent_emails.
Confidence: VERIFIED for general deployment shape; per-installation environment details (server, cron schedule) live in the deployment plan.
4. B2B Commerce Capabilities
4.1 Overview
The B2B side of HandlaOnline is designed for business buyers who already have a relationship with the seller — they have a customer number (kundnr) in the ERP, possibly a price agreement (kundrbtnr / prislista), and they pay by invoice. The platform delivers their personalised assortment, applies their negotiated pricing, and exports their order back to the ERP for fulfilment and invoicing.
Confidence: VERIFIED.
4.2 Business value
| Value | Business outcome |
| Customer-specific prices and discounts | Honour contracted terms in real time; remove manual price overrides. |
| Login-gated catalog | Protect commercial information; ensure only authorised business buyers see prices. |
| Multiple delivery addresses | Support customers with several sites, branches or warehouses. |
| Template orders ("mallorder") | Cut order-creation time for repeat purchases (cleaning supplies, hospitality, repeat office orders, etc.). |
| Reorder from history | Convert a previous order into a new one in seconds. |
| Order calendar | Visualise upcoming and historical deliveries for planning. |
| Invoice ("Skicka order") | No card flow; orders are sent to the ERP and invoiced through normal AR processes. |
| XML order export | Eliminate double entry; orders appear in the ERP automatically. |
4.3 Main features
4.3.1 Customer recognition
Each B2B buyer is bound to a Visma customer record (visma_kund) through a contact record (visma_kundkontakt). When the user logs in, the platform:
- loads the company (kund),
- loads the contact (kundkontakt),
- attaches the kundnr, kontaktid, kundkat (customer category),
- determines the price list (prisl) and discount-letter number (kundrbtnr).
This is then used by every pricing and display decision downstream.
Confidence: VERIFIED.
4.3.2 Customer-specific pricing — kundrabattbrev
Prices are resolved from three priority levels (the "kundrabattbrev" / customer discount letter):
- Priority 1 — specific article on the customer's price list.
- Priority 2 — article group on the customer's price list.
- Priority 3 — whole price list fallback.
The result is materialised into web_kundrbtnr_pricces_* tables during XML sync so prices and discounts can be displayed quickly. A real-time lookup service (KundRabattBrevService) is also present in the codebase.
Confidence: VERIFIED (materialisation pipeline confirmed; live UI of discount letter is PARTIAL).
4.3.3 Catalog gating
The B2B mode supports two flags:
| Setting | Effect |
show_webshop | If 0, only logged-in customers may browse the webshop. |
show_prices | If 0, prices are hidden even when products are visible. |
allow_email_order | Optional — allow sending an order via email as an alternative. |
4.3.4 Multiple delivery addresses
At checkout, the system computes up to three address candidates:
- Leveransadress 1 — primary delivery address from the company record.
- Leveransadress 2 — invoice address used as delivery fallback.
- Leveransadress 3 — the contact person's own address (kundkontakt).
Only addresses that pass validation are shown.
Confidence: VERIFIED.
4.3.5 Template orders ("mallorder")
B2B buyers can save a previous order as a template, give it a name, and use it repeatedly. The user area exposes:
- a list of templates with filtering,
- a calendar view of order activity (FullCalendar),
- per-template editing (lines, quantities, notes),
- "Restore to original" to undo changes,
- "Copy" and "Delete" actions,
- "Add to cart from template" to spin up a fresh order from a saved template.
Confidence: VERIFIED.
4.3.6 Reorder
A simple "Beställ igen" action converts any previous web order — or a Visma orderrow — back into a cart, automatically matching the customer's current prices.
Confidence: VERIFIED.
4.3.7 Per-row and per-order notes
B2B buyers can attach:
- row remarks (per cart line) stored in
web_cart_rowtxt,
- order remarks (whole-order comment) stored in
web_cart_ordertxt.
These travel through to the order record and into the XML export and the confirmation emails.
Confidence: VERIFIED.
4.3.8 Invoice payment
B2B orders are sent without a card flow. The payment method is recorded as "Invoice" (Faktura). The order is exported to the ERP as XML and invoiced from there.
Confidence: VERIFIED.
4.4 Operational notes
- B2B users who attempt Klarna Checkout are explicitly blocked (the system enforces "B2B = invoice, B2C = Klarna" to protect data integrity).
- The order is wrapped in a database transaction with logging into
web_order_logs.
4.5 Limitations
- Card payments for B2B are not currently activated.
- The interactive customer "discount letter" view (front of dashboard) is not fully exposed — material data is generated, but a dedicated front display module is PARTIAL.
5. B2C Commerce Capabilities
5.1 Overview
The B2C side is intended for consumer retail: an open public storefront, public prices, standard checkout, and Klarna Checkout as the payment experience.
Confidence: VERIFIED.
5.2 Business value
| Value | Business outcome |
| Open browsing | Maximum reach and SEO. |
| Klarna Checkout | Familiar local payment experience for Swedish/Nordic consumers. |
| Standard cart & checkout | Fast time-to-purchase. |
| Wishlist | Save-for-later behaviour. |
| Schema.org & sitemap | Strong organic visibility. |
5.3 Main features
- Public product detail pages with images, attributes, related products and inquiry form.
- Public category pages with paginated, filterable product lists.
- Wishlist (per customer; persisted to
web_wishlist).
- Product inquiry email ("Skicka produktinquiry") for items that need contact instead of immediate purchase.
- Optional B2B/B2C toggle in B2C installations (so the same site can serve both private and business consumers when configured).
- Klarna Checkout integration with server-side push confirmation.
- Standardised confirmation emails to both customer and admin.
Confidence: VERIFIED.
5.4 Operational notes
- The platform tracks statistics per page (which products/categories are visited) and aggregates them in the admin dashboard.
- Session activity is recorded with cart snapshots, abandon detection, and auto-logout logging.
5.5 Limitations
- A dedicated promotion/coupon module is not exposed in the current admin menu (campaign menu entries exist but are commented out in the navigation). Discounts arrive primarily through price-list logic.
6. Dashboard Overview
HandlaOnline ships with three dashboard layers, each with its own navigation and audience.
6.1 Admin Dashboard (/admin)
The admin dashboard is built on the Metronic theme and is organised into the following top-level menu sections:
| Menu | Sections / pages |
| CMS | Sidor (Pages), Formulär (Forms). |
| Document | Document library, document categories, types, languages. |
| E-handel (Webshop) | Produktkategorier, Produkter, Produktdokument, Produktvarianter, Produktattributer, Productegenskaper, Inställningar (Webshop settings). |
| Beställningar (Orders) | Order list, order details modal, statistics. |
| Användare (Users) | Contact/login overview, session log, login statistics, GeoIP-augmented user activity. |
| General | Company/site settings: identity, policy, logo, favicon, schema.org, verification, social links, custom site scripts. |
Confidence: VERIFIED (menu layout, page list, and route mapping confirmed in the navigation views).
6.1.1 Default landing
The Admin Main page (/admin/main) shows today's most-visited categories and exposes JSON endpoints for getCategoryStats and getProductStats to display top categories/products with GeoIP-resolved visitor locations.
6.2 Super Admin Dashboard (/sadmin)
The super admin dashboard is intentionally compact and operational:
| Menu | Sections |
| XML-synkronisering | Upload XML, list files, delete files, trigger synchronisation, view sync history. |
| API Keys | Issue API keys, list keys, revoke, toggle active, view access logs and error logs. |
| Användare | List of admin users, invitation flow (send reset/magic link), ban toggle. |
| (Language tools) | Activate languages, manage translation strings. |
Confidence: VERIFIED.
6.3 Customer Dashboard (/myaccount)
The customer dashboard is rendered on the storefront layout. The available tabs depend on enabled modules:
| Tab | Function |
| Tidigare beställningar | All previous web orders, with search, date range, filter by template, filter by contact orders, and "Skapa order" to convert a previous order into a template. |
| Mina beställningar / order | List of personal template orders ("mallorder"), with line edit, copy, delete, restore-to-original, and add-to-cart actions. (Module-gated.) |
| Kalender | FullCalendar view of upcoming and historical orders for planning purposes. (Module-gated.) |
| Mina uppgifter | Account / profile information of the contact. |
| Logga ut | Sign out. |
| _(Schemalagda ordrar)_ | Currently neutralised: routes, modals and tab link are commented out. Database infrastructure (scheduled_orders, executions, reminders) exists. |
Confidence: VERIFIED.
7. User Roles & Permissions
7.1 Defined groups
The platform uses CodeIgniter Shield for authentication with the following groups configured:
| Group key | Title | Purpose |
| superadmin | Super Admin | Complete control of the site. Operates XML sync, API keys, language, system display, admin users. |
| admin | Admin | Day-to-day operators: catalog, content, customers, orders, settings, shipping, marketing. |
| developer | Developer | Site programmers. Admin-equivalent + admin.settings. |
| user | User | General users — typically customers. Receives the customer dashboard. |
| beta | Beta User | Access to beta-level features. |
| seller | Seller | Sales user. Reserved for future B2B-internal sales tools. |
Confidence: VERIFIED.
7.2 Permission matrix (high level)
| Group | Admin area access | User management | Settings | Beta |
| superadmin | All admin.* | All users.* | Yes | Yes |
| admin | Yes | create / edit / delete (non-admins) | No | Yes |
| developer | Yes | create / edit (non-admins) | Yes | Yes |
| user | No | No | No | No |
| beta | No | No | No | Yes |
| seller | (Reserved) | — | — | — |
Confidence: VERIFIED.
7.3 Route-level guards
Access to backend areas is enforced through filters:
| URL pattern | Filter | Effect |
/admin/* | group:admin + login | Only admin (and above) users. |
/sadmin/* | group:superadmin + login | Only super admin users. |
/myaccount, /myaccount/* | login:group:user | Logged-in customers. |
/api/v1/* | apiauth | Requires X-API-KEY + X-API-SECRET headers. |
| Storefront protected | login | For pages that require login (e.g. set-password, internal uploads). |
Confidence: VERIFIED.
7.4 Display-mode role behaviour
When an admin or superadmin is logged in to the storefront, the platform automatically renders the CMS display mode and suppresses the category navigation, so administrators always see the content-only view of the site they manage. This avoids accidental admin-purchases and keeps the admin context clean.
Confidence: VERIFIED.
7.5 Customer profile
The customer profile (group user) is not just a username and password. It is bound to ERP records:
auth_identities — email and credentials,
visma_kundkontakt — the customer contact (kontaktid),
visma_kund — the company they belong to (kundnr),
visma_kundrbtheader / visma_kundrbtrows — their pricing agreement,
web_orders — their previous web orders,
web_template_orderhead / web_template_orderrow — their saved templates,
web_wishlist — their saved products.
Confidence: VERIFIED.
7.6 Operational responsibilities by role
| Role | Day-to-day responsibilities |
| Super Admin | Trigger and supervise XML synchronisation; create and revoke API keys for partner integrations; manage admin users; configure display mode (B2B/B2C/CMS); manage languages. |
| Admin | Maintain the catalog (categories, products, variants, filters); publish pages and forms; configure company settings; manage orders; configure shipping rules and price lists; respond to customer activity. |
| Customer (user) | Browse, search, add to cart, place orders, manage templates, view order history, reorder, update profile. |
8. CMS Module
8.1 Overview
The CMS lets administrators publish and manage pages, page components, page elements, forms, documents and media. It is the visual and informational backbone of the public site and supports both pure CMS installations and content sections of B2B/B2C webshops.
Confidence: VERIFIED.
8.2 Purpose and business value
- Decouple site content from technical deployment.
- Empower marketing and operations to publish, edit and reorganise pages without a developer.
- Centralise downloadable documents (price lists, brochures, certificates) and reuse them across pages and products.
- Capture leads and inquiries through configurable forms.
8.3 Main features
8.3.1 Pages
- Hierarchical page tree (parent/child) with drag-and-drop sort.
- Per-page status (published / unpublished), private flag (visible only to logged-in users), order, slug.
- Per-page SEO meta data, Schema.org image, social media image, canonical URLs.
- Per-page custom URL slug stored in
unique_slugs, with automatic redirect handling.
- 404 routing logic that attempts to interpret an unknown URL as a CMS page before falling back to sitemap-based 301 redirects.
- A "Skapa redirect" companion service that maintains the
redirect table to absorb URL changes.
Confidence: VERIFIED.
8.3.2 Page builder — components and elements
Each page is constructed from components (e.g. banner_text, banner_video, carousel, gallery, service_box, slider, team_box, text, text_image), and each component is filled with elements. The admin can:
- choose from existing component templates (
page_templates, pages_components),
- add, sort, deactivate, and remove components,
- create new components from templates and reuse them.
- attach images to elements (with per-image SEO tags), reorder elements, and delete elements.
Confidence: VERIFIED.
8.3.3 SEO tools per page
- Tag statistics (counts of H1/H2/H3, etc.).
- SEO optimisation evaluation with a structured response.
- SEO title and description suggestions for categories.
- Schema.org image upload and metadata.
Confidence: VERIFIED.
8.3.4 Forms
Forms are fully data-driven:
- Create reusable forms with custom IDs.
- Define groups and individual elements (
forms_elements).
- Define field type, placement, ordering, required, group structure.
- Choose form method (POST/GET), recipient email, grid layout (
form_grid), enctype.
- Reuse forms across multiple pages or documents.
When a form is submitted on the storefront, the platform emails the submission through the standardised EmailSenderService and the audit log records it in sent_emails.
Confidence: VERIFIED.
8.3.5 Documents
- A central document library categorised by document type, category, and language.
- Uploads stored under
FCPATH/documents/.
- Documents can be selected for a page (downloadable links) or attached to specific products.
Confidence: VERIFIED.
8.3.6 Media
A media library page exists at /admin/media_admin for browsing uploaded images and assets. The dashboard exposes the page; richer media curation is PARTIAL in current build.
Confidence: VERIFIED for the entry point; PARTIAL for advanced media features.
8.4 User roles
- Admin owns CMS day-to-day: pages, forms, documents, media.
- Super Admin does not normally touch CMS — they own system-level activities.
8.5 Available settings
- Page-level: status, private, ordering, slug, SEO data, schema.org, social image.
- Component-level: status, order, layout.
- Element-level: order, images, alt/title tags.
- Form-level: recipient, layout, method, enctype.
8.6 Automation
- Sitemap is regenerated on page changes (and via the daily CLI command).
- Slug uniqueness is enforced through
unique_slugs.
- Old URLs are kept alive through automatic
redirect table updates.
8.7 Limitations / partial areas
- The Blog module (both
/admin/blog and /blogg/... front controller) is currently a stub: the front controller responds with empty output and the admin controller is a placeholder. Blog routing is in place but blog rendering and admin tooling are not implemented. Confidence: PARTIAL.
/admin/productsettings controller is a stub. Confidence: PARTIAL.
9. Product Management
9.1 Overview
Products in HandlaOnline are the Visma articles (visma_artiklar) enriched by web-layer information (images, recommended products, SEO slugs, filters, attributes, custom properties, documents, status flags). The Admin Products page (/admin/products) is the operational hub for catalog work.
Confidence: VERIFIED.
9.2 Purpose and business value
- Single source of truth for what is shown in the webshop.
- Drive the online assortment independently of the ERP master without breaking the data contract.
- Maintain rich product presentations (images, attributes, documents) that the ERP does not store.
9.3 Main features
- Product grid with category, variant, and filter joins.
- Bulk actions: edit "general" data across selected products, bulk status change, bulk image apply, bulk delete images, bulk alt/title tags, bulk add related product.
- Image management: per-product image upload, drag-sort, per-image SEO tags (alt, title), bulk apply tags to all, delete one image, delete all images, fetch with sort data.
- Related products (
web_product_recommended): add to single product, add to all selected, remove from single, remove from selected.
- Status flags: visible / hidden / published.
- Webshop visibility: based on the article's
webshop = 'True' flag and category/variant configuration.
- SEO slug via
unique_slugs (entity_type = 'product').
Confidence: VERIFIED.
9.4 User roles
- Admin owns catalog operations.
- Super Admin does not normally touch the catalog directly — they manage the synchronisation that feeds it.
9.5 Available settings
Most product field values come from the ERP via XML sync. The admin layer overlays:
- assignment to categories (
web_productcategories),
- assignment to variants / groupings (
web_producttillhor),
- filters (
web_productfilters),
- product properties / egenskaper (
web_producttegenskaper),
- product documents (
web_product_x_document),
- images (
web_product_images),
- related products (
web_product_recommended).
9.6 Operational notes
- Adding or removing categories/variants does not delete underlying article data — only the web-layer associations.
- All slug operations go through
SlugLibrary which enforces uniqueness.
9.7 Limitations
- Product import is XML-only; there is no admin CSV upload flow for products in the current build.
- Stock and pricing are read-only from the ERP feed; admin cannot directly overwrite them in the webshop layer.
10. Categories & Attributes
10.1 Overview
Categories (web_productcategories) are the navigational and merchandising spine of the catalog. Attributes (web_productfilters, web_producttegenskaper) describe what a product is and how customers filter for it.
Confidence: VERIFIED.
10.2 Main features
10.2.1 Category management (/admin/products_cat)
- Tree-based view: list categories with drag-and-drop sorting.
- Sort and reparent categories without losing assignments.
- Per-category status (visible/hidden), SEO data (title, description, suggested SEO), and slug.
- Category images: upload, tag, sort, delete, bulk delete.
- A dedicated "menu image" per category for navigational displays.
- Per-category product list with manual sort or automatic ASC/DESC by selected criterion.
- View the list of products assigned to a category and reorder them.
Confidence: VERIFIED.
10.2.2 Filters (/admin/products_filters)
- Manage the catalog filters used on category pages.
- Reorder filters, reorder filter values.
- Set value-level sort (ascending/descending or custom).
- Bind filters to underlying Visma article columns (e.g. colour, material).
- Maintain a display mode per filter (e.g.
web_productfilters_display_mode).
Confidence: VERIFIED.
10.2.3 Product properties / egenskaper (/admin/productegenskaper)
A separate workspace to maintain product properties (web_producttegenskaper). The admin can:
- list configured properties,
- update display order, label, status,
- pick distinct values from referenced article columns.
Confidence: VERIFIED.
10.3 User roles
- Admin maintains category/attribute structure.
10.4 Available settings
- Category status, sort order, parent, SEO data, slug, menu image.
- Filter status, order, display mode.
- Property visibility and display.
10.5 Automation
- Automatic slug creation (
unique_slugs) when a category is saved.
- Automatic redirect when a slug changes.
- Bulk SEO suggestions per category.
10.6 Limitations
- The reordering API works on
visma_artiklar directly; large catalogs may need backend tuning. Indexes are defined in migrations (Add Index* migrations) to support this.
11. Product Groups & Relations
11.1 Overview
The platform supports two relational structures:
- Product variants ("tillhör") —
web_producttillhor groups articles that belong together (variants of a parent product). The "tillhör" display mode controls how they render together (single grid, dropdown selector, etc.).
- Related/recommended products —
web_product_recommended lets the admin push cross-sell or up-sell products on product detail pages.
Confidence: VERIFIED.
11.2 Main features
11.2.1 Variants (/admin/products_variant)
- List product groups with the articles assigned to each.
- Edit the variant configuration of any product.
- Configure how variants are displayed on the storefront (display mode per variant group).
- Tied to filters (
web_productfilters) so that filtering by attributes implicitly selects the correct variant.
Confidence: VERIFIED.
11.2.2 Recommended products
- From the products admin, an admin can:
- assign one or more recommended products to a single product,
- assign one recommended product to all selected products at once,
- remove single, all-for-single, or all-for-selected relations.
Confidence: VERIFIED.
11.3 Business value
- Better merchandising and bigger basket sizes (cross-sells).
- Better customer experience on products with multiple variants.
11.4 Operational notes
- Variant groups are derived from the ERP data structure (article grouping). The admin enriches and curates the presentation.
12. Inventory & Stock Management
12.1 Overview
Stock visibility on the storefront is driven from the ERP feed. The platform stores per-article status and quantity through the XML sync (tmp_* staging then production tables). The admin can decide whether to show stock on the storefront through a webshop setting (show_stock).
Confidence: VERIFIED.
12.2 Main features
- Show or hide stock for products (per display mode: shows in B2B/B2C if enabled).
- Stock status is presented to the customer based on the ERP-supplied value.
- Out-of-stock behaviour is determined by the article's
webshop = 'True' flag and stock value.
Confidence: VERIFIED.
12.3 Limitations
- There is no admin stock-override UI; stock is read-only from the ERP. Confidence: VERIFIED.
- The platform does not perform on-site reservation or live stock decrement; the ERP remains the source of truth.
13. Customer Management
13.1 Overview
The customer model in HandlaOnline distinguishes between a company (ERP customer record / kund) and a contact (ERP kundkontakt). A storefront login is always attached to a contact, and through the contact to the company.
Confidence: VERIFIED.
13.2 Main features
13.2.1 Customer registration
- A public storefront registration page (
/registrering) collects company-style information (country selector covers EU + extras). The registration controller renders the page; account creation flow may operate through the registerCustomer endpoint on the front controller, which emails a B2B-registration request to the configured contact email.
- An invitation flow exists for admin users — a "send reset" link can be issued from the Super Admin Users page.
Confidence: VERIFIED for registration page + invite flow.
13.2.2 Customer login behaviour
- Login is managed by Shield (
auth_identities).
- On login, the platform loads display data, company data, contact data, and personalises menus and pricing.
13.2.3 Customer activity (Admin → Users)
The Admin Users page (/admin/users) provides:
- Logins overview: all contacts (
visma_kundkontakt) with their last login IP, last login time, GeoIP-resolved city/country.
- Per-user login history: all
auth_logins entries for a given identifier.
- Session statistics: visits over time, active sessions, idle sessions.
- Session logs: granular session activity (logged through
session_logs).
Confidence: VERIFIED.
13.2.4 Private-customer classification (Admin → Customer settings)
Admin can configure which customer category (kundkat) in the ERP represents the "private customer" segment. This drives:
- whether the storefront shows the "Skicka order" (B2B invoice) button,
- whether Klarna or invoice is offered,
- B2B vs B2C addressing logic.
The page also lists customers and lets the admin override the classification.
Confidence: VERIFIED.
13.3 Operational notes
- Reset password and "set password" magic-link flows are implemented with rate limits and CAPTCHA on the public reset page.
- Each transactional email related to customers is logged via
SentEmailService.
13.4 Limitations
- There is no general "edit customer" CRUD page in the admin (customers are sourced from the ERP); only the private-customer classification override exists. Confidence: VERIFIED.
14. Company Management
14.1 Overview
Company management here means managing the seller's own company / brand profile in the platform — not the buyer's company (which is sourced from the ERP).
Confidence: VERIFIED.
14.2 Main features (Admin → Settings)
A tabbed configuration interface exposes:
| Tab | Settings managed |
| general | Company name, org number, address city/zip, country, country code, language code, phone, contact email, order email, request email, web, admin email, SEO title, SEO description, tagline. |
| policy | Integritetspolicy / privacy policy text. |
| logo | Main logo image with alt and title, resized to 300 px height. |
| favicon | Favicon upload with automatic generation of multiple PNG dimensions. |
| schemorg | Schema.org organisation image and metadata (alt, title, description). |
| verify | Site verification keys (Google, Bing, etc.). |
| sociallink | Social media links (company_data_social). |
| site_scripts | Custom site-wide scripts (analytics tags, etc.). |
Each tab supports reset of fields and removal of uploaded images.
Confidence: VERIFIED.
14.3 Operational notes
- These values are loaded into the base controller on every request and made available across the storefront — header, footer, schema.org metadata, transactional emails.
- They are the source of seller branding for emails, sitemap pings, and SEO output.
15. Order Management
15.1 Overview
Orders are the heart of the operational layer. Every web order is captured into a normalised set of tables and (for B2B) exported back to the ERP via XML.
Confidence: VERIFIED.
15.2 Database structure
| Table | Purpose |
web_orders | One row per order: customer, contact, totals, status, payment method, addresses. |
web_order_details | One row per article (line items). |
web_order_logs | Audit log per order (creation, XML generation, email sent, errors). |
web_payment_methods / web_payment_details | Payment information. |
web_cart_ordertxt | Whole-order remark attached at cart time. |
web_cart_rowtxt | Per-line remarks attached at cart time. |
web_template_orderhead / web_template_orderrow | Saved templates ("mallorder") referenced by future orders. |
Confidence: VERIFIED.
15.3 Order list (Admin → Beställningar)
The Admin Orders page (/admin/order) exposes:
- Server-side paginated list with full-text search.
- Date range filtering.
- Joins to
visma_kund for company info and visma_kundkontakt for contact info.
- Per-order details modal showing line items.
- Reconciliation with cart-time comments (
web_cart_ordertxt, web_cart_rowtxt).
- Aggregate order statistics endpoints.
Confidence: VERIFIED.
15.4 Order processing pipeline
The OrderService is the single entry point for order creation and supports two flows:
15.4.1 B2B invoice flow (processOrder)
- Detect whether the cart is a template order (mall order) — if so, branch to mall order processing.
- Validate the user is a business customer (kundkat ≠ private category).
- Open a database transaction.
- Insert the order header into
web_orders (with addresses, totals, payment method "Invoice", status Pending).
- Insert each cart line into
web_order_details.
- Pull comments from
web_cart_ordertxt and web_cart_rowtxt.
- Log the order via
OrderLog.
- Generate B2B-style XML via
OrderXmlService and write to visma_webb/download.
- Send admin and customer confirmation emails through
EmailSenderService and log via SentEmailService.
- Mark the cart
paid and destroy the cart session.
Confidence: VERIFIED.
15.4.2 B2C Klarna flow (processOrderFromKlarna)
- Receive the Klarna push (server-to-server).
- Validate critical fields and check idempotency (
checkExistingKlarnaOrder) to avoid duplicates.
- Map Klarna fields into the internal order format.
- Insert order header + lines in a transaction.
- Append comments from cart.
- Generate Klarna-specific XML for the ERP.
- Acknowledge the Klarna order via Klarna API (
/ordermanagement/.../acknowledge).
- Send admin and customer confirmation emails.
- Mark cart
paid and destroy.
Confidence: VERIFIED.
15.5 Status fields
Every order tracks:
order_status (Pending, etc.)
payment_method (Invoice / Klarna / etc.)
payment_status (Pending / Paid / etc.)
vat_mode (resolved from customer/price list)
currency_code
total_amount, total_excl_vat, total_vat, includes_vat
15.6 Notifications
Two emails are generated per order:
- Admin notification with the full order summary (configurable recipient).
- Customer confirmation if
send_order_confirmation_email = 1 and a recipient is resolved (selected address → order data → modules → DB).
Each is logged in sent_emails.
Confidence: VERIFIED.
15.7 Reorder
The Reorder service (addToCartFromOrder / addToCartFromWebOrder) lets a logged-in customer rebuild a cart from any previous order — pulling lines from visma_orderrow or web_orders.metadata, applying the customer's current prices, and routing through RebuildCartService.
Confidence: VERIFIED.
15.8 Template orders
Template orders are first-class entities and have their own dedicated workflow (see Section 28 and Section 4.3.5). They keep a copy of the cart contents under a customer-chosen name and can be edited, copied, deleted, restored, and used to seed a new cart.
Confidence: VERIFIED.
16. Checkout & Payments
16.1 Overview
Checkout in HandlaOnline supports two parallel flows: invoice (faktura) for B2B customers and Klarna Checkout for B2C. The platform enforces the boundary at the controller and service layer.
Confidence: VERIFIED.
16.2 The standard checkout (/checkout)
- Requires authentication.
- Shows the cart, allows the user to choose an address from the candidates computed at login (Leveransadress 1, 2, or 3).
- Allows a desired delivery date and pickup code to be added (used by ERP and warehouse).
- Allows whole-order comment and per-row comments.
- Submits via
checkoutSubmitOrder which validates CSRF, requires login, and hands off to OrderService::processOrder.
- On success, the cart is marked paid, the session cart id is cleared, and the customer is redirected to a confirmation.
Confidence: VERIFIED.
16.3 Klarna checkout
- A dedicated route group:
/klarna-start, /klarna-checkout, /klarna-confirmation, /klarna-terms, /klarna-push, /klarna-reset.
- The
startCheckout action creates the Klarna order on the Klarna API, stores the HTML snippet in the session, and redirects the buyer to the iframe.
- The
receivePush action is the server-side webhook that finalises the order based on Klarna's authoritative status.
- The confirmation page destroys the cart on
checkout_complete status.
Confidence: VERIFIED.
16.4 Available payment methods
Active payment methods are pulled at runtime from the sys_payaments table and surfaced by DisplayService. Today the verified set is:
- Invoice (Faktura) — for B2B.
- Klarna Checkout — for B2C.
Other methods can be configured but require platform extension.
Confidence: VERIFIED for the two enabled methods.
16.5 Cart comments
Comments are attached to the cart before checkout:
web_cart_ordertxt.local_remark — a single whole-order remark.
web_cart_rowtxt.rowText — one remark per cart line.
These comments survive into the order (via OrderService) and into the confirmation emails and XML export.
Confidence: VERIFIED.
16.6 Limitations
- Card payment for B2B is not currently enabled.
- The unified "promotion / coupon" code module is not present in the current admin.
17. Klarna Integration
17.1 Overview
The Klarna integration is implemented through the KlarnaService and KlarnaController. It is a v3-style Klarna Checkout implementation with the following capabilities:
- Create order from cart with the customer's data (when known).
- Render the Klarna iframe to the buyer.
- Receive Klarna push server-side to finalise.
- Reset checkout, show terms, and show confirmation.
- Acknowledge the order with Klarna
ordermanagement/.../acknowledge after the order is created internally.
Confidence: VERIFIED.
17.2 Settings and environment
The Klarna service reads its credentials from environment variables:
KLARNA_API_URL
KLARNA_API_KEY
KLARNA_API_SECRET
Merchant URLs (push, confirmation, terms) are generated from site_url('klarna-*').
Confidence: VERIFIED.
17.3 B2B safety guard
If a B2B customer attempts to use Klarna, the OrderService rejects the request to enforce the policy that B2B = invoice and B2C = Klarna. This is a deliberate safeguard against accounting/data drift between the web and the ERP.
Confidence: VERIFIED.
17.4 Security context
Klarna's required scripts, frames and endpoints are explicitly allowlisted in the Content Security Policy filter. The X-Frame-Options header is relaxed for Klarna-checkout routes so the Klarna iframe can render.
Confidence: VERIFIED.
17.5 Idempotency
The push handler validates payload, looks up the cart by merchant_reference1, and uses checkExistingKlarnaOrder to ensure duplicate webhooks do not create duplicate orders.
Confidence: VERIFIED.
18. Shipping & Delivery
18.1 Overview
The platform supports delivery method management and shipping price rules per price list.
18.2 Delivery methods (/admin/shiping_settings)
- Lists all delivery methods (
visma_levsaett) from the ERP feed.
- Allows the admin to mark a single method as the pickup method (
is_pickUp = 1).
- The selection updates the storefront so the buyer can choose "pickup" at checkout.
Confidence: VERIFIED.
18.3 Shipping rules (/admin/frakt_standard)
- Configure shipping rules tied to a price list (
visma_prisl).
- Each rule defines:
- Free shipping threshold (
fraktfrigrens)
- Shipping price (
frakt_pris)
- Carrier (speditor) from
visma_speditor
- Display text for the shipping line.
- Stored in
web_prislist_settings where frakt_prisl is set.
Confidence: VERIFIED.
18.4 Multiple price lists (/admin/multiple_settings)
- Enable multiple price lists per shop, useful for segmented B2B pricing.
- The admin can add or remove price lists from the
multiple = 1 set.
- Used together with shipping rules to support per-list shipping.
Confidence: VERIFIED.
18.5 Operational notes
- Pickup methods are surfaced as
pickupOptions in DisplayService and selectable at checkout.
- Shipping rules are computed alongside cart totals.
18.6 Limitations
- Carriers and delivery methods originate from the ERP feed and are not edited in HandlaOnline.
19. Discounts & Campaigns
19.1 Overview
The primary discount engine in HandlaOnline is the customer discount letter (kundrabattbrev) model from the ERP. Discounts are not currently implemented as standalone campaign objects with rules engines; they are inherent to the customer pricing agreement and the price-list logic.
Confidence: VERIFIED.
19.2 Where discounts apply
| Mechanism | Where it lives | Triggered by |
| Article-specific discount | visma_kundrbtrows (prio_1) | Customer's price list + specific article. |
| Group discount | visma_kundrbtrows (prio_2) | Customer's price list + article group (artgrp). |
| List-wide discount | visma_kundrbtrows (prio_3) | Customer's whole price list. |
| Materialised discount price | web_kundrbtnr_pricces (built nightly during XML sync) | Used by the storefront for fast display. |
| Row-level discount display | Webshop setting show_row_discount | Whether the customer sees the discount badge per row. |
Confidence: VERIFIED.
19.3 Visible to the buyer
When enabled (show_row_discount = 1), each cart row shows the applied discount and the effective price. When show_stacked_prices = 1, the storefront displays the original and discounted price side-by-side.
Confidence: VERIFIED.
19.4 Limitations
- There is no campaign engine for time-limited promotions, coupon codes, or buy-X-get-Y rules in the current admin. Adding such a module would be a platform extension. (Menu items hinting at "Kampanjer" exist but are commented out — PARTIAL.)
20. SEO & Marketing
20.1 Overview
SEO is treated as a first-class concern. The platform invests in slugs, schema.org metadata, sitemap generation, redirect handling, and per-page SEO tools.
Confidence: VERIFIED.
20.2 SEO features
| Feature | Implementation |
| Unique URL slugs | unique_slugs table with per-entity type indexing (page, product, product_category). |
| Automatic redirects | redirect table updated when slugs change to keep old URLs alive. |
| Sitemap | Generated by SitemapService::generateSitemapNight() and written to FCPATH/sitemap.xml. Includes pages, categories, products. Sends a search-engine notification. |
| 404 fallback | A custom 404 override tries to render the slug as a CMS page; failing that, it tries to find a matching URL in sitemap.xml and issues a 301 redirect; failing that, it redirects to the home page. |
| Schema.org | Per-company and per-page schema.org metadata; image upload for organisation schema. |
| Per-page SEO | Title, description, social images, tag statistics, optimisation evaluation. |
| Per-category SEO | SEO title suggestions, SEO update endpoint, dedicated SEO data. |
| Per-product SEO | Slugs and image alt/title tags, plus the SEO-relevant attributes that travel with the article. |
Confidence: VERIFIED.
20.3 Sitemap automation
- A CLI command (
php spark generate:sitemaps) regenerates the sitemap.
- The service reads the currently active customer (
basic_customer), resolves their price list and discount letter, and uses these to scope the catalog appropriately.
- After generation, the service notifies search engines.
Confidence: VERIFIED.
20.4 Marketing settings
| Setting | Effect |
show_recommended_products | Whether recommended/cross-sell products are shown. |
show_additional_info | Whether extended product info is rendered. |
show_register_page | Whether a registration page is exposed. |
show_different_address | Whether checkout allows a different delivery address. |
send_order_confirmation_email | Whether to email the buyer after the order is placed. |
order_confirmation_email | Override recipient for confirmation emails. |
Confidence: VERIFIED.
20.5 Limitations
- No built-in newsletter subscription form, no mailing-list integration, no built-in A/B testing.
21. Analytics & Reporting
21.1 Overview
The platform records anonymous and authenticated activity to provide reporting and audit trails.
21.2 Built-in analytics
| Data set | Source table | Used by |
| Page views | statistics (page_url, referrer, IP, user agent, timestamp) | Admin Main dashboard, category and product stat endpoints, GeoIP enrichment. |
| GeoIP | GeoLite2-City.mmdb on disk | Map IPs to countries and cities for both order and statistics reporting. |
| Session activity | session_logs | Track logged-in sessions, idle time, auto-logout, cart snapshots, abandoned carts. |
| Login events | auth_logins | Used by the Admin Users dashboard for per-user last-login info and history. |
| Sent email audit | sent_emails | Every transactional email is logged with subject, recipient, type and timestamp. |
| Order logs | web_order_logs | Per-order events (creation, XML, email, errors). |
| XML sync history | web_xmlsync | Audit trail of synchronisation runs. |
| API access | api_access_logs | Each authenticated API call. |
| API errors | api_error_logs | Each API error with payload and exception class. |
| API sync log | api_sync_logs | Outcome of each API sync row. |
Confidence: VERIFIED.
21.3 Admin dashboard reports
- Top categories today with visit counts.
- Top products today with visit counts.
- Visitor location breakdown (country + city via GeoIP).
- Order list with date range and search.
- Order statistics endpoint (
fetchOrdersStatistic, fetchOrderStats).
- Login statistics for system users.
- Session statistics for end users.
Confidence: VERIFIED.
21.4 Reporting limitations
- The platform does not currently surface GDP-style financial KPIs, time-series sales charts or revenue cohort dashboards out of the box. These can be added on top of
web_orders via ad-hoc queries or BI tools, but are not built-in.
22. Settings & Configuration
22.1 Settings architecture
Configuration is divided across three distinct families:
| Family | Storage | Owner |
| Company / branding | sys_company_settings | Admin (via Settings page). |
| Webshop behaviour | webshop_general_settings | Admin (via "Inställningar" under Webshop). |
| System display / modules | sys_display, sys_display_elements, sys_modules | Super Admin. |
Confidence: VERIFIED.
22.2 Company settings tabs (recap)
| Tab | Examples |
| general | company_name, company_orgnr, company_address_city, company_zip, company_country, company_tel, company_contactemail, company_orderemail, company_requestemail, company_web, company_admin, company_seo_title, company_seo_desc, company_tagline. |
| policy | company_integritet (privacy policy). |
| logo | company_logo (with resizing to 300 px). |
| favicon | favicon-512x512 (with auto-resize variants). |
| schemorg | company_schemaorg. |
| verify | site_verification keys. |
| sociallink | company_data_social links. |
| site_scripts | Custom site-wide scripts. |
Confidence: VERIFIED.
22.3 Webshop general settings
The admin manages all webshop-wide flags through /admin/settings_general, including:
basic_customer (the default customer number used for guests).
show_webshop, show_prices, show_filters, show_stock, show_register_page, show_different_address.
show_recommended_products, show_additional_info.
show_row_discount, show_stacked_prices.
send_order_confirmation_email, order_confirmation_email.
cat_product_per_page and list view attribute slots (cat_list_att_1..4).
prod_img_size_width, prod_img_size_height.
shiping_txt_1..3 for the cart / checkout shipping description.
Confidence: VERIFIED.
22.4 Display & modules (Super Admin)
The Super Admin maintains the active display view (view_name = CMS / B2B / B2C) and the modules enabled for that view (sys_display_elements). Modules include payment configurations and feature toggles. Switching display mode resets and re-populates the active module list.
Confidence: VERIFIED.
22.5 Operational notes
- All settings are loaded once per request via
companySettings service and DisplayService.
- Settings change immediately impact storefront behaviour without redeployment.
- Each setting save is server-validated and limited to its tab definition.
23. Integrations
23.1 ERP integration (XML Sync)
Purpose: Keep web and ERP in sync on customers, contacts, articles, prices, discounts, delivery methods, carriers, payment terms, customer categories, articles groups, and orders.
How it works:
- The ERP exports XML files into the platform's
visma_webb/upload folder.
- The XML parser loads files, validates them, converts encoding (ISO-8859-1 → UTF-8), and inserts them into
tmp_* staging tables.
- Stored procedures (
*_iud) merge the staging data into the production visma_* tables.
- Specialised services maintain web-layer tables (
web_productcategories, unique_slugs, web_producttillhor, web_kundrbtnr_pricces, etc.).
- Sync results are logged in
web_xmlsync.
- Parsing failures send a notification email.
Triggers: Manual (Super Admin → XML-synkronisering → Synchronize) or scheduled CLI (php spark sync:files).
Confidence: VERIFIED.
23.2 Payment integration (Klarna)
See Section 17. Full Klarna Checkout v3 integration with iframe, server-side push, acknowledge, error handling and CSP-aware security.
Confidence: VERIFIED.
23.3 REST API
Purpose: Allow trusted external systems to push data into HandlaOnline and pull defined data sets.
Endpoints (verified):
GET /api/v1/status — health check.
POST /api/v1/sync — generic table sync (currently allowlisted to visma_levsaett_api, visma_kundkat_api; extensible).
OPTIONS /api/v1/sync — CORS preflight.
GET /api/v1/orders/new — placeholder for outbound order export (returns empty result today; PARTIAL).
GET /api/v1/customers, POST/PUT/DELETE — RESTful resource controller for customers.
Security:
- Every request must include
X-API-KEY and X-API-SECRET headers.
- Keys are validated against
api_keys (active flag, IP whitelist optional).
- Every access is logged in
api_access_logs; errors are logged in api_error_logs with payload context.
Management:
- Super Admin → API Keys (
/sadmin/api-keys): create, list, revoke, toggle active.
- Super Admin → API Keys → Logs / Errors: review activity and failures.
Confidence: VERIFIED.
23.4 Email integration
- A standard
EmailSender service wraps CodeIgniter's email transport.
- A
SentEmail service logs every send into the sent_emails table for audit.
- Transactional emails include: order confirmation (admin + customer), product inquiry, registration request, contact form submission, password reset, magic-link / invitation, XML sync error notification.
Confidence: VERIFIED.
23.5 Search engines / sitemap
SitemapService generates sitemap.xml and notifies search engines (notifySearchEngines).
- A CLI command schedules this nightly.
Confidence: VERIFIED.
23.6 Future / partial integrations
- Outbound order export via REST API is scaffolded but not implemented (returns empty).
- The integration scaffolding is also extended for additional
visma_*_api tables.
24. Notifications & Automation
24.1 Email notifications
| Event | Recipient | Sender service |
| Order placed (B2B / B2C) | Admin order email + customer | OrderService + EmailSenderService + SentEmailService |
| Product inquiry | Configured contact email | ProductController |
| Contact form submission | Configured form recipient | PageController::pageFormSend |
| B2B registration request | Configured admin/order email | FrontController::registerCustomer |
| Password reset | Customer | Reset + EmailSenderService |
| Admin invitation / magic link | Invited admin | Sadmin\Users::send_reset |
| XML sync error | Configured developer / admin email | XmlSyncService |
| Form submission (CMS) | Form's defined recipient | Forms |
Confidence: VERIFIED.
24.2 Session / activity automation
- Session activity logger updates
last_activity for logged-in users every request and triggers an auto-logout log if the session times out.
- Session beacon endpoints (
/api/session-heartbeat, /api/session-close, /api/session-hidden) record granular browser-side events (focus loss, tab close, etc.) into session_logs.
- Cart snapshot is captured during session logs to detect abandoned carts.
Confidence: VERIFIED.
24.3 Statistics automation
- Every storefront request hits the statistics logger filter, which inserts a row into
statistics (excluded paths are pre-configured to avoid spamming the table with admin or AJAX endpoints).
- The Admin Main page consumes these to render today's stats.
Confidence: VERIFIED.
24.4 Automated maintenance
- Sitemap regeneration (CLI).
- Slug enforcement (on every page/category/product save).
- Redirect maintenance (slug change adds redirect; slug reappears removes its redirect).
- Cart price recalculation (
refreshCart).
- Cart cleanup on order completion.
Confidence: VERIFIED.
24.5 Scheduled / recurring orders
Database tables exist (scheduled_orders, scheduled_order_executions, scheduled_order_reminders, scheduled_reminder_logs) and a ScheduledOrderService is implemented with create/update/delete, pause/resume style operations, execution lifecycle, "prepare order from execution", and "mark execution as ordered" advancing the next run date.
However, the routes and the corresponding tab + modals are currently neutralised in the user dashboard (commented out in Routes.php and app/Views/Front/UserArea/index.php). The capability is therefore present at the data/service level but not exposed to end-users out of the box.
Confidence: PARTIAL (service VERIFIED, customer surface DISABLED).
25. Security & Permissions
25.1 Authentication
- Built on CodeIgniter Shield.
- Users live in
users with credentials in auth_identities and group membership in auth_groups_users.
- Login attempts are recorded in
auth_logins.
Confidence: VERIFIED.
25.2 Session security
- The platform uses CSRF tokens (header
X-CSRF-TOKEN) for sensitive actions (e.g. changeCustomerView, checkout submit, customer/template operations).
- Session activity is tracked; idle sessions log out automatically and the auto-logout is recorded.
Confidence: VERIFIED.
25.3 Filters in front of routes
| Filter | Coverage |
login | Protects user/*, admin/*, sadmin/* and other protected URLs. |
group:admin | Required for /admin/*. |
group:superadmin | Required for /sadmin/*. |
apiauth | Required for /api/v1/*. |
cors | Global CORS handling with an allowlist for the swagger editor and known demo origins. |
securityHeader | Adds CSP, HSTS, XSS protection, Referrer-Policy, X-Frame-Options. |
activityLogger | Tracks logged-in session activity globally. |
statLogger | Records storefront page views, excluding pre-defined non-page paths. |
Confidence: VERIFIED.
25.4 Content Security Policy
The CSP filter explicitly allows the scripts, frames and connect endpoints needed for:
- Klarna Checkout and Klarna order management,
- Kustom Checkout,
- TinyMCE,
- YouTube,
- Stripe,
- and other configured third parties.
X-Frame-Options is relaxed only for the Klarna-checkout routes so the Klarna iframe can render.
Confidence: VERIFIED.
25.5 API security
- Per-key API access logging.
- Per-error API error logging with payload, IP and exception context.
- Optional IP allowlist per key.
- Active/inactive toggle and revocation from the Super Admin dashboard.
Confidence: VERIFIED.
25.6 Data protection
- Order tables include addresses, phone numbers and emails, all stored under the seller's database.
- The platform maintains an explicit privacy policy section (
company_integritet) managed by Admin → Settings → policy.
- Customer-supplied input on the storefront uses Shield's validation and CodeIgniter's input sanitisation.
Confidence: VERIFIED.
25.7 Known security-hardening recommendations (from the codebase)
- A few super-admin endpoints have temporary debug-level error messages or hardcoded values flagged in code comments. These are operational debt rather than feature gaps.
- Review API error verbosity before production exposure (the API currently returns detailed error messages for triage).
26. Operational Workflows
26.1 Cart life cycle
- Visitor adds a product (
POST /addToCart).
- The platform creates or updates a cart record (
web_cart) and items (web_cart_items).
- The cart is associated with the customer once login is detected; the price agreement is applied.
- The customer can:
- update quantity (
updateCartItem),
- remove a line (
deleteCartItem),
- clear the cart (
removeCart),
- add a per-line remark (
updateProductCartComment) → web_cart_rowtxt,
- add a whole-order remark (
updateCartComment) → web_cart_ordertxt,
- inspect totals (
getCartTotal, getCartCount).
- On checkout submit the cart is converted to an order and the cart is marked
paid.
- If the customer switches identity (e.g. via
changeCustomerView) the cart is cleared and re-priced for the new customer.
Confidence: VERIFIED.
26.2 B2B order placement (end-to-end)
[Buyer logs in]
│ kundnr / kontaktid / kundrbtnr resolved
▼
[Browses catalog – sees personalised prices]
│ Adds products to cart, attaches comments
▼
[Opens checkout]
│ Chooses delivery address, delivery date, pickup code
▼
[Submits "Skicka order"]
│ CSRF + login validated
▼
[OrderService::processOrder]
│ B2B guard → DB transaction → web_orders + web_order_details + logs
│ XML generated to visma_webb/download
▼
[Emails sent: admin + customer] [Cart marked paid + cleared]
│
▼
[ERP imports the XML and invoices the customer]
Confidence: VERIFIED.
26.3 B2C order placement (end-to-end)
[Visitor browses + adds to cart]
▼
[Visits /klarna-start]
│ Validate cart and totals
▼
[KlarnaService creates order with Klarna]
│ HTML snippet stored in session
▼
[Iframe displayed at /klarna-checkout]
│ Buyer completes Klarna flow
▼
[Klarna calls back /klarna-push (server-to-server)]
│ Idempotency check → OrderService::processOrderFromKlarna
│ DB transaction → web_orders + web_order_details + logs
│ Klarna order acknowledged
▼
[Confirmation page at /klarna-confirmation]
[Customer + admin emails sent]
[Cart destroyed]
Confidence: VERIFIED.
26.4 XML synchronisation (end-to-end)
[ERP exports XML to visma_webb/upload]
▼
[Super Admin clicks "Synchronize" OR cron runs spark sync:files]
▼
[XmlSyncService::syncXml]
│ Parser → tmp_* truncate + insert
│ DatabaseCompareService → CALL <table>_iud()
│ Web tables updated (categories, slugs, prices, recommended)
│ Sync log written to web_xmlsync
▼
[On parse error: notification email]
Confidence: VERIFIED.
26.5 Template order workflow
[Customer opens "Tidigare beställningar"]
▼
[Clicks "Skapa order" on a previous order]
│ Modal asks for template name
▼
[Server creates web_template_orderhead + web_template_orderrow]
▼
[Template appears in "Mina beställningar / order"]
│ Customer edits lines, quantities, comments, notes
│ Can copy, delete, restore-to-original
▼
[Customer clicks "Add to cart from template"]
▼
[Cart rebuilt with current prices via RebuildCartService]
▼
[Customer proceeds to checkout as a normal B2B order]
Confidence: VERIFIED.
26.6 Catalog publishing workflow
[ERP → new article / change article]
▼
[XML sync → visma_artiklar updated, slug created]
▼
[Admin → /admin/products]
│ Add images, set status, assign categories, attach documents
│ Configure variants & filters
│ Add SEO data and recommended products
▼
[Storefront immediately reflects changes]
▼
[Sitemap regenerated at next nightly run]
Confidence: VERIFIED.
26.7 CMS publishing workflow
[Admin opens /admin/pages_admin]
│ Creates or selects a page
▼
[Edits page in /admin/page_edit/{slug}]
│ Adds components from templates
│ Adds elements, uploads images, sets SEO data
│ Sets status to published
▼
[Page is visible publicly at /{slug}]
▼
[Sitemap updated; old slug (if any) covered by redirect]
Confidence: VERIFIED.
26.8 Customer-view switching workflow (B2B sales)
[Authenticated admin/seller]
▼
[POST /changeCustomerView with kundnr]
│ CSRF validated
│ Cart cleared
│ DisplayService updated to view the catalog as that customer
▼
[Admin can now see exactly what the chosen B2B customer sees]
Confidence: VERIFIED.
27. Administrative Workflows
27.1 Daily catalog operations
| Activity | Where in dashboard |
| Update product images for the week's hero items | Admin → Webshop → Produkter → image tools |
| Add a new category, with menu image and SEO | Admin → Webshop → Produktkategorier |
| Maintain filters used on category pages | Admin → Webshop → Produktattributer |
| Curate cross-sell relationships | Admin → Webshop → Produkter → related products |
| Hide/show products | Admin → Webshop → Produkter → status |
27.2 Daily order operations
| Activity | Where in dashboard |
| Review today's orders | Admin → Beställningar |
| Inspect a specific order, see lines and comments | Order list → row click |
| Check daily/period order statistics | Admin → Beställningar (stats endpoints) |
| Resolve a customer issue about an order | Admin → Beställningar + Admin → Användare (session activity) |
27.3 Marketing & content operations
| Activity | Where |
| Update the privacy policy | Admin → Settings → policy |
| Replace the logo or favicon | Admin → Settings → logo / favicon |
| Add a new landing page | Admin → CMS → Sidor |
| Add or edit a contact form | Admin → CMS → Formulär |
| Upload new downloadable documents | Admin → Document |
| Attach documents to specific products | Admin → Webshop → Produktdokument |
| Update site verification keys | Admin → Settings → verify |
| Update tracking scripts | Admin → Settings → site_scripts |
27.4 Integration operations (Super Admin)
| Activity | Where |
| Manually trigger XML synchronisation | Sadmin → XML-synkronisering → Synchronize |
| Upload an out-of-band XML file | Sadmin → XML-synkronisering → Upload |
| Issue a new API key for a partner | Sadmin → API Keys → Create |
| Revoke an API key | Sadmin → API Keys → Revoke |
| Inspect API access logs and errors | Sadmin → API Keys → Logs / Errors |
| Add or activate a language | Sadmin → Language |
| Add a new system admin user | Sadmin → Användare |
27.5 Customer-segment operations
| Activity | Where |
| Decide which customer category is "private" | Admin → Customer settings |
| Configure shipping per price list | Admin → Frakt_standard |
| Enable multi-price-list mode | Admin → Multiple_settings |
| Set the default pickup delivery method | Admin → Shiping_settings |
28. Customer Workflows
28.1 B2C visitor
[Lands on home page]
▼
[Browses categories / search]
▼
[Opens product page]
▼
[Adds to cart] ↔ [Adds to wishlist]
▼
[Reviews cart, proceeds to Klarna]
▼
[Completes payment in Klarna iframe]
▼
[Sees confirmation page; receives confirmation email]
28.2 B2C consumer with account
Same as 28.1, plus access to:
- order history via
/myaccount,
- wishlist persistence,
- saved profile.
28.3 B2B authenticated buyer
[Logs in with email + password]
▼
[Sees personalised home + assortment]
│ Customer-specific prices and discounts applied
▼
[Builds cart or selects a saved template]
│ Optionally adds per-line and per-order remarks
▼
[Checkout]
│ Selects delivery address (up to 3 options)
│ Selects delivery date and pickup code if relevant
▼
[Sends order via "Skicka order"]
▼
[Order is recorded, emailed, and exported as XML to the ERP]
▼
[Customer can view in "Tidigare beställningar", re-order, or save as template]
28.4 B2B template management
- Open "Mina beställningar / order".
- Filter and search templates.
- Edit a template's lines or quantities.
- Use "Sökresultat" to add products to a template (with Select2 product search).
- Save changes; "Återställ till original" reverts.
- Copy a template to make variants for different sites.
- Delete a template when no longer needed.
28.5 B2B calendar planning
- Open "Kalender".
- See orders plotted on the calendar by delivery date.
- Click an event to open a modal with order details.
28.6 Customer account management
- Open "Mina uppgifter".
- View contact details inherited from the ERP record.
- Sign out from the dashboard at any time.
Confidence: VERIFIED.
29. FAQ & Common Operations
29.1 How do I switch the site between B2B and B2C?
The Super Admin changes the display view in the system display configuration. The active view (view_name) determines storefront behaviour for non-admin visitors. Logged-in admins/superadmins always see CMS mode regardless.
29.2 How does a B2B customer get their own prices?
On login, the platform resolves the customer's kundnr, kontaktid and kundrbtnr/prisl from the synchronised ERP records. Pricing on every product is then computed (or read from materialised tables built nightly) using the kundrabattbrev rules: priority 1 article-specific, priority 2 article-group, priority 3 whole price list.
29.3 How does Klarna confirm an order if the buyer closes the browser?
Klarna sends a server-side push to /klarna-push. The platform validates the payload, resolves the cart by merchant_reference1, and finalises the order through OrderService. Idempotency prevents duplicates. Confirmation emails are then sent and the cart destroyed.
29.4 Can I run B2B and B2C from the same site?
Yes. The classification is done per customer category through Admin → Customer settings. Logged-in B2B customers get B2B rules; consumers and guests get B2C rules.
29.5 Where do orders go after being placed?
Orders are stored in web_orders (and web_order_details), available in Admin → Beställningar. For B2B they are also exported as XML to visma_webb/download for ERP import. The customer receives a confirmation email; the admin receives an admin notification email. Every email is logged in sent_emails.
29.6 How do I add a partner to the REST API?
Sadmin → API Keys → Create. Give the partner the generated api_key and api_secret, optionally restrict to specific IPs. Their requests must include the X-API-KEY and X-API-SECRET headers. All access is logged.
29.7 What happens if my XML sync fails?
The sync run is recorded in web_xmlsync. On parsing errors, a notification email is sent. Bad files are moved to an error area so the next run is not blocked.
29.8 How do I publish a new marketing page?
Admin → CMS → Sidor → Create. Provide a name and parent. Open the page editor (/admin/page_edit/{slug}), add components from templates, add elements and images, configure SEO, and set the status to published.
29.9 Can buyers download documents?
Yes. Admin → Document manages the central document library; Admin → Webshop → Produktdokument attaches documents to specific products; CMS pages can reference documents through the form/document selectors in the page editor.
29.10 Can a buyer change which company they buy on behalf of?
For internal sales/admin scenarios, the changeCustomerView endpoint allows switching the active kundnr (after CSRF validation) and re-priced the experience. For end users, login is bound to a contact / company.
30. Platform Capability Summary
30.1 At a glance — what HandlaOnline delivers
| Domain | Capability |
| Storefront | Public/private B2B/B2C webshop with personalised pricing, multiple addresses, cart comments, wishlist, search, category browsing, product pages with related products. |
| Payments | Invoice (B2B) and Klarna Checkout (B2C) with server-side push and acknowledge. |
| Order processing | Unified order pipeline with email confirmations, XML export, full audit log, idempotency for Klarna. |
| Customer self-service | Order history, reorder, template orders, calendar of orders, account info. |
| CMS | Page tree with builder (components + elements), reusable forms, document library, media, SEO tools, Schema.org. |
| Catalog | Categories, products, images, variants, filters, properties, documents, recommended products, status, slugs, SEO. |
| Customers | Login bound to ERP customer + contact, multi-address resolution, per-customer pricing, customer activity insights. |
| Shipping | Pickup designation, per-price-list shipping rules, free-ship thresholds. |
| Marketing | Sitemap automation, redirects, schema.org, per-page SEO evaluation. |
| Integrations | XML sync with ERP, REST API for machine-to-machine, Klarna API, email transport. |
| Operations | Admin dashboard with stats, order management, settings; super admin for XML sync, API keys, language, admin users. |
| Security | Shield auth with role groups, route-level filters, CSP, HSTS, CSRF, session activity logging, API access/error logs. |
| Multi-language | Translation tables and admin tools for activating and managing languages. |
30.2 Why customers choose HandlaOnline
- One platform, two business models. B2B + B2C without compromising either.
- One source of truth. The ERP is honoured. The webshop does not duplicate masters; it synchronises them.
- Operational discipline. Order export, audit logs, sent-email log, session log — full traceability.
- Self-service for B2B buyers. Templates, reorder, calendar — designed to make repeat purchases trivial.
- Marketing flexibility. A real CMS, not just product pages — pages, forms, documents, schema.org.
- Modern checkout. Klarna Checkout for B2C, invoice flow for B2B, both safe and idempotent.
- Extensible by API. Versioned API with key management and access logs to integrate partners cleanly.
- Swedish-first. UI, conventions, ERP terminology and Klarna integration aligned to the local market.
Appendix A — Swedish / Business Glossary
| Term | English equivalent / explanation |
| artnr | Article number — unique identifier of an article. |
| artgrp | Article group — grouping of articles for pricing/discount rules. |
| basic_customer | The default customer number used for guests when computing prices/categories. |
| B2B-registrering | B2B registration request (initial contact for opening a B2B account). |
| benämning / benaemn | Designation / name of a product or price list. |
| beställning | Order. |
| beställningar | Orders. |
| fakturaadress | Invoice address. |
| faktura | Invoice. |
| frakt | Freight / shipping. |
| fraktfrigrens | Free-shipping threshold (amount above which shipping is free). |
| företag | Company. |
| kalender | Calendar. |
| kassa | Checkout. |
| kontakt / kundkontakt / kontaktid | Customer contact (the person who is the login user); kontaktid is the contact's ERP id. |
| kund | Customer (company). |
| kundkat | Customer category — used to classify the kind of customer (B2B, private, etc.). |
| kundnr | Customer number — the ERP customer id. |
| kundrabattbrev | Customer discount letter — the customer-specific pricing/discount agreement. |
| kundrbtnr | Customer discount letter number — the ERP key for the discount letter. |
| leverans / leveransadress | Delivery / delivery address. |
| levsaett | Delivery method. |
| levvillk | Delivery terms. |
| logga in / logga ut | Log in / log out. |
| mall / mallorder | Template / template order — saved order used for repeat purchasing. |
| markning | Marking / label text on an order line or order. |
| mitt konto | My account. |
| moms | VAT. |
| omberäkning | Recalculation — used when the cart is repriced after a customer change. |
| ort | City. |
| prisl / prislista | Price list. |
| privatkund | Private (consumer) customer. |
| påminnelse / påminnelser | Reminder(s). |
| rabatt / radrbt | Discount / row discount. |
| schemalagda ordrar | Scheduled orders (database & service implemented but UI/routes currently disabled). |
| sidor | Pages (CMS). |
| sitemap | Sitemap (sitemap.xml). |
| skicka order | Send order (B2B invoice submit button). |
| speditor | Carrier / forwarder. |
| språk | Language. |
| stafflad | Tiered / staffel pricing — multiple prices per quantity range. |
| synkronisering | Synchronisation (used in XML sync). |
| tillhör / tillhor | Belongs (to a variant group). |
| tegenskaper / egenskaper | Product properties / attributes. |
| användare | Users. |
| varukorg | Shopping cart. |
| visma_* | ERP-sourced tables. |
| webbshop / e-handel | Webshop / e-commerce. |
| web_* | Web-layer tables (owned by HandlaOnline). |
| önskelista / wishlist | Wishlist. |
Appendix B — Confidence Matrix
This matrix summarises confidence per module, based on direct verification in the platform's code, routes, and views.
| Module / capability | Confidence | Notes |
| Platform identity & three display modes (B2B / B2C / CMS) | VERIFIED | Confirmed by sys_display, DisplayService, header layouts. |
| Authentication, groups, route filters | VERIFIED | Confirmed by Shield config, AuthGroups, Filters, Login filter. |
| Storefront cart, comments, wishlist | VERIFIED | Confirmed via CartController, CartService, web_cart_* tables. |
| B2B invoice checkout | VERIFIED | Confirmed via OrderService::processOrder. |
| B2C Klarna checkout | VERIFIED | KlarnaController + KlarnaService + processOrderFromKlarna. |
| Order export XML | VERIFIED | OrderXmlService. |
| Customer-specific pricing (kundrabattbrev) | VERIFIED | KundRabattBrevService + web_kundrbtnr_pricces materialisation. |
| Template / mall orders | VERIFIED | Dashboard tab + Main.php tplo_* methods + MallOrderService + tables. |
| Reorder | VERIFIED | ReorderController + ReorderService + RebuildCartService. |
| Calendar of orders | VERIFIED | FullCalendar UI + getOrdersForCalendar endpoint. |
| CMS pages / page builder / forms / documents | VERIFIED | Pages/PagesEdit/Forms/Document controllers + models. |
| Catalog admin (products / categories / variants / filters / properties / documents) | VERIFIED | All admin controllers confirmed. |
| Customer activity (session log, login log, GeoIP) | VERIFIED | Session logger filter + GeoIP-augmented admin pages. |
| Statistics | VERIFIED | StatisticLogger filter + admin stats endpoints. |
| Sent email audit | VERIFIED | SentEmailService + sent_emails table. |
| XML sync pipeline | VERIFIED | XmlSyncService, XmlParserService, DatabaseCompareService, WebProductService. |
| REST API (status, sync, customers, orders/new) | VERIFIED (orders/new PARTIAL stub) | API V1 controllers + auth filter + key management. |
| Klarna CSP / X-Frame-Options handling | VERIFIED | SecurityHeader filter. |
| Sitemap automation + redirect maintenance | VERIFIED | SitemapService + RedirectService + commands. |
| Multi-language | VERIFIED | LanguageController + Sadmin Lang + translation tables. |
| Multiple price lists | VERIFIED | Multiple_settings + web_prislist_settings. |
| Shipping rules per price list + pickup designation | VERIFIED | Frakt_standard + Shiping_settings. |
| Private-customer classification | VERIFIED | Customer_settings. |
| Scheduled / recurring orders | PARTIAL | Service + tables implemented; routes + UI currently neutralised. |
| Blog (front + admin) | PARTIAL | Stubs only. |
| Settingsproducts | PARTIAL | Stub only. |
| Standalone campaign / coupon engine | UNKNOWN / NOT PRESENT | Discounts are pricing-driven. Menu entries hint at "Kampanjer" but are commented out. |
| Outbound order export over REST API | PARTIAL | /api/v1/orders/new exists but returns empty. |
| Card payment for B2B | UNKNOWN / NOT ENABLED | B2B explicitly enforced to invoice. |
| Live stock decrement | UNKNOWN / NOT PRESENT | Stock is read-only from ERP. |
| Built-in BI / financial dashboards | UNKNOWN / NOT PRESENT | Orders are queryable; no dedicated BI module ships. |
| Media library (advanced) | PARTIAL | Entry point exists; richer asset workflow is partial. |
Appendix C — Module → Dashboard Path Map
| Module | Path | Audience |
| Admin home (today's stats) | /admin/main | Admin |
| Orders | /admin/order | Admin |
| Users / login overview | /admin/users | Admin |
| Pages (CMS) | /admin/pages_admin | Admin |
| Page editor | /admin/page_edit/{slug} | Admin |
| Forms | /admin/forms | Admin |
| Documents | /admin/document | Admin |
| Product Categories | /admin/products_cat | Admin |
| Products | /admin/products | Admin |
| Product Documents | /admin/productsdocuments | Admin |
| Product Variants | /admin/products_variant | Admin |
| Product Filters | /admin/products_filters | Admin |
| Product Properties | /admin/productegenskaper | Admin |
| Webshop General Settings | /admin/settings_general | Admin |
| Customer settings (private classification) | /admin/customer_settings | Admin |
| Multiple price lists | /admin/multiple_settings | Admin |
| Shipping standard / frakt | /admin/frakt_standard | Admin |
| Shipping methods / pickup | /admin/shiping_settings | Admin |
| Media | /admin/media_admin | Admin |
| Company / branding settings | /admin/settings | Admin |
| Super Admin home | /sadmin/main | Super Admin |
| XML Sync console | /sadmin/xmlsynk | Super Admin |
| API keys console | /sadmin/api-keys | Super Admin |
| Admin user management | /sadmin/showUsers | Super Admin |
| Language management | /sadmin/lang | Super Admin |
| Storefront home | / | Public |
| Category page | /kategori/{slug} | Public / per display rules |
| Product page | /produkt/{slug} | Public / per display rules |
| Cart | /cart | Public (binds to login at checkout) |
| Checkout | /checkout | Logged-in |
| Klarna checkout | /klarna-start → /klarna-checkout → /klarna-confirmation | Public (B2C) |
| Customer dashboard | /myaccount | Logged-in customer |
| Wishlist | /wish | Logged-in customer |
| Password reset | /reset, /resetpassword/{token} | Public |
| Set password (invitation flow) | /set-password | Invited admin |
| REST API v1 status | /api/v1/status | Public |
| REST API v1 (authenticated) | /api/v1/sync, /api/v1/customers, /api/v1/orders/new | API-keyed partners |
End of master document. This is the canonical enterprise reference for HandlaOnline as of the analysed codebase. Any departure from the behaviour described here should be treated as an incident or an undocumented change and reported to the platform owner.
Introduktion till HandlaOnline E-handelsplattform
Välkommen till vår innovativa e-handelsplattform! Denna dokumentation syftar till att ge dig en omfattande förståelse för hur du kan maximera din e-handelsverksamhets potential genom att använda vår plattform. Oavsett om du är nybörjare eller en erfaren handlare, erbjuder vår dokumentation en vägledande resurs för att navigera genom varje aspekt av plattformens funktioner.
Version: 3.0
|
Skapad: 15 juli 2023 |
Författare: DataPartner
|
Uppdaterad: 21 augusti 2023 |
Om du har några frågor som ligger utanför ramen för denna hjälpfil, vänligen skicka ett e-postmeddelande via artikelsupportsidan.
Översikt av Dokumentationen
Välkommen till dokumentationen för vår e-handelsplattform! Här hittar du omfattande information och resurser för att effektivt använda och administrera plattformen. Genom att följa denna guide kommer du att lära dig att navigera genom olika funktioner, genomföra hantering av produkter och beställningar, och optimera användarupplevelsen för både kunder och administratörer.
Dokumentationen är strukturerad för att ge dig en klar och stegvis vägledning, oavsett om du är nybörjare eller erfaren användare. Vi har inkluderat detaljerade beskrivningar, praktiska exempel och användbara tips för att underlätta din resa genom plattformen.
Mål och syfte med E-handelsplattformen
Vår e-handelsplattform är utformad med ett tydligt mål och syfte: att skapa en kraftfull och användarvänlig miljö där du som handlare kan bygga och driva din digitala affärsverksamhet framgångsrikt. Vi strävar efter att erbjuda dig en omfattande uppsättning verktyg och funktioner som hjälper dig att nå dina affärsmål och öka din närvaro på den digitala marknaden.
Huvudmål:
- Säljökning: Genom att erbjuda en intuitiv och attraktiv plattform, strävar vi efter att öka din försäljning genom att locka och behålla kunder.
- Anpassning: Vår plattform ger dig möjlighet att anpassa din e-handelsupplevelse för att spegla din varumärkesidentitet och skapa en unik kundresa.
- Effektivitet: Med hjälp av våra automatiserade funktioner och smidiga arbetsflöden, syftar vi till att öka effektiviteten i din verksamhet och minska tidskrävande rutinarbete.
- Kundnöjdhet: Genom att erbjuda en sömlös och responsiv användarupplevelse vill vi bygga långsiktiga relationer med dina kunder och öka kundnöjdheten.
Syfte:
Vår e-handelsplattform är utformad för att vara en pålitlig partner i din affärssatsning. Oavsett om du är en individuell entreprenör, ett mindre företag eller en växande organisation, strävar vi efter att ge dig de verktyg du behöver för att lyckas på den digitala marknaden. Vi tror på att underlätta och förbättra din e-handelsupplevelse så att du kan fokusera på att utveckla ditt varumärke och erbjuda enastående produkter och tjänster till din målgrupp.
Användarhantering
Användarhantering är en central aspekt av din e-handelsplattform, då den möjliggör säker och strukturerad hantering av användarkonton och behörigheter. Detta avsnitt förklarar hur du administrerar användare, tilldelar roller och ser till att endast auktoriserade individer har tillgång till olika delar av plattformen.
Inloggning och Autentisering
Inledning
Inloggning och autentisering är grundläggande komponenter i din e-handelsplattform som säkerställer att endast auktoriserade användare får åtkomst till plattformens funktioner och data. Genom att tillhandahålla en säker och smidig inloggningsprocess kan du skydda användarnas uppgifter och förbättra deras användarupplevelse.
Användarnamn och Lösenord
Vanligtvis används användarnamn och lösenord som de primära inloggningsuppgifterna. För att säkerställa stark autentisering är det viktigt att följa bästa praxis:
- Komplexa Lösenord: Användare bör uppmanas att skapa komplexa lösenord som inkluderar både stora och små bokstäver, siffror och specialtecken.
- Lösenordsåterställning: Erbjud en säker procedur för lösenordsåterställning, till exempel genom att skicka en återställningslänk till användarens registrerade e-postadress.
- Tvåfaktorautentisering (2FA): Implementera möjligheten för användare att aktivera 2FA, vilket ger en extra säkerhetsnivå genom att kräva en ytterligare autentiseringsfaktor.
Sessionshantering
En gång inloggad måste plattformen hantera användarsessioner på ett säkert sätt. Detta inkluderar att tilldela en unik sessionsidentitet, använda HTTPS för att kryptera kommunikationen och att säkerställa att sessionen automatiskt loggas ut efter en viss inaktiv tid.
Säkerhet och Skydd
För att skydda plattformen från skadliga angrepp och hot bör du implementera säkerhetsåtgärder som:
- Skydd mot bruteforce-attacker: Begränsa antalet inloggningsförsök och använd CAPTCHA eller andra skydd för att förhindra bruteforce-attacker.
- Input-validering: Säkerställ att inmatade data (som användarnamn och lösenord) är korrekt validerade och filtrerade för att förhindra injektionsattacker.
- Datakryptering: Kryptera känslig användardata som lösenord i databasen för att förhindra exponering av känslig information.
Återställning av Glömt Lösenord
För att hjälpa användare som har glömt sina lösenord, bör du erbjuda en säker procedur för återställning av glömt lösenord. Detta kan involvera verifiering via e-post eller andra säkra metoder för att bekräfta användarens identitet innan ett nytt lösenord tillåts.
Redigera Användare
För att ändra information eller behörigheter för en befintlig användare:
- Logga in som administratör och navigera till "Användarhantering".
- Hitta användaren som du vill redigera och välj "Redigera" eller liknande alternativ.
- Uppdatera den önskade informationen, som namn, e-postadress eller lösenord.
- Justera användarens roller och behörigheter enligt behov.
- Spara ändringarna för att uppdatera användarprofilen.
Inaktivera eller Ta Bort Användare
Om en användare inte längre behöver åtkomst till plattformen, har du möjlighet att antingen inaktivera eller ta bort användaren:
- Inaktivering: Att inaktivera en användare gör att de inte längre kan logga in eller använda plattformen, men deras information sparas i systemet för historik och dokumentation.
- Borttagning: Att ta bort en användare raderar deras information helt och hållet från systemet. Var försiktig med denna åtgärd, eftersom det kan vara irreversibelt.
Återställa Lösenord
Om en användare glömmer sitt lösenord eller behöver återställa det av någon anledning, bör du erbjuda en enkel process för lösenordsåterställning. Detta kan inkludera att skicka en återställningslänk till användarens e-postadress eller genom att följa andra säkra återställningsmetoder.
Övervakning och Historik
För att säkerställa säkerheten och spåra användaraktivitet bör du övervaka och spara en historik över användaraktiviteter. Detta kan vara till hjälp vid spårning av förändringar, felsökning och säkerhetsrevisioner.
Produktadministration
I avsnittet för produktadministration har du full kontroll över hanteringen och uppdateringen av dina produkter. Här kan du lägga till nya produkter, uppdatera befintliga och se till att din produktlista är korrekt och aktuell. Genom att använda de olika funktionerna för produktadministration kan du effektivt organisera och presentera dina produkter för dina kunder.
Produktkategorier och Attribut
Inledning
Organisering av dina produkter i tydliga produktkategorier och tilldelning av relevanta attribut är avgörande för att skapa en strukturerad och användarvänlig e-handelsplattform. Genom att kategorisera produkterna på ett logiskt sätt och tillhandahålla detaljerad information via attribut, kan du hjälpa dina kunder att snabbt hitta och förstå produkterna som erbjuds.
Produktkategorier
Produktkategorier agerar som navigationsverktyg för dina kunder och underlättar sökandet efter specifika typer av produkter. Här är några riktlinjer att tänka på vid hantering av produktkategorier:
- Hierarkisk Struktur: Organisera kategorierna hierarkiskt, med överordnade och underordnade kategorier. Detta hjälper till att skapa en klar hierarki och underlättar navigation.
- Namn och Beskrivningar: Tilldela tydliga och beskrivande namn och beskrivningar till varje kategori. Använd sökord som hjälper kunderna att identifiera kategorin.
- Bilder: Lägg till representativa bilder för varje kategori för att underlätta igenkänning och visualisering.
Produktattribut
Produktattribut är detaljerade egenskaper som ger ytterligare information om produkterna och hjälper kunderna att fatta informerade beslut. Här är några aspekter att överväga vid hantering av produktattribut:
- Relevanta Egenskaper: Definiera attribut som är relevanta för dina produkter. Till exempel kan kläder ha attribut som storlek, färg och material.
- Variationsattribut: För produkter med olika variationer (till exempel kläder med olika storlekar och färger), använd attribut för att specificera dessa variationer.
- Enhetliga Värden: Använd enhetliga värden och format för attributen. Detta gör det enklare för kunder att jämföra produkter.
- Mått och Vikt: Om produkter har fysiska mått eller vikt, inkludera dessa attribut för att ge detaljerad information till kunderna.
Anpassade Attribut
För att ge flexibilitet och anpassningsmöjligheter kan du överväga att erbjuda möjligheten att lägga till anpassade attribut för specifika produkter. Detta kan vara särskilt användbart för unika produkter eller för att tillgodose särskilda behov.
Sökbart och Filtrerbart
Genom att göra produktattributen sökbara och filtrerbara kan du göra det enklare för kunderna att hitta produkter som matchar deras preferenser. Tillhandahåll filteralternativ baserat på attributen så att användarna kan smidigt smalna ner sina sökresultat.
Lagerhantering
Inledning
I avsnittet för lagerhantering och inventering kommer du att lära dig hur du effektivt hanterar dina produkter och håller koll på lagerstatus. Genom att använda verktyg och funktioner för lagerhantering kan du säkerställa att du alltid har tillräckligt med produkter tillgängliga för att möta efterfrågan och undvika överflödiga lagerkostnader.
Översikt av Lagerstatus
För att få en snabb överblick över lagerstatus för dina produkter:
- Lagersaldo: Se det aktuella antalet produkter som finns i lager för varje produkt.
- Lågt lagersaldo: Ange en varningströskel för varje produkt. När lagersaldot når denna tröskel, ges en varning för att påminna dig om att fylla på lagret.
Justera Lagerstatus
Om det inträffar händelser som påverkar lagerstatusen, som returer eller skadade produkter:
- Välj den relevanta produkten från listan över produkter.
- Klicka på "Justera lagerstatus" eller liknande alternativ.
- Ange anledningen till justeringen och det förändrade antalet produkter.
- Spara justeringen för att uppdatera lagerstatusen.
Lageröversikt och Rapporter
För att få en djupare förståelse av din lagerhantering:
- Lageröversikt: Se en lista över alla lagerposter med detaljerad information om varje post.
- Lagerhistorik: Följ ändringar i lagerstatus över tid och analysera trender och mönster.
Beställningshantering
I detta avsnitt kommer vi att utforska hur du hanterar beställningar på din e-handelsplattform effektivt och smidigt. Beställningshantering är en central del av din verksamhet och involverar processer från mottagande av beställningar till leverans till kunderna.
Kundkorg och Kassa
I detta avsnitt kommer vi att utforska den viktiga processen med kundkorg och kassa på din e-handelsplattform. Detta är det avgörande steget där kunderna konverterar sina valda produkter till faktiska beställningar och genomför betalningar.
Kundkorgsprocessen
Kundkorgen är en virtuell samling av produkter som kunden vill köpa. Låt oss utforska processen:
- Lägg till produkter: När kunder bläddrar igenom produkterna kan de enkelt lägga till önskade varor i kundkorgen.
- Antal och variationer: Kunden kan justera antalet produkter och välja olika variationer, som färg eller storlek.
- Sammanfattning: Kunderna kan när som helst granska kundkorgen för att se valda produkter och totalpris.
Gå till Kassan
När kunder är nöjda med innehållet i sin kundkorg går de vidare till kassan för att avsluta köpet:
- Inloggnings- eller Gästläge: Kunden kan logga in på sitt befintliga konto eller checka ut som gäst.
- Frakt och Leverans: Kunden anger fraktinformation och leveransadress för att beräkna fraktkostnader och leveranstider.
- Betalning: Kunderna väljer en betalningsmetod, såsom kreditkort eller faktura, och genomför betalningen.
- Orderbekräftelse: Efter framgångsrik betalning genereras en orderbekräftelse med detaljer om beställningen och leveransen.
Hantering av Kundkorg och Kassa
Följande steg hjälper dig att smidigt hantera kundkorg och kassa:
- Produktuppdatering: Uppdatera produktpriser och tillgänglighet i realtid för att undvika förvirring vid kassan.
- Fraktalternativ: Erbjud olika fraktalternativ med tydliga kostnader och leveranstider.
- Betalningsgateway: Integrera pålitliga betalningsgateways för en säker och sömlös betalningsprocess.
- Transparens: Ge tydlig information om priser, skatter och eventuella avgifter för att undvika överraskningar för kunderna.
- Mobilitet: Se till att kundkorgen och kassan fungerar smidigt på både datorer och mobila enheter.
Kundregistrering och inloggning
Hantering av kunduppgifter
Kundsupport och kontaktinformation
Integrera olika betalningsgateways
Hantera betalningar och fakturering
Detta avsnitt fokuserar på betalnings- och faktureringsprocessen på din e-handelsplattform. Att hantera betalningar och utfärda fakturor på ett smidigt och säkert sätt är avgörande för att säkerställa en framgångsrik affärsverksamhet och en positiv kundupplevelse.
Betalningsmetoder
Din e-handelsplattform bör erbjuda en mängd olika betalningsmetoder för att möta kundernas preferenser och behov:
- Kortbetalningar: Integrera betalningsgateway för kreditkort och debitkort, vilket ger snabba och bekväma betalningar.
- Direktbanköverföring: Ge möjlighet för kunder att göra direktöverföringar från sina bankkonton.
- Mobilbetalningar: Erbjud betalning via mobila plånböcker och appar för enkel och snabb transaktion.
- Fakturabetalning: Tillåt kunder att betala mot faktura för att ge dem flexibilitet i betalningstiden.
- Betalkort: Integrera betalkort för att låta kunder använda sina förbetalds- eller presentkort.
Säkerhet och Dataintegritet
Vid hantering av betalningar och fakturering är säkerheten av största vikt:
- SSL-certifikat: Se till att din webbplats har SSL-certifikat för att skydda kunders känsliga data under transaktioner.
- Betalningsgateway-säkerhet: Använd pålitliga betalningsgateways med hög säkerhetsstandard och kryptering.
- Dataskyddsförordningen (GDPR): Följ riktlinjerna för GDPR för att skydda kundens personuppgifter och integritet.
Fakturering och Bokföring
En korrekt och smidig faktureringsprocess är avgörande för att upprätthålla en god relation med kunder och partners:
- Automatisk fakturering: Implementera automatisk fakturering för prenumerationstjänster och återkommande köp.
- Faktureringsinformation: Se till att fakturor innehåller tydlig information om köp, betalningsvillkor och kontaktuppgifter.
- Bokföringsintegration: Möjliggör enkel integration med bokföringsprogram för att underlätta bokföring och rapportering.
Kundtjänst och Support
Ett dedikerat kundtjänstteam är viktigt för att hantera eventuella frågor eller problem relaterade till betalningar och fakturering. Se till att dina kunder har en enkel och snabb väg att få hjälp och support vid behov.
Framgångsrik Betalningsprocess
Att ha en smidig och mångsidig betalnings- och faktureringsprocess är avgörande för att göra kundens upplevelse positiv och bekväm. Genom att erbjuda olika betalningsmetoder, fokusera på säkerhet och ge tydlig faktureringsinformation kan du bygga förtroende och lojalitet hos dina kunder.
Hantera fraktalternativ och prissättning
Spårning av leveranser och statusuppdateringar
Produktsökning och Kategorisering
Sökfunktioner och filtrering
Användning av produkttaggar och nyckelord
Skapa kampanjer och rabattkoder
Erbjudanden och försäljningsperioder
Anpassa utseendet med teman och färger
HTML och CSS-anpassningar
Generera försäljningsrapporter och analyser
Implementera säkerhetsåtgärder och SSL
Hantering av kunddata och dataskydd
Kontakta support och hjälpresurser
Säkerhetsuppdateringar och patches
Uppgraderingsprocess och bakåtkompatibilitet
Vanliga Fel och Lösningar
Lista med vanliga fel och hur man löser dem