Imports System.Data.SqlClient
Imports CrystalDecisions.CrystalReports.Engine
Imports ReportingClass

Public Class CheckDrivingRecord1
    Inherits System.Web.UI.Page

    Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Try

            If Not Page.IsPostBack Then
                _LoadForm()
                signature.DefaultSigUrl = "/_assets/DefaultAppSig.aspx?appId=" & Master.app.id
            Else
                _SaveForm()
                _SaveDocument()
            End If

        Catch ex As Exception
            Dim errorId = Logic.Error.Log(ex)
            Response.Redirect("/Error.aspx?id=" & errorId)
        End Try
    End Sub

    Private Sub _LoadForm()

        Dim cmdGet = "
            SELECT CheckDrivingRecordSignatureId
            FROM web_DriverApplication
            WHERE id=@appId"

        Using connection As New SqlConnection(Logic.Database.connectionString)
            connection.Open()

            Dim cmd As New SqlCommand(cmdGet, connection)
            cmd.Parameters.AddWithValue("appId", Master.app.id)

            Dim dReader = cmd.ExecuteReader()
            dReader.Read()

            signature.SignatureId = Logic.Conversion.ToNullableInteger(dReader("CheckDrivingRecordSignatureId"))

        End Using

    End Sub

    Private Sub _SaveForm()

        Dim cmdSave = "
            UPDATE web_DriverApplication
            SET CheckDrivingRecordSignatureId=@sigId
            WHERE id=@appId"

        Using connection As New SqlConnection(Logic.Database.connectionString)
            connection.Open()

            Dim sigId = signature.SignatureId

            Dim cmd As New SqlCommand(cmdSave, connection)
            With cmd.Parameters
                .AddWithValue("appId", Master.app.id)
                .AddWithValue("sigId", If(sigId.HasValue, sigId.Value, DBNull.Value))
            End With

            cmd.ExecuteNonQuery()

        End Using

        Page.Validate()
        If Page.IsValid Then
            Master.EnableNextPage()
        End If

    End Sub

    Private Sub _SaveDocument()
        Dim ReportDataSet As New dsAppCheckDrivingRecord
        Dim ReportTableAdapter As New dsAppCheckDrivingRecordTableAdapters.AppCheckDrivingRecordDataTableTableAdapter

        Using Report As New crptAppCheckDrivingRecord
            ReportTableAdapter.FillByTargetId(ReportDataSet.AppCheckDrivingRecordDataTable, Master.transfer.id, Master.app.id)
            Report.SetDataSource(ReportDataSet)

            Dim PictureBox As PictureObject = Report.ReportDefinition.ReportObjects("picSig")
            Dim LinkedFormula As FormulaFieldDefinition = Report.DataDefinition.FormulaFields("pathSig")
            Dim SignatureId = Logic.Conversion.ToInteger(ReportDataSet.AppCheckDrivingRecordDataTable.Rows(0)("CheckDrivingRecordSignatureId"))
            Reporting.SetPictureToSignature(PictureBox, LinkedFormula, SignatureId, 5600)

            Dim rawData = Reporting.StreamToByteArray(Report)

            Using connection As New SqlConnection(Logic.Database.connectionString)
                connection.Open()

                Dim cmdSave = "
                    UPDATE web_DriverApplicationPdf SET pageTitle=@pageTitle, pdfData=@pdfData, pdfDataSize=@pdfDataSize
                    WHERE appId=@appId AND pageFileName=@pageFileName;
                    IF @@ROWCOUNT = 0 BEGIN
                        INSERT INTO web_DriverApplicationPdf (appId, pageTitle, pageFileName, pdfData, pdfDataSize)
                        VALUES (@appId, @pageTitle, @pageFileName, @pdfData, @pdfDataSize);
                    END"
                Dim cmd As New SqlCommand(cmdSave, connection)
                cmd.Parameters.AddWithValue("appId", Master.app.id)
                cmd.Parameters.AddWithValue("pageTitle", Master.CurrentTitle)
                cmd.Parameters.AddWithValue("pageFileName", Master.CurrentPage)
                cmd.Parameters.AddWithValue("pdfData", rawData)
                cmd.Parameters.AddWithValue("pdfDataSize", rawData.Length)
                cmd.ExecuteNonQuery()

            End Using

        End Using
    End Sub

End Class