﻿'v1.2.4 - added AdvAudit
Imports Superbowl.sqlDB


Public Class AuditEntity
  Private Entity As String
  Private Field() As String
  Private Value() As Object
  Private Descriptors() As String = {"strCustomerNo", "strRepName", "strProdCode", "strBrand"}  ' must be arranged from child entities to parent entities

  Public Sub New()
    Entity = ""

  End Sub

  Public Sub New(ByVal dr As DataRow, ByVal strTableName As String)

    Entity = strTableName 'dr.Table.TableName
    ReDim Field(dr.Table.Columns.Count - 1)
    ReDim Value(dr.Table.Columns.Count - 1)

    For i As Integer = 0 To dr.Table.Columns.Count - 1
      Field(i) = dr.Table.Columns(i).ColumnName
      Value(i) = dr.Item(i)
    Next

  End Sub

  Public Shared Sub Audit(ByVal aeFormer As AuditEntity, ByVal aeLatter As AuditEntity, ByVal UNAME As String)
    Dim idxChanges As New CommaDelimitedStringCollection()
    Dim idxDescriptor As Integer
    Dim strSQL As String = ""
    Dim s, ss As String

    'COMPARES Formet and Latter Values
    For i As Integer = 0 To aeFormer.Field.Count - 1
      If sqlDB.Nz(aeFormer.Value(i).ToString, "") <> sqlDB.Nz(aeLatter.Value(i).ToString, "") And Not (aeFormer.Field(i) = "dtStamp" Or aeFormer.Field(i) = "strLastUser" Or aeFormer.Field(i).ToString.Substring(0, 3) = "ref") Then
        idxChanges.Add(i)
      End If
    Next

    For i As Integer = 0 To aeFormer.Descriptors.Count - 1
      If Array.IndexOf(aeFormer.Field, aeFormer.Descriptors(i)) > -1 Then
        idxDescriptor = Array.IndexOf(aeFormer.Field, aeFormer.Descriptors(i))
        Exit For
      End If
    Next

    System.Threading.Thread.Sleep(13)
    ss = Date.Now.Ticks
    For i As Integer = 0 To idxChanges.Count - 1

      System.Threading.Thread.Sleep(13)
      s = Date.Now.Ticks
      If i = 0 Then s = ss

      strSQL = "INSERT INTO logAudit(dtStamp, strEntity, ID, strField, valueOld, valueNew, strLastUser, refStamp) " & _
                "VALUES ('" & s & "', '" & aeFormer.Entity & "', '" & sqlDB.CleanString(aeFormer.Value(idxDescriptor)) & "', '" & sqlDB.CleanString(aeFormer.Field(idxChanges(i))) & "', '" & sqlDB.CleanString(aeFormer.Value(idxChanges(i))) & "', '" & sqlDB.CleanString(aeLatter.Value(idxChanges(i))) & "', '" & UNAME & "', '" & ss & "');"
      sqlDB.doQueryDS(strSQL)
    Next
  End Sub
End Class
