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("Impossible de lire le contenu du document reçu {0} : {1}\r\n{2}", message.Moment.ToShortDateShortTimeString(), parsedContent.Error, message.Id));
peppolBoxHelper.Messages.Remove(message); // on ne sait pas lire le message. Par sécurité on le supprime.
continue;
}
if (string.IsNullOrEmpty(parsedContent.SupplierVatNo))
{
Dialogs.Stop(string.Format("Impossible de lire le numéro de TVA du document reçu {0} du fournisseur \"{1}\" !\r\n{2}", message.Moment.ToShortDateShortTimeString(), parsedContent.SupplierName, message.Id));
peppolBoxHelper.Messages.Remove(message); // on ne sait pas lire le message. Par sécurité on le supprime.
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", parsedContent.SupplierVatNo, SqlDbType.Char));
if (fou == null)
{
peppolBoxHelper.Messages.Remove(message); // Erreur SQL. Par sécurité on supprime le message.
continue;
}
if (!fou.Any())
{
Dialogs.Stop(string.Format("Le fournisseur \"{0}\" avec numéro de TVA {1} n'existe pas !\r\n{2}", parsedContent.SupplierName, parsedContent.SupplierVatNo, message.Id));
peppolBoxHelper.Messages.Remove(message); // Le fournisseur n'est pas identifié. Par sécurité on supprime le message.
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); // L'utilisateur ne traite pas les factures de ce fournisseur. On supprime le message.
}
}
}
}
}