51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import logging
|
|
from odoo import api, fields, models, tools, _
|
|
from odoo.exceptions import UserError
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Channel(models.Model):
|
|
_inherit = 'slide.channel'
|
|
|
|
current_req_slide = fields.Many2one('slide.slide', compute='_get_current_required_slide')
|
|
|
|
@api.depends('slide_ids.sequence', 'slide_ids.is_required')
|
|
@api.depends_context('uid')
|
|
def _get_current_required_slide(self):
|
|
for channel in self:
|
|
required_slides = channel.slide_ids.filtered('is_required')
|
|
required_slides_learned = self.env['slide.slide.partner'].sudo().search([('slide_id', 'in', required_slides.ids),
|
|
('partner_id', '=', self.env.user.partner_id.id),
|
|
('completed', '=', True)])
|
|
required_slides_not_learned = required_slides - required_slides_learned.mapped('slide_id')
|
|
channel.current_req_slide = required_slides_not_learned[0] if required_slides_not_learned else False
|
|
|
|
|
|
class Slide(models.Model):
|
|
_inherit = 'slide.slide'
|
|
|
|
is_required = fields.Boolean('Required', default=False)
|
|
missing_requirement = fields.Boolean('Missing requirement', compute='_get_missing_requirement')
|
|
|
|
@api.depends('sequence', 'channel_id.current_req_slide')
|
|
@api.depends_context('uid')
|
|
def _get_missing_requirement(self):
|
|
for slide in self:
|
|
req_slide = slide.channel_id.current_req_slide
|
|
slide.missing_requirement = req_slide and not slide.is_preview and slide.sequence > req_slide.sequence
|
|
|
|
|
|
class SlidePartner(models.Model):
|
|
_inherit = 'slide.slide.partner'
|
|
|
|
@api.constrains('slide_id', 'partner_id')
|
|
def required_slide_constrain(self):
|
|
for record in self:
|
|
slide = record.slide_id
|
|
if slide.missing_requirement:
|
|
raise UserError(_("You need to learn required slide first."))
|