'v1.4.6 - 20160920 - Added strCategory to product details + removed category from product list filter - maanie

Imports System.Web.Configuration
Imports Superbowl.sqlDB
Imports Superbowl.AuditEntity

Partial Public Class ProductDetails
   Inherits System.Web.UI.Page

   Private Shared strProdCode As String = "0"
   Private db As New sqlDB
   Private ds As DataSet
   Private dr, drIni As DataRow
   Private s As String
   Private Shared aeFormer, aeLatter As AuditEntity

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      lblMessage.Text = ""

      If Not Page.IsPostBack Then
         WebConfigurationManager.AppSettings("strPage") = "ProductDetails"
         If WebConfigurationManager.AppSettings("ULEVEL") <> 5 Then
            btnSave.Enabled = False
         End If
         Try
            strProdCode = Nz(Request.QueryString("PID"), "0")
         Catch ex As Exception
            strProdCode = "0"
         End Try

         If strProdCode <> "0" And strProdCode.Length > 0 Then
            'load controls				
            Try
               drIni = db.GetRow(db.sql_get_Product_6(strProdCode))    'breaks if no rows found
              
               sdsBrand.SelectParameters("BrandID").DefaultValue = Nz(drIni!refBrandID, 0)

               txtProdCode.Text = strProdCode
               txtProdCode.ReadOnly = True
               strProductDesc.Text = Nz(drIni!strProductDesc, "")
               strLongProdDesc.Text = Nz(drIni!strLongProdDesc, "")
               intPack.Text = Nz(drIni!intPack, "1")
               intSize.Text = Nz(drIni!intSize, "0")
               dblPrice.Text = Nz(drIni!dblPrice, "0")
               dblFlat.Text = Nz(drIni!dblFlat, "0")
               strCategory.Text = Nz(drIni!strCategory, "") 'v1.4.6 - 20160920 - Added strCategory to product details + removed category from product list filter - maanie
               strCategory2.Text = Nz(drIni!strCategory2, "")
               strBottleBarcode.Text = Nz(drIni!strBottleBarcode, "")
               strCaseBarcode.Text = Nz(drIni!strCaseBarcode, "")
               strGiftboxBarcode.Text = Nz(drIni!strGiftboxBarcode, "")
               'col 2
               strType.Text = Nz(drIni!strType, "")
               strType2.Text = Nz(drIni!strType2, "")
               intShortCode.Text = Nz(drIni!intShortCode, "0")
               strPriceSeg.Text = Nz(drIni!strPriceSeg, "")
               cwsicat.Text = Nz(drIni!cwsicat, "")

               strPrincipalMaterialRefNum.Text = Nz(drIni!strPrincipalMaterialRefNum, "")
               strPrincipalProdDesc.Text = Nz(drIni!strPrincipalProdDesc, "")
               strBrandVarietal.Text = Nz(drIni!strBrandVarietal, "")

               'Handle strTags - may not exist if database migration not run yet
               Try
                  hidTags.Value = Nz(drIni!strTags, "")
               Catch ex As Exception
                  hidTags.Value = ""
               End Try

               ddlBrand.SelectedValue = Nz(drIni!refBrandID, 0)
               'ddlDisplayOrder.SelectedValue = Nz(drIni!intDisplayOrder, 0)
               'cant set ddlDisplayOrder here cause its only loaded on the ddl's pre-render
               
               chkActive.Checked = drIni!blnActive
               chkDataTransfer.Checked = Nz(drIni!blnDataTransfer, False)
               chkCompProduct.Checked = Nz(drIni!blnCompProduct, False)
               chkQF.Checked = drIni!blnQF
               lblLastEdit.Text = Nz(drIni!strLastUser, "unknown") & " - " & SqlDate(Nz(drIni!dtStamp, ""), "d MMMM yyyy HH:mm")

            Catch ex As IndexOutOfRangeException                       'dr = ds.tables(0).rows(0) doesn't exist
               lblMessage.Text = "Product, <font color=black>" & strProdCode & "</font>, was not found!"
               drIni = Nothing
            End Try
         Else
            txtProdCode.ReadOnly = False
            hidTags.Value = ""
         End If

      End If
   End Sub

   Private Sub ProductDetails_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete

   End Sub

   Protected Sub ddlDisplayOrder_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles ddlDisplayOrder.PreRender
      If Not Page.IsPostBack Then
         Dim item As ListItem

         ddlDisplayOrder.Items.Clear()

         For i As Integer = 1 To 99
            item = New ListItem(i, i)
            ddlDisplayOrder.Items.Add(item)
         Next

         item = New ListItem("- Select -", 0)
         ddlDisplayOrder.Items.Insert(0, item)
         'has to set set ddl here, not in page_load()
         If strProdCode.Length > 0 And strProdCode <> "0" And Not IsNothing(drIni) Then
            ddlDisplayOrder.SelectedValue = Nz(drIni!intDisplayOrder, 0)
         End If

      End If
   End Sub

   Protected Sub txtProdCode_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles txtProdCode.TextChanged
      If db.CountRows("SELECT * FROM mstProduct WHERE strProdCode = '" & sqlDB.CleanString(txtProdCode.Text.Trim) & "' ") > 0 Then
         Response.Redirect("ProductDetails.aspx?PID=" & sqlDB.CleanString(txtProdCode.Text.Trim))
      Else
         strLongProdDesc.Focus()
      End If

   End Sub

   Protected Sub dblFlat_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles dblFlat.TextChanged
      If dblFlat.Text.Contains("=") Then
         Dim c() As Char = {"+", "-", "%", "*", "/", "\"}
         Dim tmp As Double = 0
         Dim strValues As String()

         Try
            dblFlat.Text = dblFlat.Text.Replace("=", "").Trim
            strValues = dblFlat.Text.Split(c, 2)
            If dblFlat.Text.Contains("+") Then tmp = strValues(0) + strValues(1)
            If dblFlat.Text.Contains("-") Then tmp = strValues(0) - strValues(1)
            If dblFlat.Text.Contains("%") Then tmp = strValues(0) / 100
            If dblFlat.Text.Contains("\") Then tmp = strValues(0) \ strValues(1)
            If dblFlat.Text.Contains("/") Then tmp = strValues(0) / strValues(1)


            dblFlat.Text = Math.Round(tmp, 4, MidpointRounding.AwayFromZero)

         Catch ex As Exception
            dblFlat.Text = 0
         End Try

      End If

      dblPrice.Focus()

   End Sub

   Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSave.Click

      lblMessage.Text = ""
      Dim s As String

      'v.1.2.4
      strProdCode = Nz(Request.QueryString("PID"), "")
      If strProdCode = "" And Not txtProdCode.Text.Trim = "" Then
         strProdCode = "0" 'new record!
      End If

      dr = db.GetRow(db.sql_get_Product_6(strProdCode))
      If Not dr Is Nothing Then
         aeFormer = New AuditEntity(dr, "mstProduct")
      End If

      If txtProdCode.Text.Trim.Length < 6 Then lblMessage.Text &= "<BR>Invalid Product Code (e.g. 99999X)"
      If strType.Text.Trim.Length = 0 Then lblMessage.Text &= "<BR>Product Type Required"
      If strProductDesc.Text.Trim.Length = 0 Or strLongProdDesc.Text.Trim.Length = 0 Then lblMessage.Text &= "<BR>Product Description Required"
      If ddlBrand.SelectedIndex < 1 Then lblMessage.Text &= "<BR>Brand Required"
      If ddlDisplayOrder.SelectedIndex < 1 Then lblMessage.Text &= "<BR>Display Order Required"

      Dim strTagsValue As String = Nz(hidTags.Value, "")
      If strTagsValue.Length > 500 Then lblMessage.Text &= "<BR>Tags field exceeds maximum length of 500 characters."

      'v1.4.0 - 20120720 - .net4 upgrade - n/a
      'If strProdCode <> "0" Then
      '   If db.CountRows(db.sql_get_Product_5(strProdCode.Substring(0, 5), strLongProdDesc.Text)) > 0 Then lblMessage.Text &= "<BR> Product already exists [A1]"
      'Else
      '   If db.CountRows(db.sql_get_Product_5("", strLongProdDesc.Text)) > 0 Then lblMessage.Text &= "<BR> Product already exists [A2]"
      'End If

      If Not lblMessage.Text.Length > 0 Then          'redundant validation check	
         Try
            '1- Update/insert into MST
            If strProdCode <> "0" And strProdCode.Length > 0 Then 'Update
               strProdCode = txtProdCode.Text.Trim
               Try
                  'v1.4.6 - 20160920 - Added strCategory to product details + removed category from product list filter - maanie
                  sqlDB.doQueryDS(db.sql_update_Product(strProdCode, ddlBrand.SelectedValue, strProductDesc.Text, intPack.Text, intSize.Text, dblPrice.Text, strLongProdDesc.Text, strType.Text, strType2.Text, intShortCode.Text, strPriceSeg.Text, CInt(chkActive.Checked), dblFlat.Text, cwsicat.Text, strPrincipalMaterialRefNum.Text, strPrincipalProdDesc.Text, strBottleBarcode.Text, strCaseBarcode.Text, strGiftboxBarcode.Text, ddlDisplayOrder.SelectedValue, strBrandVarietal.Text, strCategory.Text, strCategory2.Text, CInt(chkQF.Checked), CInt(chkDataTransfer.Checked), CInt(chkCompProduct.Checked), Session.Item("User"), strTagsValue))

                  'v1.2.4 - added AdvAudit 20090508
                  dr = db.GetRow(db.sql_get_Product_6(strProdCode))
                  aeLatter = New AuditEntity(dr, "mstProduct")
                  AuditEntity.Audit(aeFormer, aeLatter, Session.Item("User")) 'v1.4.5 - 20160913 - Fixed logged In user & savings (i.e use session instead) - maanie
               Catch ex As Exception
                  lblMessage.Text = "<BR>Update Failed.<BR><BR>" & ex.Message
                  Throw (New Exception("Could not write to datawarehouse"))
               End Try

            Else 'Insert
               Try
                  'v1.4.6 - 20160920 - Added strCategory to product details + removed category from product list filter - maanie
                  'strProdCode, refBrandID, strProductDesc, intPack, intSize, dblPrice, strLongProdDesc, strType, strType2, intShortCode, strPriceSeg, strCategory, blnActive, dblFlat, cwsicat, strCategory2, strPrincipalMaterialRefNum, strPrincipalProdDesc, strBottleBarcode, strCaseBarcode, strGiftboxBarcode, intDisplayOrder, strBrandVarietal, QF, blnDataTransfer, blnCompProduct
                  sqlDB.doQueryDS(db.sql_insert_Product(txtProdCode.Text, ddlBrand.SelectedValue, strProductDesc.Text, intPack.Text, intSize.Text, dblPrice.Text, strLongProdDesc.Text, strType.Text, strType2.Text, intShortCode.Text, strPriceSeg.Text, CInt(chkActive.Checked), dblFlat.Text, cwsicat.Text, strPrincipalMaterialRefNum.Text, strPrincipalProdDesc.Text, strBottleBarcode.Text, strCaseBarcode.Text, strGiftboxBarcode.Text, ddlDisplayOrder.SelectedValue, strBrandVarietal.Text, strCategory.Text, strCategory2.Text, CInt(chkQF.Checked), CInt(chkDataTransfer.Checked), CInt(chkCompProduct.Checked), Session.Item("User"), strTagsValue))
                  strProdCode = sqlDB.CleanString(txtProdCode.Text)

               Catch ex As Exception
                  lblMessage.Text = "<BR>Insert Failed.<BR><BR>" & ex.Message
                  Throw (New Exception("Could not write to datawarehouse"))
               End Try
            End If

            '2-Update/insert into DW
            Dim Keys As String() = {"strProdCode"}
            Dim Values As String() = {strProdCode}

            ds = sqlDB.getDW("dwdProduct", Keys, Values)
            If ds.Tables(0).Rows.Count > 0 Then  'update dw
               Dim fields As String = ""
               fields = sqlDB.Update_OuterDwd(sqlDB.doQueryDS(db.sql_get_Product_dw(strProdCode)).Tables(0)) 'build up the "SET bla = $bla
               If WebConfigurationManager.AppSettings("blnDebug") = True Then lblMessage.Text &= "<BR>" & db.sql_update_Product_dw(strProdCode, fields)
               sqlDB.doQueryDS(db.sql_update_Product_dw(strProdCode, fields))
            Else  'insert dw
               sqlDB.doQueryDS(db.sql_insert_Product_dw(strProdCode))
            End If

            If WebConfigurationManager.AppSettings("blnDebug") = False Then Response.Redirect("ProductList.aspx")
         Catch ex As Exception
            lblMessage.Text &= "<BR>" & ex.Message & "<BR>" & ex.StackTrace
         End Try
      End If
   End Sub

   Protected Sub btnClose_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClose.Click
      Response.Redirect("ProductList.aspx")
   End Sub

End Class