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

Mettre l'écran des virements en lecture seule en fonction de l'utilisateur

0000002102     -      07/11/2013

Cette programmation montre comment mettre l'écran des virements en lecture seule en fonction de l'utilisateur. Dans l'exemple, les données de cet écran sont éditables si le nom de l'utilisateur est Guy. Cette condition peut bien entendu être aisément changée dans le code.

Le code doit être placé dans un customizer Main. Il implémente l'interface suivante : MercatorUi.ICustomizers.IExec

La mécanique de ce code s'articule comme suit :

  • On utilise l'évènement Globals.Main.BaseFormCreating afin de prendre la main sur la création de la fenêtre des virements qui est de type MercatorUi.Forms.Accounting.AccountingBankVirementForm
    • Cet évènement est inscrit lors de l'action DossierOpen
    • Il est désinscrit lors de l'action DossierClose
  • Dans cet évènement, on va inscrire un évènement Shown sur cette fenêtre. Ainsi, le code qui y sera placé sera exécuté quand cette fenêtre sera totalement construite et affichée.
  • Dans ce code, on va
    • désactiver le bouton "Enregistrer"
    • désactiver le sous-bouton "Fiche"
    • masquer le combo qui permet d'appeler un compte client, fournisseur, général
    • mettre en readonly tous les contrôles qui peuvent l'être
    • afficher un message indiquant l'interdiction de modfier les données

Le code s'établit comme suit :

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

namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {

        public void Main(MercatorUi.ICustomizers.ExecAction Action)
        {
            if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
            {
                Globals.Main.BaseFormCreating += new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
            else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
            {
                Globals.Main.BaseFormCreating -= new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
        }

        void Main_BaseFormCreating(object sender, MercatorUi.Main.BaseFormCreatingEventArgs e)
        {
            if ((e.Form.GetType() == typeof(MercatorUi.Forms.Accounting.AccountingBankVirementForm))
                && (Globals.CurrentUser != null)
                && (Globals.CurrentUser["nom"].ToString() != "Guy")) // si l'utilisateur n'est pas Guy, on va mettre en place les évènements.  Sinon, on ne fait rien.
            {
                e.Form.Shown += new EventHandler(Form_Shown);
            }
        }

        void Form_Shown(object sender, EventArgs e)
        {
            // Désactiver le bouton "Enregistrer"
            MercatorUi.Forms.Accounting.AccountingBankVirementForm accountingBankVirementForm = (MercatorUi.Forms.Accounting.AccountingBankVirementForm)sender;
            accountingBankVirementForm.Shown -= new EventHandler(Form_Shown); // désinscrire l'évènement
            MercatorUi.BoutonsPro.BleuPro bleuPro1 = (MercatorUi.BoutonsPro.BleuPro)accountingBankVirementForm.Controls["bleuPro1"];
            MercatorUi.BoutonsPro.ButtonXPro buttonXProSave = (MercatorUi.BoutonsPro.ButtonXPro)bleuPro1.Controls["buttonXProSave"];
            buttonXProSave.Enabled = false;
            
            // Désactiver le sous-bouton "Fiche"
            MercatorUi.BoutonsPro.ButtonXPro buttonBrowsePieceliees = (MercatorUi.BoutonsPro.ButtonXPro)bleuPro1.Controls["buttonBrowsePieceliees"];
            buttonBrowsePieceliees.SubItems[0].Enabled = false;

            // Masquer la case à cocher "Compte propre"
            Control checkBoxProper = accountingBankVirementForm.Controls["checkBoxProper"];
            checkBoxProper.Visible = false;

            // Masquer le combo qui permet d'appeler un compte client, fournisseur, général
            Control comboAppelSig = accountingBankVirementForm.Controls["comboAppelSig"];
            comboAppelSig.Visible = false;

            // Mettre en readonly tous les contrôles
            // pour plus de facilité, on va utiliser la Reflection pour mettre la propriété ReadOnly à true de chaque contrôle de cette form
            foreach (Control c in accountingBankVirementForm.Controls)
            {
                PropertyInfo pi = c.GetType().GetProperty("ReadOnly");
                if (pi != null) // est-ce que la propriété ReadOnly existe sur ce contrôle ?
                    pi.SetValue(c, true, null);
            }
            MercatorUi.Dialogs.Stop("Vous n'avez pas l'autorisation de modifier les données de cet écran !");
        }

    }
}