# -*- coding: utf-8 -*- """Приказы по воинскому учёту. Организационные приказы ВУ (об организации воинского учёта, о назначении ответственного за ВУ и бронирование и т.п.). Документ-шаблон: заполняется реквизитами и выгружается в DOCX через docx_report. Это ОБРАЗЕЦ: типовые формулировки приказов задаются по умолчанию и правятся пользователем. """ from odoo import api, fields, models from odoo.exceptions import UserError # Виды приказов по ВУ. ORDER_KIND = [ ('organization', 'Об организации воинского учёта'), ('responsible', 'О назначении ответственного за ВУ и бронирование'), ('plan', 'Об утверждении плана работы по ВУ'), ('other', 'Иной приказ по ВУ'), ] class RuodooRsbuMilOrder(models.Model): _name = 'ruodoo.rsbu.mil.order' _description = 'Приказ по воинскому учёту' _order = 'order_date desc, id desc' name = fields.Char( string='Номер приказа', required=True, copy=False, default='б/н') kind = fields.Selection( selection=ORDER_KIND, string='Вид приказа', required=True, default='organization') company_id = fields.Many2one( 'res.company', string='Организация', required=True, index=True, default=lambda self: self.env.company) order_date = fields.Date( string='Дата приказа', required=True, default=fields.Date.context_today) title = fields.Char( string='Заголовок', compute='_compute_title', store=True, readonly=False, help='Заголовок приказа. По умолчанию формируется по виду приказа.') body = fields.Html( string='Текст приказа', help='Основной текст (приказываю: ...). Можно править.') responsible_employee_id = fields.Many2one( 'hr.employee', string='Назначаемый ответственный', help='Сотрудник, назначаемый ответственным за ВУ (для приказа о ' 'назначении).') signatory_name = fields.Char( string='Подписант', compute='_compute_signatory', store=True, readonly=False) signatory_title = fields.Char( string='Должность подписанта', compute='_compute_signatory', store=True, readonly=False) @api.depends('kind') def _compute_title(self): labels = dict(ORDER_KIND) for rec in self: if not rec.title: rec.title = labels.get(rec.kind, 'Приказ по воинскому учёту') @api.depends('company_id') def _compute_signatory(self): for rec in self: signatory = rec.company_id.rsbu_signatory_id if signatory and not rec.signatory_name: rec.signatory_name = signatory.partner_id.name if not rec.signatory_title: rec.signatory_title = ( rec.company_id.rsbu_signatory_title or 'Руководитель') def action_print_docx(self): """Сформировать DOCX приказа по шаблону.""" self.ensure_one() template = self.env.ref( 'ruodoo_rsbu_mil.docx_template_mil_order', raise_if_not_found=False) if not template: raise UserError( 'Не найден шаблон DOCX приказа по воинскому учёту.') return template.report_id.report_action(self)