Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
ef2619e
feat: proposer la mise à jour des prix fournisseur à l'envoi
mapiolca Mar 26, 2026
f6b1575
chore: ajouter des logs de suivi sur la soumission fournisseur
mapiolca Mar 26, 2026
a719400
fix: déplacer la classe hook dans /class pour chargement Dolibarr
mapiolca Mar 26, 2026
2afb91d
fix: déclarer la propriété resPrint pour PHP 8.2
mapiolca Mar 26, 2026
5304edb
fix: utiliser resprints pour afficher le modal de confirmation
mapiolca Mar 26, 2026
0ab2bc5
uiux: rendre les colonnes du modal modifiables avant validation
mapiolca Mar 26, 2026
94b76c1
fix: ajouter Valider/Ignorer et poursuivre la soumission sur fermeture
mapiolca Mar 26, 2026
4be5e57
fix: ajouter le token CSRF sur la redirection Ignorer/croix
mapiolca Mar 26, 2026
7503a36
fix: retirer la description et sécuriser la soumission des lignes coc…
mapiolca Mar 26, 2026
26d833e
qual: logs warning SQL et affichage réf fournisseur dans le modal
mapiolca Mar 26, 2026
40710f6
uiux: séparer réf produit getNomUrl et input réf fournisseur
mapiolca Mar 26, 2026
a4397ca
fix: convertir commande+confirm=yes pour exécuter l'upsert
mapiolca Mar 26, 2026
3b9fe8f
Add business logs and summary message for price trends
mapiolca Mar 27, 2026
46a7c8e
Fix buyprice value sent to update_buyprice API
mapiolca Mar 27, 2026
18ae7f1
Preserve supplier order date fields in modal confirm flow
mapiolca Mar 27, 2026
cb2411b
Separate availability and delivery days in supplier price mapping
mapiolca Mar 27, 2026
4f1d665
Handle selected modal lines reliably in doActions
mapiolca Mar 27, 2026
103f67d
Capture selected modal line IDs before confirm submit
mapiolca Mar 27, 2026
1985d7a
Tighten modal table and input widths by field type
mapiolca Mar 27, 2026
1a32cef
Simplify modal columns and preserve methode parameter on submit
mapiolca Mar 27, 2026
dde537e
Refine modal header, discount hint and dynamic dialog sizing
mapiolca Mar 27, 2026
64859c9
Ensure ignore flow continues order and tweak modal height estimate
mapiolca Mar 28, 2026
0d5efd9
Merge pull request #16 from mapiolca/2026-03-27-fix-supplier-price-up…
mapiolca Mar 28, 2026
1c1e78c
Fix skip supplier price modal when unit prices are unchanged
mapiolca Mar 28, 2026
94578aa
Fix show all supplier order lines in modal when one price changes
mapiolca Mar 28, 2026
e8d3c18
Merge pull request #17 from mapiolca/2026-03-28-add-supplier-price-ch…
mapiolca Mar 28, 2026
dca2627
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
56a08c5
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
26a0d0f
Center supplier price confirmation modal
mapiolca Mar 28, 2026
516019d
Fix modal horizontal centering in viewport
mapiolca Mar 28, 2026
82c95bb
Merge pull request #19 from mapiolca/2026-03-28-center-modal-on-open
mapiolca Mar 28, 2026
db84096
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
74c664f
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
55dd189
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
d9935aa
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
f0e589c
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
fa26334
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
9267c98
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
99bcb12
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
bc743ff
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
1530574
Fix modal update to only apply checked lines
mapiolca Mar 28, 2026
0c65a2b
Fix modal submission while keeping checked-line filtering
mapiolca Mar 28, 2026
a2697f6
Fix modal selected lines to ignore unchecked rows
mapiolca Mar 28, 2026
14b4a68
Count unchecked lines as unchanged in notification
mapiolca Mar 28, 2026
93cd675
Count checked unchanged lines in notification
mapiolca Mar 28, 2026
a034715
Merge pull request #20 from mapiolca/2026-03-28-mettre-a-jour-uniquem…
mapiolca Mar 28, 2026
f09e824
UIUX: ajuster la hauteur et le centrage de la modal fournisseurs
mapiolca Mar 28, 2026
514c463
UIUX: augmenter le coefficient de hauteur par ligne de la modale
mapiolca Mar 28, 2026
7867b95
UIUX: calculer la hauteur cible de modal côté PHP
mapiolca Mar 28, 2026
f331183
UIUX: adapter la hauteur du body de modal à la hauteur calculée
mapiolca Mar 28, 2026
0398e19
UIUX: imposer la hauteur de modal côté PHP
mapiolca Mar 28, 2026
c9b321d
UIUX: augmenter la hauteur utile du body de la modal
mapiolca Mar 28, 2026
b2cd6cd
UIUX: inclure la hauteur d'entête dans le calcul de modal
mapiolca Mar 28, 2026
8c636c6
UIUX: fixer la hauteur de confirmquestions selon entête+nb lignes
mapiolca Mar 28, 2026
d599a1c
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
0713d25
Update actions_dynamicsprices.class.php
mapiolca Mar 28, 2026
62c1ee4
Merge pull request #21 from mapiolca/2026-03-28-adjust-modal-height-a…
mapiolca Mar 28, 2026
2329d02
docs: ajouter le changelog de la version 2.1
mapiolca Mar 28, 2026
2f2e1c4
Merge pull request #22 from mapiolca/2026-03-28-ecrire-changelogs-pou…
mapiolca Mar 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog DynamicsPrices

