Attribute VB_Name = "ProjectFunctions"
Option Explicit

Public Function CalcDaysActive(l_HorseID As Long)
   Dim d As String
   Dim rst As ADODB.Recordset
   Dim strSQL As String
   Dim intNum As Integer
   Dim intTotal As Integer
   Dim intStartingDate As Integer
   Dim bPreviousStatus As Boolean
   
   d = Format(Date, "yyyy/MM/01")
   intNum = 0
   intTotal = 0
   intStartingDate = 1
   Set rst = New ADODB.Recordset
   strSQL = "SELECT tHorseArrival.dteDate, tHorseArrival.bArrival From tHorseArrival " _
          & "WHERE (((tHorseArrival.dteDate) Between '" & d & "' And '" & Format(Date, "yyyy/MM/dd") & "') AND ((tHorseArrival.refHorseID)=" & l_HorseID & ")) ORDER BY tHorseArrival.dteDate;"
   rst.Open strSQL, Main.cn, adOpenDynamic, adLockOptimistic
   If Not rst.EOF Then
      While Not rst.EOF
         If rst.Fields("bArrival") = False Then
            intNum = Format(rst.Fields("dteDate"), "dd") - intStartingDate
            intTotal = intTotal + intNum
         Else
            intStartingDate = Format(rst.Fields("dteDate"), "dd")
         End If
         bPreviousStatus = rst.Fields("bArrival")
         rst.MoveNext
      Wend
      If bPreviousStatus = True Then
         intNum = Format(Date, "dd") - intStartingDate + 1
         intTotal = intTotal + intNum
      End If
   Else
      rst.Close
      strSQL = "SELECT tHorseArrival.dteDate, tHorseArrival.bArrival From tHorseArrival " _
             & "WHERE (((tHorseArrival.refHorseID)=" & l_HorseID & ")) ORDER BY tHorseArrival.dteDate DESC;"
      rst.Open strSQL, Main.cn, adOpenForwardOnly, adLockOptimistic
      If Not rst.EOF Then
         If rst.Fields("bArrival") = True Then
            intNum = Format(Date, "dd")
         End If
      Else
         intNum = Format(Date, "dd")
      End If
      intTotal = intNum
   End If
   rst.Close
   CalcDaysActive = intTotal
End Function

Public Function IsHorseActive(lngHorseID) As Boolean
   Dim rst As ADODB.Recordset
   Dim strSQL As String
     
   IsHorseActive = False
   Set rst = New ADODB.Recordset
   strSQL = "SELECT tHorse.* From tHorse WHERE (((tHorse.HorseIR)=" & lngHorseID & "));"
   rst.Open strSQL, Main.cn, adOpenForwardOnly, adLockOptimistic
   If Not rst.EOF Then
      If rst.Fields("bStatus") = False Then
         IsHorseActive = False
      Else
         IsHorseActive = True
      End If
   End If
   rst.Close
End Function

Public Function SF_VATRate() As Double
   Dim rst As ADODB.Recordset
   Dim Per As Double
   
   Set rst = New ADODB.Recordset
   rst.Open "tSystem", Main.cn, adOpenForwardOnly
   Per = 0
   If Not rst.EOF Then
      Per = rst.Fields("dblVAT")
      While Per > 1
         Per = Per / 100
      Wend
   End If
   rst.Close
   SF_VATRate = Per
End Function

Public Function OwnerInvoiceNo(OwnerID As Long) As Long
   Dim rst As ADODB.Recordset
   Dim strSQL As String
   Dim InvNo As Long
   
   InvNo = 0
   Set rst = New ADODB.Recordset
   strSQL = "SELECT tOwner.* From tOwner WHERE (((tOwner.OwnerIR)=" & OwnerID & "));"
   rst.Open strSQL, Main.cn, adOpenDynamic, adLockOptimistic
   If Not rst.EOF Then
      If rst.Fields("lngMonthInvNo") = 0 Then
         Dim rst2 As ADODB.Recordset
         Set rst2 = New ADODB.Recordset
         rst2.Open "tSystem", Main.cn, adOpenDynamic, adLockOptimistic
         If Not rst2.EOF Then
            InvNo = rst2.Fields("lngNextInvoiceNo")
            rst2.Fields("lngNextInvoiceNo") = rst2.Fields("lngNextInvoiceNo") + 1
            rst2.Update
         End If
         rst2.Close
         
         rst.Fields("lngMonthInvNo") = InvNo
         rst.Update
      Else
         InvNo = IIf(IsNull(rst.Fields("lngMonthInvNo")), 0, rst.Fields("lngMonthInvNo"))
      End If
   End If
   rst.Close
   OwnerInvoiceNo = InvNo
