﻿Imports RGBC_Forecast.Branding

Public Class BrandReport

  Private Shared Brand As Branding

  'fr vars
  Private frFinYear As Integer
  Private frBrandID As Integer
  Private frPrincipalID As Integer
  Private frBrandManagerID As Integer
  Private frDailyReportGroupingID As Integer
  Private frRegion As String

  Private blnDecimals As Boolean
  Private UserID As Integer

  Private ReportName As String
  Private ReportLabel As String

  Public Sub New(ByVal ReportName As String, ByVal arg As Collection, ByVal UserID As Integer)

    Me.ReportName = ReportName
    Me.UserID = UserID

    'set filter variables. if not found assume default values
    Try
      Me.frFinYear = arg.Item("FinYear")
    Catch ex As Exception
    End Try

    Try
      Me.frBrandID = arg.Item("BrandID")
    Catch ex As Exception
    End Try

    Try
      Me.frPrincipalID = arg.Item("PrincipalID")
    Catch ex As Exception
    End Try

    Try
      Me.frBrandManagerID = arg.Item("BrandManagerID")
    Catch ex As Exception
    End Try

    Try
      Me.frDailyReportGroupingID = arg.Item("DailyReportGroupingID")
    Catch ex As Exception
    End Try

    Try
      Me.blnDecimals = arg.Item("blnDecimal")
    Catch ex As Exception
    End Try

    Try
      Me.frRegion = arg.Item("frRegion")
    Catch ex As Exception
    End Try

    Me.ExportFileLabel = "_" & Me.frFinYear & "_" & Me.frBrandID & "_" & Me.frPrincipalID & "_" & Me.frBrandManagerID & "_" & Me.frDailyReportGroupingID & "_" & Me.frRegion

  End Sub

  Public Property ExportFileLabel() As String
    Get
      Return Me.ReportName.Replace(" ", "") & Me.ReportLabel
    End Get
    Set(ByVal value As String)
      Me.ReportLabel = value
    End Set
  End Property

  '20110322 - v1.0.1 - added new RSM Report: Report shows actuals for past periods and QF Adjusted for future periods
  Public Function getRsmReport(ByRef phReport As PlaceHolder) As Object 'note: ByRef
    Dim ds As DataSet
    Dim dt As DataTable

    Dim WHERE As String

    'define report scope sql
    WHERE = ""

    If Me.frBrandID > 0 Then WHERE &= " AND BrandID = " & Me.frBrandID
    If Me.frBrandID = -1 Then WHERE &= " AND BrandID IN (SELECT refBrandID FROM mstUserBrand WHERE refUserID = " & Me.UserID & ")"

    If Me.frPrincipalID > 0 Then WHERE &= " AND refPrincipalID = " & Me.frPrincipalID

    If Me.frBrandManagerID > 0 Then WHERE &= " AND refBrandManagerID = " & Me.frBrandManagerID

    If Me.frDailyReportGroupingID > -1 Then WHERE &= " AND refGroupingDailyID = " & Me.frDailyReportGroupingID

    ds = db.doQuery("SELECT * FROM mstBrand WHERE blnActive = 1 " & WHERE & " ORDER BY strBrand")
    For Each drBrand In ds.Tables(0).Rows

      'new Branding
      Brand = New Branding(Me.frFinYear, drBrand!BrandID, Me.frRegion)

      'build Brandlabel
      Dim lblBrand As New WebControls.Label
      lblBrand.ID = "lblBrand_" & drBrand!BrandID
      lblBrand.CssClass = "labelBrand"
      lblBrand.Text = Brand.BrandLabel

      Dim lblBlank As New WebControls.Label
      lblBlank.ID = "lblBlank_" & drBrand!BrandID
      lblBlank.CssClass = "labelBrand"
      lblBlank.Text = "<BR/>"

      'build GridView
      Dim gvBrand As New GridView
      gvBrand.ID = "gvBrand_" & drBrand!BrandID
      gvBrand.CssClass = "gridviewDefault"
      gvBrand.CellPadding = 2
      gvBrand.Caption = "FY " & Brand.FinYear & " - ACTUALS & QF 9L"
      gvBrand.DataKeyNames = New String() {"Region"}

      'binding nin-jutsu
      dt = Brand.getReportRSM()
      gvBrand.DataSource = dt
      gvBrand.DataBind()
      gvBrand.Visible = True

      'colour gv
      Branding.colourDataRow(gvBrand, dt, Brand, Me.blnDecimals, False)

      'add items to container
      phReport.Controls.Add(lblBrand)
      phReport.Controls.Add(gvBrand)
      phReport.Controls.Add(lblBlank)

    Next

    If phReport.Controls.Count = 0 Then
      'if nothing
      Dim lblBlank As New WebControls.Label
      lblBlank.ID = "lblBlank"
      lblBlank.CssClass = "labelBrand boxError"
      lblBlank.Text = "Where are no Brands that match your filter criteria."
      phReport.Controls.Add(lblBlank)
    End If

    Return phReport
  End Function

  Public Function getForecastReport(ByRef phReport As PlaceHolder) As Object 'note: ByRef
    Dim ds As DataSet
    Dim dt As DataTable

    Dim WHERE As String

    'define report scope sql
    WHERE = ""

    If Me.frBrandID > 0 Then WHERE &= " AND BrandID = " & Me.frBrandID
    If Me.frBrandID = -1 Then WHERE &= " AND BrandID IN (SELECT refBrandID FROM mstUserBrand WHERE refUserID = " & Me.UserID & ")"

    If Me.frPrincipalID > 0 Then WHERE &= " AND refPrincipalID = " & Me.frPrincipalID

    If Me.frBrandManagerID > 0 Then WHERE &= " AND refBrandManagerID = " & Me.frBrandManagerID

    If Me.frDailyReportGroupingID > -1 Then WHERE &= " AND refGroupingDailyID = " & Me.frDailyReportGroupingID

    ds = db.doQuery("SELECT * FROM mstBrand WHERE 1=1 " & WHERE & " ORDER BY strBrand")
    For Each drBrand In ds.Tables(0).Rows

      'new Branding
      Brand = New Branding(Me.frFinYear, drBrand!BrandID) ', Me.frRegion) 'do not set frRegion for this report

      'build Brandlabel
      Dim lblBrand As New WebControls.Label
      lblBrand.ID = "lblBrand_" & drBrand!BrandID
      lblBrand.CssClass = "labelBrand"
      lblBrand.Text = Brand.BrandLabel

      Dim lblBlank As New WebControls.Label
      lblBlank.ID = "lblBlank_" & drBrand!BrandID
      lblBlank.CssClass = "labelBrand"
      lblBlank.Text = "<BR/>"

      'build GridView
      Dim gvBrand As New GridView
      gvBrand.ID = "gvBrand_" & drBrand!BrandID
      gvBrand.CssClass = "gridviewDefault"
      gvBrand.CellPadding = 2
      gvBrand.Caption = "STATS & FY " & Brand.FinYear & " - Adjusted Forecast 9L"
      gvBrand.DataKeyNames = New String() {"Region"}

      'binding nin-jutsu
      dt = Brand.getReportForcast()
      gvBrand.DataSource = dt
      gvBrand.DataBind()
      gvBrand.Visible = True

      'colour gv
      Branding.colourDataRow(gvBrand, dt, Brand, Me.blnDecimals, False)

      'add items to container
      phReport.Controls.Add(lblBrand)
      phReport.Controls.Add(gvBrand)
      phReport.Controls.Add(lblBlank)

    Next

    If phReport.Controls.Count = 0 Then
      'if nothing
      Dim lblBlank As New WebControls.Label
      lblBlank.ID = "lblBlank"
      lblBlank.CssClass = "labelBrand boxError"
      lblBlank.Text = "Where are no Brands that match your filter criteria."
      phReport.Controls.Add(lblBlank)
    End If

    Return phReport

  End Function

End Class