## 2.1.0
- Refonte de la gestion des dictionnaires avec l'ajout du dictionnaire "Catégories commerciales" pour remplacer l'usage du dictionnaire "Nature de produit" dans les calculs métier. / Refactored dictionary management by adding the "Commercial categories" dictionary to replace the "Product nature" dictionary in business calculations.
- Ajout de l'extrafield "Catégorie commerciale" sur les produits et services afin de piloter les règles tarifaires depuis une donnée dédiée. / Added the "Commercial category" extrafield on products and services to drive pricing rules from a dedicated field.
- Mise en place de la migration des données depuis l'ancien dictionnaire vers le nouveau et routage de tous les calculs de DynamicPrices vers ce nouveau référentiel. / Implemented data migration from the legacy dictionary to the new one and rerouted all DynamicPrices computations to this new reference.
- Ajout d'une confirmation à l'envoi de commande fournisseur pour proposer la mise à jour des prix d'achat via une modale affichant les écarts et les choix utilisateur (valider/ignorer). / Added a confirmation step on supplier-order submission to propose purchase-price updates through a modal showing differences and user choices (apply/ignore).

## 2.0.1
- Correction du déclenchement des recalculs de prix lors des événements de prix d'achat/vente quand l'identifiant produit n'est pas directement porté par l'objet trigger. / Fixed price recalculation trigger execution on buy/sell price events when the product identifier is not directly available on the trigger object.

