Imports wrd = Microsoft.Office.Interop.Word
Imports mediatheek.Data
Imports Mediatheek.dataacces

Public Class clsFichegenerator

    Private Shared ReadOnly Property Template() As String
        Get
            Return System.Configuration.ConfigurationSettings.AppSettings.Item("WordRapportTemplate")
        End Get
    End Property


#Region "Opvullen Album Word Document"
    'template met bookmarks
    Private Shared Sub TemplateGenererenMeerdereAlbums(ByVal oDoc As wrd.Document, ByVal oWord As wrd.Application, ByVal iAantal As Integer, ByVal bLocatie As Boolean, ByVal bOntleenhistoriek As Boolean)

        With oWord.Selection
            .HomeKey(Unit:=wrd.WdUnits.wdStory)
            .EndKey(Unit:=wrd.WdUnits.wdStory, Extend:=wrd.WdMovementType.wdExtend)
            .Cut()
            .WholeStory()
            .Delete(Unit:=wrd.WdUnits.wdCharacter, Count:=1)
            .EndKey(Unit:=wrd.WdUnits.wdStory)
        End With

        Dim i As Integer = 1
        For i = 1 To iAantal

            Dim oAlbum As clsAlbum

            oWord.Selection.PasteAndFormat(wrd.WdRecoveryType.wdPasteDefault)

            oWord.Selection.MoveUp(Unit:=wrd.WdUnits.wdLine, Count:=7)

            oWord.Selection.MoveRight(Unit:=wrd.WdUnits.wdCell)
            With oDoc.Bookmarks
                .Add(Range:=oWord.Selection.Range, Name:="Albumnaam" & i)
                .DefaultSorting = wrd.WdBookmarkSortBy.wdSortByName
                .ShowHidden = False
            End With
            oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)
            With oDoc.Bookmarks
                .Add(Range:=oWord.Selection.Range, Name:="Groep" & i)
                .DefaultSorting = wrd.WdBookmarkSortBy.wdSortByName
                .ShowHidden = False
            End With
            oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)
            With oDoc.Bookmarks
                .Add(Range:=oWord.Selection.Range, Name:="Genre" & i)
                .DefaultSorting = wrd.WdBookmarkSortBy.wdSortByName
                .ShowHidden = False
            End With
            oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)
            With oDoc.Bookmarks
                .Add(Range:=oWord.Selection.Range, Name:="Productiehuis" & i)
                .DefaultSorting = wrd.WdBookmarkSortBy.wdSortByName
                .ShowHidden = False
            End With
            oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)
            With oDoc.Bookmarks
                .Add(Range:=oWord.Selection.Range, Name:="Productiejaar" & i)
                .DefaultSorting = wrd.WdBookmarkSortBy.wdSortByName
                .ShowHidden = False
            End With

            'indien gevraagd locatie template toevoegen (extra row bij albuminfotabel)

            If bLocatie Then


                Dim tbl As wrd.Table = oDoc.Tables.Item(i)
                tbl.Rows.Add()

                With oDoc.Tables.Item(i)

                    With .Cell(Row:=6, Column:=1).Range
                        .Text = "Locatie"
                    End With

                    With .Cell(row:=6, Column:=2).Range()

                        oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)

                        With .Bookmarks
                            .Add(Range:=oWord.Selection.Range, Name:="Locatie" & i)
                            .DefaultSorting = wrd.WdBookmarkSortBy.wdSortByName
                            .ShowHidden = False
                        End With

                    End With

                End With


            End If


            oWord.Selection.EndKey(Unit:=wrd.WdUnits.wdStory)


        Next
    End Sub
    'opvullen template
    Private Shared Sub AlbumInfoGenereren(ByVal oDoc As wrd.Document, ByVal oAlbum As clsAlbum, ByVal oWord As wrd.Application, ByVal iId As Integer, ByVal bLoc As Boolean, ByVal bOntleenhist As Boolean)
        With oWord.Selection
            'albuminfo invullen
            .GoTo(What:=wrd.WdGoToItem.wdGoToBookmark, Name:="Albumnaam" & iId)
            .TypeText(Text:=oAlbum.AlbumNaam)
            .GoTo(What:=wrd.WdGoToItem.wdGoToBookmark, Name:="Groep" & iId)
            .TypeText(Text:=getGroepNaam(oAlbum))
            .GoTo(What:=wrd.WdGoToItem.wdGoToBookmark, Name:="Genre" & iId)
            .TypeText(Text:=getGenreNaam(oAlbum))
            .GoTo(What:=wrd.WdGoToItem.wdGoToBookmark, Name:="Productiehuis" & iId)
            .TypeText(Text:=oAlbum.Productiehuis)
            .GoTo(What:=wrd.WdGoToItem.wdGoToBookmark, Name:="Productiejaar" & iId)
            .TypeText(Text:=oAlbum.ProductieJaar)

            'indien gevraagd albumlocatie invullen
            If bLoc Then
                .GoTo(What:=wrd.WdGoToItem.wdGoToBookmark, Name:="Locatie" & iId)
                .TypeText(Text:=getAlbumLocatie(oAlbum))
            End If

            'indien gevraagd album ontleenhistoriek toevoegen
            If bOntleenhist Then

                .MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)
                .TypeParagraph()
                .HomeKey(Unit:=wrd.WdUnits.wdLine, Extend:=wrd.WdMovementType.wdExtend)
                If .Font.Underline = wrd.WdUnderline.wdUnderlineNone Then
                    .Font.Underline = wrd.WdUnderline.wdUnderlineSingle
                Else
                    .Font.Underline = wrd.WdUnderline.wdUnderlineNone
                End If

                .Font.Size = 13
                .TypeText(Text:="Ontleenhistoriek van " & oAlbum.AlbumNaam)
                .Font.Name = "Arial"
                .Font.Size = 12
                .Font.Underline = wrd.WdUnderline.wdUnderlineNone

                If clsOntleningDA.GetOntleningByAlbumId(oAlbum.AlbumID).Count = 0 Then
                    .TypeParagraph()

                    .TypeParagraph()
                    .TypeText(Text:="Dit album is nog niet ontleend")
                Else
                    For Each oOntlening As clsOntlening In clsOntleningDA.GetOntleningByAlbumId(oAlbum.AlbumID)


                        .TypeParagraph()

                        .TypeParagraph()
                        Dim oOntlener As clsOntlener
                        oOntlener = clsOntlenerDA.GetOntlenersById(oOntlening.OntlenerId).Item(0)
                        .TypeText(Text:="Ontlener: " & oOntlener.VoorNaam & " " & oOntlener.AchterNaam & " ID:" & oOntlener.Id)
                        .TypeParagraph()
                        .TypeText(Text:="Datum ontlening:" & oOntlening.DatumUit)
                        .TypeParagraph()
                        .TypeText(Text:="Datum teruggave:" & oOntlening.DatumIn)


                    Next
                End If

            End If
            'einde if ontleenhist

        End With

    End Sub


    Public Shared Function getGroepNaam(ByVal oAlbum As clsAlbum) As String
        Dim arlGroepen As ArrayList
        'cboGroepNaam.Items.Clear()
        arlGroepen = clsGroepDA.GetGroepen

        Dim sGroepNaam As String

        Dim arlUitvoeringen As ArrayList
        arlUitvoeringen = clsUitvoeringDA.GetUitvoeringenByAlbumID(oAlbum.AlbumID)

        Dim oUitvoering As clsUitvoering
        If arlUitvoeringen.Count() = 0 Then
            'dit mag normaal nooit voorkomen
            sGroepNaam = "John Doe"
            Debug.WriteLine("Het volgende album heeft geen uitvoeringen:" & oAlbum.ToString)
        Else
            oUitvoering = arlUitvoeringen.Item(0)
            Dim oGroep As clsGroep
            oGroep = clsGroepDA.GetGroepByID(oUitvoering.GroepID).Item(0)
            sGroepNaam = oGroep.GroepNaam
        End If

        Return sGroepNaam
    End Function

    Private Shared Function getGenreNaam(ByVal oAlbum As clsAlbum) As String
        Dim sGenreNaam As String
        Dim oGenre As clsGenre
        oGenre = clsGenreDA.GetGenreByID(oAlbum.GenreID).Item(0)
        sGenreNaam = oGenre.GenreNaam
        Return sGenreNaam
    End Function

    Private Shared Function getAlbumLocatie(ByVal oAlbum As clsAlbum) As String
        Dim sLocatie As String
        Dim oLocatie As clsLocatie
        oLocatie = clsLocatieDA.GetLocatieByID(oAlbum.LocatieID).Item(0)
        sLocatie = oLocatie.ToString
        Return sLocatie
    End Function

