119 lines
3.9 KiB
Python
Raw Normal View History

2018-11-08 17:16:01 +05:00
# -*- coding: utf-8 -*-
from datetime import datetime
from odoo import models, fields, api
class PartnerContract(models.Model):
_name = 'res.partner.contract'
name = fields.Char(
string='Contract number',
help='Number of contract, letters and digits',)
date = fields.Date(
string='Date of conclusion',
help='Date, when contract was concluded',
default=datetime.now().date(),
required=True)
partner_id = fields.Many2one(
'res.partner',
string='Contract Partner',
help='Contract partner',
default=lambda self: self.env.context['active_id'],
required=True)
order_ids = fields.One2many(
'sale.order',
'contract_id',
string='Annexes',
help='Annexes to this contract')
2018-11-08 18:10:12 +05:00
def _calculate_contract_name(self, _date):
contract_date = datetime.strptime(_date, '%Y-%m-%d')
2018-11-08 17:16:01 +05:00
date_part = contract_date.strftime('%d%m-%y')
today_contracts = self.search([('date', '=', contract_date.date())])
if len(today_contracts) > 0:
last_contract_number = int(today_contracts[-1].name.split('-')[2]) + 1
else:
last_contract_number = 1
2018-11-08 18:10:12 +05:00
return '{}-{}'.format(date_part, last_contract_number)
@api.onchange('date')
def _change_contract_name(self):
"""
Procedure for forming contract name
:return: contract name in format "DDMM-YY-№"
"""
self.name = self._calculate_contract_name(self.date)
@api.model
def create(self, vals):
2018-11-09 12:53:20 +05:00
datetime_now = datetime.now().strftime("%Y-%m-%d")
vals['name'] = self._calculate_contract_name(datetime_now)
2018-11-08 17:16:01 +05:00
return super(PartnerContract, self).create(vals)
class AnnexType(models.Model):
_name = 'res.partner.contract.annex.type'
name = fields.Char(string='Annex template name')
description = fields.Text(string='Annex template description')
class ResPartner(models.Model):
_inherit = 'res.partner'
client_contract_ids = fields.One2many(
'res.partner.contract',
'partner_id',
string='Contracts',
help='Contracts for this partner')
contract_count = fields.Integer(
compute='_compute_contract_count',
string='# of contracts')
contract_name = fields.Char(string='Contract name', help='Name, as it would be in contract')
contract_job_name = fields.Char(string='Contract job name', help='Job position as it would be in contract')
representative_id = fields.Many2one('res.partner', string='Representative', help='Person, who represents company')
passport_data = fields.Char(string='Passport', help='Passport data')
full_adress = fields.Char(compute='_compute_full_adress')
bank_account = fields.Many2one('res.partner.bank', string='Bank account')
signature = fields.Binary(string='Client signature')
@api.one
@api.depends('street', 'street2', 'city', 'state_id', 'zip', 'country_id')
def _compute_full_adress(self):
2018-11-09 12:53:20 +05:00
if self.zip:
full_adress = '{}, {}, {}, {} {}'.format(self.zip, self.country_id.name, self.city, self.street,
self.street2)
else:
full_adress = '{}, {}, {} {}'.format(self.country_id.name, self.city, self.street,
self.street2)
2018-11-08 17:16:01 +05:00
self.full_adress = full_adress
@api.one
@api.depends('self.client_contract_ids')
def _compute_contract_count(self):
self.contract_count = len(self.client_contract_ids)
class SaleOrder(models.Model):
_inherit = 'sale.order'
contract_id = fields.Many2one(
'res.partner.contract',
string='Contract',
help='Contract, assigned to this order')
class ContractTemplate(models.Model):
_name = 'res.partner.contract.template'
_inherit = 'ir.attachment'
is_contract_template = fields.Boolean(srting='Is this document contract template?', default=True)