7. Grades and the Gradebook

Who can use this: Course owner, INSTRUCTOR, and STA. Junior TAs (JTA) cannot access the gradebook at all; every gradebook screen returns “not authorized” for them. JTAs grade from within an activity instead.

Where: Course → Performance → Grades (/courseware/course/{courseId}/performance/grades)


7.1 How the final percentage is calculated

Read this before you design your assessment scheme, because it will probably change your plan.

Final % = (Multimedia total + Lab total + Extra total)
          ────────────────────────────────────────────  × 100
          (Multimedia max  + Lab max   + Extra max)

rounded to one decimal place.

⚠️ There is no category weighting. You cannot make Labs worth 50% and the Multimedia Book worth 30%. Every mark in the course goes into one flat pool, so a category’s real weight is simply the share of total marks it contributes.

To weight a category, change its marks. If you want labs to count double, author the lab activities out of twice the marks; that is the only lever.

If the total maximum is zero, the percentage is reported as 0.

⚠️ Unmarked activities count as zero. The maximum is the total of every activity in the course, whether or not a student has attempted it and whether or not it has been graded yet. Early in a term the percentage will therefore look very low for everyone. To keep it meaningful, exclude activities that are not yet in play (§7.6) — excluding an item removes it from the maximum too.

Where each mark comes from

Category

Built from

Score used

Multimedia Book

Chapter → Concept → Quiz

Marks obtained / total marks on the quiz

Lab - Programming

Programming activities

visible + hidden + manual + rubric marks, from the submission marked selected for evaluation

Lab - Lab Quiz

“Other” activities

that quiz’s marks

Extra

Extra columns you create

Whatever you enter or import

Note the programming rule: only the submission selected for evaluation counts, not the latest one.


7.2 The three views

Switch views from the Grades Configuration modal, opened with the Configuration button in the page header. (The view toggle is not in the toolbar; this catches people out.) The setting is called Default View.

View

Layout

Flat (default)

Listed as “Flat (Consolidated View)”. One column per quiz and per lab activity, plus a Total per category and a final %

Chapter-wise

One column per chapter. Click to expand into sections and standalone elements (marked ◆). A chevron icon marks each chapter cell: pointing right when collapsed, down when expanded

Section-wise

A four-row header: Categories → Chapter/Lab → Sections → individual questions. Multimedia question scores are displayed but not clickable; clicking a Lab Quiz activity cell opens a Lab Quiz Questions modal with per-question scores you can edit

The gradebook in flat view


7.3 Editing a grade directly in the grid

Click a cell and type. Be aware of where the number goes:

  • Editing a quiz or lab score writes back to the source record; you are changing the student’s actual quiz history or submission marks, not a gradebook overlay.

  • Only Extra column values are stored in the gradebook itself.

There is no separate “save to gradebook” step and no undo. Editing a quiz score here is equivalent to re-marking their quiz.


7.4 Publishing grades to students

Grades are not visible to students until you publish. A new gradebook starts unpublished.

The control is in the page header, not in the Configuration modal: a status badge reads ⚠ Grades not published, and beside it is a Publish button (which becomes Unpublish once grades are live).

Until you do, every student sees:

Grades have not been released yet

They see the same message if you have not created a gradebook at all, so a student reporting that message may mean either “not published” or “not set up”.

When published, students see only the columns you have left visible (see §7.6).


7.5 Extra columns

Extra columns hold marks that BodhiTree does not generate itself: a paper exam, attendance, a viva, or free-text feedback.

Creating a column

You must supply:

  • Name

  • Type: either number or text. There is no default; you must choose.

  • Max marks: required for number columns

Text columns are always excluded from totals and always have max marks of 0.

Editing a column

⚠️ You cannot change a column’s type after it is created. Attempting it fails with “column_type cannot be changed after creation”. If you picked the wrong type, delete the column and make a new one, which deletes its data.

For number columns, “counted in total” and “visible to students” move together: turning one off turns the other off. You cannot have a column that students can see but which does not count, or vice versa.

For text columns, edits to max marks and to “counted” are silently ignored.

CSV import rejects text values over 255 characters. Typing directly into a cell is not length-checked, so treat 255 as a convention rather than a guarantee.

Deleting a column

⚠️ Deleting a column deletes every mark in it, for every student, permanently. You get a Delete Column confirmation first (“All grades for this column will be permanently lost.”), but once you confirm there is no undo. If it came from a CSV import, use rollback instead (§7.8); that is reversible and reports what it did.


7.6 Hiding columns from students / excluding from totals

Use the eye toggle on a column, or the eye button on a category band header (its tooltip reads “Hide all columns from students” / “Show all columns to students”).

The effect differs by audience; this is important and not obvious:

You see

Students see

Excluded column

Still shown, tagged with an excluded badge — hidden on text columns

Hidden entirely

Its marks

Removed from the category total

Removed from the total and from the maximum

So excluding a column does not penalise students; their denominator shrinks too.

The band toggle works per category: Multimedia Book, Lab, or Extra.


7.7 Importing marks from a CSV

Where: Grades → import extra columns.

This is the fastest way to bring in an offline exam. You can round-trip through a spreadsheet — export, edit, re-import — but not with the export file as it stands; see §7.9 for the columns you have to remove first.

