Appearance
Supplier Catalogues and Product Intake
This page follows the Produits menu (the Stock key in Builder.php) into Gestion des produits → Création de produit and DropShip, then traces page templates, browser actions, annotated controller routes, supplier services and local state. The source evidence is the pinned axelites/logidav snapshot at 88d9180215a5d489407498fe4905fdd38efd756d. This AI-assisted static source review does not establish which commands are scheduled, whether an external supplier or Menzzo endpoint is currently reachable, or whether a remote product was accepted or published.
The broader stock menu and neighboring product operations are mapped in Stock and Purchasing. This page expands the supplier intake, content review and DropShip paths named there.
Product creation menu: supplier list to shared editor
The creation menu contains separate entry routes, but most lead into a shared NewProduct JSON/editor model. Supplier list pages do not themselves prove how source products entered Logidav; where a dedicated importer or selection handoff is not present in the traced UI path, that boundary is called out below.
The supplier entry controllers perform menu-provider access checks. The shared editor and save action also check new_products_index; the pinned source does not show how the menu provider combines those grants. Palimi’s page specifically checks new_products_bigbuy_index, which differs from its menu route key and may alter who can enter that supplier list.
| Menu route name | Screen, list request and local filter | Distinct next action / observed boundary |
|---|---|---|
new_products_index (Menzzo) | GET /new-product/ → AppBundle:NewProduct:index.html.twig; DataTable posts to paginate_new_product (POST /new-product/paginate-new-products), backed by NewProductRepository::searchNewPoduct, with archive/search/order filters. The initial list loads non-DropShip products. | “Voir” opens the shared editor. Rows expose section progress, linked SKU/price/availability, and a publish control; they are local NewProduct state, not a remote storefront confirmation. |
new_products_bigbuy_index | GET /bigbuy/creation → BigBuy new-product template; list uses shared paginate_dropship_new_products with BigBuy as its DropShip filter. | POST /bigbuy/merge-bigbuy calls NewProductService::mergeProducts(..., 'bgb') for selected records. |
new_products_vidaxl_index | GET /vidaxl/creation → VidaXL new-product template; shared DropShip paginator. | POST /vidaxl/merge-vidaxl merges selected NewProduct rows with supplier key vidx. |
new_products_palimi_index | GET /product/palimi/creation → ErpBundle:Palimi:newProduct.html.twig; page sets DropShip palimi, uses shared DropShip pagination. | Controller checks menu access using new_products_bigbuy_index rather than the Palimi menu route. The source shows a mismatch in the access key; effective permission behavior depends on menu-provider configuration. No Palimi-specific import/selection-to-NewProduct handoff is established by this screen. |
new_products_adsteroide_index | GET /product/adsteroide/creation → Adsteroide new-product template; paginate_adsteroide_new_product filters the list for Adsteroide. | The loaded JS is a copied variant that also wires merge/disassociate UI through VidaXL routes. This is a source-observed cross-bundle wiring mismatch; do not assume it merges Adsteroide records. |
new_products_asir_group_index / new_products_to_be_processed_asir_group_index / translation_and_publication_process_asir_group_index | Asir Group creation page plus two routes that forward into it with step_2 or step_3 and explicit status filters (below). DataTables call paginate_asir_group_new_product or the shared DropShip paginator according to the page script. | Shared editor/save path; content-generation and translation commands update these local rows. |
new_products_asir_group_mode_index | GET /asir-group-mode/creation → Asir Group Mode template. Although the controller defines a supplier paginator, this page’s JS calls paginate_dropship_new_products with the supplier filter. | Shared editor. Selection-originated Mode rows use the Mode mapping/command path in the DropShip section. |
new_products_cmp_index | GET /cmp/catalog/creation → CMP new-product template; shared DropShip paginator. | Shared editor. The menu path is an intake list; the separate CMP catalogue-selection path is documented below. |
new_products_notio_index / new_products_to_be_processed_notio_index / translation_and_publication_process_index | GET /notio/creation; the two processing routes forward into this template with step_2 or step_3 and status filters. The JS uses the shared DropShip paginator. | Shared editor/save path; Notio generation and translation jobs act on matching NewProduct rows. |
The reusable editor is GET /new-product/add-update/{id} (new_product_add_update) → AppBundle:NewProduct:addUpdate.html.twig. The form has separate product sections (reference, details, images, category, text, prices, parcels, stores and related products); buttons in add-new-product.js save section data through POST /new-product/save/{id} (new_product_save) with product, section, and optional workflow readyForContent / step. NewProductService::saveNewProduct validates EAN values and writes product information, status, step, progress and history. The save handler returns validation details for invalid EAN input; required DropShip data and server-side field validation can also reject a save. These checks govern local staging, not external publication.
The menu labels Validation de description and Traduction et publication are filtered queues, not independent review engines. Asir Group and Notio route each queue through the same creation screen with a step and status list:
| Menu routes | Forwarded screen and queue status values |
|---|---|
new_products_to_be_processed_asir_group_index, new_products_to_be_processed_notio_index | /asir-group/creation-to-be-processed and /notio/creation-to-be-processed forward to the supplier creation page with step_2; rows are filtered by ready_for_content_generation, content_generation_ok, content_generation_error, or description_contains_eng_sentences. |
translation_and_publication_process_asir_group_index, translation_and_publication_process_index | /asir-group/translation-to-be-processed and /notio/translation-to-be-processed forward with step_3; filters are ready_for_content_translation, to_publish, published, blocked, and content_translation_error. |
Generation commands use supplier description/material/category/image inputs and the OpenAI wrapper, then save output on NewProduct. Error and language checks move rows to content_generation_error or description_contains_eng_sentences. Asir Group’s description path advances to ready_for_content or, with its --description option, ready_for_content_translation; successful Notio generation saves content_generation_ok and the generated title. Translation command menzzo:notio:translate-notio-product-description selects ready rows for Notio and Asir Group, writes translated store data, and changes the row to ready; failure stores translation errors and content_translation_error. The routes display to_publish, published and blocked statuses, but the queue labels alone do not imply an operator approved a remote listing.
POST /new-product/translate is a separate editor helper that sends French strings and a target store to the configured OpenAi::openAiTranslate; missing store/input or a caught exception returns HTTP 500. For local publication preparation, new_product_to_synchronise_in_magento checks required data/coefficient, images and EAN conflicts before setting toPublish; missing data returns an HTML warning in JSON without advancing the row. That marker is consumed by the separate menzzo:new-product:synchronise --action=sync command. See Translation and supplier content stages and the Meduse outbound data flow for the FTP handoff and its limits. The command’s local state transition or FTP call is not remote acceptance; the Magento publish event call is commented out in this command. The editor also exposes explicit new_product_create_in_magento and new_product_update_in_magento actions that start older create/update console commands and return token progress; these are distinct buttons and are not implied by setting toPublish.
View diagram source
flowchart LR
Menu[Supplier creation menu] --> List[Supplier NewProduct list]
List --> Editor[Shared add-update form]
Editor -->|section save and EAN validation| Local[(NewProduct + history)]
Local -->|Asir / Notio status queue| Review[Description and translation queues]
Review -->|generation / translation command| Content[Updated local text and status]
Content -->|readiness checks| Ready[toPublish local marker]
Ready -->|menzzo:new-product:synchronise --action=sync| Ftp[Meduse FTP handoff]
Editor -->|separate explicit create/update buttons| Legacy[Legacy create or update console command]
The Asir Group generation command and both Notio commands are present in source, but the menu/controller paths inspected here do not establish their scheduler, run frequency or completion monitoring. Product text generation and translation also depend on external AI behavior, which is not verified by a static source review.
DropShip supplier catalogue and selection paths
Catalogue rows are supplier-owned local entities. “Add selection” changes that supplier row’s selection state; “Create” maps eligible supplier data into a local NewProduct, links the supplier row to it, records a history entry and returns editor URLs/progress messages. The shared create:product:selection:dropship command supports CMP, VidaXL, BigBuy, Asir Group, Asir Group Mode and Notio; its mappers skip already-linked rows and rows missing required package measurements. It does not cover every supplier visible in the broader menu.
| Supplier and active menu route names | UI actions → exact endpoints | State transition, downstream handoff and source caveat |
|---|---|---|
Jolipa — product_jolipa_index, product_creation_index, product_dropship_online(dropshipName=jolipa) | product_jolipa_index → GET /product/product-jolipa-index, rows from paginate_product_jolipa_index; edit controls call POST /product/product-jolipa-update-name, /product-jolipa-show and /{id}/jolipa-product-update. Spreadsheet path: GET /product/product-creation-index; upload POST /product/upload-product-xlsx; start/poll POST /product/product-by-file-cmd. Online listing: /product/dropship/jolipa → /product/bigbuy-dropship-paginate. | Jolipa update actions call mz.product.api and update local product fields where the action saves. Upload stores the file in data/product_import/; the tokenized command menzzo:product:jolipa:create-products reads the workbook and hands mapped rows to ProductApi. The online page is a generic current-Logidav Product query filtered by dropshipName, not proof of supplier API synchronization. |
BigBuy — bigbuy_catalog_category, bigbuy_catalog_index, bigbuy_catalog_selection, bigbuy_index_dicionary, bigbuy_shipping_rates_update_rates_by_csv, bigbuy_dropship_online | Catalogue GET /bigbuy/catalog → bigbuy_catalog_index_paginate; select/remove via POST /bigbuy/bigbuy-catalog-add-selection / /bigbuy/bigbuy-catalog-delete-selection; selection page /bigbuy/selection; create with POST /bigbuy/bigbuy-catalog-create-from-selection. Category status/update use bigbuy_category_catalog_change_status / bigbuy_catalog_update_categories; rates screen is /bigbuy/shipping/update-rates-by-csv. | Create starts create:product:selection:dropship with supplier bigBuy; mapper checks package dimensions/weight and saves/links local NewProduct records. Caveat: BigBuy add/delete handlers update mz_asir_group_product.is_selected in the pinned controller, so the visible action does not establish BigBuy selection state. BigBuy online pagination calls its supplier searchDropshipOnline, but the page’s category options query filters drop_ship='vidaxl'. The menu links dictionary/rates screens; this trace does not infer a supplier publication from them. |
VidaXL — vidaxl_category_index, vidaxl_catalogue_index, vidaxl_catalog_selection, vidaxl_dropship_online | Category screen GET /vidaxl/vidaxl-category; catalogue /vidaxl/vidaxl-catalogue → /vidaxl/vidaxl-catalog-index-paginate; select/remove through /vidaxl/vidaxl-catalog-add-selection and /vidaxl/vidaxl-catalog-delete-selection; selection /vidaxl/selection; create POST /vidaxl/vidaxl-catalog-create-selection. Online page /vidaxl/dropship/online-products → /vidaxl/vidaxl-dropship-paginate. | Selection flags live on VidaXL supplier rows. Create runs the shared mapper for vidaxl, checks package data and links a NewProduct. Caveat: web/assets/scripts/vidaxl/productOnline.js sends action/review controls to Asir Group’s asir_group_set_action_to_products and asir_group_set_products_as_reviewed; those requests target Asir handlers/state, not a VidaXL update action. |
Asir Group — asir_product_management, asir_group_catalogue_index, asir_group_catalog_selection, asir_group_catalog_fast_selection, asir_group_online_products, asir_group_online_products_to_negociate, asir_group_online_products_to_remvoe, asir_group_amazon_products | Catalogue → /asir-group/catalogue and /asir-group/catalog-index-paginate; select/remove at /asir-group/vidaxl-catalog-add-selection and /asir-group/catalog-delete-selection; create POST /asir-group/catalog-create-selection. Fast selection updates via POST /asir-group/asir-group-update-asir-infos. Online triage pages forward to /asir-group/online-products with menzzo_action=2 (negotiate) or 1 (remove); grid /asir-group/asir-group-paginate-online-products; actions /asir-group/set-action-to-asir-group-product, /asir-group/set-asir-group-product-as-reviewed, /asir-group/asir-group-update-product-visibility; export POST /asir-group/export-asir-group-online-products. Amazon table uses /asir-group/amazon-products and /asir-group/catalog-amazon_products-paginate. | Catalogue selection sets Asir supplier-row flags; create uses the Asir selection command and saves an asr NewProduct after required weight/dimensions. Online actions update menzzo_action, is_reviewed, or local Product visibility/Asir flags and write logs; export starts an async command. The Amazon route is a paginated table; no mutation is exposed from the traced screen. The Asir menu’s “selection-to-create” screen is commented out in Builder.php, so it is not treated as active. |
Asir Group Mode — asir_group_mode_catalogue_index, asir_group_mode_catalog_selection, asir_group_mode_online_products, asir_group_mode_catalogue_ai_titles, asir_group_mode_refused_ai_titles | Catalogue /asir-group-mode/catalogue → /asir-group-mode/catalog-index-paginate; select/remove /asir-group-mode/asir-catalog-add-selection and /asir-group-mode/catalog-delete-selection; create POST /asir-group-mode/catalog-create-selection. Online /asir-group-mode/online-products → /asir-group-mode/asir-group-paginate-online-products. AI-title and refused-title grids paginate at /asir-group-mode/paginate-catalogue-ai-titles and /asir-group-mode/paginate-refused-titles; accept/refuse POST /asir-group-mode/accept-or-refuse-product-title; privileged validation /asir-group-mode/asir-group-mode-catalogue-ai-accept-validate-title. | Selection maps Mode product rows to an asm NewProduct through its bundle command, after volume/weight/dimensions checks. AI accept/refuse writes title and review state to the local Mode product record; the additional validation endpoint is restricted in its handler to user ID 21. Caveat: online JS calls Asir Group action/review routes, while the Mode controller only exposes the grid route here; no Mode-specific online mutation is established by the menu path. Accepted AI title is local title state, not publication. |
CMP — cmp_category_index, cmp_catalogue_index, cmp_selection_index, cmp_dropship_online | Category /cmp/cmp-category; catalogue /cmp/catalog/catalogue → /cmp/catalog/cmp-catalog-index-paginate; selection flag action POST /cmp/catalog/cmp-add-to-selection; selection /cmp/catalog/selection; create POST /cmp/catalog/cmp-catalog-create-selection; online /cmp/catalog/dropship/online-products → /cmp/catalog/cmp-dropship-paginate. | Selection toggles CMP Product.isSelected; create delegates selected IDs to shared command with supplier cmp, which maps eligible rows to NewProduct. Online grid queries CMP searchDropshipOnline. Caveat: online page category options are built from products with drop_ship='vidaxl', not CMP; Cmp/productOnline.js exposes the grid request but no separate action mutation. |
Notio — notio_catalogue_index, notio_catalog_selection | Catalogue /notio/catalogue → /notio/catalog-index-paginate; add/remove at /notio/catalog-add-selection and /notio/catalog-delete-selection; selection /notio/selection; optional export POST /notio/catalog-export-selection; create POST /notio/catalog-create-selection. | Notio selection state is stored on Notio product rows. Create maps checked rows to a noti NewProduct after package-data checks and links each source row. There is no active Notio online-product menu route in this snapshot. The selection-export controller calls the export service with the asir_group key; treat that as a source wiring inconsistency, not evidence of a correct Notio export. |
The remaining catalogue-maintenance leaves have their own local transitions:
| Menu route / UI control | Request | Local effect and failure boundary |
|---|---|---|
BigBuy bigbuy_catalog_category: category-tree checkbox | POST /bigbuy/bigbuy-category-catalog-change-status, ids_selected and ids_deselected | BigBuy Category.isEnabled is saved true for selected IDs or false for deselected IDs. The category page’s “update catalog” button posts bigbuy_catalog_update_categories; the controller invokes menzzo:bigbuy:products through ConsoleService. The returned command text is not proof that supplier data finished syncing. |
BigBuy bigbuy_index_dicionary: add or remove a label mapping | Shared dictionary table filters by source=Bigbuy at POST /dictionary-label/product-label-dicionary; add POST /dictionary-label/add-new-label; delete POST /dictionary-label/delete-dicionary-label; modal lookup dictionary_label_modal_paginate_change_dictionary. | ProductLabelMatchDictionaryService saves/deletes source-label → Menzzo-label mapping rows and increments usage of the chosen Menzzo label. An already mapped source label returns erreur; the page shows a duplicate-label message. |
BigBuy bigbuy_shipping_rates_update_rates_by_csv: upload then import | POST /bigbuy/shipping/upload-rates-csv-files accepts only gls-shipping-costs-csv-en.csv, chrono-shipping-costs-csv-en.csv, and tnt-shipping-costs-csv-en.csv, storing them under the project’s data/erp/bigbuy/rates-csv/. Sync control calls POST /bigbuy/shipping/check-rates-sync with a token. | The controller returns success=false when no file is submitted and rejects unlisted names. Sync starts menzzo:bigbuy:shipping:shipping-rate-sync; the job parses semicolon-separated rate rows and saves BigbuyShippingRate by carrier/country/weight only when the CSV price exceeds the stored price. Missing CSVs are logged as !FILE NOT FOUND!; token progress ends with !END!. The page/job does not establish a remote carrier API call. |
VidaXL vidaxl_category_index: category-tree checkbox and “update catalog” | Checkbox POST /vidaxl/vidaxl-category-catalog-change-status; button POST /vidaxl/vidaxl-catalog-update-categories. | Checkbox saves supplier Category.isEnabled; update starts menzzo:vidaxl:products through ConsoleService. The JS reports that catalog updating is in progress; the async command result is not verified here. |
CMP cmp_category_index: category-tree checkbox | POST /cmp/cmp-category-catalog-change-status, selected/deselected ID lists. | Saves CMP category isEnabled true/false and responds OK. The inspected CMP category UI exposes this toggle but no corresponding catalogue-refresh button/route. |
Asir Group asir_product_management: product-management table | GET /asir-stock/asir-product-management → /asir-stock/paginate-asir-product-management; forced activation toggle POST /asir-stock/toggle-asir-product-activation; inline prices post to /product/update-product-price. | This is a local product table rather than the supplier catalogue: it displays active state, prices and forced-inactive state. The toggle records isInactiveForced and product activation history; price edits update local product-info prices and price logs, and enqueue Menzzo product-price updates for eligible products. |
Source boundaries and gaps
- Active menu families listed above are traced to their page route and the principal UI data/action endpoints. Full field-by-field validation and every table export option are omitted; use the route/controller/JS references when investigating a specific control.
- Jolipa’s workbook command and the shared supplier-selection command show code paths to
ProductApior localNewProductwrites. The snapshot cannot prove the configured external response, deployment, task schedule, or resulting storefront state. - Asir Group and Notio generation/translation commands are source-present, but their scheduler and retry cadence were not established from these menu/controller paths. Generic supplier pages for Palimi and Adsteroide exist, while a native supplier-selection/import handoff was not identified here.
- Cross-wired BigBuy, VidaXL, CMP and Asir Group Mode handlers are documented as observed source caveats. Their production impact is not inferred from the snapshot.
Pinned source entry points
The main trace starts in the pinned menu builder, NewProduct controller, NewProduct service, shared editor, and editor JavaScript. Supplier catalogue selection converges on the shared selection command; the separate Jolipa importer maps workbook rows. For supplier-owned actions and the wiring caveats, see the BigBuy, VidaXL, Asir Group, Asir Group Mode, CMP, and Notio controllers.