diff --git a/UID/Dienstplan/frmDienstplanVariabel.Designer.vb b/UID/Dienstplan/frmDienstplanVariabel.Designer.vb index 7260805..4527c76 100644 --- a/UID/Dienstplan/frmDienstplanVariabel.Designer.vb +++ b/UID/Dienstplan/frmDienstplanVariabel.Designer.vb @@ -57,6 +57,7 @@ Partial Class frmDienstplanVariabel Me.pnl = New System.Windows.Forms.Panel() Me.Panel6 = New System.Windows.Forms.Panel() Me.Panel7 = New System.Windows.Forms.Panel() + Me.Button20 = New System.Windows.Forms.Button() Me.Button18 = New System.Windows.Forms.Button() Me.cboQSSpaet = New System.Windows.Forms.ComboBox() Me.Label23 = New System.Windows.Forms.Label() @@ -458,6 +459,7 @@ Partial Class frmDienstplanVariabel ' 'Panel7 ' + Me.Panel7.Controls.Add(Me.Button20) Me.Panel7.Controls.Add(Me.Button18) Me.Panel7.Controls.Add(Me.cboQSSpaet) Me.Panel7.Controls.Add(Me.Label23) @@ -468,6 +470,16 @@ Partial Class frmDienstplanVariabel Me.Panel7.Size = New System.Drawing.Size(352, 231) Me.Panel7.TabIndex = 109 ' + 'Button20 + ' + Me.Button20.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button20.Location = New System.Drawing.Point(0, 208) + Me.Button20.Name = "Button20" + Me.Button20.Size = New System.Drawing.Size(133, 23) + Me.Button20.TabIndex = 84 + Me.Button20.Text = "FZ aus UK aktual." + Me.Button20.UseVisualStyleBackColor = True + ' 'Button18 ' Me.Button18.FlatStyle = System.Windows.Forms.FlatStyle.Flat @@ -1624,12 +1636,12 @@ Partial Class frmDienstplanVariabel ' Me.ContextMenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SchichtLöcshenToolStripMenuItem}) Me.ContextMenuStrip1.Name = "ContextMenuStrip1" - Me.ContextMenuStrip1.Size = New System.Drawing.Size(181, 48) + Me.ContextMenuStrip1.Size = New System.Drawing.Size(158, 26) ' 'SchichtLöcshenToolStripMenuItem ' Me.SchichtLöcshenToolStripMenuItem.Name = "SchichtLöcshenToolStripMenuItem" - Me.SchichtLöcshenToolStripMenuItem.Size = New System.Drawing.Size(180, 22) + Me.SchichtLöcshenToolStripMenuItem.Size = New System.Drawing.Size(157, 22) Me.SchichtLöcshenToolStripMenuItem.Text = "Schicht löschen" ' 'Panel4 @@ -1916,4 +1928,5 @@ Partial Class frmDienstplanVariabel Friend WithEvents Label1 As Label Friend WithEvents txtSchichtstd As TextBox Friend WithEvents SchichtLöcshenToolStripMenuItem As ToolStripMenuItem + Friend WithEvents Button20 As Button End Class diff --git a/UID/Dienstplan/frmDienstplanVariabel.vb b/UID/Dienstplan/frmDienstplanVariabel.vb index f15858e..71b54ef 100644 --- a/UID/Dienstplan/frmDienstplanVariabel.vb +++ b/UID/Dienstplan/frmDienstplanVariabel.vb @@ -1129,10 +1129,11 @@ Public Class frmDienstplanVariabel If dgv.Parent.Parent.GetType() Is GetType(usrCntlDienstWoche) Then o = dgv.Parent.Parent Dim d As Date = CDate(getValuesDienstDGV(o, dgv.Name, "datum")) - - If o.SCHICHT.dedet_Splitschicht = True Then - MsgBox("Keine Änderungen bei Splitschichten erlaubt!") - Exit Sub + If o IsNot Nothing Then + If o.SCHICHT.dedet_Splitschicht = True Then + MsgBox("Keine Änderungen bei Splitschichten erlaubt!") + Exit Sub + End If End If For Each s In BEN_SCHICHTEN @@ -1264,7 +1265,7 @@ Public Class frmDienstplanVariabel initALL() End If End Sub - Public Sub initALL(Optional MAID As Integer = -1) + Public Sub initALL(Optional MAID As Integer = -1, Optional onlyFehlzeiten As Boolean = False) Me.Cursor = Cursors.WaitCursor ' Me.Enabled = False @@ -1276,104 +1277,114 @@ Public Class frmDienstplanVariabel Dim cDienstAbwesendheiten As List(Of cDienstAbwesendheiten) = SQLDienst.getDienstAbwesendheiten(montag, sonntag, niederlassung) Dim ma As List(Of cDienstMA) = Nothing + If MAID > 0 Then - If Not SQLDienst.delDstEintraegeMaId(montag, sonntag, niederlassung, MAID) Then Me.Cursor = Cursors.Default : Exit Sub 'Alle löschen + + If Not SQLDienst.delDstEintraegeMaId(montag, sonntag, niederlassung, MAID, onlyFehlzeiten) Then Me.Cursor = Cursors.Default : Exit Sub 'Alles Löschen/Nur Fehlzeiten löschen ma = SQLDienst.getAllDienstMA(niederlassung, montag, " AND dstma_id = " & MAID) + Else - If Not SQLDienst.delDstEintraege(montag, sonntag, niederlassung) Then Me.Cursor = Cursors.Default : Exit Sub 'Alle löschen + + If Not SQLDienst.delDstEintraege(montag, sonntag, niederlassung, onlyFehlzeiten) Then Me.Cursor = Cursors.Default : Exit Sub 'Alles Löschen/Nur Fehlzeiten löschen ma = SQLDienst.getAllDienstMA(niederlassung, montag) + End If Dim datum As Date = montag For i = 1 To 7 Dim FT As New VERAG_PROG_ALLGEMEIN.cFeiertage(datum.Year) 'Evtl Jahressprung, darum neu definieren For Each m In ma + Dim eintrag As New cDienstEintrag eintrag.dstetr_dstmaId = m.dstma_id eintrag.dstetr_datum = datum + Dim existingEntry = SQLDienst.getCountEntrys(eintrag.dstetr_dstmaId, eintrag.dstetr_datum, eintrag.dstetr_datum) - If Not FT.isFeiertag(datum, IIf(m.dstma_land <> "", m.dstma_land, SETTINGS.dpset_land)) Then - If m.dstma_muster Then - ' MsgBox("HIER") - Dim tz As List(Of cDienstTeilzeit) = SQLDienst.getAllDienstTeilzeit(m.dstma_id) - eintrag.dstetr_art = getFromTeilzeit(m.dstma_4wo, "abt", tz, datum, SCHICHT) - If eintrag.dstetr_art = "" Then - eintrag.dstetr_art = "FREI" - Else - ' MsgBox(getFromTeilzeit("von", tz, datum, SCHICHT) & " _ " & getFromTeilzeit("bis", tz, datum, SCHICHT)) - eintrag.dstetr_von = getFromTeilzeit(m.dstma_4wo, "von", tz, datum, SCHICHT) - eintrag.dstetr_bis = getFromTeilzeit(m.dstma_4wo, "bis", tz, datum, SCHICHT) - eintrag.dstetr_pause = getFromTeilzeit(m.dstma_4wo, "pause", tz, datum, SCHICHT) - ' eintrag.dstetr_pause = getDefaultTimeBySchicht(eintrag.dstetr_art, "pause", week(datum.DayOfWeek)) - eintrag.dstetr_grund = "" - eintrag.dstetr_info = getFromTeilzeit(m.dstma_4wo, "info", tz, datum, SCHICHT) - 'MsgBox(eintrag.dstetr_art) + If Not onlyFehlzeiten Or onlyFehlzeiten AndAlso existingEntry = 0 Then + + If Not FT.isFeiertag(datum, IIf(m.dstma_land <> "", m.dstma_land, SETTINGS.dpset_land)) Then + If m.dstma_muster Then + ' MsgBox("HIER") + + Dim tz As List(Of cDienstTeilzeit) = SQLDienst.getAllDienstTeilzeit(m.dstma_id) eintrag.dstetr_art = getFromTeilzeit(m.dstma_4wo, "abt", tz, datum, SCHICHT) - End If - - Else - If m.dstma_arbvh = "VZ" Then - - If week(datum.DayOfWeek) = "SA" Or week(datum.DayOfWeek) = "SO" Then + If eintrag.dstetr_art = "" Then eintrag.dstetr_art = "FREI" Else - eintrag.dstetr_art = getSchichtArt(m.dstma_abteilung, m.dstma_stammSchicht, datum) - eintrag.dstetr_hauptsplitschicht = getBooleanHauptsplitschicht(m.dstma_stammSchicht) - 'MsgBox(getSchichtArt(m.dstma_abteilung, m.dstma_stammSchicht, datum)) - 'Abwesenheiten prüfen: - ' For Each d In cDienstAbwesendheiten - 'If d.dstna_mitId = eintrag.dstetr_dstmaId AndAlso d.dstna_datum_von <= datum And d.dstna_datum_bis >= datum Then - ' eintrag.dstetr_art = d.dstna_grund - 'End If - ' Next + ' MsgBox(getFromTeilzeit("von", tz, datum, SCHICHT) & " _ " & getFromTeilzeit("bis", tz, datum, SCHICHT)) + eintrag.dstetr_von = getFromTeilzeit(m.dstma_4wo, "von", tz, datum, SCHICHT) + eintrag.dstetr_bis = getFromTeilzeit(m.dstma_4wo, "bis", tz, datum, SCHICHT) + eintrag.dstetr_pause = getFromTeilzeit(m.dstma_4wo, "pause", tz, datum, SCHICHT) + ' eintrag.dstetr_pause = getDefaultTimeBySchicht(eintrag.dstetr_art, "pause", week(datum.DayOfWeek)) + eintrag.dstetr_grund = "" + eintrag.dstetr_info = getFromTeilzeit(m.dstma_4wo, "info", tz, datum, SCHICHT) + 'MsgBox(eintrag.dstetr_art) + eintrag.dstetr_art = getFromTeilzeit(m.dstma_4wo, "abt", tz, datum, SCHICHT) End If - eintrag.dstetr_von = getDefaultTimeBySchicht(eintrag.dstetr_art, "von", week(datum.DayOfWeek)) - eintrag.dstetr_bis = getDefaultTimeBySchicht(eintrag.dstetr_art, "bis", week(datum.DayOfWeek)) - eintrag.dstetr_pause = getDefaultTimeBySchicht(eintrag.dstetr_art, "pause", week(datum.DayOfWeek)) - eintrag.dstetr_grund = "" - eintrag.dstetr_info = "" + Else + If m.dstma_arbvh = "VZ" Then + + If week(datum.DayOfWeek) = "SA" Or week(datum.DayOfWeek) = "SO" Then + eintrag.dstetr_art = "FREI" + Else + eintrag.dstetr_art = getSchichtArt(m.dstma_abteilung, m.dstma_stammSchicht, datum) + eintrag.dstetr_hauptsplitschicht = getBooleanHauptsplitschicht(m.dstma_stammSchicht) + 'MsgBox(getSchichtArt(m.dstma_abteilung, m.dstma_stammSchicht, datum)) + 'Abwesenheiten prüfen: + ' For Each d In cDienstAbwesendheiten + 'If d.dstna_mitId = eintrag.dstetr_dstmaId AndAlso d.dstna_datum_von <= datum And d.dstna_datum_bis >= datum Then + ' eintrag.dstetr_art = d.dstna_grund + 'End If + ' Next + End If + + eintrag.dstetr_von = getDefaultTimeBySchicht(eintrag.dstetr_art, "von", week(datum.DayOfWeek)) + eintrag.dstetr_bis = getDefaultTimeBySchicht(eintrag.dstetr_art, "bis", week(datum.DayOfWeek)) + eintrag.dstetr_pause = getDefaultTimeBySchicht(eintrag.dstetr_art, "pause", week(datum.DayOfWeek)) + eintrag.dstetr_grund = "" + eintrag.dstetr_info = "" - If False Then + If False Then - If m.dstma_kuerzel = "AKPINAR" Then + If m.dstma_kuerzel = "AKPINAR" Then - If Not week(datum.DayOfWeek) = "SA" And Not week(datum.DayOfWeek) = "SO" Then - 'MsgBox("Hallo") - ' eintrag.dstetr_von = "08:00" - ' eintrag.dstetr_bis = "19:00" - eintrag.dstetr_info = " 8-14 14:30-19" + If Not week(datum.DayOfWeek) = "SA" And Not week(datum.DayOfWeek) = "SO" Then + 'MsgBox("Hallo") + ' eintrag.dstetr_von = "08:00" + ' eintrag.dstetr_bis = "19:00" + eintrag.dstetr_info = " 8-14 14:30-19" + End If End If End If + + + ' SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) + Else 'TEILZEIT + eintrag.dstetr_art = "FREI" + eintrag.dstetr_von = "00:00" + eintrag.dstetr_bis = "00:00" + eintrag.dstetr_pause = "0" + eintrag.dstetr_grund = "" + eintrag.dstetr_info = "" + ' SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) + End If - - - ' SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) - Else 'TEILZEIT - eintrag.dstetr_art = "FREI" - eintrag.dstetr_von = "00:00" - eintrag.dstetr_bis = "00:00" - eintrag.dstetr_pause = "0" - eintrag.dstetr_grund = "" - eintrag.dstetr_info = "" - ' SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) - End If + Else 'FEIERTAG + eintrag.dstetr_art = "FREI" + eintrag.dstetr_von = "00:00" + eintrag.dstetr_bis = "00:00" + eintrag.dstetr_pause = "0" + eintrag.dstetr_grund = "" + eintrag.dstetr_info = "" + ' SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) + End If - Else 'FEIERTAG - eintrag.dstetr_art = "FREI" - eintrag.dstetr_von = "00:00" - eintrag.dstetr_bis = "00:00" - eintrag.dstetr_pause = "0" - eintrag.dstetr_grund = "" - eintrag.dstetr_info = "" - ' SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) - End If - 'Abwesenheiten prüfen: For Each d In cDienstAbwesendheiten If d.dstna_mitId = eintrag.dstetr_dstmaId AndAlso d.dstna_datum_von <= datum And d.dstna_datum_bis >= datum Then @@ -1386,10 +1397,24 @@ Public Class frmDienstplanVariabel eintrag.dstetr_von = getDefaultTimeBySchicht(grund, "von", week(datum.DayOfWeek).ToUpper) eintrag.dstetr_bis = getDefaultTimeBySchicht(grund, "bis", week(datum.DayOfWeek).ToUpper) eintrag.dstetr_pause = getDefaultTimeBySchicht(grund, "pause", week(datum.DayOfWeek).ToUpper) + End If Next - SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) + If onlyFehlzeiten Then + 'MsgBox("MA-ID: " & eintrag.dstetr_dstmaId & " " & "existingEntry: " & existingEntry & " Art: " & eintrag.dstetr_art & " DATUM: " & eintrag.dstetr_datum) + If existingEntry = 1 AndAlso (eintrag.dstetr_art = "URL" Or eintrag.dstetr_art = "KS" Or eintrag.dstetr_art = "DR" Or eintrag.dstetr_art = "BS") Or existingEntry = 0 Then + SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung,, False) + Else + + End If + Else + 'SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung,, False) + SQLDienst.updateInsertByDienstEintrag(eintrag, niederlassung) + + End If + + Next datum = datum.AddDays(1) @@ -2100,14 +2125,13 @@ Public Class frmDienstplanVariabel MsgBox("Keine Splitschichten erlaubt!") Exit Sub End If - If o.SCHICHT.dedet_Hauptsplitschicht = False Then - MsgBox("In Schicht " & o.schicht_name & " sind keine Splitschichten erlaubt!") Exit Sub End If + Dim ids As New List(Of Integer) Dim arr As DataGridViewSelectedCellCollection = dgv_tmp.SelectedCells For Each c As DataGridViewCell In arr @@ -2456,7 +2480,7 @@ Public Class frmDienstplanVariabel If frmUrlKW.RESULT <> "" Then ' MsgBox(markId) - initALL(markId) + initALL(markId, True) End If @@ -2690,7 +2714,7 @@ Public Class frmDienstplanVariabel End If Else - MsgBox("Kein Mitarbeiter auswewählt!") + MsgBox("Kein Mitarbeiter ausgewählt!") End If End Sub @@ -2918,4 +2942,12 @@ Public Class frmDienstplanVariabel End Function + Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click + If Panel6.Controls.Count > 0 Then + Dim u As usrcntlDienstplanStunden = DirectCast(Panel6.Controls(0), usrcntlDienstplanStunden) + If markId > 0 Then + initALL(markId, True) + End If + End If + End Sub End Class \ No newline at end of file diff --git a/UID/Dienstplan/frmUrlKW.vb b/UID/Dienstplan/frmUrlKW.vb index c85a83b..2cb50da 100644 --- a/UID/Dienstplan/frmUrlKW.vb +++ b/UID/Dienstplan/frmUrlKW.vb @@ -14,6 +14,9 @@ Public Class frmUrlKW Dim montag As Date Dim loaded = False Dim ftString As String = " FT" + Dim DPAlreadyInit As Boolean = False + + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Private Sub btnSpeichern_Click(sender As Object, e As EventArgs) Handles btnSpeichern.Click ' SQLDienst.delDienstNichtAnwesendKW_ByKwJahr(maId, KW, YEAR) @@ -62,6 +65,8 @@ Public Class frmUrlKW cboArt.SelectedIndex = 0 + + End Sub Private Sub frmUrlKW_Shown(sender As Object, e As EventArgs) Handles Me.Shown @@ -91,6 +96,8 @@ Public Class frmUrlKW lblSa.Text = montag.AddDays(5).ToString("dd.MM.") lblSo.Text = montag.AddDays(6).ToString("dd.MM.") + DPAlreadyInit = checkIfDPEntryIsExisting() + If (FT.isFeiertag(montag, cDienstSettings.getLand(niederlassung))) Then lblMo.TextAlign = ContentAlignment.TopLeft lblMo.Text &= ftString @@ -186,6 +193,16 @@ Public Class frmUrlKW End If End If + + + If DPAlreadyInit Then + lblUrlaubEintragen.Text = cboArt.SelectedItem.ToString & " eintragen - DP wurde bereits init." + lblUrlaubEintragen.ForeColor = Color.Red + Else + lblUrlaubEintragen.Text = cboArt.SelectedItem.ToString & " eintragen" + lblUrlaubEintragen.ForeColor = Color.Black + End If + End Sub Public Function CalendarWeek(ByVal nWeek As Integer, ByVal nYear As Integer) As Date @@ -247,4 +264,16 @@ Public Class frmUrlKW KW_ID = -1 init() End Sub + + Private Function checkIfDPEntryIsExisting() + + If SQL.DLookup("count([dstetr_id])", "[tblDienstplanEintraege]", " [dstetr_niederlassung]='" & niederlassung & "' and [dstetr_dstmaId]='" & maId & "' and [dstetr_datum] BETWEEN'" & montag.ToShortDateString & "' AND '" & montag.AddDays(6).ToShortDateString & "'", "ADMIN", 0) > 0 Then + Return True + Else + Return False + End If + + + + End Function End Class \ No newline at end of file diff --git a/UID/Dienstplan/frmUrlaubsplaner.vb b/UID/Dienstplan/frmUrlaubsplaner.vb index 9485214..454bec6 100644 --- a/UID/Dienstplan/frmUrlaubsplaner.vb +++ b/UID/Dienstplan/frmUrlaubsplaner.vb @@ -1,4 +1,5 @@ Imports System.Reflection +Imports ClosedXML.Excel Public Class frmUrlaubsplaner Dim DP As New cDienstplan @@ -334,7 +335,98 @@ Public Class frmUrlaubsplaner Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click - cProgramFunctions.genExcelFromDT_NEW(saveToDt()) + saveToDt() + + Try + + Dim dt1 As New DataTable() + Dim dt2 As New DataTable() + Dim halfOfYearWeek As Integer = 28 + + For Each column As DataGridViewColumn In dgvUrlaub.Columns + If column.ValueType Is Nothing Then + + If column.Index < 2 Then + dt1.Columns.Add(column.HeaderText, System.Type.GetType("System.String")) + dt2.Columns.Add(column.HeaderText, System.Type.GetType("System.String")) + ElseIf column.Index < halfOfYearWeek Then + dt1.Columns.Add(column.HeaderText, System.Type.GetType("System.String")) + + Else + dt2.Columns.Add(column.HeaderText, System.Type.GetType("System.String")) + End If + + Else + + If column.Index < 2 Then + dt1.Columns.Add(column.HeaderText, column.ValueType) + dt2.Columns.Add(column.HeaderText, column.ValueType) + ElseIf column.Index < halfOfYearWeek Then + dt1.Columns.Add(column.HeaderText, column.ValueType) + + Else + dt2.Columns.Add(column.HeaderText, column.ValueType) + End If + + + End If + + Next + + + For Each row As DataGridViewRow In dgvUrlaub.Rows + dt1.Rows.Add() + dt2.Rows.Add() + For Each cell As DataGridViewCell In row.Cells + If cell.Value Is Nothing Then + If cell.ColumnIndex < 2 Then + dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = "" + dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex) = "" + ElseIf cell.ColumnIndex < halfOfYearWeek Then + dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = "" + Else + dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex - (halfOfYearWeek - 2)) = "" + End If + + Else + + If cell.ColumnIndex < 2 Then + dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = cell.Value.ToString() + dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex) = cell.Value.ToString() + ElseIf cell.ColumnIndex < halfOfYearWeek Then + dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = cell.Value.ToString() + Else + dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex - (halfOfYearWeek - 2)) = cell.Value.ToString() + End If + End If + + Next + Next + + + Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SDL\tmp\" ' My.Computer.FileSystem.GetTempFileName + If Not My.Computer.FileSystem.DirectoryExists(sPath) Then + My.Computer.FileSystem.CreateDirectory(sPath) + End If + + Dim wb As New XLWorkbook + ' Dim dt As DataTable = (dgv.DataSource) + ' Dim dt As DataTable = TryCast(dgv., DataTable) + + wb.Worksheets.Add(dt1, "URLAUB JH 1") + wb.Worksheets.Add(dt2, "URLAUB JH 2") + + Dim filename As String = sPath & "Urlaubsplan_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx" + wb.SaveAs(filename) + + + Process.Start(filename) + + Catch ex As Exception + MsgBox(ex.Message & ex.StackTrace) + + End Try + End Sub @@ -342,6 +434,7 @@ Public Class frmUrlaubsplaner If loaded Then aktJahr = cboJahr._value : initDGV() : End Sub + Private Function saveToDt() As DataTable Dim dt As New DataTable() diff --git a/UID/cSqlDb.vb b/UID/cSqlDb.vb index 28ffcc6..acb299e 100644 --- a/UID/cSqlDb.vb +++ b/UID/cSqlDb.vb @@ -3550,9 +3550,13 @@ Public Class cDienstplan Return Nothing End Function - Public Function delDstEintraege(von, bis, niederlassung) As Boolean + Public Function delDstEintraege(von As Date, bis As Date, niederlassung As String, Optional onlyFehlzeiten As Boolean = False) As Boolean + + Dim sqlFehlzeiten As String = "" + If onlyFehlzeiten Then sqlFehlzeiten &= " AND ([dstetr_art] = 'URL' OR [dstetr_art] = 'DR' OR [dstetr_art] = 'BS') " + Dim sql = "DELETE FROM tblDienstplanEintraege " & - "WHERE dstetr_niederlassung= '" & niederlassung & "' AND dstetr_datum BETWEEN @von AND @bis " + "WHERE dstetr_niederlassung= '" & niederlassung & "' AND dstetr_datum BETWEEN @von AND @bis " & sqlFehlzeiten Using conn As SqlConnection = cSqlDb.GetNewOpenConnection() Using cmd As New SqlCommand(sql, conn) cmd.Parameters.AddWithValue("@von", von) @@ -3568,9 +3572,11 @@ Public Class cDienstplan Return False End Function - Public Function delDstEintraegeMaId(von, bis, niederlassung, dstetr_dstmaId) As Boolean + Public Function delDstEintraegeMaId(von As Date, bis As Date, niederlassung As String, dstetr_dstmaId As Integer, Optional onlyFehlzeiten As Boolean = False) As Boolean + Dim sqlFehlzeiten = "" + If onlyFehlzeiten Then sqlFehlzeiten &= " AND ([dstetr_art] = 'URL' OR [dstetr_art] = 'DR' OR [dstetr_art] = 'BS') " Dim sql = "DELETE FROM tblDienstplanEintraege " & - "WHERE dstetr_niederlassung= '" & niederlassung & "' AND dstetr_datum BETWEEN @von AND @bis AND dstetr_dstmaId=@dstetr_dstmaId" + "WHERE dstetr_niederlassung= '" & niederlassung & "' AND dstetr_datum BETWEEN @von AND @bis AND dstetr_dstmaId=@dstetr_dstmaId" & sqlFehlzeiten Using conn As SqlConnection = cSqlDb.GetNewOpenConnection() Using cmd As New SqlCommand(sql, conn) cmd.Parameters.AddWithValue("@von", von) @@ -3713,20 +3719,24 @@ Public Class cDienstplan End Function - Public Function updateInsertByDienstEintrag(ByVal daten As cDienstEintrag, niederlassung As String, Optional dstetr_id As Integer = -1) As Boolean + Public Function updateInsertByDienstEintrag(ByVal daten As cDienstEintrag, niederlassung As String, Optional dstetr_id As Integer = -1, Optional enableMultiEntriesPerArt As Boolean = True) As Boolean Dim SQLclause As String = "" + If enableMultiEntriesPerArt Then + SQLclause &= " AND dstetr_art=@dstetr_art" + End If + If dstetr_id > 0 Then SQLclause = " AND dstetr_id=@dstetr_id" End If Dim sql As String = " begin tran" & - " if exists (select * from tblDienstplanEintraege with (updlock,serializable) where dstetr_datum = @dstetr_datum AND dstetr_dstmaId=@dstetr_dstmaId AND dstetr_niederlassung=@dstetr_niederlassung AND dstetr_art=@dstetr_art" & SQLclause & ") " & + " if exists (select * from tblDienstplanEintraege with (updlock,serializable) where dstetr_datum = @dstetr_datum AND dstetr_dstmaId=@dstetr_dstmaId AND dstetr_niederlassung=@dstetr_niederlassung" & SQLclause & ") " & " begin " & " UPDATE tblDienstplanEintraege " & " SET dstetr_dstmaId=@dstetr_dstmaId, dstetr_art=@dstetr_art, dstetr_von=@dstetr_von, dstetr_bis=@dstetr_bis, dstetr_grund=@dstetr_grund, dstetr_info=@dstetr_info,dstetr_niederlassung=@dstetr_niederlassung,dstetr_pause=@dstetr_pause,dstetr_hauptsplitschicht=@dstetr_hauptsplitschicht,dstetr_splitschicht=@dstetr_splitschicht " & - " WHERE dstetr_datum = @dstetr_datum AND dstetr_dstmaId=@dstetr_dstmaId AND dstetr_niederlassung=@dstetr_niederlassung AND dstetr_art=@dstetr_art" & SQLclause & + " WHERE dstetr_datum = @dstetr_datum AND dstetr_dstmaId=@dstetr_dstmaId AND dstetr_niederlassung=@dstetr_niederlassung" & SQLclause & " End " & " Else " & " begin " & @@ -3763,6 +3773,7 @@ Public Class cDienstplan Return False End Function + Public Function getDienstEintragList(datum As Date, niederlassung As String) As List(Of cDienstEintrag) Dim sql As String = " SELECT * FROM tblDienstplanEintraege WHERE dstetr_datum = @dstetr_datum AND dstetr_niederlassung=@dstetr_niederlassung " Dim daten As List(Of cDienstEintrag) = Nothing