Expand Down
1 change: 1 addition & 0 deletions admin/setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ function ($matches) use ($form, $options) {
setup_print_title($langs->trans("LMDB_UpdateOptions"));
setup_print_on_off('LMDB_COST_PRICE_ONLY');
setup_print_on_off('LMDB_SUPPLIER_BUYPRICE_ALTERED');
setup_print_on_off('LMDB_ADD_UPDATE_SUPPLIER_PRICE_ON_SUBMIT');
setup_print_on_off('LMDB_KIT_PRICE_FROM_COMPONENTS');

print '</table>';
Expand Down
877 changes: 877 additions & 0 deletions class/actions_dynamicsprices.class.php

Large diffs are not rendered by default.

13 changes: 6 additions & 7 deletions core/modules/modDynamicsPrices.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,12 @@ public function __construct($db)
),
// Set here all hooks context managed by module. To find available hook context, make a "grep -r '>initHooks(' *" on source code. You can also set hook context to 'all'
/* BEGIN MODULEBUILDER HOOKSCONTEXTS */
'hooks' => array(
// 'data' => array(
// 'hookcontext1',
// 'hookcontext2',
// ),
// 'entity' => '0',
),
'hooks' => array(
'data' => array(
'ordersuppliercard',
),
'entity' => '0',
),
/* END MODULEBUILDER HOOKSCONTEXTS */
// Set this to 1 if features of module are opened to external users
'moduleforexternal' => 0,
Expand Down
19 changes: 19 additions & 0 deletions langs/de_DE/dynamicsprices.lang
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,22 @@ LMDB_commercialcategories = Kommerzielle Kategorien
LMDB_CommercialCategoryExtrafield = Kommerzielle Kategorie
LMDB_LabelTooltipHelp = Bezeichnung des Wörterbucheintrags
LMDB_ActiveTooltipHelp = Aktivstatus des Wörterbucheintrags
LMDB_ADD_UPDATE_SUPPLIER_PRICE_ON_SUBMIT = Beim Absenden einer Lieferantenbestellung das Hinzufügen/Aktualisieren von Lieferanten-Einkaufspreisen aus Bestellzeilen vorschlagen.
LMDB_SupplierPriceModalTitle = Aktualisierung der Lieferanten-Einkaufspreise
LMDB_SupplierPriceModalDescription = Unterschiede bei Einkaufspreisen wurden erkannt. Wählen Sie die zu speichernden Zeilen aus.
LMDB_AddOrUpdate = Hinzufügen/Aktualisieren
LMDB_QuantityPackaging = Mengenverpackung
LMDB_MinQtyPriceHT = Mindestmengenpreis (o. MwSt.)
LMDB_SupplierReputation = Reputation
LMDB_SupplierPriceUpdatedCount = %s Lieferanten-Einkaufspreise hinzugefügt/aktualisiert.
LMDB_SupplierPriceUpdatedCountWithDirection = %s Lieferanten-Einkaufspreise aktualisiert (%s Erhöhung(en), %s Senkung(en), %s unverändert).
LMDB_Ignore = Ignorieren
LMDB_SupplierRef = Lieferanten-Ref.
LMDB_CurrentUnitPriceHT = Aktueller Stückpreis (o. Steuern)
LMDB_ProposedUnitPriceHT = Vorgeschlagener Stückpreis (o. Steuern)
LMDB_PriceDeltaHT = Abweichung (o. Steuern)
LMDB_PriceDirection = Entwicklung
LMDB_PriceDirectionUp = ERHÖHUNG
LMDB_PriceDirectionDown = SENKUNG
LMDB_PriceDirectionSame = UNVERÄNDERT
LMDB_AvailabilityId = Verfügbarkeits-ID
19 changes: 19 additions & 0 deletions langs/en_US/dynamicsprices.lang
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,22 @@ LMDB_commercialcategories = Commercial categories
LMDB_CommercialCategoryExtrafield = Commercial category
LMDB_LabelTooltipHelp = Dictionary entry label
LMDB_ActiveTooltipHelp = Dictionary entry active status
LMDB_ADD_UPDATE_SUPPLIER_PRICE_ON_SUBMIT = On supplier order submission, propose adding/updating supplier buy prices from order lines.
LMDB_SupplierPriceModalTitle = Supplier purchase price update
LMDB_SupplierPriceModalDescription = Purchase price differences were detected. Select lines to save.
LMDB_AddOrUpdate = Add/Update
LMDB_QuantityPackaging = Quantity packaging
LMDB_MinQtyPriceHT = Min quantity price (excl. tax)
LMDB_SupplierReputation = Reputation
LMDB_SupplierPriceUpdatedCount = %s supplier purchase prices added/updated.
LMDB_SupplierPriceUpdatedCountWithDirection = %s supplier purchase prices updated (%s increase(s), %s decrease(s), %s unchanged).
LMDB_Ignore = Ignore
LMDB_SupplierRef = Supplier ref
LMDB_CurrentUnitPriceHT = Current unit price (excl. tax)
LMDB_ProposedUnitPriceHT = Proposed unit price (excl. tax)
LMDB_PriceDeltaHT = Delta (excl. tax)
LMDB_PriceDirection = Trend
LMDB_PriceDirectionUp = INCREASE
LMDB_PriceDirectionDown = DECREASE
LMDB_PriceDirectionSame = UNCHANGED
LMDB_AvailabilityId = Availability ID
19 changes: 19 additions & 0 deletions langs/es_ES/dynamicsprices.lang
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,22 @@ LMDB_commercialcategories = Categorías comerciales
LMDB_CommercialCategoryExtrafield = Categoría comercial
LMDB_LabelTooltipHelp = Etiqueta del registro del diccionario
LMDB_ActiveTooltipHelp = Estado activo del registro del diccionario
LMDB_ADD_UPDATE_SUPPLIER_PRICE_ON_SUBMIT = Al enviar un pedido a proveedor, proponer añadir/actualizar precios de compra del proveedor desde las líneas del pedido.
LMDB_SupplierPriceModalTitle = Actualización de precios de compra del proveedor
LMDB_SupplierPriceModalDescription = Se detectaron diferencias de precios de compra. Seleccione las líneas a guardar.
LMDB_AddOrUpdate = Añadir/Actualizar
LMDB_QuantityPackaging = Envasado de cantidades
LMDB_MinQtyPriceHT = Precio cantidad mínima (sin IVA)
LMDB_SupplierReputation = Reputación
LMDB_SupplierPriceUpdatedCount = %s precios de compra de proveedor añadidos/actualizados.
LMDB_SupplierPriceUpdatedCountWithDirection = %s precios de proveedor actualizados (%s subida(s), %s bajada(s), %s sin cambios).
LMDB_Ignore = Ignorar
LMDB_SupplierRef = Ref. proveedor
LMDB_CurrentUnitPriceHT = Precio unitario actual (sin IVA)
LMDB_ProposedUnitPriceHT = Precio unitario propuesto (sin IVA)
LMDB_PriceDeltaHT = Diferencia (sin IVA)
LMDB_PriceDirection = Evolución
LMDB_PriceDirectionUp = SUBIDA
LMDB_PriceDirectionDown = BAJADA
LMDB_PriceDirectionSame = SIN CAMBIOS
LMDB_AvailabilityId = ID disponibilidad
111 changes: 63 additions & 48 deletions langs/fr_FR/dynamicsprices.lang
Original file line number Diff line number Diff line change
@@ -1,52 +1,52 @@
# Translation file
#
# Generic
#
# Module label 'ModuleDynamicsPricesName'
ModuleDynamicsPricesName = Prix de vente dynamiques
# Module description 'ModuleDynamicsPricesDesc'
ModuleDynamicsPricesDesc = Ce module permet de mettre à jour les prix de vente en fonction du prix d'achat moyen unitaire chez les fournisseurs et des coefficients de prix définis dans un dictionnaire dédié.
#
# Admin page
#
DynamicsPricesSetup = Réglages des prix de vente dynamiques
DynamicsPricesSetupPage = Page de réglage du module de Prix de vente dynamiques
LMDB_UpdateOptions=Options de mise à jour des prix de vente
LMDB_KIT_PRICE_FROM_COMPONENTS = Calculer les prix des Kits à partir de vente des composants plutot que le prix de revient
LMDB_COST_PRICE_ONLY = Ne mettre à jour les prix de vente que sur la base des prix de revient.
LMDB_SUPPLIER_BUYPRICE_ALTERED = Actualisation de prix de vente à la création/mise à jour/suppression d'un prix d'achat ou l'actualisation du prix de revient si le calcul sur le prix de revient est activé.
#
# Autres
#
DynamicsPricesArea = Home DynamicsPrices
LMDB_ErrorUpdate = Erreur lors de la mise à jour :
LMDB_NbLinesUpdated = Nombre de prix de vente mis à jour :
# Translation file

