De prijs van de hoofdleverancier overnemen in een veld van de artikelfiche

0000002031     -      07-11-2013

Deze programmering is bedoeld om de prijs van de hoofdleverancier over te nemen in een veld van de artikelfiche. Via dit systeem kunnen dus wijzigingen in het ArtFou-rooster worden gedetecteerd, om ze meteen over te nemen in de gebruikersinterface. De programmering wordt gerealiseerd op basis van een SigStock-customizer die de volgende interfaces implementeert:

en maakt gebruik van het event PrincipalChanged van ArtFou, waarmee een code gelanceerd kan worden zodra de notie hoofdleverancier gewijzigd wordt (aanvinkvakje al dan niet aangevinkt, en schrapping van de rij van de hoofdleverancier).

Het hier vermelde voorbeeld is eenvoudig opgesteld en kan als vertrekpunt dienen voor een meer ambitieuze programmering:

  • rekening houden met de valuta;
  • rekening houden met de kortingen;
  • andere ArtFou-gegevensvelden overzetten naar de fiche.

Om dit voorbeeld te laten werken, moet een veld S_PRIX_FOU N(15,5) worden toegevoegd in STOCK. In dit veld wordt de waarde PRIX van ARTFOU ingevuld.

De hier beschreven programmering werkt enkel door het activeren van event in de gebruikersinterface. Bijgevolg kan het interessant zijn om S_PRIX_FOU te initialiseren voor alle fiches. Dat kan via deze SQL-opdracht:

update stock set s_prix_fou=isnull(artfou.prix, 0) from artfou where (stock.s_id=artfou.id_art) and (principal=1)

die slechts eenmaal moet worden uitgevoerd.

De customizercode ziet er als volgt uit:

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

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

        public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            if (sigForm.Mode != MercatorUi.Forms.Sig.SigClasses.SigFormMode.Normal) // Er wordt niets uitgevoerd in het geval van standaardwaarden, multicriteriazoekopdrachten ...
                return;
            List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.ArtFou));
            if (l.Count == 0)
                return;
            MercatorUi.Forms.Sig.SigGrids.ArtFou artFou = (MercatorUi.Forms.Sig.SigGrids.ArtFou)l[0];
            artFou.PrincipalChanged += new MercatorUi.Forms.Sig.SigGrids.ArtFou.PrincipalChangedHandler(artFou_PrincipalChanged);
        }

        public void FormClosedCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            if (sigForm.Mode != MercatorUi.Forms.Sig.SigClasses.SigFormMode.Normal)
                return;
            List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.ArtFou));
            if (l.Count == 0)
                return;
            MercatorUi.Forms.Sig.SigGrids.ArtFou artFou = (MercatorUi.Forms.Sig.SigGrids.ArtFou)l[0];
            artFou.PrincipalChanged -= new MercatorUi.Forms.Sig.SigGrids.ArtFou.PrincipalChangedHandler(artFou_PrincipalChanged);
        }

        void artFou_PrincipalChanged(object sender, MercatorUi.Forms.Sig.SigGrids.ArtFou.PrincipalChangedEventArgs e)
        {
            MercatorUi.Forms.Sig.SigGrids.ArtFou artFou = (MercatorUi.Forms.Sig.SigGrids.ArtFou)sender;
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)artFou.Form;
            if (!sigForm.IsFiltring) // Vergewis u ervan dat het rooster niet in "Filter"-modus staat.
            {
                if (e.DataRowPrincipal == null) // Geen enkele rij "Principal" aangevinkt
                    sigForm.DataSourceRow["S_PRIX_FOU"] = 0;
                else
                    sigForm.DataSourceRow["S_PRIX_FOU"] = e.DataRowPrincipal["prix"];
            }
        }
    }
}