Voor het verwerken van bonnetjes en facturen kan gebruik gemaakt worden van de diensten van Lyanthe. De Lyanthe-app werkt niet altijd even soepel, en daarom zullen ondernemers soms ook de Exact Online-app aangeboden krijgen door hun accountant. Met de Exact Online-app kan een ondernemer makkelijker gegevens aanleveren dan via de Lyanthe-app. Bovendien is er dan maar één app die de ondernemer nodig heeft om samen te werken met zijn accountant in plaats van twee apps; dat is meer gebruiksvriendelijk.
Voor het automatisch doorsturen van facturen en bonnetjes per e-mail van de in Exact Online geuploade documenten kan het volgende SQL-script elk uur gebruikt worden door accountants en administratiekantoren om de documenten van de te boeken facturen door te sturen naar Lyanthe.
Dit script verzamelt eerst alle niet-definitieve berichten in de digitale brievenbus van een geselecteerd deel van de administraties. Vervolgens wordt elke PDF afzonderlijk doorgestuurd, zodat voor de gebruikers van de Exact Online er sprake is van een volledig geautomatiseerd werkproces: zonder menselijke interventie of menselijke handelingen zal dit script alle bonnetjes uit het gekoppeld boekhoudpakket Exact Online verder leiden naar Lyanthe. De automatische aanlevering zorgt er voor dat de administratie tijdig de betalingen kan verrichten en de financiële situatie ook uit de boekhouding blijkt.
Dit script heeft de volgende beperkingen:
- In een Excel-bestand of database tabel dient per Division een e-mailadres bij Lyanthe opgegeven te worden. Dit e-mailadres kan toegevoegd worden via een join bij de insert op
smtp@mail
. - Er dient een maximale leeftijd opgegeven te worden en/of een lijst van verwerkte berichten via een join voor de te bestuderen berichten om het volume beperkt te houden. De Exact Online API voor berichten kent momenteel geen mogelijkheid om automatisch berichten af te vinken als zijnde verwerkt.
SQL-code versturen Exact Online documenten naar Lyanthe
De volgende code stuurt de bonnen en facturen door vanuit het accountancy-abonnement op Exact Online naar Lyanthe:
--
-- Send mail message attachments from Exact Online App to Lyanthe.
--
local define OUT_PATH "${system:userdocumentsdirectory}"
select to_char(sysdate, 'YYYYMMDDHH24MISS') timestamp
local define TIMESTAMP "${outcome:0,0}"
begin
--
-- Select companies of the subscription
-- associated with the user of accountant.
--
use
select sdn.Code
from Me me
join SystemDivisions sdn
where sdn.Status = 1
and sdn.Customer = me.UserCustomerId
;
--
-- Configure email sending.
--
set smtp-max-parallel@mail 4;
set smtp-minimum-deliver-duration-ms@mail 1000;
set smtp-host-address@mail "acme-com.mail.protection.outlook.com";
set smtp-user-name@mail "john.doe@acme.com";
set smtp-password@mail "secret";
set [mail-from-name]@mail "ACME";
set [mail-from-email]@mail "john.doe@acme.com";
set [mail-body-html]@mail false;
--
-- Set deviating port when necessary.
--
--set smtp-host-port-number@mail 25;
set smtp-enable-ssl@mail true;
--
-- Place files to send in table.
--
-- Join_set is used to avoid downloading all message attachment
-- files from all years for the join when only querying a few thousand
-- messages.
--
create or replace table DocumentsToSend@InMemoryStorage
as
select /*+ join_set(mat, MailMessageId, 100000) */
mrd.Division
, mrd.DivisionLabel
, mrd.ID
, mrd.Created
, mrd.RecipientMailbox
, mrd.RecipientStatus
, mrd.SenderMailbox
, mrd.Subject
, mat.AttachmentFileName
, mat.TypeDescription
, mat.AttachmentFromUrl
, length(mat.AttachmentFromUrl) lengte
from MailMessagesReceived mrd
join MailMessageAttachments mat
on mat.MailMessageID = mrd.ID
and mat.Type != 20 /* No UBL 2.0. */
where mrd.RecipientStatus in (20 /* Open. */, 25 /* Prepared. */, 30 /* Approved. */, 40 /* Realized. */)
order
by mrd.Division
, mrd.Created
;
--
-- Send documents to Lyanthe.
--
insert into smtp@mail
( toEmail
, ccEmail
, bccEmail
, subject
, body
, attachment1Contents
, attachment1Name
, attachment1MimeType
, origSystemReference
)
select 'catchall@lyanthe.nl'
toEmail
, cast(null as varchar2)
ccEmail
, cast(null as varchar2)
bccEmail
, coalesce(subject, 'no subject') subject
, 'Mail doorgestuurd vanaf Exact Online App naar Lyanthe'
|| chr(13) || chr(10)
|| chr(13) || chr(10)
|| 'Betreft: ' || Subject
|| chr(13) || chr(10)
|| 'Ontvangen op: ' || to_char(Created, 'DD-MM-YYYY HH24:MI:SS')
|| chr(13) || chr(10)
|| 'Ontvangen in: ' || RecipientMailbox
|| chr(13) || chr(10)
|| 'Ontvangen voor: ' || DivisionLabel
|| chr(13) || chr(10)
|| 'Verzonden door: ' || SenderMailbox
body
, AttachmentFromUrl
attachment1Contents
, AttachmentFileName
attachment1Name
, cast(null as varchar2)
attachment1MimeType
, to_char(Division) || '-' || to_char(ID)
from DocumentsToSend@InMemoryStorage
;
end;
--
-- Register work done in Excel log file, including
-- origSystemReference. When materialized into a database table,
-- the work done can be used to skip message attachments already
-- forwarded.
--
select * except attachment1Contents
from smtp@mail
order
by id
local export results as "${OUT_PATH}\acme-doorsturen-lyanthe-${TIMESTAMP}.xlsx" format xlsx include headers