In een verkoopdocument van het commercieel beheer een lijst opmaken van de klantenbestellingen wanneer de klant belt

0000002198     -      26-08-2020

Het maakt het mogelijk om in een verkoopdocument een lijst te maken van de openstaande klantenbestellingen wanneer een klant belt. Wanneer een klant geselecteerd wordt geeft de module het aantal openstaande orders weer (indien het aantal hoger is dan nul). De gebruiker kan zijn keuze om de bestellingen weer te geven, bevestigen. Deze weergave gebeurt via de historiek van de klant.

De code moet in een Billing-customizer geplaatst worden die gecreëerd werd vanuit de bijbehorende sequentie. Dit implementeert de volgende interfaces:

Maakt vooral gebruik van het event AfterApplyCustomerSupplier van de BillingEngine van het huidige document.

De code wordt als volgt samengesteld:

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

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {

        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.AfterApplyCustomerSupplier += new MercatorUi.Engine.Gescom.BillingEngine.AfterApplyCustomerSupplierEventHandler(BillingEngine_AfterApplyCustomerSupplier);
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.AfterApplyCustomerSupplier -= new MercatorUi.Engine.Gescom.BillingEngine.AfterApplyCustomerSupplierEventHandler(BillingEngine_AfterApplyCustomerSupplier);
        }

        void BillingEngine_AfterApplyCustomerSupplier(object sender, MercatorUi.Engine.Gescom.BillingEngine.AfterApplyCustomerSupplierEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (billingEngine.BillingForm == null) // BillingEngine is niet gekoppeld aan een BillingForm. We bevinden ons waarschijnlijk niet in een automatische verwerking
                return;
            if (!billingEngine.IsNew) // oude documenten die gewijzigd worden, worden niet verwerkt
                return;
            DataSet ds = Api.Zselect(Globals.RepData, "select count(id) as nbr_comm from pieds_v (NOLOCK) where (id_cli=@id_cli) and (n_lignes>0) and (type=3)", new MercatorSqlParam("@id_cli", e.IdCliOrFou, SqlDbType.Char));
            if (ds == null)
                return;
            int nbr_comm = Convert.ToInt32(ds.Tables[0].Rows[0]["nbr_comm"]);
            if (nbr_comm == 0)
                return; // geen bestelling voor deze klant -> de procedure wordt niet verdergezet
            if (!Dialogs.AnswerYesNo(_Divers.Iif_langue(Globals.Langue, "Order(s) existing for this customer : ", "Bestaande bestellingen voor deze klant : ", "Bestaande bestelling(en) voor deze klant: ") + nbr_comm.ToString() + "\r\n" + _Divers.Iif_langue(Globals.Langue, "Browse these orders ?", "Deze bestellingen doorbladeren ?", "Parcourir ces commandes ?"), billingEngine.BillingForm))
                return; // de gebruiker wil de bestellingen niet zien -> de procedure wordt niet verdergezet
            string reqSql = string.Format("select pieds_v.id,journal,piece,reference,type,date,heure,tot_bas_dv,tot_bas_fb,tot_ttc_dv,tot_ttc_fb,n_dec,id_dev,imprime,cubic as flag_appl,niveau_bo,c_nom,devises.nom as dev_nom "
                                        + "from pieds_v (NOLOCK) inner join cli (NOLOCK) on (pieds_v.id_cli=cli.c_id) "
                                        + "inner join devises(NOLOCK) on (pieds_v.id_dev=devises.id) where (pieds_v.type=3) and (pieds_v.id_cli='{0}') order by pieds_v.date", Api.UnquoteSql(e.IdCliOrFou));
            Globals.Main.ShowHistWithReqSql("V", reqSql, false, billingEngine.BillingForm);
        }
    }
}