Public release from ruodoo-project: 19.0 - 2026-11-01 22:52:25 UTC
This commit is contained in:
83
ruodoo_rsbu_mil/models/ruodoo_rsbu_mil_order.py
Normal file
83
ruodoo_rsbu_mil/models/ruodoo_rsbu_mil_order.py
Normal file
@@ -0,0 +1,83 @@
|
||||
# -*- 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)
|
||||
Reference in New Issue
Block a user