using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;
using System.Linq;
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
{
BillingEngine.BeforePayment += BillingEngine_BeforePayment;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
{
BillingEngine.BeforePayment -= BillingEngine_BeforePayment;
}
void BillingEngine_BeforePayment(object sender, EventArgs e)
{
MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
double seuil = Dialogs.AskDouble("Hoeveel bedraagt is de drempel?", 200, billingEngine.DisplayFormatPu); // drempel is double.MinValue indien er op "Annuleren" wordt geklikt
if (billingEngine.PiedsVRecord.TOT_BAS_DV.CompareTo(seuil, billingEngine.NDec) < 0)
{
double valeur = Dialogs.AskDouble("Hoeveel bedragen de kosten?", 0, billingEngine.DisplayFormatPu);
if (valeur != double.MinValue) // er werd niet op "Annuleren" geklikt
{
var lignesVTransp = billingEngine.LignesVRecords.Where(l => l.ID_ARTICLE == "TRANSP"); // TRANSP est le S_ID de l'article "portkosten"
if (lignesVTransp.Count() == 0) // er bestaat geen lijn met dit artikel
{
DataSet ds = Api.Zselect(Globals.RepData, "select * from stock (NOLOCK) where s_id='TRANSP'");
if (ds == null) // indien SQL-fout in deze fase, dan wordt het bewaarproces geblokkeerd
return;
Api.TrimEndDataTable(ds.Tables[0]);
int n = billingEngine.AppendLine(true);
if (!billingEngine.InsertItem(ds.Tables[0].Rows[0], billingEngine.LIGNES.Rows[n]))
return;
billingEngine.LignesVRecords[n].PU = valeur;
}
else // er bestaat al een lijn met het artikel portkosten: deze wordt gebruikt
{
MercatorDatabase.LIGNES_V l = lignesVTransp.First();
l.DataRow[billingEngine.VarQ] = 1;
l.PU = valeur;
}
billingEngine.UpdateAmounts(); // het document herberekenen
}
}
else if (seuil > double.MinValue) // onder de drempel voor de portkosten -> de portkosten worden verwijderd indien deze lijn er al stond
{
billingEngine.LignesVRecords.Remove(l => l.ID_ARTICLE == "TRANSP");
billingEngine.UpdateAmounts(); // het document herberekenen
}
}
}
}