Thank you for asking these questions in the forums! I'm going to take a first pass at it for you.
They will have a catalog of technical training courses with detailed custom attributes - training agenda, prerequisites, course length, etc.
This is something that nearly any e-commerce solution can support, at the higher levels.
Each course will have classes scheduled on specific dates. Customer will be purchasing class dates. Are courses then products, and classes product variants? (another product suggested this solution).
We have another client who's done something like this, but I'm not able to disclose their name. They support and provide customized and out-of-the-box training for a major software platform though.
From what I can tell so far, your assumption would be the first I'd suggest starting with.
Since each product is likely a course, product variants are the likely way to go. I'd also suggest creating a DNN scheduled job that integrates with the Hotcakes API to automatically manage a variant that "expires" due to the class no longer being available after the given date.
The client will be reselling class schedules from multiple partners, so there needs to be a way to import and regularly update the set of class dates for each course. So courses are semi-permanent - class dates are constantly updated. Importing from a CSV into SQL tables would be acceptable, some utility would be even better.
This would likely be best implemented by using a DNN scheduled job to completely customize your import and synchronization process. What you need to do is very specific to your selling scenario. However, this is exactly one of the major reasons Hotcakes is built the way it is... to be able to adapt to very unique use cases like this.
Ideally, the checkout procedure should include a way to include name(s) of student(s) who are not necessarily the person purchasing the class.
This can be done by customizing the viewset and adding an action delegate pipeline with a custom order workflow task.
We've done something like this before with purchasing LMS courses (for yet another client). They needed to allow for purchasing of one or many seats for webinars, and this method was used to ask participant's names, and then save them to the order for processing after payment.
This method is also great for some scenarios where you want to override the checkout process completely. For example, another client does this to create a quotation process instead of actually checking out.
Here's some documentation that might help you visualize this approach. https://hotcakescommerce...Checkout-and-Place-Order