File requirements

Requirement

Limit

Format

.csv only; .xlsx is rejected

Size

5 MB maximum

First column

Must be headed email (case does not matter)

Minimum

At least one grade column and at least one data row

Headers

No blank column headers

Encoding is auto-detected, so a CSV saved straight out of Excel normally works.

Column header syntax

The header tells BodhiTree what kind of column to create:

Header

Result

Midterm[100]

Number column, out of 100

Midterm [100]

Same; the space is optional

Viva[12.5]

Decimals are allowed

Comments[text]

Text column

Attendance

Must match an existing column name exactly

⚠️ You cannot change a column’s maximum by re-importing. If the name matches an existing column, the bracket is ignored and the existing type and maximum are kept. To change a maximum, edit the column.

A malformed header gives:

Invalid CSV format. Column headers must use: ColumnName[100] for numbers or ColumnName[text] for text.

[0] is also rejected, but with that same generic message rather than anything specific about the maximum — so check your brackets if you see it.

Cell values

  • Blank, --, -, N/A, n/a, NA, na are skipped; no mark is created or changed. Use these to leave a student untouched.

  • A number above the column maximum is rejected for that cell only; the rest of the import still proceeds.

  • Text over 255 characters is rejected for that cell.

Who gets matched

Only users actively enrolled in the course, with role Student, STA, or JTA. Emails match case-insensitively. Anyone else is reported under students not found, with their row number.

The import flow

  1. Upload the file. You get a preview showing: rows found, the first 5 rows of sample data, the column mapping BodhiTree worked out, students matched, students not found, how many grades are new vs existing, blank values skipped, and any validation errors.

  2. Check the mapping. It is read-only — each column is tagged Will Create or Will Update based on its header, and you cannot override it or skip a column. If the mapping is wrong, fix the headers in the file and upload again.

  3. Commit.

⚠️ Existing marks are always overwritten. There is no overwrite option; the import unconditionally replaces any mark a student already has in a matched column. If that is not what you want, drop those columns from the CSV before importing, or be ready to roll the import back (§7.8).

CSV import preview showing matched and unmatched students

⏱ A preview expires after 10 minutes. If you leave it open longer you get “Preview expired. Please upload again.” and must re-upload.

Row numbers in error messages count the header as row 1, so your first student is row 2.

Template

The download template button gives you a static two-line example:

email,Column Name[100],Column Name[text]
student@example.com,85,Sample text

It is not pre-filled with your enrolled students. To get a file with your real roster in it, use Export (§7.9) instead and edit that.


7.8 Undoing an import (rollback)

Every import is recorded. Open the import history (the 50 most recent are listed) and use Undo Import on an entry to roll it back.

Rollback is careful about work you have done since:

  • Columns that the import created are deleted, along with their marks

  • Marks the import created in pre-existing columns are deleted

  • Marks the import overwrote are restored to their previous value, but only if nobody has changed them since. A mark you edited by hand after the import is left alone and reported as skipped

  • Marks whose record was deleted outright after the import are silently passed over; they appear in neither the restored nor the skipped count

You get a report listing columns deleted, grades deleted, grades restored, and grades skipped. The whole operation is atomic.

Prefer rollback to deleting columns by hand. It is reversible in intent, reports exactly what it touched, and will not destroy later manual corrections.


7.9 Exporting

Export produces a CSV file named gradebook_{courseId}.csv. The export respects the view you choose (flat, chapter, or section).

There is no Excel export. The design documents mention one; it was never built. Open the CSV in Excel instead.

Column order is:

email, Name, Roll No,
MB: <item> …, MB Total,
Lab: <item> …, Lab Total,
<ExtraColumn>[100] …, Extra Total

⚠️ You cannot re-import this file unchanged. Import understands only email, columns headed Name[100] or Name[text], and the exact names of existing extra columns. Name, Roll No, MB: …, MB Total, Lab: … and Lab Total match none of those, and one unrecognised header rejects the entire file with the generic “Invalid CSV format” message.

To round-trip, delete every column except email and your extra columns, then import.

Two things then make the trimmed file import cleanly:

  • email is the first column, which is what import requires

  • Extra columns already carry their [max] or [text] suffix

Empty cells export as --, which import treats as “skip”, so a round trip does not overwrite blanks with zeros.


7.10 Stale grade warnings

If you change a marking rule after students have been graded, affected cells get an amber warning triangle with a reason:

  • the answer key changed

  • the marks changed

  • test cases changed

  • a question was added

  • a question was removed

⚠️ Nothing is recalculated automatically. The old score stays in place; the triangle is only telling you it may no longer be correct. You must re-grade or re-run evaluation yourself. There is no “re-evaluate all stale items” button.

Cosmetic edits (fixing a typo in the question text) do not raise the flag.

The warning appears in the flat view only. It does not appear in chapter or section views, so do your post-change review in flat view.


7.11 Deleting the gradebook

Deleting the gradebook removes the gradebook record and resets your view preferences. It does not delete your Extra Columns or their marks; those are attached to the course and survive. Recreating the gradebook brings them back.

Trying to create a second gradebook fails with “Gradebook already exists for this course”.


Previous: 5. Labs and Activities · Next: 8. Announcements, Email and Forum