Skip to content

VCST-6327: Price lists, prices and assignments in the new Admin Shell - #240

Merged
OlegoO merged 15 commits into
devfrom
feat/VCST-6327-admin-shell
Oct 27, 2026
Merged

OlegoO merged 15 commits into
devfrom
feat/VCST-6327-admin-shell

Conversation

@Woland2k

@Woland2k Woland2k commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Description

Adds the Pricing module's admin UI for the new Vue Admin Shell. With this module and the Admin Shell host installed, price lists, their prices and their assignments can be managed in the new shell, and the product blade shows the product's prices, as in the AngularJS admin.

What the module UI ships:

  • Menu entry: "Pricing" (route /pricing, permission pricing:access). It replaces the AngularJS "Pricing" item in the Admin Shell navigation.
  • Blades:
    • PricingPricelistList: the workspace. It lists price lists with search, sort, paging and a currency filter; add, delete, export and "Assignments" (all assignments).
    • PricingPricelistDetails: name, currency and description. Widgets: "Prices" and "Assignments", each with a count.
    • PricingPricelistProducts: the products priced in a price list, with the price range of each. "Add" picks products and gives each a zero list price, as AngularJS did; delete and export. Other modules add commands to its toolbar (see below).
    • PricingProductPicker: the product search used by "Add".
    • PricingProductPrices: one product's prices in one price list: list and sale price, minimum quantity and validity dates, checked by the AngularJS price rules (list price set, sale not above list, unique quantity tiers, a price for quantity 1).
    • PricingItemPrices: a product's price lists, with the price range, the number of prices and the catalogs and stores each is assigned to; delete, and pricing the product in another price list.
    • PricingAssignmentList: the assignments of a price list, or all of them; delete, delete all (or all the search matches), export.
    • PricingAssignmentDetails: name, description, price list, store or catalog (exactly one), priority, validity dates, and the "eligible shoppers" conditions from the server's condition types.
  • Widgets on other modules' blades: "Prices" on the Catalog module's CatalogProductDetails blade (AngularJS: itemPricesWidget on itemDetail). It shows the price range in the currency with the most prices, evaluated for the product's catalog, and opens PricingItemPrices.
  • Extension points:
    • Offered: pricing-pricelist-products-toolbar on PricingPricelistProducts. Other modules add toolbar commands to it with useExtensionPoint("pricing-pricelist-products-toolbar").add(...). Each command gets the price list, the selection, the search keyword, the row count, openBlade and reload. The contract is documented in pricelist-products.vue. The Price export/import module uses it for its CSV commands.
    • Used: the Export module's ExportSettings blade, and its export-filter:<type> extension points for the filter fields of the price list, price and assignment export types. The export commands appear when the Export module's UI is loaded and the user has export:access (as well as pricing:export).
    • Used: the product shared by CatalogProductDetails through its blade context.
  • Permissions: the blades and actions follow the server's pricing:access, pricing:read, pricing:create, pricing:update, pricing:delete and pricing:export. "Add" on the price list's products also needs catalog:read or catalog:products:read, because the picker searches the catalog.