#
# Generic
#

# Module label 'ModuleDynamicsPricesName'
ModuleDynamicsPricesName = Prix de vente dynamiques
# Module description 'ModuleDynamicsPricesDesc'
ModuleDynamicsPricesDesc = Ce module permet de mettre à jour les prix de vente en fonction du prix d'achat moyen unitaire chez les fournisseurs et des coefficients de prix définis dans un dictionnaire dédié.

#
# Admin page
#
DynamicsPricesSetup = Réglages des prix de vente dynamiques
DynamicsPricesSetupPage = Page de réglage du module de Prix de vente dynamiques
LMDB_UpdateOptions=Options de mise à jour des prix de vente
LMDB_KIT_PRICE_FROM_COMPONENTS = Calculer les prix des Kits à partir de vente des composants plutot que le prix de revient

LMDB_COST_PRICE_ONLY = Ne mettre à jour les prix de vente que sur la base des prix de revient.
LMDB_SUPPLIER_BUYPRICE_ALTERED = Actualisation de prix de vente à la création/mise à jour/suppression d'un prix d'achat ou l'actualisation du prix de revient si le calcul sur le prix de revient est activé.



#
# Autres
#
DynamicsPricesArea = Home DynamicsPrices
LMDB_ErrorUpdate = Erreur lors de la mise à jour :
LMDB_NbLinesUpdated = Nombre de prix de vente mis à jour :
Fk_nature = Catégorie commerciale
Fk_commercial_category = Catégorie commerciale
Code_commercial_category = Catégorie commerciale
Margin_on_cost_percent = Taux de marge sur le prix de revient
Margin_on_cost_percent = Taux de marge sur le prix de revient
Code_nature = Catégorie commerciale
Pricelevel = ID du Niveau de prix
Targetrate = Taux de marge cible (en %)
Minrate = Taux de marge minimum (en %)
Entity = Entité
LMDB_CommentAutoUpdateSellPrice = Les prix de vente sont mis à jour en fonction des coefficients de prix donnés dans le dictionnaire, et de la moyenne des prix unitaires d'achats fournisseurs.
LMDB_LabelAutoUpdateSellPrice = Mise à jour automatique des prix de vente
LMDB_coefprice = Taux de marges sur les prix de vente
LMDB_marginoncost = Taux de marge sur les prix de revient
DynamicsPrices = Prix de vente dynamiques
Pricelevel = ID du Niveau de prix
Targetrate = Taux de marge cible (en %)
Minrate = Taux de marge minimum (en %)
Entity = Entité