#End Region

#Region "Opvullen Album Word Document"
   
    Private Shared Sub LocatieInfoGenereren(ByVal oDoc As wrd.Document, ByVal oLocatie As clsLocatie, ByVal oWord As wrd.Application, ByVal bAlbumsPerLocatie As Boolean)
        With oWord.Selection

            'indien gevraagd album ontleenhistoriek toevoegen
            .MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)
            .TypeParagraph()
            .HomeKey(Unit:=wrd.WdUnits.wdLine, Extend:=wrd.WdMovementType.wdExtend)
            If .Font.Underline = wrd.WdUnderline.wdUnderlineNone Then
                .Font.Underline = wrd.WdUnderline.wdUnderlineSingle
            Else
                .Font.Underline = wrd.WdUnderline.wdUnderlineNone
            End If

            .Font.Size = 14
            .TypeText(Text:="Locatie ID:" & oLocatie.Id)
            .Font.Name = "Arial"
            .Font.Size = 12
            .Font.Underline = wrd.WdUnderline.wdUnderlineNone
            .TypeParagraph()
            .TypeParagraph()
            'rek
            .Font.Underline = wrd.WdUnderline.wdUnderlineSingle
            .TypeText(Text:="Rek:")
            .Font.Underline = wrd.WdUnderline.wdUnderlineNone
            .TypeText(Text:="    " & oLocatie.Rek)
            .TypeParagraph()
            'vak
            .Font.Underline = wrd.WdUnderline.wdUnderlineSingle
            .TypeText(Text:="Vak:")
            .Font.Underline = wrd.WdUnderline.wdUnderlineNone
            .TypeText(Text:="    " & oLocatie.Vak)
            .TypeParagraph()
            'schap
            .Font.Underline = wrd.WdUnderline.wdUnderlineSingle
            .TypeText(Text:="Schap:")
            .Font.Underline = wrd.WdUnderline.wdUnderlineNone
            .TypeText(Text:="    " & oLocatie.Schap)
            .TypeParagraph()
            'soort
            .Font.Underline = wrd.WdUnderline.wdUnderlineSingle
            .TypeText(Text:="Soort:")
            .Font.Underline = wrd.WdUnderline.wdUnderlineNone
            .TypeText(Text:="    " & oLocatie.Soort)
            .TypeParagraph()
            'aantal
            .Font.Underline = wrd.WdUnderline.wdUnderlineSingle
            .TypeText(Text:="Aantal albums:")
            .Font.Underline = wrd.WdUnderline.wdUnderlineNone
            .TypeText(Text:="    " & clsAlbumDA.GetAlbumsByLocatieID(oLocatie.Id).Count() & " / " & oLocatie.MaxAantal)
            .TypeParagraph()

            .TypeParagraph()
            If bAlbumsPerLocatie Then
                .Font.Size = 11

                If clsAlbumDA.GetAlbumsByLocatieID(oLocatie.Id).Count = 0 Then
                    .TypeText(Text:="Geen albums op deze locatie")
                    .TypeParagraph()
                    .TypeParagraph()
                Else

                    For Each oAlbum As clsAlbum In clsAlbumDA.GetAlbumsByLocatieID(oLocatie.Id)
                        .TypeText(Text:=getGroepNaam(oAlbum) & " - " & oAlbum.AlbumNaam & " ( " & oAlbum.Productiehuis & " " & oAlbum.ProductieJaar & " )")
                        .TypeParagraph()
                        .TypeParagraph()
                    Next

                End If

                

            End If


        End With

    End Sub



