Files
public/ruodoo_rsbu_mil/models/ruodoo_rsbu_mil_order.py

84 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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)