Jonathan Jenne 489c7879da 06-12-23
2023-12-06 10:13:54 +01:00

401 lines
15 KiB
VB.net

Imports System.ComponentModel
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.Common
Imports EnvelopeGenerator.Common.Constants
Imports EnvelopeGenerator.Common.My
Partial Public Class frmEnvelopeEditor
Public Property Envelope As Envelope
Public Property Documents As New BindingList(Of EnvelopeDocument)
Public Property Receivers As New BindingList(Of EnvelopeReceiver)
Private Controller As EnvelopeEditorController
Private Logger As Logger
Public Property State As State
Public Sub New()
InitializeComponent()
End Sub
Private Sub btnNewFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnNewFile.ItemClick
' 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
Dim oDocument = Controller.CreateDocument(OpenFileDialog1.FileName)
If oDocument IsNot Nothing Then
Documents.Add(oDocument)
Else
MsgBox(Resources.Envelope.Document_Could_Not_Be_Saved, MsgBoxStyle.Critical, Text)
End If
End If
RibbonPageGroupAddSignature_Enabled()
End Sub
Private Sub frmEditor_Load(sender As Object, e As EventArgs) Handles Me.Load
Logger = State.LogConfig.GetLogger()
If Envelope Is Nothing Then
Controller = New EnvelopeEditorController(State)
' Get additional data
Dim oDataForm As New frmEnvelopeMainData() With {.State = State, .NewEnvelopeMode = True}
Dim oResult As DialogResult = oDataForm.ShowDialog()
If oResult = DialogResult.OK Then
Controller.Envelope.Title = oDataForm.EnvelopeTitle
Controller.Envelope.ContractType = oDataForm.EnvelopeContractType
Controller.Envelope.Subject += " " + oDataForm.EnvelopeTitle
Else
Controller.DeleteEnvelopeFromDisk(Controller.Envelope)
Me.Close()
End If
Else
Controller = New EnvelopeEditorController(State, Envelope)
Documents = New BindingList(Of EnvelopeDocument)(Controller.Envelope.Documents)
Receivers = New BindingList(Of EnvelopeReceiver)(Controller.Envelope.Receivers)
For Each docItem As EnvelopeDocument In Documents
If docItem.Thumbnail Is Nothing Then
docItem.Thumbnail = Controller.CreateThumbnail(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
txtSubject.EditValue = Controller.Envelope.Subject
GridDocuments.DataSource = Documents
GridReceivers.DataSource = Receivers
SetFormTitle(Controller.Envelope.Title)
End Sub
Private Sub SetFormReadonly()
RibbonPageGroup1.Enabled = False
RibbonPageGroup2.Enabled = False
RibbonPageGroup3.Enabled = False
RibbonPageGroupReceiver.Enabled = False
btnEditFields.Enabled = False
txtSubject.Properties.ReadOnly = True
txtMessage.Properties.ReadOnly = True
ViewReceivers.OptionsBehavior.ReadOnly = True
ViewDocuments.OptionsBehavior.ReadOnly = True
End Sub
Private Sub btnDeleteFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteFile.ItemClick
If ViewDocuments.GetSelectedRows().Count > 0 Then
Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument)
If Controller.DeleteDocument(oDocument) Then
Documents.Remove(oDocument)
End If
End If
End Sub
Private Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick
Try
SaveEnvelopeWithOutValidation()
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 oGDPictureKey As String = "21182889975216572111813147150675976632"
Dim oForm As New frmFieldEditor() With {
.Document = Controller.Envelope.Documents.
Where(Function(d) d.Filename = oDocument.Filename).
SingleOrDefault(),
.GDPictureKey = oGDPictureKey,
.Receivers = Controller.Envelope.Receivers.ToList,
.State = State
}
oForm.ShowDialog()
End If
Catch ex As Exception
Logger.Error(ex)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
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 oSubject = GetEditValueFromTextControl(txtSubject)
Dim oMessage = GetEditValueFromTextControl(txtMessage)
Dim oErrors As New List(Of String)
If String.IsNullOrWhiteSpace(oSubject) Then
oErrors.Add(Resources.Envelope.Missing_Subject)
End If
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 Helpers.IsValidEmailAddress(Receiver.Email) = 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 oSubject = GetEditValueFromTextControl(txtSubject)
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.Subject = oSubject
oEnvelope.Message = oMessage
oEnvelope.Documents = Documents.ToList
'oEnvelope.Receivers = Receivers.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 EnvelopeReceiver = 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 = "Es gibt für diesen Empfänger bereits Elemente. Wollen Sie den Empfänger trotzdem löschen?"
End If
If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then
Exit Sub
End If
If Controller.DeleteReceiver(oReceiver) 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,
.EnvelopeTitle = Controller.Envelope.Title,
.EnvelopeContractType = Controller.Envelope.ContractType,
.NewEnvelopeMode = False
}
If oForm.ShowDialog() = DialogResult.OK Then
Controller.Envelope.Title = oForm.EnvelopeTitle
Controller.Envelope.ContractType = oForm.EnvelopeContractType
End If
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 EnvelopeReceiver = ViewReceivers.GetRow(e.RowHandle)
Dim oRowCount = ViewReceivers.RowCount
Dim oColorType = DirectCast(oRowCount, ColorType)
oReceiver.ColorType = oColorType
End Sub
Private Sub frmEnvelopeEditor_Shown(sender As Object, e As EventArgs) Handles Me.Shown
RibbonPageGroupAddSignature_Enabled()
RibbonPageGroupReceiver_Enable()
End Sub
Private Sub RibbonPageGroupAddSignature_Enabled()
If ViewDocuments.GetSelectedRows().Count = 0 Then
RibbonPageGroupAddSignature.Enabled = False
Else
RibbonPageGroupAddSignature.Enabled = True
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 SetFormTitle(pTitle As String)
Dim oFormTitle As String = State.DbConfig.ExternalProgramName + " - Umschlag-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
End Class