LMDB_CommentAutoUpdateSellPrice = Les prix de vente sont mis à jour en fonction des coefficients de prix donnés dans le dictionnaire, et de la moyenne des prix unitaires d'achats fournisseurs.
LMDB_LabelAutoUpdateSellPrice = Mise à jour automatique des prix de vente
LMDB_coefprice = Taux de marges sur les prix de vente
LMDB_marginoncost = Taux de marge sur les prix de revient
DynamicsPrices = Prix de vente dynamiques
LMDB_CodeNatureTooltipHelp = Catégorie commerciale liée
LMDB_MarginOnCostTooltipHelp = Taux de marge appliqué sur le prix de revient moyen d'achat
LMDB_CodeTooltipHelp = Code de l'entrée du dictionnaire
LMDB_ENtityTooltipHelp = Identifiant de l'entité
LMDB_MarginOnCostTooltipHelp = Taux de marge appliqué sur le prix de revient moyen d'achat
LMDB_CodeTooltipHelp = Code de l'entrée du dictionnaire
LMDB_ENtityTooltipHelp = Identifiant de l'entité
LMDB_FkNatureTooltipHelp = Identifiant de la catégorie commerciale
LMDB_FkCommercialCategoryTooltipHelp = Identifiant de la catégorie commerciale
LMDB_CodeCommercialCategoryTooltipHelp = Code de la catégorie commerciale
Expand All @@ -58,7 +58,22 @@ LMDB_commercialcategories = Catégories commerciales
LMDB_CommercialCategoryExtrafield = Catégorie commerciale
LMDB_LabelTooltipHelp = Libellé de l'entrée du dictionnaire
LMDB_ActiveTooltipHelp = Statut actif de l'entrée du dictionnaire




