TRpcRule0ID134CategoryRefs6Order49NameWorkflow: DATEV-UploadTriggers13ExpertDataFbmRuleNode034KU88R0R.Extended=0
FbmRuleNode034KU88R0R.FailureNode=FbmRuleNode8ZZY5J90X2
FbmRuleNode034KU88R0R.Field=19
FbmRuleNode034KU88R0R.FlipNodes=-1
FbmRuleNode034KU88R0R.Locked=0
FbmRuleNode034KU88R0R.Op=0
FbmRuleNode034KU88R0R.SuccessNode=FbmRuleNodeIVKK1YRXGC
FbmRuleNode034KU88R0R.Type=TFbmRuleNodeConditionItem
FbmRuleNode034KU88R0R.Value=36
FbmRuleNode034KU88R0R.X=552
FbmRuleNode034KU88R0R.Y=972
FbmRuleNode4QB550Q2K1.Extended=0
FbmRuleNode4QB550Q2K1.From=buchhaltung@musterfirma.de
FbmRuleNode4QB550Q2K1.Kind=0
FbmRuleNode4QB550Q2K1.Locked=0
FbmRuleNode4QB550Q2K1.Recipients=xxx@uploadmail.datev.de
FbmRuleNode4QB550Q2K1.SubjectOnly=0
FbmRuleNode4QB550Q2K1.Type=TFbmRuleNodeActionForward
FbmRuleNode4QB550Q2K1.WithoutAttachments=0
FbmRuleNode4QB550Q2K1.X=804
FbmRuleNode4QB550Q2K1.Y=828
FbmRuleNode7LDH13RQOR.Extended=0
FbmRuleNode7LDH13RQOR.From=buchhaltung@musterfirma.de
FbmRuleNode7LDH13RQOR.Kind=0
FbmRuleNode7LDH13RQOR.Locked=0
FbmRuleNode7LDH13RQOR.Recipients=xxx@uploadmail.datev.de
FbmRuleNode7LDH13RQOR.SubjectOnly=0
FbmRuleNode7LDH13RQOR.Type=TFbmRuleNodeActionForward
FbmRuleNode7LDH13RQOR.WithoutAttachments=0
FbmRuleNode7LDH13RQOR.X=804
FbmRuleNode7LDH13RQOR.Y=684
FbmRuleNode8ZZY5J90X2.Extended=0
FbmRuleNode8ZZY5J90X2.Field=19
FbmRuleNode8ZZY5J90X2.FlipNodes=-1
FbmRuleNode8ZZY5J90X2.Locked=0
FbmRuleNode8ZZY5J90X2.Op=0
FbmRuleNode8ZZY5J90X2.SuccessNode=FbmRuleNodeIMBT6PB9II
FbmRuleNode8ZZY5J90X2.Type=TFbmRuleNodeConditionItem
FbmRuleNode8ZZY5J90X2.Value=37
FbmRuleNode8ZZY5J90X2.X=552
FbmRuleNode8ZZY5J90X2.Y=1140
FbmRuleNodeB3PT68BCYQ.Extended=0
FbmRuleNodeB3PT68BCYQ.FailureNode=FbmRuleNodeMCA1XCEUCN
FbmRuleNodeB3PT68BCYQ.Field=19
FbmRuleNodeB3PT68BCYQ.FlipNodes=-1
FbmRuleNodeB3PT68BCYQ.Locked=0
FbmRuleNodeB3PT68BCYQ.Op=0
FbmRuleNodeB3PT68BCYQ.SuccessNode=FbmRuleNodeHNAXDHBGXL
FbmRuleNodeB3PT68BCYQ.Type=TFbmRuleNodeConditionItem
FbmRuleNodeB3PT68BCYQ.Value=33
FbmRuleNodeB3PT68BCYQ.X=552
FbmRuleNodeB3PT68BCYQ.Y=540
FbmRuleNodeBMDSN036OA.Extended=0
FbmRuleNodeBMDSN036OA.From=buchhaltung@musterfirma.de
FbmRuleNodeBMDSN036OA.Kind=0
FbmRuleNodeBMDSN036OA.Locked=0
FbmRuleNodeBMDSN036OA.Recipients=xxx@uploadmail.datev.de
FbmRuleNodeBMDSN036OA.SubjectOnly=0
FbmRuleNodeBMDSN036OA.Type=TFbmRuleNodeActionForward
FbmRuleNodeBMDSN036OA.WithoutAttachments=0
FbmRuleNodeBMDSN036OA.X=804
FbmRuleNodeBMDSN036OA.Y=396
FbmRuleNodeD1L4BI4MMR.Extended=0
FbmRuleNodeD1L4BI4MMR.Locked=0
FbmRuleNodeD1L4BI4MMR.NextNode=FbmRuleNodeJC4Q6WQUUT
FbmRuleNodeD1L4BI4MMR.Type=TFbmRuleNodeActionRoot
FbmRuleNodeD1L4BI4MMR.X=552
FbmRuleNodeD1L4BI4MMR.Y=36
FbmRuleNodeESLY99CTN6.CustomSubject=Upload am Beleg protokollieren
FbmRuleNodeESLY99CTN6.Extended=0
FbmRuleNodeESLY99CTN6.FlipNodes=0
FbmRuleNodeESLY99CTN6.Locked=-1
FbmRuleNodeESLY99CTN6.Source=LogUploadEmailCreation
FbmRuleNodeESLY99CTN6.Type=TFbmRuleNodeConditionSource
FbmRuleNodeESLY99CTN6.X=804
FbmRuleNodeESLY99CTN6.Y=288
FbmRuleNodeHNAXDHBGXL.Extended=0
FbmRuleNodeHNAXDHBGXL.From=buchhaltung@musterfirma.de
FbmRuleNodeHNAXDHBGXL.Kind=0
FbmRuleNodeHNAXDHBGXL.Locked=0
FbmRuleNodeHNAXDHBGXL.Recipients=xxx@uploadmail.datev.de
FbmRuleNodeHNAXDHBGXL.SubjectOnly=0
FbmRuleNodeHNAXDHBGXL.Type=TFbmRuleNodeActionForward
FbmRuleNodeHNAXDHBGXL.WithoutAttachments=0
FbmRuleNodeHNAXDHBGXL.X=804
FbmRuleNodeHNAXDHBGXL.Y=540
FbmRuleNodeIMBT6PB9II.Extended=0
FbmRuleNodeIMBT6PB9II.Locked=0
FbmRuleNodeIMBT6PB9II.Protocol=Die DATEV Belegdatei konnte nicht per Mail übermittelt werden, da strukturierte Belegdateien aktuell von DATEV nicht unterstützt werden.
FbmRuleNodeIMBT6PB9II.Type=TFbmRuleNodeActionProtocol
FbmRuleNodeIMBT6PB9II.X=552
FbmRuleNodeIMBT6PB9II.Y=1284
FbmRuleNodeIVKK1YRXGC.Extended=0
FbmRuleNodeIVKK1YRXGC.From=buchhaltung@musterfirma.de
FbmRuleNodeIVKK1YRXGC.Kind=0
FbmRuleNodeIVKK1YRXGC.Locked=0
FbmRuleNodeIVKK1YRXGC.Recipients=xxx@uploadmail.datev.de
FbmRuleNodeIVKK1YRXGC.SubjectOnly=0
FbmRuleNodeIVKK1YRXGC.Type=TFbmRuleNodeActionForward
FbmRuleNodeIVKK1YRXGC.WithoutAttachments=0
FbmRuleNodeIVKK1YRXGC.X=804
FbmRuleNodeIVKK1YRXGC.Y=972
FbmRuleNodeJC4Q6WQUUT.CustomSubject=HelpFunctions
FbmRuleNodeJC4Q6WQUUT.Extended=0
FbmRuleNodeJC4Q6WQUUT.FunctionSource=const\r\n UPLOADMAIL_DOMAINPART = 'uploadmail.datev.de'; // Domain der DATEV-Transfer-E-Mails\r\n BELEGTRANSFER_GROUPNAME = 'Belegtransfer'; // Name der Basisgruppe in der die Belegdateien erstellt werden\r\n DATEV_BELEGSTATUS_NAME = 'Übergabe an DATEV'; // Name des Belegstatus für die Übergabe an DATEV\r\n FILENAME_REGEX = '(?i-ms)(.*\\b[A-Z]-[A-Z0-9]{10}-\\d{2}\\b.*(?-i)(?:pdf|tiff?))'; // Regex für die Erkennung des Dateinamens aus dem Mailinhalt der DATEV-E-Mailbestätigung\r\n DELETE_UPLOAD_CONFIRMATION = False; // Bestimmt ob die DATEV-Uploadbestätigungs-E-Mails endgültig gelöscht werden sollen\r\n TESTMODE = False;\r\n\r\n\r\nfunction IsConfirmationMail(MyItem: TFbmItem): Boolean;\r\nbegin\r\n Result := (MyItem.Kind = ikEmail) and\r\n (MyItem.State = isOpen) and\r\n AnsiContainsText(MyItem.From.Identifier, '@' + UPLOADMAIL_DOMAINPART) and\r\n FbmRegExMatch(MyItem.TextViewData, FILENAME_REGEX);\r\n\r\nend;\r\n\r\n\r\n\r\nfunction IsUploadMail(MyItem: TFbmItem; Filename: string): Boolean;\r\nbegin\r\n if (Length(Filename) > 0) then\r\n Result := (MyItem.Kind = ikEmail) and\r\n (MyItem.State = isForward) and\r\n not (ifDeleted in MyItem.Flags) and\r\n AnsiContainsText(MyItem.Recipients.Identifiers, '@' + UPLOADMAIL_DOMAINPART) and\r\n AnsiContainsText(MyItem.Subject, Filename)\r\n else\r\n Result := (MyItem.Kind = ikEmail) and\r\n (MyItem.State = isForward) and\r\n not (ifDeleted in MyItem.Flags) and\r\n AnsiContainsText(MyItem.Recipients.Identifiers, '@' + UPLOADMAIL_DOMAINPART);\r\n\r\nend;\r\n\r\n\r\n\r\nfunction IsUploadFile(MyItem: TFbmItem; Filename: string): Boolean;\r\nbegin\r\n if (Length(Filename) > 0) then\r\n Result := (MyItem.Kind = ikFile) and\r\n (MyItem.State = isNew) and\r\n AnsiSameText(MyItem.Subject, Filename) and\r\n AnsiContainsText(Item.GroupCache.GetPathById(MyItem.GroupRef), BELEGTRANSFER_GROUPNAME)\r\n else\r\n Result := (MyItem.Kind = ikFile) and\r\n (MyItem.State = isNew) and\r\n AnsiContainsText(Item.GroupCache.GetPathById(MyItem.GroupRef), BELEGTRANSFER_GROUPNAME);\r\n\r\nend;\r\n\r\n\r\n\r\nfunction IsUploadLetter(MyItem: TFbmItem; Filename: string): Boolean;\r\nbegin\r\n Result := (MyItem.Kind = ikLetter) and\r\n not (ifDeleted in MyItem.Flags) and\r\n MyItem.UserFields.Exists('Belegstatus') and\r\n AnsiSameText(MyItem.UserFields.ItemsByName['Belegstatus'].AsString, DATEV_BELEGSTATUS_NAME) and\r\n AnsiContainsText(Filename, FbmCorrectFilename(MyItem.Subject));\r\n\r\nend;\r\n\r\n\r\nfunction DeleteDatevTransferData: Boolean;\r\nvar\r\n PrevTaskItem: TFbmItem;\r\n UploadMailDeleted, UploadFileDeleted, UploadLetterFound : Boolean;\r\n Filename, ProtocolEntry : string;\r\n\r\nbegin\r\n UploadMailDeleted := False;\r\n UploadFileDeleted := False;\r\n UploadLetterFound := False;\r\n\r\n try\r\n Filename := FbmRegExExtract(Item.TextViewdata, FILENAME_REGEX, '$1', '');\r\n Item.AddToProtocol('Debug: Der Upload der Belegdatei "' + Filename + '" wurde bestätigt.');\r\n\r\n if (Length(Filename) = 0) or not FbmIsValidFilename(Filename) then\r\n RaiseException(erCustomError, 'Aus der Upload-Bestätigung konnte kein Dateiname ermittelt werden.');\r\n\r\n PrevTaskItem := TFbmItem.Create(ikEMail, 0);\r\n try\r\n if Item.GetPrevTaskItem(PrevTaskItem) then\r\n repeat\r\n if IsUploadMail(PrevTaskItem, Filename) then\r\n begin\r\n // PrevTaskItem.Flags := PrevTaskItem.Flags + [ifDeleted];\r\n // PrevTaskItem.Save;\r\n PrevTaskItem.Delete;\r\n UploadMailDeleted := True;\r\n end;\r\n\r\n if IsUploadFile(PrevTaskItem, Filename) then\r\n begin\r\n PrevTaskItem.Flags := PrevTaskItem.Flags + [ifDeleted];\r\n PrevTaskItem.Save;\r\n UploadFileDeleted := True;\r\n end;\r\n\r\n if IsUploadLetter(PrevTaskItem, Filename) then\r\n begin\r\n UploadLetterFound := True;\r\n ProtocolEntry := 'Der E-Mail-Upload des Beleges wurde von DATEV ' + Item.Protocol.GetItemLink(Item.Id, 'bestätigt') + '.';\r\n\r\n if UploadMailDeleted and UploadFileDeleted then\r\n ProtocolEntry := ProtocolEntry + ' Die zugehörigen DATEV-Transferdaten wurden gelöscht.'\r\n else\r\n ProtocolEntry := ProtocolEntry + ' Die zugehörigen DATEV-Transferdaten konnten jedoch nicht gelöscht werden.';\r\n\r\n PrevTaskItem.AddToProtocol(ProtocolEntry);\r\n PrevTaskItem.State := isDone;\r\n PrevTaskItem.Save;\r\n end;\r\n\r\n Result := UploadMailDeleted and UploadFileDeleted and UploadLetterFound;\r\n\r\n until Result or not PrevTaskItem.GetPrevTaskItem(PrevTaskItem);\r\n\r\n finally\r\n PrevTaskItem.Free;\r\n\r\n if DELETE_UPLOAD_CONFIRMATION then\r\n Item.Delete\r\n else\r\n Item.State := isDone;\r\n\r\n end;\r\n\r\n except\r\n Item.AddToProtocol('Es ist ein Fehler beim Löschen der DATEV-Transferdaten aufgetreten: ' + ExceptionToString(ExceptionType, ExceptionParam));\r\n Result := False;\r\n end;\r\n\r\nend;\r\n\r\n\r\n\r\nfunction LogUploadEmailCreation: Boolean;\r\nvar\r\n PrevTaskItem: TFbmItem;\r\n UploadLetterFound : Boolean;\r\n Filename, ProtocolEntry : string;\r\n\r\nbegin\r\n UploadLetterFound := False;\r\n\r\n try\r\n Filename := FbmAnsiReplaceText(Item.Subject, 'WG: ', '');\r\n Item.AddToProtocol('Debug: Die Upload-E-Mail für die Datei "' + Filename + '" wurde erkannt.');\r\n\r\n if (Length(Filename) = 0) or not FbmIsValidFilename(Filename) then\r\n RaiseException(erCustomError, 'Aus der Upload-E-Mail konnte kein Dateiname ermittelt werden.');\r\n\r\n PrevTaskItem := TFbmItem.Create(ikEMail, 0);\r\n try\r\n if Item.GetPrevTaskItem(PrevTaskItem) then\r\n repeat\r\n if IsUploadLetter(PrevTaskItem, Filename) then\r\n begin\r\n UploadLetterFound := True;\r\n ProtocolEntry := 'Die Upload-E-Mail für DATEV wurde erstellt.';\r\n\r\n PrevTaskItem.AddToProtocol(ProtocolEntry);\r\n PrevTaskItem.Save;\r\n end;\r\n\r\n Result := UploadLetterFound;\r\n\r\n until Result or not PrevTaskItem.GetPrevTaskItem(PrevTaskItem);\r\n\r\n finally\r\n PrevTaskItem.Free;\r\n end;\r\n\r\n except\r\n Item.AddToProtocol('Es ist ein Fehler beim Protokollieren aufgetreten: ' + ExceptionToString(ExceptionType, ExceptionParam));\r\n Result := False;\r\n end;\r\n\r\nend;
FbmRuleNodeJC4Q6WQUUT.Locked=0
FbmRuleNodeJC4Q6WQUUT.NextNode=FbmRuleNodeRYPVES96X0
FbmRuleNodeJC4Q6WQUUT.Type=TFbmRuleNodeActionFunction
FbmRuleNodeJC4Q6WQUUT.X=552
FbmRuleNodeJC4Q6WQUUT.Y=96
FbmRuleNodeJY1M1B1I31.CustomSubject=Transferdateien löschen
FbmRuleNodeJY1M1B1I31.Extended=0
FbmRuleNodeJY1M1B1I31.FlipNodes=0
FbmRuleNodeJY1M1B1I31.Locked=-1
FbmRuleNodeJY1M1B1I31.Source=DeleteDatevTransferData
FbmRuleNodeJY1M1B1I31.Type=TFbmRuleNodeConditionSource
FbmRuleNodeJY1M1B1I31.X=1056
FbmRuleNodeJY1M1B1I31.Y=288
FbmRuleNodeL8W3KEQRXU.Extended=0
FbmRuleNodeL8W3KEQRXU.FailureNode=FbmRuleNodeB3PT68BCYQ
FbmRuleNodeL8W3KEQRXU.Field=19
FbmRuleNodeL8W3KEQRXU.FlipNodes=-1
FbmRuleNodeL8W3KEQRXU.Locked=0
FbmRuleNodeL8W3KEQRXU.Op=0
FbmRuleNodeL8W3KEQRXU.SuccessNode=FbmRuleNodeBMDSN036OA
FbmRuleNodeL8W3KEQRXU.Type=TFbmRuleNodeConditionItem
FbmRuleNodeL8W3KEQRXU.Value=32
FbmRuleNodeL8W3KEQRXU.X=552
FbmRuleNodeL8W3KEQRXU.Y=396
FbmRuleNodeMCA1XCEUCN.Extended=0
FbmRuleNodeMCA1XCEUCN.FailureNode=FbmRuleNodeQYPN03T3TP
FbmRuleNodeMCA1XCEUCN.Field=19
FbmRuleNodeMCA1XCEUCN.FlipNodes=-1
FbmRuleNodeMCA1XCEUCN.Locked=0
FbmRuleNodeMCA1XCEUCN.Op=0
FbmRuleNodeMCA1XCEUCN.SuccessNode=FbmRuleNode7LDH13RQOR
FbmRuleNodeMCA1XCEUCN.Type=TFbmRuleNodeConditionItem
FbmRuleNodeMCA1XCEUCN.Value=34
FbmRuleNodeMCA1XCEUCN.X=552
FbmRuleNodeMCA1XCEUCN.Y=684
FbmRuleNodeMN2SFGB35B.CustomSubject=Ist DATEV Uploadbestätigung
FbmRuleNodeMN2SFGB35B.Extended=0
FbmRuleNodeMN2SFGB35B.FlipNodes=0
FbmRuleNodeMN2SFGB35B.Locked=-1
FbmRuleNodeMN2SFGB35B.Source=IsConfirmationMail(Item)
FbmRuleNodeMN2SFGB35B.SuccessNode=FbmRuleNodeJY1M1B1I31
FbmRuleNodeMN2SFGB35B.Type=TFbmRuleNodeConditionSource
FbmRuleNodeMN2SFGB35B.X=1056
FbmRuleNodeMN2SFGB35B.Y=204
FbmRuleNodeMWHIJC51XE.Comment=Ersteller : GREYHOUND Software GmbH & Co. KG\r\nLetzte Änderung : 16.10.2020\r\nVoraussetzung: GREYHOUND 5.0.110 build 2993\r\n\r\nDiese Regel ermöglicht die digitale Belegübergabe an "DATEV Unternehmen Online" per Mail Upload. Es wird das Anlegen der Übergabedatei in den entsprechenden Belegtransfer- Untergruppen überwacht. Beim Erstellen einer neuen Übergabedatei wird automatisch eine Ausgangsmail mit dieser Datei als Anhang an DATEV geschickt. Nach dem Eintreffen der Bestätigungsmail von DATEV wird der Status des Ursprungsbelegs erledigt, sodass eine entsprechende Workflow-Regel darauf reagieren kann.\r\n
FbmRuleNodeMWHIJC51XE.CustomSubject=Regelbeschreibung
FbmRuleNodeMWHIJC51XE.Extended=-1
FbmRuleNodeMWHIJC51XE.Locked=0
FbmRuleNodeMWHIJC51XE.Type=TFbmRuleNodeActionComment
FbmRuleNodeMWHIJC51XE.X=24
FbmRuleNodeMWHIJC51XE.Y=36
FbmRuleNodeQYPN03T3TP.Extended=0
FbmRuleNodeQYPN03T3TP.FailureNode=FbmRuleNode034KU88R0R
FbmRuleNodeQYPN03T3TP.Field=19
FbmRuleNodeQYPN03T3TP.FlipNodes=-1
FbmRuleNodeQYPN03T3TP.Locked=0
FbmRuleNodeQYPN03T3TP.Op=0
FbmRuleNodeQYPN03T3TP.SuccessNode=FbmRuleNode4QB550Q2K1
FbmRuleNodeQYPN03T3TP.Type=TFbmRuleNodeConditionItem
FbmRuleNodeQYPN03T3TP.Value=35
FbmRuleNodeQYPN03T3TP.X=552
FbmRuleNodeQYPN03T3TP.Y=828
FbmRuleNodeRYPVES96X0.CustomSubject=Ist DATEV Transferdatei
FbmRuleNodeRYPVES96X0.Extended=0
FbmRuleNodeRYPVES96X0.FailureNode=FbmRuleNodeXDGZ6KJNSR
FbmRuleNodeRYPVES96X0.FlipNodes=0
FbmRuleNodeRYPVES96X0.Locked=-1
FbmRuleNodeRYPVES96X0.Source=IsUploadFile(Item, '')
FbmRuleNodeRYPVES96X0.SuccessNode=FbmRuleNodeUMKG5ADSEV
FbmRuleNodeRYPVES96X0.Type=TFbmRuleNodeConditionSource
FbmRuleNodeRYPVES96X0.X=552
FbmRuleNodeRYPVES96X0.Y=204
FbmRuleNodeUMKG5ADSEV.Comment=Transferdatei hochladen
FbmRuleNodeUMKG5ADSEV.CustomSubject=
FbmRuleNodeUMKG5ADSEV.Extended=0
FbmRuleNodeUMKG5ADSEV.Locked=0
FbmRuleNodeUMKG5ADSEV.NextNode=FbmRuleNodeL8W3KEQRXU
FbmRuleNodeUMKG5ADSEV.Type=TFbmRuleNodeActionComment
FbmRuleNodeUMKG5ADSEV.X=552
FbmRuleNodeUMKG5ADSEV.Y=288
FbmRuleNodeXDGZ6KJNSR.CustomSubject=Ist DATEV Upload-E-Mail
FbmRuleNodeXDGZ6KJNSR.Extended=0
FbmRuleNodeXDGZ6KJNSR.FailureNode=FbmRuleNodeMN2SFGB35B
FbmRuleNodeXDGZ6KJNSR.FlipNodes=0
FbmRuleNodeXDGZ6KJNSR.Locked=-1
FbmRuleNodeXDGZ6KJNSR.Source=IsUploadMail(Item, '')
FbmRuleNodeXDGZ6KJNSR.SuccessNode=FbmRuleNodeESLY99CTN6
FbmRuleNodeXDGZ6KJNSR.Type=TFbmRuleNodeConditionSource
FbmRuleNodeXDGZ6KJNSR.X=804
FbmRuleNodeXDGZ6KJNSR.Y=204
SourceCodeconst
UPLOADMAIL_DOMAINPART = 'uploadmail.datev.de'; // Domain der DATEV-Transfer-E-Mails
BELEGTRANSFER_GROUPNAME = 'Belegtransfer'; // Name der Basisgruppe in der die Belegdateien erstellt werden
DATEV_BELEGSTATUS_NAME = 'Übergabe an DATEV'; // Name des Belegstatus für die Übergabe an DATEV
FILENAME_REGEX = '(?i-ms)(.*\b[A-Z]-[A-Z0-9]{10}-\d{2}\b.*(?-i)(?:pdf|tiff?))'; // Regex für die Erkennung des Dateinamens aus dem Mailinhalt der DATEV-E-Mailbestätigung
DELETE_UPLOAD_CONFIRMATION = False; // Bestimmt ob die DATEV-Uploadbestätigungs-E-Mails endgültig gelöscht werden sollen
TESTMODE = False;
function IsConfirmationMail(MyItem: TFbmItem): Boolean;
begin
Result := (MyItem.Kind = ikEmail) and
(MyItem.State = isOpen) and
AnsiContainsText(MyItem.From.Identifier, '@' + UPLOADMAIL_DOMAINPART) and
FbmRegExMatch(MyItem.TextViewData, FILENAME_REGEX);
end;
function IsUploadMail(MyItem: TFbmItem; Filename: string): Boolean;
begin
if (Length(Filename) > 0) then
Result := (MyItem.Kind = ikEmail) and
(MyItem.State = isForward) and
not (ifDeleted in MyItem.Flags) and
AnsiContainsText(MyItem.Recipients.Identifiers, '@' + UPLOADMAIL_DOMAINPART) and
AnsiContainsText(MyItem.Subject, Filename)
else
Result := (MyItem.Kind = ikEmail) and
(MyItem.State = isForward) and
not (ifDeleted in MyItem.Flags) and
AnsiContainsText(MyItem.Recipients.Identifiers, '@' + UPLOADMAIL_DOMAINPART);
end;
function IsUploadFile(MyItem: TFbmItem; Filename: string): Boolean;
begin
if (Length(Filename) > 0) then
Result := (MyItem.Kind = ikFile) and
(MyItem.State = isNew) and
AnsiSameText(MyItem.Subject, Filename) and
AnsiContainsText(Item.GroupCache.GetPathById(MyItem.GroupRef), BELEGTRANSFER_GROUPNAME)
else
Result := (MyItem.Kind = ikFile) and
(MyItem.State = isNew) and
AnsiContainsText(Item.GroupCache.GetPathById(MyItem.GroupRef), BELEGTRANSFER_GROUPNAME);
end;
function IsUploadLetter(MyItem: TFbmItem; Filename: string): Boolean;
begin
Result := (MyItem.Kind = ikLetter) and
not (ifDeleted in MyItem.Flags) and
MyItem.UserFields.Exists('Belegstatus') and
AnsiSameText(MyItem.UserFields.ItemsByName['Belegstatus'].AsString, DATEV_BELEGSTATUS_NAME) and
AnsiContainsText(Filename, FbmCorrectFilename(MyItem.Subject));
end;
function DeleteDatevTransferData: Boolean;
var
PrevTaskItem: TFbmItem;
UploadMailDeleted, UploadFileDeleted, UploadLetterFound : Boolean;
Filename, ProtocolEntry : string;
begin
UploadMailDeleted := False;
UploadFileDeleted := False;
UploadLetterFound := False;
try
Filename := FbmRegExExtract(Item.TextViewdata, FILENAME_REGEX, '$1', '');
Item.AddToProtocol('Debug: Der Upload der Belegdatei "' + Filename + '" wurde bestätigt.');
if (Length(Filename) = 0) or not FbmIsValidFilename(Filename) then
RaiseException(erCustomError, 'Aus der Upload-Bestätigung konnte kein Dateiname ermittelt werden.');
PrevTaskItem := TFbmItem.Create(ikEMail, 0);
try
if Item.GetPrevTaskItem(PrevTaskItem) then
repeat
if IsUploadMail(PrevTaskItem, Filename) then
begin
// PrevTaskItem.Flags := PrevTaskItem.Flags + [ifDeleted];
// PrevTaskItem.Save;
PrevTaskItem.Delete;
UploadMailDeleted := True;
end;
if IsUploadFile(PrevTaskItem, Filename) then
begin
PrevTaskItem.Flags := PrevTaskItem.Flags + [ifDeleted];
PrevTaskItem.Save;
UploadFileDeleted := True;
end;
if IsUploadLetter(PrevTaskItem, Filename) then
begin
UploadLetterFound := True;
ProtocolEntry := 'Der E-Mail-Upload des Beleges wurde von DATEV ' + Item.Protocol.GetItemLink(Item.Id, 'bestätigt') + '.';
if UploadMailDeleted and UploadFileDeleted then
ProtocolEntry := ProtocolEntry + ' Die zugehörigen DATEV-Transferdaten wurden gelöscht.'
else
ProtocolEntry := ProtocolEntry + ' Die zugehörigen DATEV-Transferdaten konnten jedoch nicht gelöscht werden.';
PrevTaskItem.AddToProtocol(ProtocolEntry);
PrevTaskItem.State := isDone;
PrevTaskItem.Save;
end;
Result := UploadMailDeleted and UploadFileDeleted and UploadLetterFound;
until Result or not PrevTaskItem.GetPrevTaskItem(PrevTaskItem);
finally
PrevTaskItem.Free;
if DELETE_UPLOAD_CONFIRMATION then
Item.Delete
else
Item.State := isDone;
end;
except
Item.AddToProtocol('Es ist ein Fehler beim Löschen der DATEV-Transferdaten aufgetreten: ' + ExceptionToString(ExceptionType, ExceptionParam));
Result := False;
end;
end;
function LogUploadEmailCreation: Boolean;
var
PrevTaskItem: TFbmItem;
UploadLetterFound : Boolean;
Filename, ProtocolEntry : string;
begin
UploadLetterFound := False;
try
Filename := FbmAnsiReplaceText(Item.Subject, 'WG: ', '');
Item.AddToProtocol('Debug: Die Upload-E-Mail für die Datei "' + Filename + '" wurde erkannt.');
if (Length(Filename) = 0) or not FbmIsValidFilename(Filename) then
RaiseException(erCustomError, 'Aus der Upload-E-Mail konnte kein Dateiname ermittelt werden.');
PrevTaskItem := TFbmItem.Create(ikEMail, 0);
try
if Item.GetPrevTaskItem(PrevTaskItem) then
repeat
if IsUploadLetter(PrevTaskItem, Filename) then
begin
UploadLetterFound := True;
ProtocolEntry := 'Die Upload-E-Mail für DATEV wurde erstellt.';
PrevTaskItem.AddToProtocol(ProtocolEntry);
PrevTaskItem.Save;
end;
Result := UploadLetterFound;
until Result or not PrevTaskItem.GetPrevTaskItem(PrevTaskItem);
finally
PrevTaskItem.Free;
end;
except
Item.AddToProtocol('Es ist ein Fehler beim Protokollieren aufgetreten: ' + ExceptionToString(ExceptionType, ExceptionParam));
Result := False;
end;
end;
procedure ItemForward(SourceItem: TFbmItem; Kind: TFbmItemKind; Options: TFbmItemAssignOptions; From, Recipients: string);
var
ForwardItem: TFbmItem;
begin
ForwardItem := TFbmItem.Create(Kind, 0);
try
SourceItem.LoadAttachmentsContent;
ForwardItem.Assign(SourceItem, Options, iasForward);
if (From <> '') and Assigned(ForwardItem.From) then
ForwardItem.From.Text := From;
if (Recipients <> '') and Assigned(ForwardItem.Recipients) then
ForwardItem.Recipients.Text := Recipients;
if (SourceItem.Kind = ikEmail) and (SourceItem.Properties is TFbmItemEMailProperties) then
begin
TFbmItemEMailProperties(ForwardItem.Properties).CC.Clear;
TFbmItemEMailProperties(ForwardItem.Properties).BCC.Clear;
end;
ForwardItem.Save;
finally
ForwardItem.Free;
end;
end;
begin
if (IsUploadFile(Item, '')) then
begin
// Transferdatei hochladen
if (Item.GroupRef = 32) then
begin
ItemForward(Item, ikEmail, [iaoAttachments, iaoProperties, iaoUserFields, iaoIgnoreScripts, iaoNowAsCreated], 'buchhaltung@musterfirma.de', 'xxx@uploadmail.datev.de');
end
else
begin
if (Item.GroupRef = 33) then
begin
ItemForward(Item, ikEmail, [iaoAttachments, iaoProperties, iaoUserFields, iaoIgnoreScripts, iaoNowAsCreated], 'buchhaltung@musterfirma.de', 'xxx@uploadmail.datev.de');
end
else
begin
if (Item.GroupRef = 34) then
begin
ItemForward(Item, ikEmail, [iaoAttachments, iaoProperties, iaoUserFields, iaoIgnoreScripts, iaoNowAsCreated], 'buchhaltung@musterfirma.de', 'xxx@uploadmail.datev.de');
end
else
begin
if (Item.GroupRef = 35) then
begin
ItemForward(Item, ikEmail, [iaoAttachments, iaoProperties, iaoUserFields, iaoIgnoreScripts, iaoNowAsCreated], 'buchhaltung@musterfirma.de', 'xxx@uploadmail.datev.de');
end
else
begin
if (Item.GroupRef = 36) then
begin
ItemForward(Item, ikEmail, [iaoAttachments, iaoProperties, iaoUserFields, iaoIgnoreScripts, iaoNowAsCreated], 'buchhaltung@musterfirma.de', 'xxx@uploadmail.datev.de');
end
else
begin
if (Item.GroupRef = 37) then
begin
Item.AddToProtocol('Die DATEV Belegdatei konnte nicht per Mail übermittelt werden, da strukturierte Belegdateien aktuell von DATEV nicht unterstützt werden.');
end;
end;
end;
end;
end;
end;
end
else
begin
if (IsUploadMail(Item, '')) then
begin
if (LogUploadEmailCreation) then;
end
else
begin
if (IsConfirmationMail(Item)) then
begin
if (DeleteDatevTransferData) then;
end;
end;
end;
end.
Compiled1Created20201218T12:15:23Modified20201218T12:16:23