docx_report_generation/models/res_partner_contract.py

150 lines
4.7 KiB
Python
Raw Normal View History

import datetime
2019-11-12 16:16:14 +05:00
2019-12-25 18:10:48 +05:00
from odoo import _, api, fields, models
2019-12-27 19:18:37 +05:00
from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
2019-11-12 16:16:14 +05:00
2019-12-28 14:15:12 +05:00
from ..utils import MODULE_NAME
2019-11-12 16:16:14 +05:00
class PartnerContract(models.Model):
2019-12-17 09:53:47 +05:00
_name = "res.partner.contract"
2019-12-23 09:03:39 +05:00
_description = "Contract"
2019-12-17 09:53:47 +05:00
_inherit = ["mail.thread", "mail.activity.mixin", "mail.followers"]
2019-11-12 16:16:14 +05:00
2019-12-23 11:39:53 +05:00
def _get_default_name(self):
"""Returns name format `№YYMM-D-N`,
where N is a sequence number of contracts which are created this day
"""
current_day_ts = (
datetime.datetime.now()
.replace(minute=0, hour=0, second=0, microsecond=0)
.timestamp()
)
partner = self.env["res.partner"].browse(self.env.context.get("active_id"))
contracts_today = self.search(
[("partner_id", "=", partner.id), ("create_date_ts", ">=", current_day_ts),]
)
contract_date = "{format_date}-{number}".format(
format_date=datetime.date.strftime(datetime.date.today(), "%y%m-%d"),
number=len(contracts_today) + 1,
)
return contract_date
def _get_default_create_date_ts(self):
"""Returns timestamp of now by local datetime"""
return datetime.datetime.now().timestamp()
res_model = fields.Char(default=lambda self: self._name)
2019-12-23 11:39:53 +05:00
name = fields.Char(string="Contract number", default=_get_default_name,)
2019-12-30 10:26:13 +05:00
create_date = fields.Datetime(string="Created on")
2019-12-23 11:39:53 +05:00
create_date_ts = fields.Char(default=_get_default_create_date_ts)
2019-12-23 09:02:11 +05:00
date_conclusion = fields.Date(string="Date of system conclusion",)
date_conclusion_fix = fields.Date(
2019-12-23 09:02:11 +05:00
string="Date of manual conclusion",
2019-12-17 09:53:47 +05:00
help="Field for manual edit when contract is signed or closed",
default=lambda self: self.date_conclusion,
)
2019-12-17 13:17:58 +05:00
contract_annex_ids = fields.One2many(
"res.partner.contract.annex",
"contract_id",
string="Annexes",
help="Annexes to this contract",
2019-11-12 16:16:14 +05:00
)
contract_annex_number = fields.Integer(
default=1, help="Counter for generate Annex name"
)
2019-11-12 16:16:14 +05:00
partner_id = fields.Many2one(
2019-12-17 09:53:47 +05:00
"res.partner",
string="Partner",
2019-12-17 09:53:47 +05:00
default=lambda self: self.env.context.get("active_id"),
required=True,
2019-11-12 16:16:14 +05:00
)
company_id = fields.Many2one(
"res.partner",
string="Company",
default=lambda self: self.env.user.company_id.partner_id,
)
2019-12-17 09:53:47 +05:00
state = fields.Selection(
[("draft", "New"), ("sign", "Signed"), ("close", "Closed"),],
string="Status",
2019-12-12 19:03:09 +05:00
readonly=True,
copy=False,
index=True,
2019-12-17 09:53:47 +05:00
track_visibility="onchange",
2019-12-12 19:03:09 +05:00
track_sequence=3,
2019-12-17 09:53:47 +05:00
default="draft",
2019-12-12 19:03:09 +05:00
)
2019-11-12 16:16:14 +05:00
2019-12-12 19:03:09 +05:00
@api.multi
def action_sign(self):
2019-12-17 09:53:47 +05:00
self.write({"state": "sign", "date_conclusion": fields.Date.today()})
2019-12-12 19:03:09 +05:00
@api.multi
def action_close(self):
2019-12-17 09:53:47 +05:00
self.write({"state": "close"})
2019-12-12 19:03:09 +05:00
@api.multi
def action_renew(self):
2019-12-17 09:53:47 +05:00
self.write({"state": "draft"})
2019-12-12 19:03:09 +05:00
@api.multi
def action_print_form(self):
2019-12-30 16:02:07 +05:00
view = self.env.ref(
"{}.res_partner_wizard_print_contract_view".format(MODULE_NAME)
)
return {
2019-12-25 13:04:26 +05:00
"name": _("Print Form of Contract"),
"type": "ir.actions.act_window",
"res_model": "res.partner.contract.wizard",
"view_mode": "form",
"view_id": view.id,
"target": "new",
"context": {"self_id": self.id},
}
2019-12-27 19:18:37 +05:00
def get_date(self):
"""Uses in xml action (data/fields_default)
Returns:
datetime.datetime -- date_conclusion_fix or date_conclusion or create_date
"""
2019-12-27 19:18:37 +05:00
date = self.date_conclusion_fix or self.date_conclusion
if date:
date = datetime.datetime.strptime(date, DEFAULT_SERVER_DATE_FORMAT)
else:
date = self.create_date
date = datetime.datetime.strptime(date, DEFAULT_SERVER_DATETIME_FORMAT)
return date
2019-12-27 18:42:46 +05:00
def _(self, arg):
"""Uses in xml action (data/fields_default)
Arguments:
arg {str} -- String to translate
"""
return _(arg)
2019-11-12 16:16:14 +05:00
class DocumentTemplate(models.Model):
_name = "res.partner.document.template"
_description = "Document Template"
2020-01-13 17:49:51 +05:00
_order = "template_type desc,company_type,sequence"
2019-11-12 16:16:14 +05:00
name = fields.Char()
2019-12-17 13:17:58 +05:00
attachment_id = fields.Many2one(
"ir.attachment", string="Template Attachment", required=True,
)
2019-12-27 18:06:54 +05:00
company_type = fields.Selection(
selection=[
2019-12-28 10:56:43 +05:00
("person", "Individual"),
("sp", "Sole Proprietor"),
("plc", "Private Limited Company"),
2019-12-27 18:06:54 +05:00
]
)
template_type = fields.Selection(
selection=[("contract", "Contract"), ("annex", "Annex"),]
)
2020-01-13 16:05:39 +05:00
sequence = fields.Integer()