Dans l'historique des ventes du menu "Fenêtres", ajouter un déroulant et en tenir compte pour la sélection des documents

0000001996     -      06/09/2021

Cette programmation permet d'ajouter un déroulant dans la boîte de dialogue de l'historique clients du menu "Fenêtres". Dans notre exemple, ce déroulant permettra de filtrer sur le statut de centralisation en comptabilité. Dans un second temps, lors de l'exécution de la requête sélectionnant les documents à afficher, ce paramètre sera bien entendu pris en compte. Ce développement est basé sur un customizer HistCli qui implémente ces interfaces :

hist_cli_combo

Notons au passage que ce code illustre l'utilisation de la classe MercatorUi._BaseClasses.MercatorComboItem pour alimenter les items d'un déroulant.

Le code situé sous "// on ajoute le déroulant dans la boîte de dialogue" est simplement une retranscription du code généré automatiquement par le designer, lorsqu'un objet MercatorUi._BaseClasses.ComboBoxExReadOnly est déposé sur une form.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;

namespace HistCli
{
    public class Customizer : MercatorUi.ICustomizers.IDialogLoadCustomizer, MercatorUi.ICustomizers.IStringUpdater
    {
        private MercatorUi._BaseClasses.ComboBoxExReadOnly comboBoxCentralisation;

        public void DialogLoadCustomize(System.Windows.Forms.Form form)
        {
            // cette liste correspond aux éléments du déroulant qui va être ajouté dans la boîte de dialogue
            List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>();
            l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Tous", (Int16)0));
            l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Non centralisés", (Int16)1));
            l.Add(new MercatorUi._BaseClasses.MercatorComboItem("En erreur", (Int16)2));
            l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Figés", (Int16)3));
            l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Centralisés", (Int16)4));

            // on ajoute le déroulant dans la boîte de dialogue
            comboBoxCentralisation = new MercatorUi._BaseClasses.ComboBoxExReadOnly();
            comboBoxCentralisation.DisplayMember = "Text";
            comboBoxCentralisation.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
            comboBoxCentralisation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBoxCentralisation.FormattingEnabled = true;
            comboBoxCentralisation.ItemHeight = 14;
            comboBoxCentralisation.Location = new System.Drawing.Point(355, 210);
            comboBoxCentralisation.Name = "comboBoxDepot";
            comboBoxCentralisation.Size = new System.Drawing.Size(122, 20);
            comboBoxCentralisation.BringToFront();
            comboBoxCentralisation.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
            comboBoxCentralisation.DisplayMember = "Description";
            comboBoxCentralisation.ValueMember = "N";
            comboBoxCentralisation.DataSource = l;
            comboBoxCentralisation.SelectedValue = (Int16)0;
            form.Controls.Add(comboBoxCentralisation);
            form.Disposed += form_disposed;
        }

        public string StringUpdate(string StringToModify)
        {
            if (comboBoxCentralisation == null)
                return StringToModify; // on est arrivé dans l'historique sans passer par la boîte de dialogue (par exemple, depuis un regroupement automatique)

            string compl_where = null;
            int selectedValueInCombo = System.Convert.ToInt32(comboBoxCentralisation.SelectedValue);

            if (selectedValueInCombo == 1) // Non centralisés
                compl_where = "(cubic=0)";
            else if (selectedValueInCombo == 2) // En erreur
                compl_where = "((cubic>0) and (cubic<8))";
            else if (selectedValueInCombo == 3) // Figés
                compl_where = "(cubic=8)";
            else if (selectedValueInCombo == 4) // Centralisés
                compl_where = "(cubic=9)";
            if (compl_where == null)
                return StringToModify;
            else
                return StringToModify.Replace(" order by ", " and " + compl_where + " order by "); // on ajoute la nouvelle condition juste avant order by
        }

        private void form_disposed(object sender, EventArgs e)
        {
            System.Windows.Forms.Form form = (System.Windows.Forms.Form)sender;
            form.Disposed -= form_disposed;
            comboBoxCentralisation = null;
        }
    }
}