#End Region

#Region "AlbumRapport"

    'overloading subroutine (hier een album als data meegegeven)
    Public Shared Sub AlbumRapport(ByVal oAlbum As clsAlbum, ByVal bLocatie As Boolean, ByVal bOntleenhistoriek As Boolean, ByVal sfd As SaveFileDialog)
        '1. Informatie van het album ophalen en bij correcte bookmarks plaatsen
        Try
            Dim oWord As New wrd.Application
            Dim oRapport As New clsFichegenerator
            oWord.Visible = True
            Dim oDoc As wrd.Document
            oDoc = oWord.Documents.Add(Application.StartupPath & "\albumwordtemplate.dot")
            sfd.FileName = oAlbum.AlbumNaam & oAlbum.ProductieJaar & ".doc"
            'sfd.ShowDialog()

            'Lege tabel
            TemplateGenererenMeerdereAlbums(oDoc, oWord, 1, bLocatie, bOntleenhistoriek)
            'Informatie van het album ophalen en bij correcte bookmarks plaatsen
            AlbumInfoGenereren(oDoc, oAlbum, oWord, 1, bLocatie, bOntleenhistoriek)


            oWord.Selection.WholeStory()
            oWord.Selection.Font.Name = "Arial"
            oWord.Selection.Font.Bold = "0"
            oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)

            Dim sFilename, sFinal, sS As String
            
            If bLocatie And bOntleenhistoriek Then
                sS = "locatie_ontleenhistoriek_"
            Else
                If bLocatie Then
                    sS = "locatie_"
                End If
                If bOntleenhistoriek Then
                    sS = "ontleenhistoriek_"
                End If
            End If

            sFilename = sfd.FileName
            sFinal = sS & sFilename

            oDoc.SaveAs(sFinal)



        Catch ex As Exception
            MsgBox(ex.ToString, MsgBoxStyle.OKOnly, "Fout bij maken album rapport van " & oAlbum.AlbumNaam & " " & oAlbum.ProductieJaar)
         
        End Try





    End Sub
    'overloading subroutine (hier een array van albums als data meegegeven)
    Public Shared Sub AlbumRapport(ByVal arlAlbums As ArrayList, ByVal bLocatie As Boolean, ByVal bOntleenhistoriek As Boolean, ByVal sfd As SaveFileDialog)
        Try
            Dim oWord As New wrd.Application
            Dim oRapport As New clsFichegenerator
            Dim iId As Integer = 1
            Dim iAantal As Integer = arlAlbums.Count
            oWord.Visible = True
            Dim oDoc As wrd.Document
            oDoc = oWord.Documents.Add(Application.StartupPath & "\albumwordtemplate.dot")
            sfd.FileName = "albumlijst" & ".doc"
            'sfd.ShowDialog()

            TemplateGenererenMeerdereAlbums(oDoc, oWord, iAantal, bLocatie, bOntleenhistoriek)
            For Each oAlbum As clsAlbum In arlAlbums
                '1. Informatie van het album ophalen en bij correcte bookmarks plaatsen
                AlbumInfoGenereren(oDoc, oAlbum, oWord, iId, bLocatie, bOntleenhistoriek)


                iId += 1
            Next


            oWord.Selection.WholeStory()
            oWord.Selection.Font.Name = "Arial"
            oWord.Selection.Font.Bold = "0"

            oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)


            Dim sFilename, sFinal, sS As String

            If bLocatie And bOntleenhistoriek Then
                sS = "locatie_ontleenhistoriek_"
            Else
                If bLocatie Then
                    sS = "locatie_"
                End If
                If bOntleenhistoriek Then
                    sS = "ontleenhistoriek_"
                End If
            End If

            sFilename = sfd.FileName
            sFinal = sS & sFilename


            oDoc.SaveAs(sFinal)

        Catch ex As Exception
            MsgBox(ex.ToString, MsgBoxStyle.OKOnly, "Fout bij maken van albumrapport voor alle albums")
        End Try

    End Sub


