Задача 1. Система управления кассовыми чеками
1.1 Создайте класс Receipt с ID и суммой. __str__ возвращает Receipt <ID>: <amount>.
1.2 Создайте класс Shift с уникальным ID, списком чеков и статусом. Реализуйте is_closed, close, get_total, list_receipts.
1.3 Метод add_receipt(amount) создаёт чек и добавляет в смену, если она открыта.
1.4 Метод add_return(source_shift, original_id, return_amount) создаёт возврат на основе чека из другой смены.
1.5 Добавьте SaleReceipt (сумма > 0) и ReturnReceipt (сумма < 0), унаследованные от Receipt.
1.6 Обновите Shift: add_receipt создаёт SaleReceipt, add_return — ReturnReceipt. Добавьте фильтрацию по типу в list_receipts и get_total.
1.7 Проверьте всю систему: создайте смену с продажами, вторую смену с возвратом, выведите списки и суммы по типам.
Задача 2. Пользователи и уведомления
2.1 Создайте миксины:
EmailNotifyMixin— требуетemail, методemail_notify(message).SmsNotifyMixin— требуетphone, методsms_notify(message).PushNotifyMixin— методpush_notify(message), поля не требует.
2.2 Создайте базовый класс User с полем name.
2.3 Реализуйте Courier(User, EmailNotifyMixin, SmsNotifyMixin) и Admin(User, PushNotifyMixin). Каждый имеет метод notify(message).
2.4 Проверьте работу уведомлений.