84 lines
3.9 KiB
Python
84 lines
3.9 KiB
Python
# -*- 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)
|