using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
// <CompileWithRoslyn />
namespace Main
{
public class Customizer
{
public void DownloadAndDispatchPeppolMessages()
{
Globals.MercatorTasksToMain.Log("Instanciation du PeppolBoxHelper");
using (MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper peppolBoxHelper = new MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper())
{
if (peppolBoxHelper.DataTable == null)
Globals.MercatorTasksToMain.Log("Erreur lors de l'initialisation du PeppolBoxHelper : " + Api.LastError, isError: true);
else if (!peppolBoxHelper.Download())
Globals.MercatorTasksToMain.Log("Erreur lors de téléchargement des messages : " + Api.LastError, isError: true);
else
{
Globals.MercatorTasksToMain.Log("Message(s) téléchargé(s) : " + peppolBoxHelper.Messages.Count(m => m.IsNew));
int nActions = 0;
foreach (MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper.PeppolMessage message in peppolBoxHelper.Messages.Where(m => m.IsNew && m.IsInvoiceOrCreditNote))
{
MercatorPeppol.ReceivedDoc.ParseContentRet parsedContent = message.ReceivedDoc.ParseContent(Globals.Langue, MercatorPeppol.ReceivedDoc.ParseContentEnum.WithSupplierName | MercatorPeppol.ReceivedDoc.ParseContentEnum.WithPdf);
if (!string.IsNullOrWhiteSpace(parsedContent.Error))
{
Globals.MercatorTasksToMain.Log(string.Format("Parsing message {0} : {1}", message.Id, parsedContent.Error), isError: true);
continue;
}
string id_actempl = null;
// ici on met les tests qui permettent de déterminer en fonction du contenu du message le type d'action du CRM qui doit être utilisée
if (...)
{
id_actempl = ".A-0RFCEXW"; // id_actempl gescom
}
else if (...)
{
id_actempl = ".A-KC6V639"; // id_actempl compta
}
if (id_actempl == null)
continue; // ce message n'est pas dispatché
using (MercatorUi.Engine.Crm.ActionEngine actionEngine = MercatorUi.Engine.Crm.ActionEngine.InitNew(MercatorUi.Sig._SigEnum._none, null, id_actempl))
{
if (actionEngine == null)
{
Globals.MercatorTasksToMain.Log("ActionEngine.InitNew : " + actionEngine.LastError, isError: true);
continue;
}
if (actionEngine.ReadOnly)
{
Globals.MercatorTasksToMain.Log("ActionEngine.InitNew : engine is ReadOnly!");
continue;
}
actionEngine.ActionsRecord.OBJET = (message.ReceivedDoc.ChangeType == "INVOICE_RECEIVED" ? "Facture" : "Note de crédit") + " Peppol de " + parsedContent.SupplierName;
actionEngine.ActionsRecord.ENTRYID = message.Id.ToString();
actionEngine.ActionsRecord.MOMENT_2 = message.Moment;
actionEngine.ActionsRecord.MOMENT_1 = message.Moment.AddDays(5); // échéance pour l'action portée à 5 jours
if (!actionEngine.Save())
{
Globals.MercatorTasksToMain.Log(string.Format("Message {0} : erreur lors de la sauvegarde de l'action : {1}", message.Id, actionEngine.LastError), isError: true);
continue;
}
else if (parsedContent.Pdf == null)
{
Globals.MercatorTasksToMain.Log(string.Format("Message {0} : pas de PDF dans le message", message.Id), isError: true);
}
else
{
if (!Api.BytesToSqlFile(parsedContent.Pdf, Api.AddBS(actionEngine.SqlFileViewDefaultDirectory) + "PeppolDoc.pdf"))
Globals.MercatorTasksToMain.Log(string.Format("Message {0} : impossible de joindre le PDF à l'action", message.Id), isError: true);
}
nActions++;
}
}
Globals.MercatorTasksToMain.Log("Action(s) créée(s) : " + nActions);
}
}
}
}
}