using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
using System.Xml;
using MercatorUi.Forms.Other.OtherClasses;
// <CompileWithRoslyn />
namespace PeppolBox
{
public class Customizer : MercatorUi.ICustomizers.IPeppolBoxHelperCreated, MercatorUi.ICustomizers.IPeppolBoxHelperClosed
{
public void PeppolBoxHelperCreated(PeppolBoxHelper peppolBoxHelper)
{
peppolBoxHelper.Downloading += PeppolBoxHelper_Downloading;
FilterMessages(peppolBoxHelper, peppolBoxHelper.Messages);
}
public void PeppolBoxHelperClosed(PeppolBoxHelper peppolBoxHelper)
{
peppolBoxHelper.Downloading -= PeppolBoxHelper_Downloading;
}
private void PeppolBoxHelper_Downloading(object sender, PeppolBoxHelper.DownloadingEventArgs e)
{
PeppolBoxHelper peppolBoxHelper = (PeppolBoxHelper)sender;
FilterMessages(peppolBoxHelper, e.Messages);
}
private void FilterMessages(PeppolBoxHelper peppolBoxHelper, PeppolBoxHelper.PeppolMessagesCollection messages)
{
foreach (var message in messages.Where(m => m.IsInvoiceOrCreditNote).ToArray())
{
var parsedContent = message.ReceivedDoc.ParseContent(Globals.Langue, MercatorPeppol.ReceivedDoc.ParseContentEnum.WithSupplierName);
if (!string.IsNullOrEmpty(parsedContent.Error))
{
Dialogs.Stop(string.Format("Kan de inhoud van het ontvangen document {0} niet lezen: {1}\r\n{2}", message.Moment.ToShortDateShortTimeString(), parsedContent.Error, message.Id));
peppolBoxHelper.Messages.Remove(message); // het bericht kan niet gelezen worden. Uit veiligheidsoverwegingen wordt het verwijderd.
continue;
}
XmlNode nodeNumTva = parsedContent.XmlSelectNodes("cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID").FirstOrDefault();
if (string.IsNullOrEmpty(nodeNumTva?.InnerText))
{
Dialogs.Stop(string.Format("Kan het btw-nummer van het ontvangen document {0} van leverancier \"{1}\" niet lezen!\r\n{2}", message.Moment.ToShortDateShortTimeString(), parsedContent.SupplierName, message.Id));
peppolBoxHelper.Messages.Remove(message); // het bericht kan niet gelezen worden. Uit veiligheidsoverwegingen wordt het verwijderd.
continue;
}
List<(string f_cat1, string f_cat2)> fou = Api.Zselect<(string f_cat1, string f_cat2)>(Globals.RepData, "select f_cat1,f_cat2 from FOU where f_num_tva=@num_tva", new MercatorSqlParam("@num_tva", nodeNumTva.InnerText, SqlDbType.Char));
if (fou == null)
{
peppolBoxHelper.Messages.Remove(message); // SQL-fout. Uit veiligheidsoverwegingen wordt het bericht verwijderd.
continue;
}
if (!fou.Any())
{
Dialogs.Stop(string.Format("De leverancier \"{0}\" met btw-nummer {1} bestaat niet!\r\n{2}", parsedContent.SupplierName, nodeNumTva.InnerText, message.Id));
peppolBoxHelper.Messages.Remove(message); // De leverancier werd niet geïdentificeerd. Uit veiligheidsoverwegingen wordt het bericht verwijderd.
continue;
}
if (!string.IsNullOrEmpty(fou[0].f_cat1) && !Globals.CurrentUserRecord.DEPT.Contains(fou[0].f_cat1)
|| !string.IsNullOrEmpty(fou[0].f_cat2) && !Globals.CurrentUserRecord.DEPT.Contains(fou[0].f_cat2))
{
peppolBoxHelper.Messages.Remove(message); // De gebruiker verwerkt geen facturen van deze leverancier. Het bericht wordt verwijderd.
}
}
}
}
}