-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.jl
114 lines (96 loc) · 3.43 KB
/
app.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
module App
using GenieFramework
using Genie
using DataFrames
using CSV
@genietools
import Genie.Renderer.Html: normal_element, register_normal_element
register_normal_element("q__tr", context = @__MODULE__)
register_normal_element("q__td", context = @__MODULE__)
function update_dataframe!(df, table)
for name in names(df)
if name in names(table.data)
df[:,name] = table.data[:,name]
end
end
end
function add_midterm(df)
return df.Midtermtest .* df.MidtermWeight
end
function add_final(df)
return df.FinalPercentage .* df.FinalWeight
end
studentDF = CSV.read("./testdata/gradesWfinaltest.csv", DataFrame);
@app begin
# studentDF = CSV.read("./testdata/gradesWfinalSept.csv", DataFrame);
@in table = DataTable(studentDF)
@in TableSearch_dfilter = ""
@in Button_process = false
@in Button_Midterm = false
@in Button_Final = false
@in Button_save = false
@in midtermWeight = 0.2
@in finalWeight = 0.3
@onbutton Button_Midterm begin
update_dataframe!(studentDF, table)
if "MidtermWeight" in names(studentDF)
studentDF.MidtermWeight .= midtermWeight
else
insertcols!(studentDF, :MidtermWeight => midtermWeight)
end
table = DataTable(studentDF)
@info "Midterm was added"
notify(__model__, "Midterm was processed")
end
@onbutton Button_Final begin
update_dataframe!(studentDF, table)
if "FinalWeight" in names(studentDF)
studentDF.FinalWeight .= finalWeight
else
insertcols!(studentDF, :FinalWeight => finalWeight)
end
table = DataTable(studentDF)
@info "Final was added"
notify(__model__, "Final was processed")
end
@onbutton Button_process begin
update_dataframe!(studentDF, table)
if "MidtermMark" in names(studentDF)
studentDF.MidtermMark = round.(add_midterm(studentDF), digits=2)
else
insertcols!(studentDF, :MidtermMark => add_midterm(studentDF))
end
if "FinalMark" in names(studentDF)
studentDF.FinalMark = round.(add_final(studentDF), digits=2)
else
insertcols!(studentDF, :FinalMark => add_final(studentDF))
end
list_of_assignments = [x for x in names(studentDF) if (occursin("assignment",x) || occursin("Assignment",x))]
studentDF.homework = sum(eachcol(studentDF[:,list_of_assignments]))
studentDF.Grade = round.(studentDF.MidtermMark .+ studentDF.FinalMark .+ studentDF.homework .+ studentDF.Finalproject)
table = DataTable(studentDF)
@info "Grades were calculated"
notify(__model__, "Grades were calculated")
end
@onbutton Button_save begin
update_dataframe!(studentDF, table)
CSV.write("./testdata/gradesWfinaltest.csv",studentDF)
@info "File was saved"
notify(__model__, "Fila was saved")
end
@in selected_student = ""
@out student_info = studentDF.Student
@out columns_info = []
@out List_of_info = []
@onchange table begin
# CSV.write("./testdata/gradesWfinaltest.csv",table.data)
end
@onchange selected_student begin
if selected_student != ""
List_of_info = [values(studentDF[studentDF.Student .== selected_student, Not(:Student)][1,:])...]
columns_info = names(studentDF[:, Not(:Student)])
end
end
end
@page("/", "app.jl.html")
end