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 → PerformanceGrades (/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.

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 — Virtual

Virtual lab activities

evaluation marks + additional marks

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 Configuration modal. (The view toggle is not in the toolbar — this catches people out.)

View

Layout

Flat (default)

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 ). Collapsed cells are prefixed >, expanded

Section-wise

A three-row header — Categories → Chapter/Lab → Items. Clicking a section cell opens a Quiz Details modal with per-question scores, which 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.

  1. Open Configuration.

  2. Turn Published on.

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.

Text values are limited to 255 characters.

Deleting a column

⚠️ Deleting a column deletes every mark in it, for every student, permanently. There is no confirmation-by-typing and no undo. If the column 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 Hide all / Show all button on a category band.

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 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.

Hide all / Show all 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, and it is genuinely round-trippable: export, edit in a spreadsheet, re-import.

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 columns.

[0] is rejected with “Max marks must be greater than 0”.

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, sample data, suggested column mappings, students matched, students not found, how many grades are new vs existing, blank values skipped, and any validation errors.

  2. Adjust the mapping per column — create, update, or skip.

  3. Choose whether to overwrite existing values. This defaults to ON. With it off, students who already have a mark in that column are skipped.

  4. Commit.

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 most recent 50 imports are kept) and delete 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

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

Two things make this file re-importable directly:

  • 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”.


Known limitations

  • No category weighting — flat average only (§7.1)

  • No Excel export — CSV only

  • Stale flags only in flat view, with no bulk re-evaluation

  • Column type is immutable after creation

  • JTAs have no gradebook access whatsoever

  • The CSV template is a static sample, not your roster


Previous: 6. Exams and Proctoring · Next: 8. Announcements, Email and Forum