Ce code illustre comment utiliser des codes-barres contenant un prix unitaire. L'exemple est donné ici pour un code-barres EAN13 se composant comme suit :
- 7 caractères : une racine fixe à trouver. Constante fixée dans notre exemple à 1234567
- 5 caractères : le prix unitaire en euro-cents
- dernier caractère : check-digit
Si un tel code-barres est détecté, alors l'article dont le S_ID vaut MY_S_ID est placé dans le document en cours au prix unitaire fixé dans le code-barres.
Ce customizer exploite l'évènement BeforeSearch du signalétique des articles ainsi que la capacité qu'a Mercator de pouvoir passer un BeforeSearchEventArgs à la méthode InsertItem du BillingEngine.
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) // cette clé n'est certainement pas un EAN13
return;
if (!e.OriginalKey.StartsWith("1234567")) // la clé de recherche ne commence pas par 1234567
return;
double cents;
if (!double.TryParse(e.OriginalKey.Substring(7, 5), out cents)) // le prix attendu à partir du caractère n° 8 n'est pas sous forme numérique
return;
e.DesiredWhereClause = "(s_id='MY_S_ID')";
e.ForcedPricingInfosV = new MercatorUi.Engine.Gescom.BillingEngine.PricingInfosV();
e.ForcedPricingInfosV.Prix = cents / 100;
}
}
}