End Function

Public Function FreeInvoiceNo(pInvoiceNo As Long) As Long
   Dim rst As ADODB.Recordset
   Dim strSQL As String

   Set rst = New ADODB.Recordset
   rst.Open "tSystem", Main.cn, adOpenDynamic, adLockOptimistic
   If Not rst.EOF Then
      If pInvoiceNo = rst.Fields("lngNextInvoiceNo") - 1 Then
         rst.Fields("lngNextInvoiceNo") = pInvoiceNo
         rst.Update
      End If
   End If
   rst.Close
End Function

Public Sub CalcOwnerBalances(lngOwnerID As Long, dblPer As Double)
   Dim rst As ADODB.Recordset
   Dim rstGL As ADODB.Recordset
   Dim rstOwHo As ADODB.Recordset
   Dim strSQL As String
   Dim lN As Double
   Dim lS As Double
   Dim lT As Double
   Dim lC As Double
   Dim lVAT As Double
   Dim bVat As Boolean
   Dim dblHorseAmount As Double
   
   Set rst = New ADODB.Recordset
   Set rstGL = New ADODB.Recordset
   Set rstOwHo = New ADODB.Recordset
   strSQL = "SELECT tOwner.* FROM tOwner WHERE OwnerIR =" & lngOwnerID
   rst.Open strSQL, Main.cn, adOpenDynamic, adLockOptimistic
   If Not rst.EOF Then
      lN = rst.Fields("dblPrevNinety")
      lS = rst.Fields("dblPrevSixty")
      lT = rst.Fields("dblPrevThirty")
      lC = rst.Fields("dblPrevCurrent")
      bVat = rst.Fields("bChargeVAT")
      
      strSQL = "SELECT tGLOwnerCharge.dteDate, tGLOwnerCharge.strDescription, tGLOwnerCharge.dblAmount AS Debit, 0 AS Credit, bVATCharge, strBalance " _
             & "From tGLOwnerCharge " _
             & "Where (((tGLOwnerCharge.refOwnerID) = " & lngOwnerID & ")) " _
             & "ORDER BY tGLOwnerCharge.dteDate " _
             & "UNION SELECT tGLOwnerCredit.dteDate, tGLOwnerCredit.strDescription, 0 As Debit, tGLOwnerCredit.dblAmount As Credit, bVATCharge, strBalance " _
             & "From tGLOwnerCredit " _
             & "Where (((tGLOwnerCredit.refOwnerID) =" & lngOwnerID & "));"
      rstGL.Open strSQL, Main.cn, adOpenForwardOnly
      
      While Not rstGL.EOF
         lVAT = 0
         If rstGL.Fields("bVATCharge") Then
            lVAT = lVAT + (rstGL.Fields("Debit") * dblPer)
            If bVat Then
               Select Case rstGL.Fields("strBalance")
                  Case "N"
                     lN = lN + ((IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)) * (dblPer))
                  Case "S"
                     lS = lS + ((IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)) * (dblPer))
                  Case "T"
                     lT = lT + ((IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)) * (dblPer))
                  Case Else
                     lC = lC + ((IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)) * (dblPer))
               End Select
            End If
         End If
         Select Case rstGL.Fields("strBalance")
            Case "N"
               lN = lN + IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)
            Case "S"
               lS = lS + IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)
            Case "T"
               lT = lT + IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)
            Case Else
               lC = lC + IIf(rstGL.Fields("Debit") > 0, rstGL.Fields("Debit"), rstGL.Fields("Credit") * -1)
         End Select
         rstGL.MoveNext
      Wend
      rstGL.Close
         
      strSQL = "SELECT tHorseOwner.refHorseID, tHorseOwner.dblPercentage, tHorseOwner.bCharge " _
               & "From tHorseOwner " _
               & "WHERE (((tHorseOwner.refOwnerID)=" & lngOwnerID & ") AND " _
               & "(tHorseOwner.bCharge)=True);"
      rstOwHo.Open strSQL, Main.cn, adOpenForwardOnly
      While Not rstOwHo.EOF
         lVAT = 0
         strSQL = "SELECT tHorse.strName AS HorseName, tGLHorseCharge.dteDate, tGLHorseCharge.strDescription, tGLHorseCharge.dblAmount AS Charge, tGLHorseCharge.bVATCharge " _
                  & "FROM tGLHorseCharge INNER JOIN tHorse ON tGLHorseCharge.refHorseID = tHorse.HorseIR " _
                  & "Where (((tHorse.HorseIR) = " & rstOwHo.Fields("refHorseID") & ")) " _
                  & "ORDER BY tHorse.strName, tGLHorseCharge.dteDate " _
                  & "UNION ALL SELECT tHorse.strName AS HorseName, tGLHorseCredit.dteDate, tGLHorseCredit.strDescription, ([tGLHorseCredit.dblAmount]*-1) AS Charge, tGLHorseCredit.bVATCharge " _
                  & "FROM tGLHorseCredit INNER JOIN tHorse ON tGLHorseCredit.refHorseID = tHorse.HorseIR " _
                  & "Where (((tHorse.HorseIR) = " & rstOwHo.Fields("refHorseID") & "))" _
                  & "ORDER BY HorseName, dteDate;"
         rstGL.Open strSQL, Main.cn, adOpenForwardOnly
         If Not ((rstGL.EOF = True) And (rstGL.BOF = True)) Then
            While Not rstGL.EOF
               dblHorseAmount = 0
               If rstOwHo.Fields("bCharge") = True Then
                  dblHorseAmount = ConvertNull(rstGL.Fields("Charge")) * rstOwHo.Fields("dblPercentage") / 100
                  If bVat = True Then
                    If rstGL.Fields("bVATCharge") = True Then
                    End If
                  End If
               End If
               lC = lC + (dblHorseAmount)
               If rstGL.Fields("bVATCharge") Then
                  lVAT = lVAT + (dblHorseAmount * dblPer)
                  If bVat Then
                     lC = lC + (dblHorseAmount * dblPer)
                  End If
               End If
               rstGL.MoveNext
            Wend
         End If
         rstGL.Close
         rstOwHo.MoveNext
      Wend
      rstOwHo.Close
      If Not rst.EOF Then
         rst.Fields("dblCurrent") = lC
         rst.Fields("dblThirty") = lT
         rst.Fields("dblSixty") = lS
         rst.Fields("dblNinety") = lN
         rst.Fields("dblClosingBalance") = lC + lT + lS + lN
         rst.Update
      End If
   End If
   rst.Close
End Sub

Public Sub Clean_Owner_Balances()
   Dim rst As ADODB.Recordset
   
   Set rst = New ADODB.Recordset
   rst.Open "tOwner", Main.cn, adOpenDynamic, adLockOptimistic
   While Not rst.EOF
      With rst
         .Fields("dblCurrent") = Clean_Negative_Value(rst.Fields("dblCurrent"))
         .Fields("dblThirty") = Clean_Negative_Value(rst.Fields("dblThirty"))
         .Fields("dblSixty") = Clean_Negative_Value(rst.Fields("dblSixty"))
         .Fields("dblNinety") = Clean_Negative_Value(rst.Fields("dblNinety"))
         .Fields("dblOpeningBalance") = Clean_Negative_Value(rst.Fields("dblOpeningBalance"))
         .Fields("dblClosingBalance") = Clean_Negative_Value(rst.Fields("dblClosingBalance"))
         .Fields("dblPrevCurrent") = Clean_Negative_Value(rst.Fields("dblPrevCurrent"))
         .Fields("dblPrevThirty") = Clean_Negative_Value(rst.Fields("dblPrevThirty"))
         .Fields("dblPrevSixty") = Clean_Negative_Value(rst.Fields("dblPrevSixty"))
         .Fields("dblPrevNinety") = Clean_Negative_Value(rst.Fields("dblPrevNinety"))
         .Update
         .MoveNext
      End With
   Wend
   rst.Close
End Sub

Public Sub DeleteHorse(tmpHorseID As Long)
   Dim rst As ADODB.Recordset
   Dim strSQL As String
   
   Main.cn.Execute "DELETE * FROM tBlood WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tGLHorseCharge WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tGLHorseCredit WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tHorseHealthDental WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tHorseHealthDeworming WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tHorseHealthFarrier WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tHorseHealthImmunisation WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tHorse WHERE HorseIR = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tHorseArrival WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tHorseOwner WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tMonthHorseCharge WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tMonthHorseCredit WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tTrainingHorseActivities WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tTrainingHorseForecast WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tTrainingHorseLeavings WHERE refHorseID = " & tmpHorseID
   Main.cn.Execute "DELETE * FROM tBreedingStallion WHERE refHorseID = " & tmpHorseID
   Set rst = New ADODB.Recordset
   strSQL = "SELECT * FROM tBreeding WHERE tBreeding.refMareID = " & tmpHorseID
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If Not rst.EOF Then
      Main.cn.Execute "DELETE * FROM tBreedingActivity WHERE refBreedingID = " & rst.Fields(0)
      Main.cn.Execute "DELETE * FROM tBreedingPregnancy WHERE refBreedingID = " & rst.Fields(0)
   End If
   rst.Close
   Main.cn.Execute "DELETE * FROM tBreeding WHERE refMareID = " & tmpHorseID
End Sub

Public Sub DeleteOwner(tmpOwnerID As Long)
   Main.cn.Execute "DELETE * FROM tGLOwnerCharge WHERE refOwnerID = " & tmpOwnerID
   Main.cn.Execute "DELETE * FROM tGLOwnerCredit WHERE refOwnerID = " & tmpOwnerID
   Main.cn.Execute "DELETE * FROM tHorseOwner WHERE refOwnerID = " & tmpOwnerID
   Main.cn.Execute "DELETE * FROM tMonthOwnerCharge WHERE refOwnerID = " & tmpOwnerID
   Main.cn.Execute "DELETE * FROM tMonthOwnerCredit WHERE refOwnerID = " & tmpOwnerID
   Main.cn.Execute "DELETE * FROM tOwner WHERE OwnerIR = " & tmpOwnerID
End Sub

Public Function DoesOwnerHaveHorses(tmpOwnerID As Long) As Boolean
   Dim rst As ADODB.Recordset
   Dim strSQL As String
   
   Set rst = New ADODB.Recordset
   
   strSQL = "SELECT tHorseOwner.* From tHorseOwner WHERE (((tHorseOwner.refOwnerID)=" & tmpOwnerID & "));"
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF = True Then
      DoesOwnerHaveHorses = False
   Else
      DoesOwnerHaveHorses = True
   End If
   rst.Close
End Function

Public Function DoesOwnerHaveBalance(tmpOwnerID As Long) As Boolean
   Dim rst As ADODB.Recordset
   Dim strSQL As String
   
   Set rst = New ADODB.Recordset
   DoesOwnerHaveBalance = False
   
   strSQL = "SELECT tOwner.dblCurrent From tOwner WHERE (((tOwner.OwnerIR)=" & tmpOwnerID & "));"
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF = False Then
      If ((rst.Fields("dblCurrent") > 1) Or (rst.Fields("dblCurrent") < -1)) Then
         DoesOwnerHaveBalance = True
      End If
   End If
   rst.Close
End Function

Public Sub AdjustMonthEndHealthCharges()
   Main.cn.Execute "UPDATE tHorseHealthDental SET tHorseHealthDental.refGLHorseChargeID = -1;"
   Main.cn.Execute "UPDATE tHorseHealthFarrier SET tHorseHealthFarrier.refGLHorseChargeID = -1;"
   Main.cn.Execute "UPDATE tHorseHealthDeworming SET tHorseHealthDeworming.refGLHorseChargeID = -1;"
   Main.cn.Execute "UPDATE tHorseHealthImmunisation SET tHorseHealthImmunisation.refGLHorseChargeID = -1;"
End Sub

Public Function CheckHealthChargeExists(refChargeID As Long, strTableName As String) As Boolean
   Dim rst As ADODB.Recordset
   Dim strSQL As String
  
   Set rst = New ADODB.Recordset
   
   strSQL = "SELECT * FROM tGLHorseCharge WHERE tGLHorseCharge.GLHorseChargeIR = " & refChargeID
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF Then
      CheckHealthChargeExists = False
   Else
      CheckHealthChargeExists = True
   End If
   rst.Close
   
   If CheckHealthChargeExists = False Then 'reset refChargeID to 0
      Main.cn.Execute "UPDATE tHorseHealth" & strTableName & " SET tHorseHealth" & strTableName & _
         ".refGLHorseChargeID = 0 WHERE tHorseHealth" & strTableName & ".refGLHorseChargeID = " & refChargeID
   End If
End Function

Public Function GetLastServiceDate(BreedingID As Long) As String
   Dim rst As ADODB.Recordset
   Dim strSQL As String
  
   Set rst = New ADODB.Recordset
   
   strSQL = "SELECT Max(tBreedingActivity.dteDate) AS MaxOfdteDate " _
      & "FROM tBreedingActivity RIGHT JOIN tBreeding ON tBreedingActivity.refBreedingID = tBreeding.BreedingIR " _
      & "WHERE (((tBreeding.BreedingIR)=" & BreedingID & ") AND ((tBreedingActivity.refBreedingActivityTypeID)=1));"
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF = False Then
      GetLastServiceDate = NullToString(rst.Fields(0))
   Else
      GetLastServiceDate = ""
   End If
   rst.Close
End Function

Public Function GetNumShares(stallionID As Long, strSeason As String) As Long
   Dim rst As ADODB.Recordset
   Dim strSQL As String
  
   Set rst = New ADODB.Recordset
   
   strSQL = "SELECT Count(tBreedingStallion.intShare) AS CountOfintShare From tBreedingStallion " _
           & "Where (((tBreedingStallion.refHorseID) = " & stallionID & " " _
           & ") And ((tBreedingStallion.strSeason) = '" & strSeason & "')) "
   
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF = False Then
      GetNumShares = ConvertNull(rst.Fields(0))
   Else
      GetNumShares = 0
   End If
   rst.Close
End Function

Public Function getDam(BreedingID) As String
   Dim rst As ADODB.Recordset
   Dim strSQL As String
  
   Set rst = New ADODB.Recordset
   
   strSQL = "SELECT tHorse.strName FROM tBreeding LEFT JOIN tHorse ON tBreeding.refMareID = tHorse.HorseIR " _
          & "WHERE (((tBreeding.BreedingIR)=" & BreedingID & "));"
   
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF = False Then
      getDam = NullToString(rst.Fields(0))
   Else
      getDam = ""
   End If
   rst.Close
End Function

Public Function getSire(BreedingID)
   Dim rst As ADODB.Recordset
   Dim strSQL As String
  
   Set rst = New ADODB.Recordset
   
   strSQL = "SELECT tBreeding.strStallion From tBreeding " _
          & "WHERE (((tBreeding.BreedingIR)=" & BreedingID & "));"
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF = False Then
      getSire = NullToString(rst.Fields(0))
   Else
      getSire = ""
   End If
   rst.Close
End Function

Public Function DuplicateHorseName(s As String) As Boolean
   Dim rst As ADODB.Recordset
   Dim strSQL As String
   Dim bReturn As Boolean
     
   Set rst = New ADODB.Recordset
   strSQL = "SELECT tHorse.* From tHorse WHERE (((tHorse.strName)=""" & s & """));"
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If rst.EOF Then
      bReturn = False
   Else
      bReturn = True
   End If
   rst.Close
   DuplicateHorseName = bReturn
End Function

Public Function CreateHorse(s As String) As Long
   Dim rst As ADODB.Recordset
   Dim strSQL As String
   Dim ID As Long
     
   Set rst = New ADODB.Recordset
   rst.Open "tHorse", Main.cn, adOpenDynamic, adLockOptimistic
   With rst
      .AddNew
      rst.Fields("strPassportNumber") = ""
      rst.Fields("strName") = UCase(s)
      rst.Fields("dteDOB") = Format(Date, "yyyy/mm/dd")
      rst.Fields("refColourID") = 0
      rst.Fields("refGenderID") = 0
      rst.Fields("strSire") = ""
      rst.Fields("strDam") = ""
      rst.Fields("strDamSire") = ""
      rst.Fields("strStudBookRef") = ""
      rst.Fields("strDistrictFoaling") = ""
      rst.Fields("strBreeder") = ""
      rst.Fields("strPicturePath") = ""
      rst.Fields("strLocation") = ""
      rst.Fields("lngRacesWon") = 0
      rst.Fields("lngMeritRating") = 0
      rst.Fields("strPurchasePrice") = ""
      rst.Fields("strSellingPrice") = ""
      rst.Fields("strInsuredPrice") = ""
      rst.Fields("bStatus") = True
      rst.Fields("memNotes") = ""
      .Update
   End With
   ID = rst.Fields("HorseIR")
   rst.Close
   CreateHorse = ID
End Function

Public Function getInvoiceMessage() As String
   Dim rst As ADODB.Recordset
   Dim strSQL As String

   Set rst = New ADODB.Recordset
   strSQL = "SELECT strInvoiceMessage from tSystem;"
   rst.Open strSQL, Main.cn, adOpenForwardOnly
   If Not rst.EOF Then
      getInvoiceMessage = NullToString(rst.Fields("strInvoiceMessage"))
   Else
      getInvoiceMessage = ""
   End If
   rst.Close
End Function

Public Sub saveInvoiceMessage(strMessage As String)
   Dim rst As ADODB.Recordset
   Dim strSQL As String

   Set rst = New ADODB.Recordset
   strSQL = "SELECT strInvoiceMessage from tSystem;"
   rst.Open strSQL, Main.cn, adOpenDynamic, adLockOptimistic
   If Not rst.EOF Then
      rst.Fields("strInvoiceMessage") = NullToString(strMessage)
      rst.Update
   End If
   rst.Close
End Sub

Public Sub Change_Last_Date()

End Sub
