764 lines
30 KiB
VB.net

Imports System.ComponentModel
Imports System.IO
Imports System.Text.RegularExpressions
Imports DevExpress.Utils.Drawing
Imports DevExpress.XtraEditors
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraSplashScreen
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging
Imports EnvelopeGenerator.CommonServices
Imports EnvelopeGenerator.Domain
Imports EnvelopeGenerator.CommonServices.My
Imports GdPicture14
Imports EnvelopeGenerator.Domain.Constants
Imports EnvelopeGenerator.Domain.Entities
Partial Public Class frmEnvelopeEditor
Public Property Envelope As Envelope
Public Property Documents As New BindingList(Of EnvelopeDocument)
Public Property Receivers As New BindingList(Of ReceiverVM)
Private AllReceiverEmails As New List(Of String)
Private Controller As EnvelopeEditorController
Private Logger As Logger
Private Const COL_NAME = "Name"
Private Const COL_EMAIL = "EmailAddress"
Private Const COL_CODE = "AccessCode"
Private Const COL_PHONE = "PhoneNumber"
Public Property State As State
Private TempFiles As TempFiles
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub btnNewFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnNewFile.ItemClick
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
'SaveEnvelopeWithValidation()
' If Not IsNothing(Envelope) Then
Try
' prüfen ob es schon eine Datei gibt
If Documents.Count > 0 Then
MsgBox(Resources.Envelope.Only_one_file_is_allowed, MsgBoxStyle.Information, Text)
Return
End If
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
Await AddDocument(OpenFileDialog1.FileName)
End If
Catch ex As Exception
Logger.Error(ex)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
RibbonPageGroupAddSignature_Enabled()
End Try
' Else
' SplashScreenManager.CloseOverlayForm(oHandle)
' End If
End Sub
Private Async Function AddDocument(pfilePath As String) As Threading.Tasks.Task(Of Boolean)
Dim oDocument = Await Controller.CreateDocument(pfilePath)
If oDocument IsNot Nothing Then
Documents.Add(oDocument)
GridDocuments.DataSource = Documents
' Update_File_DB(OpenFileDialog1.FileName)
ClearBsiItem()
Return True
Else
MsgBox(Resources.Envelope.Document_Could_Not_Be_Saved, MsgBoxStyle.Critical, Text)
Return False
End If
End Function
Private Sub frmEditor_Load(sender As Object, e As EventArgs) Handles Me.Load
Logger = State.LogConfig.GetLogger()
Logger.Debug("Loading Configuration..")
TempFiles = New TempFiles(State.LogConfig)
TempFiles.Create()
If Envelope Is Nothing Then
Logger.Debug("Loading Controller..")
Controller = New EnvelopeEditorController(State)
' Get additional data
Logger.Debug("Loading oDataForm..")
Dim oDataForm As New frmEnvelopeMainData() With {
.State = State,
.Envelope = Controller.Envelope,
.NewEnvelopeMode = True
}
Dim oResult As DialogResult = oDataForm.ShowDialog()
If oResult = DialogResult.Cancel Then
Controller.DeleteEnvelopeFromDisk(Controller.Envelope)
Me.Close()
Else
Envelope = Controller.Envelope
End If
Else
Controller = New EnvelopeEditorController(State, Envelope)
Documents = New BindingList(Of EnvelopeDocument)(Controller.Envelope.Documents)
Receivers = New BindingList(Of ReceiverVM)(Controller.Envelope.EnvelopeReceivers.Select(Function(r) ReceiverVM.From(r)).ToList())
For Each docItem As EnvelopeDocument In Documents
If Not File.Exists(docItem.Filepath) Then
Dim oTempFolder = TempFiles._TempPath
Dim oTempFilename = String.Concat(oTempFolder, "\", $"ViewEnvDoc_{Envelope.Id}.pdf")
If File.Exists(oTempFilename) Then
Try
File.OpenWrite(oTempFilename)
Catch ex As Exception
MsgBox("File might already be open?", MsgBoxStyle.Exclamation)
Me.Cursor = Cursors.Default
Exit For
End Try
File.Delete(oTempFilename)
End If
WriteBytetoPath(oTempFilename, docItem.ByteData)
docItem.Filepath = oTempFilename
GridDocuments.Tag = docItem.Filepath
End If
If docItem.Thumbnail Is Nothing Then
docItem.Thumbnail = Controller.CreateThumbnail(docItem.Filepath)
docItem.PageCount = Controller.GetPageCount(docItem.Filepath)
End If
Next
If Envelope.Status = Constants.EnvelopeStatus.EnvelopeSent Then
' TODO - Nach Testen
' SetFormReadonly()
End If
End If
txtMessage.EditValue = Controller.Envelope.Message
GridDocuments.DataSource = Documents
GridReceivers.DataSource = Receivers
AllReceiverEmails = Controller.GetEnvelopeReceiverAddresses(State.UserId)
RepositoryItemComboBox1.Items.Clear()
RepositoryItemComboBox1.Items.AddRange(AllReceiverEmails)
SetAccessCodeColumnVisible()
SetPhoneNumberColumnVisible()
txtEnvelopeIdLabel2.Caption = String.Format(txtEnvelopeIdLabel2.Tag.ToString, Controller.Envelope.Id)
txtCreatorEmailLabel.Caption = String.Format(txtCreatorEmailLabel.Tag.ToString, Controller.Envelope.User.Email)
SetFormTitle(Controller.Envelope.Title)
End Sub
Private Sub SetAccessCodeColumnVisible()
If Controller.Envelope.UseAccessCode Then
colAccessCode.Visible = True
Else
colAccessCode.Visible = False
End If
End Sub
Private Sub SetPhoneNumberColumnVisible()
If IsNothing(Envelope) Then
colPhoneNumber.Visible = False
Exit Sub
End If
If Envelope.TfaEnabled = True Then
colPhoneNumber.Visible = DEF_TF_ENABLED_WITH_PHONE
Else
colPhoneNumber.Visible = False
End If
End Sub
Private Sub btnDeleteFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteFile.ItemClick
If ViewDocuments.GetSelectedRows().Count > 0 Then
Dim oMessage = Resources.Envelope.Do_you_really_want_to_remove_this_document
If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then
Exit Sub
End If
Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument)
If Controller.DeleteDocument(oDocument) Then
Documents.Remove(oDocument)
GridDocuments.DataSource = Nothing
ClearBsiItem()
End If
End If
End Sub
Private Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick
Try
If SaveEnvelopeWithOutValidation() = True Then
bsitm_info.Caption = "Data saved successfully " + Now.ToString
Else
bsitm_info.Caption = "Exceprion - Error saving Data. Check LOG"
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Private Sub btnEditFields_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnEditFields.ItemClick
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
If SaveEnvelopeWithReceiverDocumentValidation() = False Then
Return
End If
If ViewDocuments.GetSelectedRows().Count > 0 Then
Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument)
Dim oEnvelope = Controller.Envelope
If Not IsNothing(oDocument.ByteData) Then
Dim oTempFolder = TempFiles._TempPath
Dim oTempFilename = String.Concat(oTempFolder, "\", $"ViewEnvDoc_{oEnvelope.Id}.pdf")
If Not File.Exists(oTempFilename) Then
WriteBytetoPath(oTempFilename, oDocument.ByteData)
oDocument.Filepath = oTempFilename
End If
End If
Dim oGDPictureKey As String = MS_GDPICTUREKEY
Dim oForm As New frmFieldEditor(State) With {
.Document = Controller.Envelope.Documents.
Where(Function(d) d.Filename = oDocument.Filename).
SingleOrDefault(),
.Receivers = Controller.Envelope.EnvelopeReceivers.Select(Function(r) ReceiverVM.From(r)).ToList()
}
oForm.ShowDialog()
End If
Catch ex As Exception
Logger.Error(ex)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Sub
Private Sub WriteBytetoPath(ByVal sFileName As String, pByte As Byte())
'For Document
Try
If Not pByte Is Nothing Then
'Read image data into a file stream
Using fs As New FileStream(sFileName, FileMode.OpenOrCreate, FileAccess.Write)
fs.Write(pByte, 0, pByte.Length)
'Set image variable value using memory stream.
fs.Flush()
fs.Close()
End Using
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in downloadFile")
End Try
End Sub
Private Function SaveEnvelopeWithValidation() As Boolean
Return SaveEnvelope(True)
End Function
Private Function SaveEnvelopeWithOutValidation() As Boolean
Return SaveEnvelope(False)
End Function
''' <summary>
''' Speichert den Envelope und prüft
''' ob Receiver und Dokument vorhanden ist.
''' </summary>
Private Function SaveEnvelopeWithReceiverDocumentValidation() As Boolean
If SaveEnvelope(False) = True Then
Dim oEnvelope = Controller.Envelope
Dim oErrors = oEnvelope.ValidateReceiverDocumentData()
If oErrors.Any Then
ShowValidationErrors(Resources.Envelope.Errors_when_saving_the_envelope, oErrors)
Return False
End If
Else
Return False
End If
Return True
End Function
Private Function ValidateEnvelope() As List(Of String)
Dim oMessage = GetEditValueFromTextControl(txtMessage)
Dim oErrors As New List(Of String)
If String.IsNullOrWhiteSpace(oMessage) Then
oErrors.Add(Resources.Envelope.Missing_Message)
End If
If Documents.Count = 0 Then
oErrors.Add(Resources.Envelope.Missing_Documents)
End If
If Receivers.Count = 0 Then
oErrors.Add(Resources.Envelope.Missing_Receivers)
End If
For Each Receiver In Receivers
If CommonServices.Helpers.IsValidEmailAddress(Receiver.EmailAddress) = False Then
oErrors.Add(String.Format(Resources.Envelope.Invalid_Email_Address, Receiver.Name))
End If
Next
Return oErrors
End Function
Private Function SaveEnvelope(pWithValidation As Boolean) As Boolean
Dim oMessage = GetEditValueFromTextControl(txtMessage)
' Ensure all receivers are saved
ViewReceivers.CloseEditor()
If pWithValidation = True Then
Dim oErrors = ValidateEnvelope()
If oErrors.Any Then
ShowValidationErrors(Resources.Envelope.Errors_when_saving_the_envelope, oErrors)
Return False
End If
End If
Dim oEnvelope = Controller.Envelope
oEnvelope.Message = oMessage
oEnvelope.Documents = Documents.ToList
If Controller.SaveReceivers(oEnvelope, Receivers.ToList()) = False Then
MsgBox(Resources.Envelope.Error_when_saving_the_recipients, MsgBoxStyle.Critical, Text)
Return False
End If
If Controller.SaveEnvelope() = False Then
MsgBox(Resources.Envelope.Error_when_saving_the_envelope, MsgBoxStyle.Critical, Text)
Return False
Else
Return True
End If
End Function
Private Function GetEditValueFromTextControl(pControl As TextEdit) As String
If pControl.EditValue Is Nothing Then
Return String.Empty
Else
Return pControl.EditValue.ToString
End If
End Function
Private Sub ShowValidationErrors(pErrorTitle As String, pErrors As List(Of String))
Dim oError = pErrorTitle & vbNewLine & vbNewLine & String.Join(vbNewLine, pErrors)
MsgBox(oError, MsgBoxStyle.Exclamation, Text)
End Sub
Private Sub btnDeleteReceiver_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteReceiver.ItemClick
If ViewReceivers.SelectedRowsCount = 0 Then
Exit Sub
End If
Dim oReceiver As ReceiverVM = ViewReceivers.GetFocusedRow()
If oReceiver Is Nothing Then
Exit Sub
End If
Dim oMessage = Resources.Envelope.Do_you_want_to_delete_the_selected_recipient
If Controller.ElementsExist(oReceiver.Id) Then
oMessage = Resources.Envelope.There_are_already_elements_for_this_recipient
End If
If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then
Exit Sub
End If
If Controller.DeleteReceiver(oReceiver.Receiver) Then
Receivers.Remove(oReceiver)
Else
MsgBox(Resources.Envelope.Recipient_could_not_be_deleted, MsgBoxStyle.Critical, Text)
End If
End Sub
Private Sub btnSendEnvelope_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSendEnvelope.ItemClick
If Controller.Envelope.Status = Constants.EnvelopeStatus.EnvelopeSent Then
MsgBox(Resources.Envelope.Envelope_already_sent, MsgBoxStyle.Information, Text)
Exit Sub
End If
If SaveEnvelopeWithValidation() = False Then
Exit Sub
End If
Dim oErrors = ValidateEnvelope()
oErrors = Controller.ValidateEnvelopeForSending(oErrors)
If oErrors.Any() Then
ShowValidationErrors(Resources.Envelope.Error_when_validating_the_envelope, oErrors)
Exit Sub
End If
Dim oMessage = Resources.Envelope.Do_you_want_to_start_the_signature_process_now
If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then
Exit Sub
End If
If Controller.SendEnvelope() = False Then
MsgBox(Resources.Envelope.Envelope_could_not_be_sent, MsgBoxStyle.Critical, Text)
Else
If MsgBox(Resources.Envelope.Envelope_Invitations_Sent, MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, Text) = MsgBoxResult.Ok Then
Me.Close()
End If
End If
End Sub
Private Sub btnCancel_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnCancel.ItemClick
' Speichern?
Dim oMessage = Resources.Envelope.Should_The_Envelope_Be_Saved
If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.Yes Then
SaveEnvelope(False)
End If
' Schließen
Me.Close()
End Sub
Private Sub btnEditData_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnEditData.ItemClick
Dim oForm As New frmEnvelopeMainData() With
{
.State = State,
.Envelope = Controller.Envelope,
.NewEnvelopeMode = False
}
oForm.ShowDialog()
SetAccessCodeColumnVisible()
SetPhoneNumberColumnVisible()
SetFormTitle(Controller.Envelope.Title)
End Sub
Private Sub GridReceivers_PaintEx(sender As Object, e As DevExpress.XtraGrid.PaintExEventArgs) Handles GridReceivers.PaintEx
Dim grid As GridControl = sender, view As GridView = Nothing
If TypeOf sender Is GridControl AndAlso TypeOf grid.MainView Is GridView Then
view = grid.MainView
Dim pen = New Pen(Color.Gainsboro, 2)
Dim info = view.GetViewInfo()
e.Cache.DrawRectangle(pen, info.Bounds)
pen.Dispose()
End If
End Sub
Private Sub ViewReceivers_InitNewRow(sender As Object, e As InitNewRowEventArgs) Handles ViewReceivers.InitNewRow
Dim oReceiver As ReceiverVM = ViewReceivers.GetRow(e.RowHandle)
Dim oUsedColors = Receivers.Select(Of Integer)(Function(r) r.ColorType).ToList()
Dim oAllColors = [Enum].GetValues(GetType(Domain.Constants.ColorType)).Cast(Of Integer).ToList()
Dim oUnusedColors = oAllColors.Except(oUsedColors)
If oUnusedColors.Any() Then
oReceiver.ColorType = oUnusedColors.Min()
End If
End Sub
Private Sub frmEnvelopeEditor_Shown(sender As Object, e As EventArgs) Handles Me.Shown
RibbonPageGroupAddSignature_Enabled()
RibbonPageGroupReceiver_Enable()
SendEnvelopeButton_Enable()
End Sub
Private Sub RibbonPageGroupAddSignature_Enabled()
If ViewDocuments.RowCount > 0 And
ViewReceivers.SelectedRowsCount > 0 Then
RibbonPageGroupAddSignature.Enabled = True
Else
RibbonPageGroupAddSignature.Enabled = False
End If
End Sub
Private Sub RibbonPageGroupReceiver_Enable()
If ViewReceivers.SelectedRowsCount = 0 Then
RibbonPageGroupReceiver.Enabled = False
Else
RibbonPageGroupReceiver.Enabled = True
End If
End Sub
Private Sub DocumentButtons_Enable()
If ViewDocuments.RowCount = 0 Then
btnNewFile.Enabled = True
bbtnitm_ConcatFiles.Enabled = True
btnDeleteFile.Enabled = False
btnShowFile.Enabled = False
Else
btnNewFile.Enabled = False
bbtnitm_ConcatFiles.Enabled = False
btnDeleteFile.Enabled = True
btnShowFile.Enabled = True
End If
End Sub
Private Sub SendEnvelopeButton_Enable()
If ViewDocuments.RowCount > 0 And
ViewReceivers.SelectedRowsCount > 0 Then
btnSendEnvelope.Enabled = True
Else
btnSendEnvelope.Enabled = False
End If
End Sub
Private Sub SetFormTitle(pTitle As String)
Dim oFormTitle As String = State.DbConfig.ExternalProgramName + " - " + Resources.Envelope.Envelope_Editor
If String.IsNullOrEmpty(pTitle) = False Then
oFormTitle += " - " + Controller.Envelope.Title.Truncate(30)
End If
Me.Text = oFormTitle
End Sub
Private Sub frmEnvelopeEditor_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If Controller.Envelope?.Status = EnvelopeStatus.EnvelopeCreated Then
Controller.DeleteEnvelopeFromDisk(Controller.Envelope)
End If
End Sub
Private Sub ViewReceivers_RowCountChanged(sender As Object, e As EventArgs) Handles ViewReceivers.RowCountChanged
RibbonPageGroupReceiver_Enable()
SendEnvelopeButton_Enable()
RibbonPageGroupAddSignature_Enabled()
End Sub
Private Sub ViewDocuments_RowCountChanged(sender As Object, e As EventArgs) Handles ViewDocuments.RowCountChanged
DocumentButtons_Enable()
SendEnvelopeButton_Enable()
RibbonPageGroupAddSignature_Enabled()
End Sub
Dim CellValueChanged As Boolean = False
Private Sub ViewReceivers_CellValueChanged(sender As Object, e As Views.Base.CellValueChangedEventArgs) Handles ViewReceivers.CellValueChanged
If e.Column.FieldName = COL_EMAIL And CellValueChanged = False Then
If e.Value Is Nothing Then
' Keine E-Mail-Adresse, also weg damit
ViewReceivers.DeleteRow(ViewReceivers.FocusedRowHandle)
Else
' Doppelte E-Mail-Adresse? TODO
'Dim oReceivers = Controller.Envelope.EnvelopeReceivers
CellValueChanged = True
Dim oNameCellValue = ViewReceivers.GetRowCellValue(e.RowHandle, COL_NAME)
If oNameCellValue Is Nothing Then
Dim oEmailAdress As String = DirectCast(e.Value.ToString.ToLower, String)
oEmailAdress = Trim(oEmailAdress)
If IsValidEmailAddress(oEmailAdress) = True Then
Dim oAccessCode As String = ""
Dim oLastName As String = Controller.GetLastNameByEmailAdress(oEmailAdress)
'oAccessCode = Helpers.GetAccessCode()
Dim oPhoneNumber As String = Controller.GetLastPhoneByEmailAdress(oEmailAdress)
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_EMAIL), oEmailAdress)
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_NAME), oLastName)
CheckAccesscode(e.RowHandle, oAccessCode)
' ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_CODE), oAccessCode)
If Envelope.TfaEnabled AndAlso DEF_TF_ENABLED_WITH_PHONE Then
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_PHONE), oPhoneNumber)
End If
If ViewReceivers.GetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_CODE)) = String.Empty Then
CheckAccesscode(e.RowHandle, oAccessCode)
End If
Else
Dim oMsg = Resources.Envelope.Error_email_Validation
oMsg = oMsg.Replace("@Mail", oEmailAdress)
MsgBox(oMsg, MsgBoxStyle.Exclamation, Text)
ViewReceivers.DeleteRow(ViewReceivers.FocusedRowHandle)
End If
CellValueChanged = False
End If
End If
ElseIf e.Column.FieldName = COL_PHONE And CellValueChanged = False Then
CellValueChanged = True
Dim oPhoneNumber As String = DirectCast(e.Value.ToString.ToLower, String)
oPhoneNumber = Trim(oPhoneNumber)
If IsValidMobilePhoneNumber(oPhoneNumber) = True Then
ViewReceivers.SetRowCellValue(e.RowHandle, ViewReceivers.Columns.Item(COL_PHONE), oPhoneNumber)
Else
Dim oMsg = Resources.Envelope.Error_phone_Validation
oMsg = oMsg.Replace("@PhoneNr", oPhoneNumber)
MsgBox(oMsg, MsgBoxStyle.Exclamation, Text)
ViewReceivers.DeleteRow(ViewReceivers.FocusedRowHandle)
End If
CellValueChanged = False
End If
End Sub
Private Function CheckAccesscode(pRowHandle As Integer, pAccessCode As String) As Boolean
If pAccessCode = "" Then
pAccessCode = CommonServices.Helpers.GetAccessCode()
ViewReceivers.SetRowCellValue(pRowHandle, ViewReceivers.Columns.Item(COL_CODE), pAccessCode)
End If
End Function
Private Function IsValidEmailAddress(pEmailAddress As String) As Boolean
Try
If pEmailAddress.Contains("@") Then
Dim oAddress = New System.Net.Mail.MailAddress(pEmailAddress)
Return oAddress.Address = pEmailAddress
Else
Return False
End If
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Private Function IsValidMobilePhoneNumber(pPhoneNumber As String) As Boolean
Try
Dim pattern As String = "^\+49\d{10,14}$"
Dim regex As New Regex(pattern)
Return regex.IsMatch(pPhoneNumber)
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
Private Sub RibbonControl1_Click(sender As Object, e As EventArgs) Handles RibbonControl1.Click
End Sub
Private Async Sub bbtnitm_ConcatFiles_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitm_ConcatFiles.ItemClick
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
ENVELOPE_TEMP_DOCUMENT = String.Empty
Dim openform As New frmOrderFiles
openform.oTitle = Resources.Envelope.Dialog_Concat_PDF
openform.ShowDialog()
If Not IsNothing(openform.fileResults) Then
Dim oIDX As Integer = -1
For Each oFile As String In openform.fileResults
oIDX += 1
Next
Dim oSuccess As Boolean = False
Dim oErr As Boolean = False
Dim arPDF As GdPicturePDF() = New GdPicturePDF(oIDX) {}
oIDX = 0
For Each oFile As String In openform.fileResults
arPDF(oIDX) = New GdPicturePDF()
If arPDF(oIDX).LoadFromFile(oFile) <> GdPictureStatus.OK Then
MsgBox($"PDF Status of file {oFile} is not OK. Please check PDF-conformity!", MsgBoxStyle.Critical)
oErr = True
Exit For
End If
oIDX += 1
Next
If oErr = False Then
Dim dstPDF As GdPicturePDF = arPDF(0).MergeDocuments(arPDF)
Dim oStatus As GdPictureStatus = arPDF(0).GetStat()
If oStatus = GdPictureStatus.OK Then
Dim oTempFolder = MyTempFiles._TempPath
If Not Directory.Exists(oTempFolder) Then
Directory.CreateDirectory(oTempFolder)
End If
Dim oTempFilename = String.Concat(oTempFolder, "\", $"MergedDoc.pdf")
'wenn es das MergedDocument schon gibt dann löschen
If System.IO.File.Exists(oTempFilename) Then
System.IO.File.Delete(oTempFilename)
End If
If dstPDF.SaveToFile(oTempFilename) = GdPictureStatus.OK Then
ENVELOPE_TEMP_DOCUMENT = oTempFilename
dstPDF.CloseDocument()
oSuccess = True
Else
MsgBox("Unexpected format-error within the final document!", MsgBoxStyle.Critical)
oSuccess = False
End If
Else
MessageBox.Show("The MergeDocuments() method has failed with the status: " + oStatus.ToString(), "Example: MergeDocuments")
oSuccess = False
End If
dstPDF.Dispose()
oIDX = 0
For Each oFile As String In openform.fileResults
arPDF(oIDX).CloseDocument()
oIDX += 1
Next
If oSuccess = True And ENVELOPE_TEMP_DOCUMENT <> String.Empty Then
Await AddDocument(ENVELOPE_TEMP_DOCUMENT)
End If
End If
End If
Catch ex As Exception
Logger.Error(ex)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Sub
Private Sub frmEnvelopeEditor_DragEnter(sender As Object, e As DragEventArgs) Handles Me.DragEnter
ClearBsiItem()
' Prüfen, ob die Daten vom Typ Datei sind
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
' prüfen ob es schon eine Datei gibt
If Documents.Count > 0 Then
e.Effect = DragDropEffects.None
bsitm_info.Caption = Resources.Envelope.Only_one_file_is_allowed
bsitm_info.ItemAppearance.Normal.BackColor = Color.Red
bsitm_info.ItemAppearance.Normal.ForeColor = Color.Yellow
Else
' Effekt auf "Kopieren" setzen, um Drag-and-Drop zu ermöglichen
e.Effect = DragDropEffects.Copy
End If
Else
e.Effect = DragDropEffects.None
End If
End Sub
Sub ClearBsiItem()
bsitm_info.Caption = ""
bsitm_info.ItemAppearance.Normal.BackColor = Color.Transparent
bsitm_info.ItemAppearance.Normal.ForeColor = Color.Black
End Sub
Private Async Sub frmEnvelopeEditor_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
' Den Pfad der Datei(en) erhalten
Dim ofiles() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
' Beispiel: Ersten Dateipfad anzeigen
If ofiles IsNot Nothing AndAlso ofiles.Length > 0 Then
If Not ofiles(0).ToString.EndsWith("pdf") Then
bsitm_info.Caption = Resources.Envelope.Drop_only_one_file
bsitm_info.ItemAppearance.Normal.BackColor = Color.Red
bsitm_info.ItemAppearance.Normal.ForeColor = Color.Yellow
Else
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Await AddDocument(ofiles(0))
SplashScreenManager.CloseOverlayForm(oHandle)
' MessageBox.Show("Dateipfad: " & ofiles(0), "Datei abgelegt", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End If
End Sub
Private Sub GridDocuments_DoubleClick(sender As Object, e As EventArgs) Handles GridDocuments.DoubleClick
showdocument()
End Sub
Private Sub btnShowFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnShowFile.ItemClick
showdocument()
End Sub
Sub showdocument()
If Not IsNothing(Documents) Then
Process.Start(Documents.Item(0).Filepath)
End If
End Sub
End Class