How it is built and packaged:

  • It is a Module Federation remote (pricing_admin) for the Admin Shell host. It is built from src/VirtoCommerce.PricingModule.Web/vue (yarn build) into src/VirtoCommerce.PricingModule.Web/plugins/admin-shell, and the platform serves it at /modules/$(VirtoCommerce.Pricing)/plugins/admin-shell/. plugin.json there declares the remote and its menu contribution.
  • The Web csproj excludes vue/ from the .NET build (Compile, Content, EmbeddedResource and None items), and it copies plugins/** next to the module on dotnet publish. .gitignore ignores the plugins/ build output.
  • The UI calls the module's existing REST API through a generated client (vue/src/api_client/virtocommerce.pricing.ts). Its pickers and lists also read the catalog, store, currency and country endpoints, the catalog list entries and products, and the VirtoCommerce.Core.General.Languages setting values.

The AngularJS UI is unchanged. Both UIs use the same endpoints and permissions.

No server change: no schema change, no migrations, no new settings, no new NuGet dependencies.

Companion PRs: VirtoCommerce/vc-module-admin-shell#1 is the host that loads module UIs. VirtoCommerce/vc-shell#386 has the framework fixes that the host's patch carries; this remote runs on the host's shared framework instance.

Languages: the module UI and the module's server texts (setting and permission names, and the AngularJS admin's texts) come in English, Arabic, Hebrew, German, Spanish, Finnish, French, Italian, Japanese, Norwegian, Polish, Portuguese, Russian, Swedish and Chinese. In Arabic and Hebrew the Admin Shell lays the module UI out right to left.

New GraphQL queries and mutations

None. This PR adds no query or mutation.

Changes to existing GraphQL queries and mutations

None. No existing query or mutation changes.

New public services / interfaces / methods

None. No C# code changes. The blade names and the pricing-pricelist-products-toolbar extension point above are the only surface that other Admin Shell module UIs use.

New protected methods (extensibility)

None.

Breaking changes

  • Compile time: none. No C# signatures change.
  • Package upgrade: none. No published surface is removed or renamed, so no [Obsolete] was needed.
  • Runtime behavior: none. The AngularJS admin works as before. The new UI appears only where the Admin Shell host is installed.

New dependencies

  • NuGet: none.
  • npm (build time only): src/VirtoCommerce.PricingModule.Web/vue/package.json builds the UI with @vc-shell/framework 2.6.3-rc.0 (plus @vc-shell/mf-module, @vc-shell/api-client-generator, vite and vue-tsc). Nothing from it is a NuGet dependency. The package ships only the built bundle in plugins/admin-shell.

Note (product picker): AngularJS opened the Catalog module's item picker, which browses catalogs and categories. This UI has its own flat product search, which also lists variations. The Catalog UI's browse blade has a pick mode, but it cannot pick variations yet; the pickers can move to it once it can.

Note (deleting with an open record): before a delete, the open child blade is asked to close. If it keeps unsaved edits, nothing is deleted. The list detects that through its highlighted row, because the framework's closeChildren() doesn't return whether the children closed.

References

QA-test:

Jira-link:

https://virtocommerce.atlassian.net/browse/VCST-6327

Artifact URL:

https://vc3prerelease.blob.core.windows.net/packages/VirtoCommerce.Pricing_3.1010.0-pr-240-d967.zip
🤖 Generated with Claude Code

Admin Shell (vc-shell) work for VCST-6327; see the pull request for what changes for consumers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Woland2k
Woland2k requested a review from a team as a code owner October 14, 2026 11:08
@CLAassistant

CLAassistant commented Oct 14, 2026 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

Woland2k and others added 12 commits October 14, 2026 06:47
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clears the quality gate's new issues: rewrites the flagged code (nested ternaries, assignments and template literals, shadowed names) without changing behaviour; removes the comment lines that made the JSON manifests invalid; excludes the generated NSwag client from duplication detection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The module's Admin Shell menu entries and the screens they open use Title Case, and a screen is titled like the
menu entry that opens it, as in the rest of the Admin Shell menu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After the Title Case pass, each list screen's title key held the same string as its menu entry's key. The screen now
uses the menu key, as the orders list does, and the duplicate key is gone, so a rename is one edit and the two can't
drift apart again. The displayed titles are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vc-build Compress (locally and in CI) now builds vue/ into plugins/admin-shell/ before publish and packs it, as
VirtoCommerce.SalesRep builds its storefront plugin; until now the package carried the plugin only if it had been built
by hand. The plugin files are listed after the build, so a clean checkout packs them too. SkipAdminShellPlugin=true
leaves the plugin out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
German, Spanish, Finnish, French, Italian, Japanese, Norwegian, Polish, Portuguese, Russian, Swedish and Chinese,
with the terms of the module's AngularJS translations. Machine-translated: a native speaker's review is welcome.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The plugin's screens in Arabic, for the Admin Shell's right-to-left support.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Left/right margins, paddings, borders and offsets become logical (inline-start/end), so the screens mirror in the Admin
Shell's right-to-left languages and stay as they are left to right.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The settings, permissions and method names the Admin Shell shows, for its Arabic (right-to-left) UI; the rest falls back to English.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The plugin's screens in Hebrew, for the Admin Shell's right-to-left support.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The settings, permissions and method names the Admin Shell shows, for its Hebrew (right-to-left) UI; the rest falls back to English.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OlegoO and others added 2 commits October 26, 2026 21:01
@vc-shell/* 2.6.3-rc.0 -> 2.7.0, the release the Admin Shell host now uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@OlegoO
OlegoO merged commit 08a18f8 into dev Oct 27, 2026
12 checks passed
@OlegoO
OlegoO deleted the feat/VCST-6327-admin-shell branch October 27, 2026 10:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants