Torna al Thread
Public Class Calcolatore
Public Function IsWeekend(ByVal data As Date) As Boolean
' Parametri di input:
' - data: la data da testare
' - giorno: parametro passato per riferimento
' Il parametro 'giorno', passato per riferimento, viene
' modificato per restituire il nome del giorno della settimana,
' se sabato o domenica, oppure l'indicazione "feriale".
'
' Parametri di output:
' - True: il giorno testato è un sabato o una domenica
' - False negli altri casi
Select Case Weekday(data)
Case FirstDayOfWeek.Saturday
IsWeekend = True
Case FirstDayOfWeek.Sunday
IsWeekend = True
Case Else
IsWeekend = False
End Select
End Function
Public Function giorni_sett(ByVal data As DateTime, ByVal feriali As Boolean) As Integer
Dim calendario As New DateTime()
Dim giorni As Integer = 0
calendario = data
If (feriali) Then
For i = 0 To 6
If IsWeekend(calendario).Equals(False) Then ' se oggi è feriale gli interessi aumentano*/
giorni += 1
End If
calendario = calendario.AddDays(1)
Next
Else
For i = 0 To 6
If IsWeekend(calendario).Equals(True) Then '/* se oggi è feriale gli interessi aumentano*/
giorni += 1
End If
calendario = calendario.AddDays(1)
Next
End If
Return giorni
End Function
Public Function giorni_mese(ByVal data As DateTime, ByVal feriali As Boolean)
Dim calendario As New DateTime()
Dim giorni As Integer = 0
calendario = data
If (feriali) Then
For i = 0 To 30
If IsWeekend(calendario).Equals(False) Then ' se oggi è feriale gli interessi aumentano*/
giorni += 1
End If
calendario = calendario.AddDays(1)
Next
Else
For i = 0 To 30
If IsWeekend(calendario).Equals(True) Then '/* se oggi è feriale gli interessi aumentano*/
giorni += 1
End If
calendario = calendario.AddDays(1)
Next
End If
Return giorni
End Function
Public Function arrotonda(ByVal numero, ByVal nCifreDecimali)
Return Math.Round(numero * Math.Pow(10, nCifreDecimali)) / Math.Pow(10, nCifreDecimali)
End Function
Public Function start(ByVal data As DateTime, ByVal giorni As Integer, ByVal num As Integer, ByVal cas As Double, ByVal tmp_ritiro As Integer, ByVal ritiro As Double, ByVal da_agg As Deposito)
Dim interessi As Double = 0
Dim cassa As Double = 0
Dim da_fare As String = ""
Dim inizio_ritiro As Integer = 0
Dim table As New DataTable
Dim calendario As New DateTime()
Dim Lista As New Deposito()
Dim iter As New Nodo
Dim n_quote As Integer
Dim g As Integer
Dim num_quote_raggiungere As Integer = 0
calendario = data
'inizializzo la datatable
table.Columns.Add("Data", GetType(DateTime))
table.Columns.Add("N° Quote Attive", GetType(Integer))
table.Columns.Add("Interessi Giornalieri", GetType(Double))
table.Columns.Add("Cassa", GetType(Double))
table.Columns.Add("Da fare", GetType(String))
iter = da_agg.start
While (Not (IsNothing(iter)))
Lista.add(1, iter.maturato)
iter = iter.successivo
End While
n_quote = num
Lista.add(n_quote)
cassa = cas
If (tmp_ritiro.Equals(1)) Then ' se è settimanale*/
g = giorni_sett(calendario, True) * 0.2 + giorni_sett(calendario, False) * 0.1
num_quote_raggiungere = Math.Round((ritiro * 3) / g, 0)
Else '/*se è mensile*/
g = giorni_mese(calendario, True) * 0.2 + giorni_mese(calendario, False) * 0.1
num_quote_raggiungere = Math.Round((ritiro * 3) / g, 0)
End If
For i = 0 To giorni - 1
interessi = 0
calendario = calendario.AddDays(1)
If IsWeekend(calendario).Equals(True) Then ' /* se oggi è feriale gli interessi aumentano*/
interessi = Lista.matura_interessi(True)
Else
interessi = Lista.matura_interessi(False)
End If
cassa += interessi
Dim size As Integer = Lista.Grandezza()
If (size < num_quote_raggiungere) Then
If (cassa > 10) Then
n_quote = Math.Floor(cassa / 10)
If (n_quote > (num_quote_raggiungere - size)) Then
n_quote = num_quote_raggiungere - size
End If
cassa = cassa - n_quote * 10
Lista.add(n_quote)
da_fare = "Acquista N° quote: " & n_quote
size = Lista.Grandezza()
End If
If (size.Equals(num_quote_raggiungere)) Then
inizio_ritiro += 1
If (tmp_ritiro.Equals(1)) Then
If ((inizio_ritiro Mod 7).Equals(0)) Then
If (cassa >= ritiro) Then
da_fare = da_fare + " Ritira: " & ritiro
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
Else '/*se è mensile*/
If ((inizio_ritiro Mod 30).Equals(0)) Then
If (cassa >= ritiro) Then
da_fare = da_fare + " Ritira: " & ritiro
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
End If
End If
Else
inizio_ritiro += 1
If (tmp_ritiro.Equals(1)) Then
If ((inizio_ritiro Mod 7).Equals(0)) Then
If (cassa >= ritiro) Then
da_fare = da_fare + " Ritira: " & ritiro
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
Else '/*se è mensile*/
If ((inizio_ritiro Mod 30).Equals(0)) Then
If (cassa >= ritiro) Then
da_fare = da_fare + " Ritira: " & ritiro
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
End If
End If
table.Rows.Add(calendario.Date(), size, arrotonda(interessi, 2), arrotonda(cassa, 2), da_fare)
da_fare = ""
Lista.remove(True)
Next
Return table
End Function
Public Function start2(ByVal data As DateTime, ByVal giorni As Integer, ByVal num As Integer, ByVal cas As Double, ByVal tmp_ritiro As Integer, ByVal ritiro As Double, ByVal da_agg As Deposito, ByVal cassa_eff As Double, ByVal userid As String)
Dim interessi As Double = 0
Dim cassa As Double = 0
Dim inizio_ritiro As Integer = 0
Dim calendario As New DateTime()
Dim Lista As New Deposito()
Dim iter As New Nodo
Dim n_quote As Integer
Dim g As Integer
Dim num_quote_raggiungere As Integer = 0
Dim db As New Interazione_db
Dim cassa_db As Double
Dim acquisto As Integer
Dim flag_ritiro As Integer
calendario = data
iter = da_agg.start
While (Not (IsNothing(iter)))
Lista.add(1, iter.maturato)
iter = iter.successivo
End While
n_quote = num
Lista.add(n_quote)
cassa = cas
If (tmp_ritiro.Equals(1)) Then ' se è settimanale*/
g = giorni_sett(calendario, True) * 0.2 + giorni_sett(calendario, False) * 0.1
num_quote_raggiungere = Math.Round((ritiro * 3) / g, 0)
Else '/*se è mensile*/
g = giorni_mese(calendario, True) * 0.2 + giorni_mese(calendario, False) * 0.1
num_quote_raggiungere = Math.Round((ritiro * 3) / g, 0)
End If
' fino a ieri
For i = 0 To giorni - 1
calendario = calendario.AddDays(1)
flag_ritiro = 0
acquisto = 0
If IsWeekend(calendario).Equals(True) Then ' /* se oggi è feriale gli interessi aumentano*/
interessi = Lista.matura_interessi(True)
Else
interessi = Lista.matura_interessi(False)
End If
If (calendario.CompareTo(Today) = 0) Then
cassa_db = db.find(calendario.ToShortDateString, userid)
If cassa_db.Equals(-1) Then
db.Add(calendario.ToShortDateString, cassa_eff, userid)
cassa = cassa_eff
Else
If cassa_eff > cassa_db Then
db.update(calendario.ToShortDateString, cassa_eff, userid)
cassa = cassa_eff
Else
cassa = cassa_db
End If
End If
Else
cassa_db = db.find(calendario.ToShortDateString, userid)
If cassa_db.Equals(-1) Then
cassa = 0
Else
cassa = cassa_db
End If
End If
Dim size As Integer = Lista.Grandezza()
If (size < num_quote_raggiungere) Then
If (cassa > 10) Then
n_quote = Math.Floor(cassa / 10)
If (n_quote > (num_quote_raggiungere - size)) Then
n_quote = num_quote_raggiungere - size
End If
cassa = cassa - n_quote * 10
acquisto = n_quote
Lista.add(n_quote)
size = Lista.Grandezza()
End If
If (size.Equals(num_quote_raggiungere)) Then
inizio_ritiro += 1
If (tmp_ritiro.Equals(1)) Then
If ((inizio_ritiro Mod 7).Equals(0)) Then
If (cassa >= ritiro) Then
flag_ritiro = 1
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
Else '/*se è mensile*/
If ((inizio_ritiro Mod 30).Equals(0)) Then
If (cassa >= ritiro) Then
flag_ritiro = 1
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
End If
End If
Else
inizio_ritiro += 1
If (tmp_ritiro.Equals(1)) Then
If ((inizio_ritiro Mod 7).Equals(0)) Then
If (cassa >= ritiro) Then
flag_ritiro = 1
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
Else '/*se è mensile*/
If ((inizio_ritiro Mod 30).Equals(0)) Then
If (cassa >= ritiro) Then
flag_ritiro = 1
cassa = cassa - ritiro
inizio_ritiro = 0
End If
End If
End If
End If
Lista.remove(True)
Next
Dim array(2) As Double
array(0) = acquisto
array(1) = flag_ritiro
db.close()
Return array
End Function
End Class