Part 1
You need to model orders and voyages, where each order has an origin, destination, dropoff date, and target delivery date, and each voyage has an origin, destination, departure date, and arrival date. The method book_order should assign an order to the earliest voyage by departure date that meets the time and port constraints.
Part 2
On top of Part 1, each voyage now has a capacity limiting how many orders it can carry. You must extend the model so that book_order only assigns an order to voyages that both satisfy the time constraints and still have remaining capacity.
Part 3
Because capacity is often exhausted, you are allowed to have an overload percentage for each voyage. Update book_order function to allow it booking the overloaded capacity if there are no available normal capacity from all voyages.