import datetime from odoo import _, fields, models from ..utils import MODULE_NAME # from ..utils.misc import Extension, IDocument class PartnerContract(models.Model): # , IDocument, Extension): _name = "res.partner.contract" _description = "Contract" _inherit = [ "mail.thread", "mail.activity.mixin", "mail.followers", "client_contracts.utils", ] 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() ) contracts_today = self.search([("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 @staticmethod def _get_default_create_date_ts(): """Returns timestamp of now by local datetime""" return datetime.datetime.now().timestamp() partner_id = fields.Many2one( "res.partner", string="Partner", default=lambda self: self.env.context.get("active_id"), required=True, ) company_id = fields.Many2one( "res.partner", string="Company", default=lambda self: self.env.company.partner_id, ) create_date_ts = fields.Char(default=_get_default_create_date_ts) res_model = fields.Char(default=lambda self: self._name) name = fields.Char( string="Contract number", default=_get_default_name, ) create_date = fields.Datetime(string="Created on") date_conclusion = fields.Date( string="Signing date in system", ) date_conclusion_fix = fields.Date( string="Actual signing date", help="Field for pointing out manually when contract is signed or closed", default=lambda self: self.date_conclusion, ) contract_annex_ids = fields.One2many( comodel_name="res.partner.contract.annex", inverse_name="contract_id", string="Annexes", help="Annexes to this contract", ) contract_annex_number = fields.Integer( default=1, help="Counter for generate Annex name" ) state = fields.Selection( [ ("draft", "New"), ("sign", "Signed"), ("close", "Closed"), ], string="Status", readonly=True, copy=False, index=True, tracking=True, track_sequence=3, default="draft", ) def action_sign(self): self.write({"state": "sign", "date_conclusion": fields.Date.today()}) def action_close(self): self.write({"state": "close"}) def action_renew(self): self.write({"state": "draft"}) def action_print_form(self): self.ensure_one() view = self.env.ref( "{}.res_partner_wizard_print_document_view".format(MODULE_NAME) ) return { "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, "active_model": self._name, "company_form": self.partner_id.company_form if self.partner_id.is_company else "person", }, } def get_name_by_document_template(self, document_template_id): self.ensure_one() return self.name def get_filename_by_document_template(self, document_template_id): self.ensure_one() return _("{type} {number} from {date}").format( type=_( dict(document_template_id._fields["document_type"].selection).get( document_template_id.document_type ) ), number=self.name, date=self.get_date().strftime("%d.%m.%Y"), ) def get_date(self): """Uses in xml action (data/fields_default) Returns: datetime.datetime -- date_conclusion_fix or date_conclusion or create_date """ self.ensure_one() date = self.date_conclusion_fix or self.date_conclusion return date or self.create_date @staticmethod def _(arg): """Uses in xml action (data/fields_default) Arguments: arg {str} -- String to translate """ return _(arg)