Ontcijfering van een barcode met de eenheidsprijs

0000002520     -      11-10-2023

Deze code laat zien hoe men barcodes moet gebruiken die een eenheidsprijs omvatten. Het hier gegeven voorbeeld geldt voor een EAN13-barcode die als volgt is samengesteld:

  • 7 tekens: een vaste wortel die men moet vinden. De vastgelegde constante in ons voorbeeld is 1234567,
  • 5 tekens: de eenheidsprijs in eurocent,
  • laatste teken: check-digit.

Indien een dergelijke barcode wordt gedetecteerd, dan wordt het artikel waarvan de S_ID overeenkomt met MY_S_ID in het actuele document geplaatst met de eenheidsprijs vastgelegd in de barcode.

Deze customizer is het Aruba-equivalent van deze module. Dit maakt gebruik van de BeforeSearch van het informatiebestand van de artikels evenals van de mogelijkheid van Mercator om over te gaan op een BeforeSearchEventArgs aan de hand van de methode InsertItem van BillingEngine.

Zoom
using MercatorApi;
using MercatorUi;
using System.Drawing;
using System.Windows.Forms;

namespace SigStock
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.BeforeSearch += Sig_BeforeSearch;
        }

        void Sig_BeforeSearch(object sender, MercatorUi.Sig.SigClasses.BeforeSearchEventArgs e)
        {
            if ((e.FormContext == null) || !(e.FormContext is MercatorUi.Forms.Billing.BillingForm) || (((MercatorUi.Forms.Billing.BillingForm)e.FormContext).BillingEngine.TypeVA != MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V)) // on n'est pas dans un document de vente
                return;
            if (e.OriginalKey.Length != 13) // deze sleutel is zeker geen EAN13
                return;
            if (!e.OriginalKey.StartsWith("1234567")) // de zoeksleutel begint niet met 1234567
                return;
            double cents;
            if (!double.TryParse(e.OriginalKey.Substring(7, 5), out cents)) // de verwachte prijs vanaf teken nr 8 is niet in numeriek formaat
                return;
            e.DesiredWhereClause = "(s_id='MY_S_ID')";
            e.ForcedPricingInfosV = new MercatorUi.Engine.Gescom.BillingEngine.PricingInfosV();
            e.ForcedPricingInfosV.Prix = cents / 100;
        }
    }
}