#End Region

#Region "LocatieRapport"

    'overloading subroutine (hier een album als data meegegeven)
    Public Shared Sub LocatieRapport(ByVal oLocatie As clsLocatie, ByVal bAlbumsPerLocatie As Boolean)
        '1. Informatie van het album ophalen en bij correcte bookmarks plaatsen
        Dim oWord As New wrd.Application
        Dim oRapport As New clsFichegenerator
        oWord.Visible = True
        Dim oDoc As wrd.Document
        oDoc = oWord.Documents.Add(Application.StartupPath & "\locatiewordtemplate.dot")

        'Lege tabel
        ' TemplateGenererenMeerdereAlbums(oDoc, oWord, 1, bLocatie, bOntleenhistoriek)
        'Informatie van het album ophalen en bij correcte bookmarks plaatsen
        LocatieInfoGenereren(oDoc, oLocatie, oWord, bAlbumsPerLocatie)


        oWord.Selection.WholeStory()
        oWord.Selection.Font.Name = "Arial"
        oWord.Selection.Font.Bold = "0"
        oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)

        'oDoc.Close()

        'oWord.Quit(saveChanges:=wrd.WdSaveOptions.wdPromptToSaveChanges)
        If bAlbumsPerLocatie Then
            oDoc.SaveAs("Locatie_ID_" & oLocatie.Id & "_albums")
        Else
            oDoc.SaveAs("Locatie_ID_" & oLocatie.Id)
        End If

    End Sub
    'overloading subroutine (hier een array van albums als data meegegeven)
    Public Shared Sub LocatieRapport(ByVal arlLocaties As ArrayList, ByVal bAlbumsPerLocatie As Boolean)
        Dim oWord As New wrd.Application
        Dim oRapport As New clsFichegenerator
        Dim iId As Integer = 1
        Dim iAantal As Integer = arlLocaties.Count
        oWord.Visible = True
        Dim oDoc As wrd.Document
        oDoc = oWord.Documents.Add(Application.StartupPath & "\locatiewordtemplate.dot")

        'TemplateGenererenMeerdereAlbums(oDoc, oWord, iAantal, bLocatie, bOntleenhistoriek)
        For Each oLocatie As clsLocatie In arlLocaties
            '1. Informatie van het album ophalen en bij correcte bookmarks plaatsen
            LocatieInfoGenereren(oDoc, oLocatie, oWord, bAlbumsPerLocatie)
        Next


        oWord.Selection.WholeStory()
        oWord.Selection.Font.Name = "Arial"
        oWord.Selection.Font.Bold = "0"

        oWord.Selection.MoveDown(Unit:=wrd.WdUnits.wdLine, Count:=1)


        ' oDoc.SaveAs("Albumlijst")
        'oDoc.Close()
        If bAlbumsPerLocatie Then
            oDoc.SaveAs("alle_locaties_met_albums")
        Else
            oDoc.SaveAs("alle_locaties")
        End If

        ' oWord.Quit(saveChanges:=wrd.WdSaveOptions.wdPromptToSaveChanges)
    End Sub



#End Region



End Class
