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

Public Class ControlledSubstancesTestConsent
    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()
                signatureConsent.DefaultSigUrl = "/_assets/DefaultAppSig.aspx?appId=" & Master.app.id
                signaturePolicyReceived.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 TestingConsentSignatureId, TestingPolicyReceivedSignatureId
            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()

            signatureConsent.SignatureId = Logic.Conversion.ToNullableInteger(dReader("TestingConsentSignatureId"))
            signaturePolicyReceived.SignatureId = Logic.Conversion.ToNullableInteger(dReader("TestingPolicyReceivedSignatureId"))

        End Using

    End Sub

    Private Sub _SaveForm()

        Dim cmdSave = "
            UPDATE web_DriverApplication
            SET TestingConsentSignatureId=@sigConsent, TestingPolicyReceivedSignatureId=@sigReceived
            WHERE id=@appId"

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

            Dim sigConsent = signatureConsent.SignatureId
            Dim sigReceived = signaturePolicyReceived.SignatureId

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

            cmd.ExecuteNonQuery()

        End Using

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

    End Sub

    Private Sub _SaveDocument()
        Dim ReportDataSet As New dsAppControlledSubstancesTestConsent
        Dim ReportTableAdapter As New dsAppControlledSubstancesTestConsentTableAdapters.ControlledSubstancesTestConsentTableAdapter

        Using Report As New crptAppControlledSubstancesTestConsent
            ReportTableAdapter.Fill(ReportDataSet.ControlledSubstancesTestConsent, Master.app.id)
            Report.SetDataSource(ReportDataSet)

            Dim PictureBox As PictureObject = Report.ReportDefinition.ReportObjects("picSig1")
            Dim LinkedFormula As FormulaFieldDefinition = Report.DataDefinition.FormulaFields("pathSig1")
            Dim SignatureId = Logic.Conversion.ToInteger(ReportDataSet.ControlledSubstancesTestConsent.Rows(0)("TestingConsentSignatureId"))
            Reporting.SetPictureToSignature(PictureBox, LinkedFormula, SignatureId, 5600)

            PictureBox = Report.ReportDefinition.ReportObjects("picSig2")
            LinkedFormula = Report.DataDefinition.FormulaFields("pathSig2")
            SignatureId =  Logic.Conversion.ToInteger(ReportDataSet.ControlledSubstancesTestConsent.Rows(0)("TestingPolicyReceivedSignatureId"))
            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