You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

630 lines
20 KiB

Imports System.Data
Imports System.Data.SqlClient
Imports EDOKALib.Common
'''<summary>Diese klasse beinhaltet die Logik für die Mitarbeiter</summary>
Public Class Mitarbeiter
#Region "Members"
Private _mitarbeiterNr As Integer = 0
Private _vorname As String
Private _nachname As String
Private _kurzZeichen As String
Private _anrede As String
Private _tgNummer As String
Private _email As String
Private _fax As String
Private _telefon As String
Private _unterschriftText As String
Private _spracheNr As Integer
Private _fuerMandantNr As Integer 'arbeitet für diesen mandant
Private _showTipp As Boolean 'display tipp bim startup
Private _partnerNr As Integer
Private _mandantNr As Integer 'zugehörigkeit des mitarbeiter
Private _isAktiv As Boolean
Private _erstelltAm As DateTime
Private _mutiertAm As DateTime
Private _mutiererMitarbeiterNr As Integer
Private _isMailEmpfang As Boolean 'meldung via email
Private _isEdokaMessage As Boolean 'DANGER: feld in db heisst "EdokaMesasge"
Private _funktion As String
Private _isMailDirektVersenden As Boolean
Private _rang As String
Private _isMailDokumentRueckgang As Boolean
Private _klassifizierungNr As Integer
Private _isEdokaMail As Boolean 'meldung via edoka empfangen
Private _isJournalisierung As Boolean
Private _isGebMeldung As Boolean
Private _mail1 As String
Private _funktionsgruppen As BusinessFacade.Funktionsgruppe()
#End Region
#Region "Constructor"
'''<summary>Erstellt eine neue Instanz für einen neuen Mitarbeiter</summary>
Public Sub New()
Try
Catch ex As Exception
Throw ex
End Try
End Sub
'''<summary>Erstellt eine neue Instanz für einen bestehenden Mitarbeiter</summary>
'''<param name="mitarbeiterNr"></param>
Public Sub New(ByVal mitarbeiterNr As Integer)
Try
Dim ds As New DataSet()
DataAccess.Mitarbeiter.GetById(mitarbeiterNr, ds)
LoadData(ds)
Catch ex As Exception
Throw ex
End Try
End Sub
'''<summary>Erstellt eine neue Instanz für einen bestehenen Mitarbeiter</summary>
'''<param name="tgNummer"></param>
Public Sub New(ByVal tgNummer As String)
Try
Dim ds As New DataSet()
DataAccess.Mitarbeiter.GetByTgNummer(tgNummer, ds)
LoadData(ds)
Catch ex As Exception
Throw ex
End Try
End Sub
#End Region
#Region "Public methods"
'''<summary>Gibt eine Liste mit allen Mitarbeitern zurück</summary>
'''<param name="dsMitarbeiter">Das DataSet welches gefüllt werden soll</param>
Public Overloads Shared Sub GetListe(ByRef dsMitarbeiter As DataSet)
Try
DataAccess.Mitarbeiter.GetListe(0, 0, dsMitarbeiter)
Catch ex As Exception
Throw ex
End Try
End Sub
'''<summary>Gibt eine Liste mit allen Mitarbeitern zurück</summary>
'''<param name="teamNr">Nur Mitarbeiter von diesem Team</param>
'''<param name="dsMitarbeiter">Das DataSet welches gefüllt werden soll</param>
Public Overloads Shared Sub GetListeByTeamNr(ByVal teamNr As Integer, ByRef dsMitarbeiter As DataSet)
Try
DataAccess.Mitarbeiter.GetListe(teamNr, 0, dsMitarbeiter)
Catch ex As Exception
Throw ex
End Try
End Sub
'''<summary>Gibt eine Liste mit allen Mitarbeitern zurück</summary>
'''<param name="funktionsGruppeNr">Nur Mitarbeiter von dieser Funktionsgruppe</param>
'''<param name="dsMitarbeiter">Das DataSet welches gefüllt werden soll</param>
Public Overloads Shared Sub GetListeByFunktionsGruppeNr(ByVal funktionsGruppeNr As Integer, ByRef dsMitarbeiter As DataSet)
Try
DataAccess.Mitarbeiter.GetListe(0, funktionsGruppeNr, dsMitarbeiter)
Catch ex As Exception
Throw ex
End Try
End Sub
'''<summary>Erstellt ein neues Standard Profil für den angegebenen Mitarbeiter</summary>
'''<param name="mutiererMitarbeiterNr">Die datenbank Nummer des Mutierers (ID)</param>
Public Function CreateNewStandardProfil(ByVal mutiererMitarbeiterNr As Integer)
Try
DataAccess.Mitarbeiter.CreateNewStandardProfil(_mitarbeiterNr, mutiererMitarbeiterNr)
Catch ex As Exception
Throw ex
End Try
End Function
'''<summary>Speichert die Änderungen an einem Mitarbeiter</summary>
'''<param name="mutiererMitarbeiterNr"></param>
Public Function Save(ByVal mutiererMitarbeiterNr As Integer)
Try
Save(Nothing, Nothing, mutiererMitarbeiterNr)
Catch ex As Exception
Throw ex
End Try
End Function
'''<summary>Speichert die Änderungen an einem Mitarbeiter inklusive Funktionsgruppen- und Team-Zuordnungen</summary>
'''<param name="dsMaTeams"></param>
'''<param name="dsMaFunktionsGruppen"></param>
'''<param name="mutiererMitarbeiterNr"></param>
Public Function Save(ByVal dsMaTeams As DataSet, ByVal dsMaFunktionsGruppen As DataSet, ByVal mutiererMitarbeiterNr As Integer)
Try
'daten des mitarbeiters speichern
If _mitarbeiterNr <= 0 Then
'neuer mitarbeiter
_mitarbeiterNr = DataAccess.Mitarbeiter.Insert(_vorname, _nachname, _kurzZeichen, _anrede, _tgNummer, _
_email, _fax, _telefon, _unterschriftText, _spracheNr, _fuerMandantNr, _showTipp, _partnerNr, _mandantNr, _
_isAktiv, _isMailEmpfang, _isEdokaMessage, _funktion, _isMailDirektVersenden, _rang, _isMailDokumentRueckgang, _
_klassifizierungNr, _isEdokaMail, _isJournalisierung, _isGebMeldung, _mail1, mutiererMitarbeiterNr)
Else
'besthender mitarbeiter
DataAccess.Mitarbeiter.Update(_mitarbeiterNr, _vorname, _nachname, _kurzZeichen, _anrede, _tgNummer, _
_email, _fax, _telefon, _unterschriftText, _spracheNr, _fuerMandantNr, _showTipp, _partnerNr, _mandantNr, _
_isAktiv, _isMailEmpfang, _isEdokaMessage, _funktion, _isMailDirektVersenden, _rang, _isMailDokumentRueckgang, _
_klassifizierungNr, _isEdokaMail, _isJournalisierung, _isGebMeldung, _mail1, mutiererMitarbeiterNr)
End If
'je nach klassifizierung müssen min ein team, bzw funktionsgruppe ausgewählt werden
Dim klassifizierung As New klassifizierung(_klassifizierungNr)
'checks auf ds == null finden in GetRowCountAfterSave() statt
If klassifizierung.IsTeamZwingend Then
If Not GetRowCountAfterSave(dsMaTeams) > 0 Then
Throw New MitarbeiterException(String.Format(BusinessFacade.Meldungstext.GetInhaltById(310), klassifizierung.Bezeichnung))
Return 1
End If
Else
'wenn nicht zwingend darf keine zuordnung enthalten sein.
If GetRowCountAfterSave(dsMaTeams) > 0 Then
Throw New MitarbeiterException(String.Format(BusinessFacade.Meldungstext.GetInhaltById(317), klassifizierung.Bezeichnung))
Return 1
End If
End If
If klassifizierung.IsFunktionsgruppeZwingend Then
If Not GetRowCountAfterSave(dsMaFunktionsGruppen) > 0 Then
Throw New MitarbeiterException(String.Format(BusinessFacade.Meldungstext.GetInhaltById(311), klassifizierung.Bezeichnung))
Return 1
End If
Else
'wenn nicht zwingend darf keine zuordnung enthalten sein.
If GetRowCountAfterSave(dsMaFunktionsGruppen) > 0 Then
Throw New MitarbeiterException(String.Format(BusinessFacade.Meldungstext.GetInhaltById(318), klassifizierung.Bezeichnung))
Return 1
End If
End If
If Not IsNothing(dsMaTeams) Then
'zuordnungen speichern
Dim row As DataRow
Dim teamMitarbeiter As BusinessFacade.TeamMitarbeiter
For Each row In dsMaTeams.Tables(0).Rows
Select Case row.RowState
Case DataRowState.Added
'neue zuordnung erstellen
teamMitarbeiter = New BusinessFacade.TeamMitarbeiter()
teamMitarbeiter.Anteil = Tools.CToInt32(row("anteil"))
teamMitarbeiter.IsAktiv = row("aktiv")
teamMitarbeiter.MandantNr = row("mandantnr")
teamMitarbeiter.MitarbeiterNr = _mitarbeiterNr
teamMitarbeiter.Team = New BusinessFacade.Team(Tools.CToInt32(row("teamnr")))
teamMitarbeiter.Save(mutiererMitarbeiterNr)
Case DataRowState.Modified
'bestehende speichern
teamMitarbeiter = New BusinessFacade.TeamMitarbeiter(Tools.CToInt32(row("teammitarbeiternr")))
teamMitarbeiter.Anteil = row("anteil")
teamMitarbeiter.IsAktiv = row("aktiv")
teamMitarbeiter.Save(mutiererMitarbeiterNr)
'Case DataRowState.Deleted
'bestehende löschen -> kb310370
'BusinessFacade.TeamMitarbeiter.Delete(Tools.CToInt32(row("teammitarbeiternr", DataRowVersion.Original)), mutiererMitarbeiterNr)
End Select
Next
End If
If Not IsNothing(dsMaFunktionsGruppen) Then
'zuordnungen speichern
Dim row As DataRow
For Each row In dsMaFunktionsGruppen.Tables(0).Rows
Select Case row.RowState
Case DataRowState.Added
If Common.Tools.CToBool(row("aktiv")) Then
'neue verbindung herstellen
BusinessFacade.MitarbeiterFunktionsgruppe.Insert(Tools.CToInt32(row("mitarbeiternr")), Tools.CToInt32(row("funktionsgruppenr")), mutiererMitarbeiterNr)
End If
Case DataRowState.Modified
BusinessFacade.MitarbeiterFunktionsgruppe.SetAktiv(Tools.CToInt32(row("mitarbeiter_funktionsgruppenr")), Common.Tools.CToBool(row("aktiv")), mutiererMitarbeiterNr)
'Case DataRowState.Deleted
'bestehende löschen -> kb310370
'BusinessFacade.MitarbeiterFunktionsgruppe.Delete(Tools.CToInt32(row("mitarbeiter_funktionsgruppenr", DataRowVersion.Original)), mutiererMitarbeiterNr)
End Select
Next
End If
'members refreshen
Dim dsRefresh As New DataSet()
DataAccess.Mitarbeiter.GetById(_mitarbeiterNr, dsRefresh)
LoadData(dsRefresh)
Catch ex As Exception
Throw ex
End Try
End Function
#End Region
#Region "Private methods"
'''<summary>lädt die daten in die klassen member</summary>
'''<param name="ds"></param>
Private Sub LoadData(ByVal ds As DataSet)
Try
If Not Common.Tools.ValidateDS(ds) Then
Return
End If
_mitarbeiterNr = Tools.CToInt32(ds.Tables(0).Rows(0)("mitarbeiterNr"))
_vorname = Tools.CToString(ds.Tables(0).Rows(0)("vorname"))
_nachname = Tools.CToString(ds.Tables(0).Rows(0)("name"))
_kurzZeichen = Tools.CToString(ds.Tables(0).Rows(0)("kurzzeichen"))
_anrede = Tools.CToString(ds.Tables(0).Rows(0)("anrede"))
_tgNummer = Tools.CToString(ds.Tables(0).Rows(0)("tgnummer"))
_email = Tools.CToString(ds.Tables(0).Rows(0)("email"))
_fax = Tools.CToString(ds.Tables(0).Rows(0)("fax"))
_telefon = Tools.CToString(ds.Tables(0).Rows(0)("telefon"))
_unterschriftText = Tools.CToString(ds.Tables(0).Rows(0)("unterschrift_text"))
_spracheNr = Tools.CToInt32(ds.Tables(0).Rows(0)("sprache"))
_fuerMandantNr = Tools.CToInt32(ds.Tables(0).Rows(0)("fuermandant"))
_showTipp = Common.Tools.CToBool(ds.Tables(0).Rows(0)("showtip"))
_partnerNr = Tools.CToInt32(ds.Tables(0).Rows(0)("partnernr"))
_mandantNr = Tools.CToInt32(ds.Tables(0).Rows(0)("mandantnr"))
_isAktiv = Common.Tools.CToBool(ds.Tables(0).Rows(0)("aktiv"))
_erstelltAm = Tools.CToDateTime(ds.Tables(0).Rows(0)("erstellt_am"))
_mutiertAm = Tools.CToDateTime(ds.Tables(0).Rows(0)("mutiert_am"))
_mutiererMitarbeiterNr = Tools.CToInt32(ds.Tables(0).Rows(0)("mutierer"))
_isMailEmpfang = Common.Tools.CToBool(ds.Tables(0).Rows(0)("mailempfang"))
_isEdokaMessage = Common.Tools.CToBool(ds.Tables(0).Rows(0)("EdokaMesasge"))
_funktion = Tools.CToString(ds.Tables(0).Rows(0)("funktion"))
_isMailDirektVersenden = Common.Tools.CToBool(ds.Tables(0).Rows(0)("MailDirektVersenden"))
_rang = Tools.CToString(ds.Tables(0).Rows(0)("Rang"))
_isMailDokumentRueckgang = Common.Tools.CToBool(ds.Tables(0).Rows(0)("MailDokumentrueckgang"))
_klassifizierungNr = Tools.CToInt32(ds.Tables(0).Rows(0)("klassifizierung"))
_isEdokaMail = Common.Tools.CToBool(ds.Tables(0).Rows(0)("edoka_mail"))
_isJournalisierung = Common.Tools.CToBool(ds.Tables(0).Rows(0)("journalisierung"))
_isGebMeldung = Common.Tools.CToBool(ds.Tables(0).Rows(0)("GebMeldung"))
_mail1 = Tools.CToString(ds.Tables(0).Rows(0)("Mail_1"))
Catch ex As Exception
TKBLib.Errorhandling.TraceHelper.Msg("EDOKALib.BF.Parameter.LoadData", ex.Message + " " + ex.StackTrace, TraceLevel.Error)
Throw ex
End Try
End Sub
'''<summary>Gibt die Anzahl der Rows zurück, welche sie nach dem Speichern haben werden</summary>
'''<param name="ds2Validate">Das zu überprüfende DataSet</param>
'''<returns>Der neue rowCount</returns>
Private Function GetRowCountAfterSave(ByVal ds2Validate As DataSet) As Integer
Try
'validierung nicht möglich, es werden keines row mehr da sein nach dem speichern
If IsNothing(ds2Validate) Then
Return 0
End If
Dim row As DataRow
Dim newRowCount As Integer = 0
'neue rows zählen
For Each row In ds2Validate.Tables(0).Rows
If Convert.ToBoolean(row("aktiv")) And _
(row.RowState = DataRowState.Added Or _
row.RowState = DataRowState.Modified Or _
row.RowState = DataRowState.Unchanged) Then
newRowCount = newRowCount + 1
End If
Next
Return newRowCount
Catch ex As Exception
Throw ex
End Try
End Function
#End Region
#Region "Properties"
Public ReadOnly Property MitarbeiterNr() As Integer
Get
Return _mitarbeiterNr
End Get
End Property
Public Property Vorname() As String
Get
Return _vorname
End Get
Set(ByVal Value As String)
_vorname = Value
End Set
End Property
Public Property Nachname() As String
Get
Return _nachname
End Get
Set(ByVal Value As String)
_nachname = Value
End Set
End Property
Public ReadOnly Property AnzeigeName() As String
Get
Return _nachname + " " + _vorname
End Get
End Property
Public Property KurzZeichen() As String
Get
Return _kurzZeichen
End Get
Set(ByVal Value As String)
_kurzZeichen = Value
End Set
End Property
Public Property Anrede() As String
Get
Return _anrede
End Get
Set(ByVal Value As String)
_anrede = Value
End Set
End Property
Public Property TGNummer() As String
Get
Return _tgNummer
End Get
Set(ByVal Value As String)
_tgNummer = Value
End Set
End Property
Public Property EMail() As String
Get
Return _email
End Get
Set(ByVal Value As String)
_email = Value
End Set
End Property
Public Property Fax() As String
Get
Return _fax
End Get
Set(ByVal Value As String)
_fax = Value
End Set
End Property
Public Property Telefon() As String
Get
Return _telefon
End Get
Set(ByVal Value As String)
_telefon = Value
End Set
End Property
Public Property UnterschritText() As String
Get
Return _unterschriftText
End Get
Set(ByVal Value As String)
_unterschriftText = Value
End Set
End Property
Public Property SpracheNr() As Integer
Get
Return _spracheNr
End Get
Set(ByVal Value As Integer)
_spracheNr = Value
End Set
End Property
Public Property FuerMandantNr() As Integer
Get
Return _fuerMandantNr
End Get
Set(ByVal Value As Integer)
_fuerMandantNr = Value
End Set
End Property
Public Property ShowTipp() As Boolean
Get
Return _showTipp
End Get
Set(ByVal Value As Boolean)
_showTipp = Value
End Set
End Property
Public Property PartnerNr() As Integer
Get
Return _partnerNr
End Get
Set(ByVal Value As Integer)
_partnerNr = Value
End Set
End Property
Public Property MandantNr() As Integer
Get
Return _mandantNr
End Get
Set(ByVal Value As Integer)
_mandantNr = Value
End Set
End Property
Public Property IsAktiv() As Boolean
Get
Return _isAktiv
End Get
Set(ByVal Value As Boolean)
_isAktiv = Value
End Set
End Property
Public ReadOnly Property ErstelltAm() As DateTime
Get
Return _erstelltAm
End Get
End Property
Public ReadOnly Property MutiertAm() As DateTime
Get
Return _mutiertAm
End Get
End Property
Public ReadOnly Property MutiererMitarbeiterNr() As Integer
Get
Return _mutiererMitarbeiterNr
End Get
End Property
Public Property IsMailEmpfang() As Boolean
Get
Return _isMailEmpfang
End Get
Set(ByVal Value As Boolean)
_isMailEmpfang = Value
End Set
End Property
Public Property IsEdokaMessage() As Boolean
Get
Return _isEdokaMessage
End Get
Set(ByVal Value As Boolean)
_isEdokaMessage = Value
End Set
End Property
Public Property Funktion() As String
Get
Return _funktion
End Get
Set(ByVal Value As String)
_funktion = Value
End Set
End Property
Public Property IsMailDirektVersenden() As Boolean
Get
Return _isMailDirektVersenden
End Get
Set(ByVal Value As Boolean)
_isMailDirektVersenden = Value
End Set
End Property
Public Property Rang() As String
Get
Return _rang
End Get
Set(ByVal Value As String)
_rang = Value
End Set
End Property
Public Property IsMailDokumentRueckgang() As Boolean
Get
Return _isMailDokumentRueckgang
End Get
Set(ByVal Value As Boolean)
_isMailDokumentRueckgang = Value
End Set
End Property
Public Property KlassifizierungNr() As Integer
Get
Return _klassifizierungNr
End Get
Set(ByVal Value As Integer)
_klassifizierungNr = Value
End Set
End Property
Public Property IsEdokaMail() As Boolean
Get
Return _isEdokaMail
End Get
Set(ByVal Value As Boolean)
_isEdokaMail = Value
End Set
End Property
Public Property Journalisierung() As Boolean
Get
Return _isJournalisierung
End Get
Set(ByVal Value As Boolean)
_isJournalisierung = Value
End Set
End Property
Public Property IsGebMeldung() As Boolean
Get
Return _isGebMeldung
End Get
Set(ByVal Value As Boolean)
_isGebMeldung = Value
End Set
End Property
Public Property Mail1() As String
Get
Return _mail1
End Get
Set(ByVal Value As String)
_mail1 = Value
End Set
End Property
#End Region
End Class
'''<summary>Diese Klasse behandelt eine Mitarbeiter spezifische Ausnahme</summary>
Public Class MitarbeiterException
Inherits Exception
Dim _message As String
Public Sub New(ByVal message As String)
_message = message
End Sub
Public Overrides ReadOnly Property Message() As String
Get
Return _message
End Get
End Property
End Class