Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Ajouter une colonne de la table des articles dans l'écran des remises clients

0000002425     -      09/12/2020

Ce paramétrage montre comment ajouter une colonne de la table STOCK dans l'écran disponible via "Outils / Remises / Clients". L'exemple est montré pour la colonne S_PRIX_TI correspondant au prix TVAC de l'article.

Tout d'abord, ce customizer implémente l'interface MercatorUi.ICustomizers.IStringUpdater. Cela permet de modifier la requête SQL qui charge les données nécessaires pour cet écran. Cette modification de requête fait référence, dans cet exemple, à une fonction SQL GET_PRIX_TI, dont le code source est repris dans le zip ci-dessous.

Ensuite, il implémente l'interface MercatorUi.ICustomizers.IFormLoadCustomizer, afin d'effectuer des modifications dans l'écran en question :

  • ajouter la colonne
  • mettre en place un mécanisme qui permet, lors de la sélection d'un article, de récupérer la valeur de S_PRIX_TI pour la placer dans la ligne en cours de modification

Le code exploite l'évènement AfterInsertItem de MercatorUi.Forms.Gescom.GescomAllowancesForm. Cet évènement est levé après insertion d'un article dans la grille. Notez que cet évènement est aussi levé si l'insertion est effectuée par un import (depuis un terminal portable ou depuis un filtre de signalétique articles).

Via un évènement CellValueChanged sur la grille, nous pouvons gérer toutes les situations où le code de l'article est remis à blanc (manuellement, lors de la sélection d'un rayon, ...) et en conséquence remettre le prix dans la colonne ajoutée à zéro.

Le code s'établit comme suit :

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;

namespace Gescom
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
    {

        public string StringUpdate(string StringToModify)
        {
            string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
            if (id == "ALLOWANCES_V")
                return StringToModify.Replace("from baremes", ",dbo.GET_PRIX_TI(ar_ref) as s_prix_ti from baremes");
            else
                return StringToModify;
        }

        public void FormLoadCustomize(Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Gescom.GescomAllowancesForm)
            {
                MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm = (MercatorUi.Forms.Gescom.GescomAllowancesForm)WindowsForm;
                if (gescomAllowancesForm.TypeVA == MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V) // uniquement pour les remises clients
                {
                    // dans la grille des lignes

                    MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn prix_ti = new MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn();
                    prix_ti.Name = "prix_ti";
                    prix_ti.HeaderText = "Prix Régulier";
                    prix_ti.Width = 85;
                    prix_ti.DataPropertyName = "s_prix_ti";
                    prix_ti.Increment = 0;
                    prix_ti.DisplayFormat = "##0.00";
                    prix_ti.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                    prix_ti.ReadOnly = true;
                    prix_ti.DefaultCellStyle.ForeColor = System.Drawing.Color.Gray;
                    gescomAllowancesForm.Grid.Columns.Insert(2, prix_ti);

                    gescomAllowancesForm.AfterInsertItem += GescomAllowancesForm_AfterInsertItem;
                    gescomAllowancesForm.Grid.CellValueChanged += Grid_CellValueChanged;
                }
            }
        }

        public void FormClosedCustomize(Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Gescom.GescomAllowancesForm)
            {
                MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm = (MercatorUi.Forms.Gescom.GescomAllowancesForm)WindowsForm;
                if (gescomAllowancesForm.TypeVA == MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V) // uniquement pour les remises clients
                {
                    gescomAllowancesForm.AfterInsertItem -= GescomAllowancesForm_AfterInsertItem;
                    gescomAllowancesForm.Grid.CellValueChanged -= Grid_CellValueChanged;
                }
            }
        }

        // après sélection d'un article, compléter la cellule s_prix_ti. Ce code est aussi exécuté lors de l'import.
        void GescomAllowancesForm_AfterInsertItem(object sender, MercatorUi.Forms.Gescom.GescomAllowancesForm.AfterInsertItemEventArgs e)
        {
            MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm = (MercatorUi.Forms.Gescom.GescomAllowancesForm)sender;
            e.DataRowLignes["s_prix_ti"] = e.DataRowStock["s_prix_ti"];
        }

        // si pour une quelconque raison, l'id article est remis à blanc, alors remettre zéro dans s_prix_ti
        void Grid_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
            if ((e.ColumnIndex > -1) && (e.RowIndex > -1) && (grid.Columns[e.ColumnIndex].Name == "ar_ref") && ((grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == DBNull.Value) ||  (grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "")))
                grid.Rows[e.RowIndex].Cells["prix_ti"].Value = 0;
        }
    }
}

 



A télécharger : 0000002425.zip (0 Kb - 07/10/2015)