LMDB_ADD_UPDATE_SUPPLIER_PRICE_ON_SUBMIT = Lors de l'envoi d'une commande fournisseur, proposer l'ajout/la mise à jour des prix d'achat fournisseur depuis les lignes de commande.
LMDB_SupplierPriceModalTitle = Mise à jour des prix d'achat fournisseur
LMDB_SupplierPriceModalDescription = Des différences de prix d'achat ont été détectées. Cochez les lignes à enregistrer.
LMDB_AddOrUpdate = Ajouter/Mettre à jour
LMDB_QuantityPackaging = Conditionnement des quantités
LMDB_MinQtyPriceHT = Prix quantité min. (HT)
LMDB_SupplierReputation = Réputation
LMDB_SupplierPriceUpdatedCount = %s prix d'achat fournisseur ajoutés/mis à jour.
LMDB_SupplierPriceUpdatedCountWithDirection = %s prix fournisseur mis à jour (%s hausse(s), %s baisse(s), %s inchangé(s)).
LMDB_Ignore = Ignorer
LMDB_SupplierRef = Réf. fournisseur
LMDB_CurrentUnitPriceHT = Prix unitaire actuel (HT)
LMDB_ProposedUnitPriceHT = Prix unitaire proposé (HT)
LMDB_PriceDeltaHT = Écart (HT)
LMDB_PriceDirection = Évolution
LMDB_PriceDirectionUp = HAUSSE
LMDB_PriceDirectionDown = BAISSE
LMDB_PriceDirectionSame = INCHANGÉ
LMDB_AvailabilityId = ID disponibilité
19 changes: 19 additions & 0 deletions langs/it_IT/dynamicsprices.lang
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,22 @@ LMDB_commercialcategories = Categorie commerciali
LMDB_CommercialCategoryExtrafield = Categoria commerciale
LMDB_LabelTooltipHelp = Etichetta della voce del dizionario
LMDB_ActiveTooltipHelp = Stato attivo della voce del dizionario
LMDB_ADD_UPDATE_SUPPLIER_PRICE_ON_SUBMIT = All'invio di un ordine fornitore, proporre l'aggiunta/aggiornamento dei prezzi di acquisto fornitore dalle righe ordine.
LMDB_SupplierPriceModalTitle = Aggiornamento prezzi di acquisto fornitore
LMDB_SupplierPriceModalDescription = Sono state rilevate differenze nei prezzi di acquisto. Selezionare le righe da salvare.
LMDB_AddOrUpdate = Aggiungi/Aggiorna
LMDB_QuantityPackaging = Confezionamento quantità
LMDB_MinQtyPriceHT = Prezzo quantità minima (IVA esclusa)
LMDB_SupplierReputation = Reputazione
LMDB_SupplierPriceUpdatedCount = %s prezzi di acquisto fornitore aggiunti/aggiornati.
LMDB_SupplierPriceUpdatedCountWithDirection = %s prezzi fornitore aggiornati (%s aumento/i, %s diminuzione/i, %s invariato/i).
LMDB_Ignore = Ignora
LMDB_SupplierRef = Rif. fornitore
LMDB_CurrentUnitPriceHT = Prezzo unitario attuale (IVA esclusa)
LMDB_ProposedUnitPriceHT = Prezzo unitario proposto (IVA esclusa)
LMDB_PriceDeltaHT = Scostamento (IVA esclusa)
LMDB_PriceDirection = Variazione
LMDB_PriceDirectionUp = AUMENTO
LMDB_PriceDirectionDown = DIMINUZIONE
LMDB_PriceDirectionSame = INVARIATO
LMDB_AvailabilityId = ID disponibilità
Loading