Initial commit
This commit is contained in:
parent
84d09e7a31
commit
1f2911c1f5
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.pyc
|
||||
idea/
|
4
__init__.py
Normal file
4
__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import controllers
|
||||
from . import models
|
35
__manifest__.py
Normal file
35
__manifest__.py
Normal file
@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': "client_contracts",
|
||||
|
||||
'summary': """
|
||||
Module for storing and creating print forms for contracts with clients""",
|
||||
|
||||
'description': """
|
||||
Module for storing and creating print forms for contracts with clients
|
||||
""",
|
||||
|
||||
'author': "RYDLAB",
|
||||
'website': "http://rydlab.ru",
|
||||
|
||||
# Categories can be used to filter modules in modules listing
|
||||
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
|
||||
# for the full list
|
||||
'category': 'hr',
|
||||
'version': '0.1',
|
||||
|
||||
# any module necessary for this one to work correctly
|
||||
'depends': ['base', 'sale'],
|
||||
|
||||
# always loaded
|
||||
'data': [
|
||||
# 'security/ir.model.access.csv',
|
||||
'views/templates.xml',
|
||||
'views/res_partner.xml',
|
||||
'views/contract_wizard.xml',
|
||||
],
|
||||
# only loaded in demonstration mode
|
||||
'demo': [
|
||||
'demo/demo.xml',
|
||||
],
|
||||
}
|
3
controllers/__init__.py
Normal file
3
controllers/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import controllers
|
16
controllers/controllers.py
Normal file
16
controllers/controllers.py
Normal file
@ -0,0 +1,16 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from werkzeug import datastructures
|
||||
|
||||
from odoo import http
|
||||
|
||||
|
||||
class ResPartnerContractBinary(http.Controller):
|
||||
|
||||
@http.route('/web/binary/get_compiled_contract')
|
||||
def download_compiled_contract(self, doc_id, doc_name):
|
||||
contract_wizard = http.request.env['res.partner.contract.wizard'].sudo().browse(int(doc_id))
|
||||
file_content = contract_wizard.get_docx_contract_1()
|
||||
headers = datastructures.Headers()
|
||||
headers.add('Content-Disposition', 'attachment', filename=doc_name)
|
||||
return http.request.make_response(file_content, headers)
|
30
demo/demo.xml
Normal file
30
demo/demo.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- -->
|
||||
<!-- <record id="object0" model="client_contracts.client_contracts"> -->
|
||||
<!-- <field name="name">Object 0</field> -->
|
||||
<!-- <field name="value">0</field> -->
|
||||
<!-- </record> -->
|
||||
<!-- -->
|
||||
<!-- <record id="object1" model="client_contracts.client_contracts"> -->
|
||||
<!-- <field name="name">Object 1</field> -->
|
||||
<!-- <field name="value">10</field> -->
|
||||
<!-- </record> -->
|
||||
<!-- -->
|
||||
<!-- <record id="object2" model="client_contracts.client_contracts"> -->
|
||||
<!-- <field name="name">Object 2</field> -->
|
||||
<!-- <field name="value">20</field> -->
|
||||
<!-- </record> -->
|
||||
<!-- -->
|
||||
<!-- <record id="object3" model="client_contracts.client_contracts"> -->
|
||||
<!-- <field name="name">Object 3</field> -->
|
||||
<!-- <field name="value">30</field> -->
|
||||
<!-- </record> -->
|
||||
<!-- -->
|
||||
<!-- <record id="object4" model="client_contracts.client_contracts"> -->
|
||||
<!-- <field name="name">Object 4</field> -->
|
||||
<!-- <field name="value">40</field> -->
|
||||
<!-- </record> -->
|
||||
<!-- -->
|
||||
</data>
|
||||
</odoo>
|
3
models/__init__.py
Normal file
3
models/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models, contract_wizard
|
372
models/contract_wizard.py
Normal file
372
models/contract_wizard.py
Normal file
@ -0,0 +1,372 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import math
|
||||
|
||||
from datetime import datetime
|
||||
from docxtpl import DocxTemplate
|
||||
from pytils import numeral
|
||||
|
||||
from odoo import models, fields, api
|
||||
from odoo.tools.config import config
|
||||
|
||||
|
||||
class AnnexLine(models.TransientModel):
|
||||
_name = 'res.partner.contract.annex.line'
|
||||
|
||||
@api.onchange('annex_type')
|
||||
def _get_default_description(self):
|
||||
self.description = self.annex_type.description
|
||||
|
||||
annex_type = fields.Many2one('res.partner.contract.annex.type')
|
||||
description = fields.Text()
|
||||
|
||||
|
||||
class ContractWizard(models.TransientModel):
|
||||
_name = 'res.partner.contract.wizard'
|
||||
|
||||
def _get_default_template(self):
|
||||
_template = self.env['res.partner.contract.template'].search([('is_contract_template', '=', True)])
|
||||
if _template:
|
||||
return _template[0].id
|
||||
else:
|
||||
return False
|
||||
|
||||
def _get_default_partner(self):
|
||||
current_id = self.env.context.get('active_ids')
|
||||
return self.env['res.partner.contract'].browse([current_id[0]]).partner_id.id
|
||||
|
||||
def _get_default_contract(self):
|
||||
current_id = self.env.context.get('active_ids')
|
||||
return self.env['res.partner.contract'].browse(current_id[0])
|
||||
|
||||
def _get_partner_representer(self):
|
||||
return self.partner_id.representative_id
|
||||
|
||||
type = fields.Selection(string='Type of contract',
|
||||
selection=[('person', 'With person'), ('company', 'With company')],
|
||||
default='company')
|
||||
|
||||
template = fields.Many2one('res.partner.contract.template',
|
||||
string='Template',
|
||||
help='Template for contract',
|
||||
default=_get_default_template)
|
||||
partner_id = fields.Many2one('res.partner',
|
||||
string='Partner',
|
||||
help='Partner to render contract',
|
||||
default=_get_default_partner)
|
||||
order_id = fields.Many2one('sale.order',
|
||||
string='Appex order',
|
||||
help='Appex',
|
||||
)
|
||||
company_id = fields.Many2one('res.partner',
|
||||
string='Company',
|
||||
help='Seller company',
|
||||
default=lambda self: self.env.user.company_id.partner_id)
|
||||
|
||||
contract_id = fields.Many2one('res.partner.contract',
|
||||
string='Contract',
|
||||
default=_get_default_contract)
|
||||
payment_terms = fields.Integer(string='Payment term',
|
||||
help='When customer must pay',
|
||||
default=45)
|
||||
delivery_terms = fields.Integer(string='Delivery terms',
|
||||
help='When product must be delivered',
|
||||
default=10)
|
||||
|
||||
annex_lines = fields.One2many('res.partner.contract.annex.line', 'id', auto_join=True, copy=True)
|
||||
|
||||
@api.onchange('contract_id')
|
||||
def _compute_context_name(self):
|
||||
self._context_name = self.contract_id.name
|
||||
|
||||
@api.onchange('contract_id')
|
||||
def _compute_context_date(self):
|
||||
contract_date = datetime.strptime(self.contract_id.date, '%Y-%m-%d')
|
||||
self._context_date = contract_date.strftime('%d %b %Y')
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_contract_name(self):
|
||||
self._context_partner_contract_name = self.partner_id.contract_name
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_adress(self):
|
||||
self._compute_context_partner_adress = self.partner_id.full_adress
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_representer_contract_name(self):
|
||||
if self.partner_id.representative_id:
|
||||
partner_representer_contract_name = self.partner_id.representative_id.contract_name
|
||||
else:
|
||||
partner_representer_contract_name = ''
|
||||
self._context_partner_representer_contract_name = partner_representer_contract_name
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_inn(self):
|
||||
self._context_partner_inn = self.partner_id.inn
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_kpp(self):
|
||||
self._context_partner_kpp = self.partner_id.kpp
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_rs(self):
|
||||
self._context_partner_rs = self.partner_id.bank_account.acc_number
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_bik(self):
|
||||
self._context_partner_bik = self.partner_id.bank_account.bank_id.bic
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_bank(self):
|
||||
self._context_partner_bank = self.partner_id.bank_account.bank_id.name
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_phone(self):
|
||||
self._context_partner_phone = self.partner_id.phone
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _compute_context_partner_representer_name(self):
|
||||
self._context_partner_representer_name = self.partner_id.representative_id.name
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_contract_name(self):
|
||||
self._context_seller_contract_name = self.company_id.contract_name
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_adress(self):
|
||||
self._context_seller_adress = self.company_id.full_adress
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_representer_contract_job_name(self):
|
||||
if self.company_id.representative_id:
|
||||
seller_represent_contract_job_name = self.company_id.representative_id.contract_job_name
|
||||
else:
|
||||
seller_represent_contract_job_name = ''
|
||||
self._context_seller_representer_contract_job_name = seller_represent_contract_job_name
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_representer_contract_name(self):
|
||||
if self.company_id.representative_id:
|
||||
seller_represent_contract_name = self.company_id.representative_id.contract_name
|
||||
else:
|
||||
seller_represent_contract_name = ''
|
||||
self._context_seller_representer_contract_name = seller_represent_contract_name
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_inn(self):
|
||||
self._context_seller_inn = self.company_id.inn
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_kpp(self):
|
||||
self._context_seller_kpp = self.company_id.kpp
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_rs(self):
|
||||
self._context_seller_rs = self.company_id.bank_account.acc_number
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_bik(self):
|
||||
self._context_seller_bik = self.company_id.bank_account.bank_id.bic
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_bank(self):
|
||||
self._context_seller_bank = self.company_id.bank_account.bank_id.name
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_phone(self):
|
||||
self._context_seller_phone = self.company_id.phone
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_representer_job_name(self):
|
||||
if self.company_id.representative_id:
|
||||
seller_represent_job_name = self.company_id.representative_id.function
|
||||
else:
|
||||
seller_represent_job_name = ''
|
||||
self._context_seller_representer_job_name = seller_represent_job_name
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _compute_context_seller_representer_name(self):
|
||||
if self.company_id.representative_id:
|
||||
seller_represent_name = self.company_id.representative_id.name
|
||||
else:
|
||||
seller_represent_name = ''
|
||||
self._context_seller_representer_name = seller_represent_name
|
||||
|
||||
@api.onchange('order_id')
|
||||
def _compute_context_summ_rub(self):
|
||||
if self.order_id:
|
||||
amount = math.modf(self.order_id.amount_total)
|
||||
else:
|
||||
amount = math.modf(0.0)
|
||||
self._context_summ_rub = str(int(amount[1]))
|
||||
|
||||
@api.onchange('order_id')
|
||||
def _compute_context_summ_rub_word(self):
|
||||
if self.order_id:
|
||||
amount = math.modf(self.order_id.amount_total)
|
||||
else:
|
||||
amount = math.modf(0.0)
|
||||
self._context_summ_rub_word = numeral.in_words(int(amount[1]))
|
||||
|
||||
@api.onchange('order_id')
|
||||
def _compute_context_summ_kop(self):
|
||||
if self.order_id:
|
||||
amount = math.modf(self.order_id.amount_total)
|
||||
self._context_summ_kop = str(int(amount[0]))
|
||||
else:
|
||||
self._context_summ_kop = '0'
|
||||
|
||||
@api.onchange('order_id')
|
||||
def _compute_context_summ_word(self):
|
||||
self._context_summ_word = numeral.rubles(self.order_id.amount_total)
|
||||
|
||||
@api.onchange('delivery_terms')
|
||||
def _compute_context_delivery_term(self):
|
||||
self._context_delivery_term = self.delivery_terms
|
||||
|
||||
@api.onchange('delivery_terms')
|
||||
def _compute_context_delivery_term_word(self):
|
||||
self._context_delivery_term_word = numeral.in_words(self.delivery_terms)
|
||||
|
||||
@api.onchange('payment_terms')
|
||||
def _compute_context_payment_term(self):
|
||||
self._context_payment_term = self.payment_terms
|
||||
|
||||
@api.onchange('payment_terms')
|
||||
def _compute_context_payment_term_word(self):
|
||||
self._context_payment_term_word = numeral.in_words(self.payment_terms)
|
||||
|
||||
_context_name = fields.Char(compute='_compute_context_name', readonly=True)
|
||||
_context_date = fields.Char(compute='_compute_context_date', readonly=True)
|
||||
_context_partner_contract_name = fields.Char(compute='_compute_context_partner_contract_name', readonly=True)
|
||||
_context_partner_adress = fields.Char(compute='_compute_context_partner_adress', readonly=True)
|
||||
_context_partner_representer_contract_name = fields.Char(
|
||||
compute='_compute_context_partner_representer_contract_name', readonly=True)
|
||||
_context_partner_inn = fields.Char(compute='_compute_context_partner_inn', readonly=True)
|
||||
_context_partner_kpp = fields.Char(compute='_compute_context_partner_kpp', readonly=True)
|
||||
_context_partner_rs = fields.Char(compute='_compute_context_partner_rs', readonly=True)
|
||||
_context_partner_bik = fields.Char(compute='_compute_context_partner_bik', readonly=True)
|
||||
_context_partner_bank = fields.Char(compute='_compute_context_partner_bank', readonly=True)
|
||||
_context_partner_phone = fields.Char(compute='_compute_context_partner_phone', readonly=True)
|
||||
_context_partner_representer_name = fields.Char(compute='_compute_context_partner_representer_name', readonly=True)
|
||||
_context_seller_contract_name = fields.Char(compute='_compute_context_seller_contract_name', readonly=True)
|
||||
_context_seller_adress = fields.Char(compute='_compute_context_seller_adress', readonly=True)
|
||||
_context_seller_representer_contract_job_name = fields.Char(
|
||||
compute='_compute_context_seller_representer_contract_job_name', readonly=True)
|
||||
_context_seller_representer_contract_name = fields.Char(compute='_compute_context_seller_representer_contract_name',
|
||||
readonly=True)
|
||||
_context_seller_inn = fields.Char(compute='_compute_context_seller_inn', readonly=True)
|
||||
_context_seller_kpp = fields.Char(compute='_compute_context_seller_kpp', readonly=True)
|
||||
_context_seller_rs = fields.Char(compute='_compute_context_seller_rs', readonly=True)
|
||||
_context_seller_bik = fields.Char(compute='_compute_context_seller_bik', readonly=True)
|
||||
_context_seller_bank = fields.Char(compute='_compute_context_seller_bank', readonly=True)
|
||||
_context_seller_phone = fields.Char(compute='_compute_context_seller_phone', readonly=True)
|
||||
_context_seller_representer_job_name = fields.Char(compute='_compute_context_seller_representer_job_name',
|
||||
readonly=True)
|
||||
_context_seller_representer_name = fields.Char(compute='_compute_context_seller_representer_name', readonly=True)
|
||||
_context_summ_rub = fields.Char(compute='_compute_context_summ_rub', readonly=True)
|
||||
_context_summ_rub_word = fields.Char(compute='_compute_context_summ_rub_word', readonly=True)
|
||||
_context_summ_kop = fields.Char(compute='_compute_context_summ_kop', readonly=True)
|
||||
_context_summ_word = fields.Char(compute='_compute_context_summ_word', readonly=True)
|
||||
_context_delivery_term = fields.Char(compute='_compute_context_delivery_term', readonly=True)
|
||||
_context_delivery_term_word = fields.Char(compute='_compute_context_delivery_term_word', readonly=True)
|
||||
_context_payment_term = fields.Char(compute='_compute_context_payment_term', readonly=True)
|
||||
_context_payment_term_word = fields.Char(compute='_compute_context_payment_term_word', readonly=True)
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _set_order_domain(self):
|
||||
current_id = self.env.context.get('active_ids')
|
||||
domain = [('contract_id', '=', current_id)]
|
||||
return {'domain': {'order_id': domain}}
|
||||
|
||||
def _generate_context(self):
|
||||
contract_date = datetime.strptime(self.contract_id.date, '%Y-%m-%d')
|
||||
if self.partner_id.representative_id:
|
||||
partner_representer_contract_name = self.partner_id.representative_id.contract_name
|
||||
else:
|
||||
partner_representer_contract_name = ''
|
||||
|
||||
if self.company_id.representative_id:
|
||||
seller_represent_contract_name = self.company_id.representative_id.contract_name
|
||||
seller_represent_contract_job_name = self.company_id.representative_id.contract_job_name
|
||||
seller_represent_name = self.company_id.representative_id.name
|
||||
seller_represent_job_name = self.company_id.representative_id.function
|
||||
else:
|
||||
seller_represent_contract_name = ''
|
||||
seller_represent_contract_job_name = ''
|
||||
seller_represent_name = ''
|
||||
seller_represent_job_name = ''
|
||||
|
||||
amount = math.modf(self.order_id.amount_total)
|
||||
|
||||
order_goods = []
|
||||
counter = 1
|
||||
for line in self.order_id.order_line:
|
||||
order_line_values = {'label': counter,
|
||||
'description': line.name,
|
||||
'count': line.product_qty,
|
||||
'mesure': line.product_uom.name,
|
||||
'price': line.price_unit,
|
||||
'amount': line.price_total}
|
||||
order_goods.append(order_line_values)
|
||||
counter += 1
|
||||
|
||||
annex_terms = ''
|
||||
counter = 1
|
||||
for line in self.annex_lines:
|
||||
annex_terms = annex_terms + '{}) {}\n'.format(counter, line.description)
|
||||
counter += 1
|
||||
context = {'name': self.contract_id.name,
|
||||
'current_date': contract_date.strftime('%d %b %Y'),
|
||||
'partner_contract_name': self.partner_id.contract_name,
|
||||
'partner_adress': self.partner_id.full_adress,
|
||||
'partner_representer_contract_name': partner_representer_contract_name,
|
||||
'partner_inn': self.partner_id.inn,
|
||||
'partner_kpp': self.partner_id.kpp,
|
||||
'partner_rs': self.partner_id.bank_account.acc_number,
|
||||
'partner_bik': self.partner_id.bank_account.bank_id.bic,
|
||||
'partner_bank': self.partner_id.bank_account.bank_id.name,
|
||||
'partner_phone': self.partner_id.phone,
|
||||
'partner_representer_name': self.partner_id.representative_id.name,
|
||||
'seller_contract_name': self.company_id.contract_name,
|
||||
'seller_adress': self.company_id.full_adress,
|
||||
'seller_representer_contract_job_name': seller_represent_contract_job_name,
|
||||
'seller_representer_contract_name': seller_represent_contract_name,
|
||||
'seller_inn': self.company_id.inn,
|
||||
'seller_kpp': self.company_id.kpp,
|
||||
'seller_rs': self.company_id.bank_account.acc_number,
|
||||
'seller_bik': self.company_id.bank_account.bank_id.bic,
|
||||
'seller_bank': self.company_id.bank_account.bank_id.name,
|
||||
'seller_phone': self.company_id.phone,
|
||||
'seller_representer_job_name': seller_represent_job_name,
|
||||
'seller_representer_name': seller_represent_name,
|
||||
'summ_rub': int(amount[1]),
|
||||
'summ_rub_word': numeral.in_words(int(amount[1])),
|
||||
'summ_kop': int(amount[0]),
|
||||
'delivery_term': self.delivery_terms,
|
||||
'delivery_term_word': numeral.in_words(self.delivery_terms),
|
||||
'payment_term': self.payment_terms,
|
||||
'payment_term_word': numeral.in_words(self.payment_terms),
|
||||
'annex_terms': annex_terms,
|
||||
'order_goods': order_goods,
|
||||
}
|
||||
return context
|
||||
|
||||
def get_docx_contract_1(self):
|
||||
odoo_data_dir = config.get("data_dir")
|
||||
odoo_bd = config.get("dbfilter")
|
||||
filename = self.template.store_fname
|
||||
full_path = '{}/filestore/{}/{}'.format(odoo_data_dir, odoo_bd, filename)
|
||||
context = self._generate_context()
|
||||
doc = DocxTemplate(full_path)
|
||||
doc.render(context)
|
||||
doc.save('tmp.docx')
|
||||
return open('tmp.docx', 'rb').read()
|
||||
|
||||
def get_docx_contract(self):
|
||||
return {
|
||||
'type': 'ir.actions.act_url',
|
||||
'url': '/web/binary/get_compiled_contract?doc_id={}&doc_name={}.docx'.format(self.id,
|
||||
self.contract_id.name),
|
||||
'target': 'self',
|
||||
}
|
115
models/models.py
Normal file
115
models/models.py
Normal file
@ -0,0 +1,115 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from odoo import models, fields, api
|
||||
|
||||
|
||||
class PartnerContract(models.Model):
|
||||
|
||||
_name = 'res.partner.contract'
|
||||
|
||||
@api.onchange('date')
|
||||
def _change_contract_name(self):
|
||||
"""
|
||||
Procedure for forming contract name
|
||||
:return: contract name in format "DDMM-YY-№"
|
||||
"""
|
||||
contract_date = datetime.strptime(self.date, '%Y-%m-%d')
|
||||
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
|
||||
self.name = '{}-{}'.format(date_part, last_contract_number)
|
||||
|
||||
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')
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
contract_date = datetime.now()
|
||||
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
|
||||
vals['name'] = '{}-{}'.format(date_part, last_contract_number)
|
||||
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):
|
||||
full_adress = '{}, {}, {}, {} {}'.format(self.zip, self.country_id.name, self.city, self.street, self.street2)
|
||||
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)
|
2
security/ir.model.access.csv
Normal file
2
security/ir.model.access.csv
Normal file
@ -0,0 +1,2 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_client_contracts_client_contracts,client_contracts.client_contracts,model_client_contracts_client_contracts,,1,0,0,0
|
|
83
views/contract_wizard.xml
Normal file
83
views/contract_wizard.xml
Normal file
@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" ?>
|
||||
<odoo>
|
||||
|
||||
<act_window id="res_partner_contract_wizard_action"
|
||||
name="Contract wizard"
|
||||
res_model="res.partner.contract.wizard"
|
||||
src_model="res.partner.contract"
|
||||
view_mode="form"
|
||||
target="new"/>
|
||||
|
||||
<report
|
||||
id="contract_company_template"
|
||||
model="res.partner.contract.wizard"
|
||||
string="Contract"
|
||||
report_type="qweb-pdf"
|
||||
name="client_contracts.contract_template"
|
||||
file="client_contracts.contract_template"
|
||||
/>
|
||||
|
||||
<report
|
||||
id="contract_personal_template"
|
||||
model="res.partner.contract.wizard"
|
||||
string="Contract"
|
||||
report_type="qweb-pdf"
|
||||
name="client_contracts.contract_fiz_template"
|
||||
file="client_contracts.contract_fiz_template"
|
||||
/>
|
||||
|
||||
<report
|
||||
id="contract_appex_only_template_print"
|
||||
model="res.partner.contract.wizard"
|
||||
string="Contract"
|
||||
report_type="qweb-pdf"
|
||||
name="client_contracts.contract_appex_only_template"
|
||||
file="client_contracts.contract_appex_only_template"
|
||||
/>
|
||||
|
||||
<record id="res_partner_contract_wizard_view" model="ir.ui.view">
|
||||
<field name="name">Contract print wizard</field>
|
||||
<field name="model">res.partner.contract.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<group>
|
||||
<field name="template"/>
|
||||
<group name="partner" string="Partner parameters">
|
||||
<field name="partner_id"/>
|
||||
</group>
|
||||
<group name="seller" string="Seller parameters">
|
||||
<field name="company_id"/>
|
||||
</group>
|
||||
<group name="terms" string="Delivery and payment terms">
|
||||
<field name="payment_terms"/>
|
||||
<field name="delivery_terms"/>
|
||||
</group>
|
||||
<group string="Order info" name="order">
|
||||
<field name="order_id"/>
|
||||
</group>
|
||||
<field name="annex_lines" mode="tree">
|
||||
<form string="Annex info lines">
|
||||
<field name="annex_type"/>
|
||||
<field name="description"/>
|
||||
</form>
|
||||
<tree string="Annex info" editable="bottom">
|
||||
<field name="annex_type"/>
|
||||
<field name="description"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<button string="Form DOCX from template" type="object" name="get_docx_contract" />
|
||||
<button string="Form contract with company" type="action" name="%(contract_company_template)d" />
|
||||
<button string="Form contract with personal" type="action" name="%(contract_personal_template)d" />
|
||||
<button string="Form only appex contract" type="action" name="%(contract_appex_only_template_print)d" />
|
||||
<footer>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</odoo>
|
147
views/res_partner.xml
Normal file
147
views/res_partner.xml
Normal file
@ -0,0 +1,147 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
|
||||
<record id="search_res_partner_contract_filter" model="ir.ui.view">
|
||||
<field name="name">res_partner_contract_search</field>
|
||||
<field name="model">res.partner.contract</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Contract">
|
||||
<field name="partner_id" operator="child_of"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="res_partner_contract_tree">
|
||||
<field name="name">res_partner_contract</field>
|
||||
<field name="model">res.partner.contract</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Contracts">
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="date"/>
|
||||
<field name="partner_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="res_partner_contract_form">
|
||||
<field name="name">res_partner_contract</field>
|
||||
<field name="model">res.partner.contract</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Contract">
|
||||
<header>
|
||||
<button name="do_toggle_active" type="object"
|
||||
string="Active" class="oe_highlight" />
|
||||
</header>
|
||||
<sheet>
|
||||
<group string="Contract parameters" name="single_params">
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="date"/>
|
||||
<field name="partner_id"/>
|
||||
</group>
|
||||
<group string="Annexed orders" name="multi_params">
|
||||
<field name="order_ids" widget="many2many"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="res_partner_contract_action">
|
||||
<field name="name">res_partner_contract</field>
|
||||
<field name="res_model">res.partner.contract</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'search_default_partner_id': active_id}</field>
|
||||
</record>
|
||||
|
||||
<record id="order_contract_tree" model="ir.actions.act_window">
|
||||
<field name="name">Appexes</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Appexes">
|
||||
<field name="name"/>
|
||||
<field name="date"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_contract_view_buttons" model="ir.ui.view">
|
||||
<field name="name">res.partner.contract.view.buttons</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="25"/>
|
||||
<field name="arch" type="xml">
|
||||
<button name="toggle_active" position="before">
|
||||
<button class="oe_inline oe_stat_button" type="action" name="%(res_partner_contract_action)d"
|
||||
attrs="{'invisible': [('customer', '=', False)]}"
|
||||
icon="fa-pencil-square-o">
|
||||
<field string="Contracts" name="contract_count" widget="statinfo"/>
|
||||
</button>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_inherit" model="ir.ui.view">
|
||||
<field name="name">res.partner.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="25"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='category_id']" position="after">
|
||||
<field name="contract_name"/>
|
||||
<field name="contract_job_name"/>
|
||||
<field name="representative_id" domain="[('id', 'in', child_ids)]" attrs="{'invisible': [('company_type', '!=', 'company')]}"/>
|
||||
<field name="passport_data" attrs="{'invisible': [('company_type', '=', 'company')]}"/>
|
||||
<field name="bank_account"/>
|
||||
<field name="signature" widget="image"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="annex_type_action" model="ir.actions.act_window">
|
||||
<field name="name">annex_action</field>
|
||||
<field name="res_model">res.partner.contract.annex.type</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_contract_annex_type_view" model="ir.ui.view">
|
||||
<field name="name">res_partner_contract_annex_type_view</field>
|
||||
<field name="model">res.partner.contract.annex.type</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Annex type">
|
||||
<field name="name"/>
|
||||
<field name="description"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_contract_template_action" model="ir.actions.act_window">
|
||||
<field name="name">res_partner_contract_template_action</field>
|
||||
<field name="res_model">res.partner.contract.template</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_contract_template_view" model="ir.ui.view">
|
||||
<field name="name">res_partner_contract_template_view</field>
|
||||
<field name="model">res.partner.contract.template</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Template">
|
||||
<field name="name"/>
|
||||
<field name="is_contract_template"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Annex type" parent="sale.menu_sale_config" id="res_partner_contract_annex_type_menu" action="annex_type_action"/>
|
||||
|
||||
<menuitem name="Templates" parent="sale.menu_sale_config" id="res_partner_contract_templates" action="res_partner_contract_template_action"/>
|
||||
|
||||
</odoo>
|
773
views/templates.xml
Normal file
773
views/templates.xml
Normal file
@ -0,0 +1,773 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<odoo>
|
||||
<data>
|
||||
<template id="contract_header_template">
|
||||
<table align="center" border="0px" cellpadding="0" width="100%" style="font-family:Arial; font-size:12px; border-collapse:collapse">
|
||||
<tr>
|
||||
<td align="left" colspan="1">
|
||||
<img src="pic/TS_logo_head.png"/>
|
||||
</td>
|
||||
<td align="right">
|
||||
7 495 008-84-67 hello@tabulasense.ru
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</template>
|
||||
|
||||
<template id="contract_number_and_date">
|
||||
<tr>
|
||||
<td>
|
||||
<hr color="black"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top" width="100%">
|
||||
<td align="center">
|
||||
<b>ДОГОВОР № <t t-esc="doc.contract_id.name"/></b><br/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
&nbsp;
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="left" colspan="2">
|
||||
Москва, <t t-esc="doc._context_date"/><br/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
&nbsp;
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_contact_partner_template">
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<b><t t-esc="docs.partner_id.contract_name"/></b>,
|
||||
юридическое лицо, созданное и зарегистрированное в соответствии с законодательством , с зарегистрированным офисом по адресу: <t t-esc="doc.partner_id.full_adress"/>, здесь и далее именуемое «<b>Покупатель</b>»,
|
||||
в лице уполномоченного представителя <b><t t-esc="doc.partner_id.representative_id.contract_name" /></b>, с одной стороны
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_contact_partner_fiz_template">
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<b><t t-esc="doc.partner_id.contract_name"/></b>,
|
||||
физическое лицо, зарегистрированное по законодательству Российской Федерации, паспорт <t t-esc="doc.partner_id.passport_data" />, зарегистрированное по адресу: <t t-esc="doc.partner_id.full_adress" /> , здесь и далее именуемое «Покупатель», с одной стороны
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_contact_seller_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
и <b><t t-esc="doc.company_id.contract_name"/></b>, юридическое лицо, созданное и зарегистрированное в соответствии с законодательством Российской Федерации, с зарегистрированным офисом по адресу: <t t-esc="doc.company_id.full_adress" />, здесь и далее именуемое «<b>Продавец</b>», в лице <b><t t-esc="doc.company_id.representative_id.contract_job_name" /></b> <b><t t-esc="doc.company_id.representative_id.contract_name" /></b>, действующего на основании Устава, с другой стороны, совместно именуемые «Стороны» и по отдельности «Сторона»,
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_1_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>1. Предмет Договора</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
1.1. Продавец обязуется поставлять, а Покупатель принимать и оплачивать Товары, указанные в Приложениях, являющихся неотъемлемой частью настоящего Договора.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
1.2. В приложениях определяются наименование, количество, условия и срок поставки, порядок и срок оплаты, цена Товара и т.д.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_2_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>2. Сумма Договора</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
2.1. Общая сумма Договора складывается из сумм Приложений к настоящему Договору, подписанных Сторонами.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_3_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>3. Условия поставки</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
3.1. Товар поставляется в согласованные Сторонами сроки, которые указаны в Приложениях к настоящему Договору.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
3.2. В случае экспорта за пределы Российской Федерации Правила Толкования Торговых терминов - Международные торговые термины («Инкотермс 2010») имеют обязательный характер для сторон в рамках настоящего Договора.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
3.3. В случае экспорта за пределы Российской Федерации датой отгрузки товара считается дата транспортного документа.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
3.4. Продавец вправе по своему усмотрению поставлять товар лично, либо поручать отгрузку третьим лицам, в таком случае Продавец несет полную ответственность за них.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
3.5. Покупатель обязан принять поставку от любого из грузоотправителей, предложенных Продавцом, в случае, если это оговорено в приложении к Договору.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_4_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>4. Порядок расчетов</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
4.1. Платеж по настоящему Договору осуществляется Покупателем в течение <t t-esc="doc._context_payment_term" /> (<t t-esc="doc._context_payment_term_word" />) дней с момента выставления счета.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
4.2. При поставке товара на условиях 100% предоплаты, Продавец не позднее чем за 5 (пять) дней до отгрузки любыми имеющимися в его распоряжении средствами связи информирует об этом Покупателя.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
4.3. Стороны предусматривают возможность частичной предоплаты.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
4.4. Платеж осуществляется в рублях путем денежного перевода со счета Покупателя на счет Продавца посредством банковского перевода или с использованием электронных платежных систем.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
4.5. Все расходы, связанные с переводом денежных средств, стороны несут каждая на своей территории.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_5_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>5. Качество товара</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.1. Качество Товара должно полностью соответствовать действующим стандартам Российской Федерации или страны-импортера в случае экспорта за пределы Российской Федерации и удостоверяться документами, выданными компетентными организациями страны происхождения.<br/>
|
||||
Покупатель вправе требовать у Продавца (уполномоченного представителя) безвозмездного устранения недостатков товара, если они обнаружены в течение гарантийного срока или срока годности.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.2. Гарантийный срок равняется гарантийному сроку на Товар, определенному производителем Товара, но не менее 1 (одного) года с момента передачи Товара Покупателю и начинает течь с даты продажи Товара, указанной в гарантийном талоне и перехода права собственности к конечному Покупателю. Гарантийный срок на Товар приостанавливается при невозможности пользоваться Товаром из-за обнаруженных недостатков.<br/>
|
||||
Гарантийный срок на комплектующее изделие равен гарантийному сроку на основное изделие.<br/>
|
||||
При замене некачественного Товара на качественный Товар устанавливается гарантийный срок той же продолжительности, что и на возвращенный некачественный Товар.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.3. Продавец в течение гарантийного срока обязуется осуществлять ремонт или замену комплектующих вышедших из строя по вине Продавца (Производителя), в случае не возможности осуществить ремонт или замену комплектующих Продавец заменяет на аналогичный качественный Товар.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.4. Продавец (уполномоченный представитель) обязан устранить недостатки Товара в течение 45 (сорока пяти) дней, без учета затраченного времени на транспортировку Товара, с даты получения требования от Покупателя.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.5. Гарантия не распротстраняется на неисправности и дефекты, вызванные следующими причинами:<br/>
|
||||
- пожар, затопление стихийные бедствия, бытовые факторы;<br/>
|
||||
- при наличии на мебельных поверхностях механических повреждений, термо-воздействий или следов воздействия химических веществ; неисправности, возникшие вследствие нормального износа изделия; преднамеренная порча изделия или ошибочные действия потребителя (покупателя);<br/>
|
||||
- при неграмотно выполненном самостоятельном подъёме или сборке изделия, внесение изменений в его конструкцию;<br/>
|
||||
- при нарушении правил эксплуатации изделия мебели, а также по истечению гарантийного срока на изделие мебели.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.6. В случае несоблюдения правил эксплуатации и использования Товара не по назначению, Продавец не несёт ответственности за потерю потребительских качеств Товара. Сервисное обслуживание и ремонт Товара будет производиться по решению Продавца, а оказание услуг по ремонту - только за счёт Покупателя по расценкам Продавца.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.7. Продавец обязан обеспечить возможность использования Товара в течение его срока службы. Для этой цели Продавец обеспечивает ремонт и техническое обслуживание Товара, а также выпуск и поставку в торговые и ремонтные организации запасных частей в течение срока производства Товара и после снятия его с производства в течение срока службы Товара.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.8. Качественный Товар возврату или обмену не подлежит.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
5.9. Товар является товаром длительного использования. На него не распространяются требования покупателя о безвозмездном предоставлении ему на период ремонта аналогичного товара.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_6_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>6. Упаковка и маркировка</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
6.1. Товар должен быть надлежащим образом упакован, запечатан и промаркирован в целях его идентификации и безопасности в процессе транспортировки, погрузки и/или хранения.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
6.2. Упаковка должна соответствовать действующим стандартам Российской Федерации.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
6.3. Маркировка Товара осуществляется его производителем.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_7_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>7. Порядок отгрузки</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
7.1. Продавец сообщает Покупателю о готовности Товара к отгрузке не позднее, чем за 5 (пять) дней до планируемой даты отгрузки.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
7.2. В товаросопроводительных документах указываются: наименование товара, количество грузовых мест, количество упаковок, вес брутто и нетто. Исправления, дописки и подчистки в указанных документах не допускаются.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
7.3. В случае экспорта за пределы Российской Федерации после отгрузки товара, но не позднее чем через 24 (двадцать четыре) часа, Продавец любыми доступными ему способами высылает Покупателю оригиналы коммерческих документов на отгруженную партию товара, необходимых для таможенного оформления в стране импортера:<br/>
|
||||
- коммерческий счет в 2 экз.<br/>
|
||||
- счет-проформу в 2 экз.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_8_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>8. Сдача - приемка Товара</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
8.1. Приемка товара производится:<br/>
|
||||
- по количеству мест согласно количеству, указанному в товаросопроводительных документах;<br/>
|
||||
- по количеству изделий согласно спецификации и упаковочным листам;<br/>
|
||||
- по качеству - согласно п.5 настоящего Договора.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_9_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>9. Ответственность сторон</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
9.1. Со стороны Продавца:
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
9.1.1. Если поставка товаров не осуществляется в сроки, предусмотренные настоящим Договором, Продавец выплачивает Покупателю пени в размере 0,05% (ноль целых пяти сотых процента) от стоимости не поставленных в срок товаров за каждый день просрочки, но в совокупности не более 10 (десяти) процентов от стоимости товаров.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
9.1.2. Уплата штрафа за нарушение условий Договора не освобождает Продавца от возмещения ущерба, нанесенного Покупателю из-за несоблюдения Продавцом условий Договора, и от обязанностей по выполнению Договора.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
9.2. Со стороны Покупателя:
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
9.2.1. При несвоевременной оплате Покупатель выплачивает пени в размере 0,05% (ноль целых пяти сотых процента) от невыплаченной суммы за каждый день просрочки, но в совокупности не более 10 (десяти) процентов от общей суммы.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
9.2.2. Уплата штрафа не освобождает Покупателя от обязанностей по исполнению Договора.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
9.3. В случае если недостатки, повреждение или недостачу невозможно было визуально обнаружить при приемке товара (скрытые недостатки), включая контрафактные и фальсифицированные товары с поддельными сертификатами качества, техническими паспортами или свидетельствами на продукцию, Покупатель должен в течение 7 рабочих дней с даты обнаружения недостатков товара направить Продавцу письменное уведомление об обнаруженных им скрытых повреждениях и недостатках товара (Акт о скрытых недостатках). Уведомление направляется в адрес Продавца следующим способом: средствами факсимильной и или электронной связи с дальнейшим направлением заказным письмом с уведомлением.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
В таком случае Покупатель вправе, по своему выбору, требовать от Продавца:<br/>
|
||||
- безвозмездного устранения недостатков товара в разумный срок;<br/>
|
||||
- возмещения своих расходов на устранение недостатков товара.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
В случае существенного нарушения требований к качеству товара, Покупатель вправе, потребовать замены товара ненадлежащего качества товаром, соответствующим договору. В случае возврата некачественного товара Покупателем, Продавец обязуется заменить некачественный товар.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_10_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>10. Форс-мажор</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
10.1. Стороны освобождаются от ответственности за частичное или полное неисполнение обязательств по настоящему Договору, если это неисполнение явилось следствием обстоятельств непреодолимой силы, возникших после заключения договора в результате событий чрезвычайного характера, которые стороны не могли ни предвидеть, ни предотвратить разумными мерами.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
10.2. К обстоятельствам непреодолимой силы относятся события, на которые стороны не могут оказывать влияния и за возникновение которых не несут ответственности.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
10.3. В период действия непреодолимой силы и других обстоятельств, освобождающих от ответственности, обязательства сторон приостанавливаются, и санкции за неисполнение обязательств не применяются.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_11_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>11. Споры</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
11.1. Все споры и разногласия, которые могут возникнуть в связи с исполнением обязательств по настоящему Договору, разрешаются сторонами путем переговоров. В случае не урегулирования спорных вопросов путем переговоров, спор передается на разрешение Арбитражного суда Москвы и Московской области.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
11.2. Применимым правом по данному договору является законодательство Российской Федерации.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_chapter_12_template">
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<br/><b>12. Прочие условия</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
12.1. Ни одна из сторон не вправе передавать свои права и обязанности по Договору третьим лицам без письменного на то согласия другой стороны.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
12.2. Всякие изменения и дополнения к настоящему Договору будут действительны лишь при условии, если они совершены в письменной форме и подписаны уполномоченными на то лицами обеих Сторон.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
12.3. Настоящий Договор составлен в двух экземплярах, по одному экземпляру для каждой из Сторон, оба экземпляра имеют равную юридическую силу.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
12.4. Настоящий договор вступает в силу с даты подписания и действует в течение 1 (одного) года, но в любом случае до полного выполнения сторонами своих обязательств по настоящему договору. В случае если ни одна из Сторон не заявит требования о расторжении договора за 30 (тридцать) календарных дней до его окончания, договор считается пролонгированным на каждый последующий год.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
12.5. С момента подписания настоящего Договора все предшествующие договоренности и переписка, связанные с настоящим Договором, теряют силу.
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="contract_inn_kpp_info">
|
||||
<td>
|
||||
<b><t t-esc="person.contract_name"/></b><br/>
|
||||
<b>ИНН</b>: <t t-esc="person.inn"/><br/>
|
||||
<b>КПП</b>: <t t-esc="person.kpp"/><br/>
|
||||
</td>
|
||||
</template>
|
||||
|
||||
<template id="contract_payment_template">
|
||||
<td valign="top">
|
||||
<b>Расчетный счет</b>: <t t-esc="person.bank_account.acc_number"/><br/>
|
||||
<b>БИК</b>: <t t-esc="person.bank_account.bank_id.bic"/><br/>
|
||||
<b>Банк-получатель</b>: <t t-esc="person.bank_account.bank_id.name"/><br/>
|
||||
<b>Юридический адрес</b>:<br/>
|
||||
<t t-esc="person.full_adress"/><br/>
|
||||
<b>Телефон</b>: <t t-esc="person.phone" /><br/>
|
||||
</td>
|
||||
</template>
|
||||
|
||||
<template id="contract_appex_template">
|
||||
<table align="left" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<b>Приложение 1 к Договору № <t t-esc="doc.contract_id.name"/> от <t t-esc="doc._context_date"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b>Спецификация</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table align="center" width="100%" border="1px" cellpadding="5" cellspacing="0" style="border-style:solid; border-color:#000000; border-collapse:collapse">
|
||||
<tr>
|
||||
<td align="center" width="30" style="border: 1px solid;"><b>№</b></td>
|
||||
<td align="center" style="border: 1px solid;"><b>Товары</b></td>
|
||||
<td align="center" width="40" style="border: 1px solid;"><b>Кол-во</b></td>
|
||||
<td align="center" width="30" style="border: 1px solid;"><b>Ед.</b></td>
|
||||
<td align="center" width="80" style="border: 1px solid;"><b>Цена</b></td>
|
||||
<td align="center" width="80" style="border: 1px solid;"><b>Сумма</b></td>
|
||||
</tr>
|
||||
<t t-set="counter" t-value="0" />
|
||||
|
||||
<t t-foreach="doc.order_id.order_line" t-as="line">
|
||||
<tr>
|
||||
<t t-set="counter" t-value="counter + 1"></t>
|
||||
<td align="center" width="30" style="border: 1px solid;"><b><t t-esc="counter" /></b></td>
|
||||
<td align="center" style="border: 1px solid;"><b><t t-esc="line.name"/></b></td>
|
||||
<td align="center" width="40" style="border: 1px solid;"><b><t t-esc="line.product_qty" /></b></td>
|
||||
<td align="center" width="30" style="border: 1px solid;"><b><t t-esc="line.product_uom.name" /></b></td>
|
||||
<td align="center" width="80" style="border: 1px solid;"><b><t t-esc="line.price_unit" /></b></td>
|
||||
<td align="center" width="80" style="border: 1px solid;"><b><t t-esc="line.price_total"/></b></td>
|
||||
|
||||
</tr>
|
||||
</t>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table align="center" width="100%" border="0px" style="border-collapse:collapse;">
|
||||
<tr>
|
||||
<td align="right"><b>Итого:</b></td>
|
||||
<td align="right" width="130"><b><t t-esc="doc.order_id.amount_untaxed"/></b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right"><b>Без налога (НДС)</b></td>
|
||||
<td align="right" width="130"><b>-</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right"><b>Всего к оплате:</b></td>
|
||||
<td align="right" width="130"><b><t t-esc="doc.order_id.amount_total"/></b></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table width="100%">
|
||||
<tr valign="top">
|
||||
<td colspan="3">
|
||||
Всего наименований <t t-esc="counter"/>, на сумму <t t-esc="doc.order_id.amount_total"/> руб. (<t t-esc="doc._context_summ_word"/>) .<br />
|
||||
Поставка осуществляется на условиях: 100% предоплата<br />
|
||||
Срок поставки - <t t-esc="doc.delivery_terms"/> дн.
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td width="49%">
|
||||
<br /><b>ПРОДАВЕЦ</b>
|
||||
</td>
|
||||
<td width="49%">
|
||||
<br /><b>ПОКУПАТЕЛЬ</b>
|
||||
</td>
|
||||
<td class="to_hide"></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<b><t t-esc="doc.company_id.contract_name" /></b><br />
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<b></b><br /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<b><t t-esc="doc.company_id.representative_id.function" />:</b><br />
|
||||
<t t-esc="doc.company_id.representative_id.name"/></td>
|
||||
<td valign="top">
|
||||
<b>Уполномоченный представитель</b>:<br />
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="3" align="left">
|
||||
<span id="br1" style="display:none"><br /></span>
|
||||
<div id="sign1"><img src="pic/rog_sign.png" border="0" width="180"/></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
_________________________
|
||||
</td>
|
||||
<td>
|
||||
_________________________
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
М.П.
|
||||
<div id="stamp1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="pic/stamp.png" border="0" width="160"/></div>
|
||||
</td>
|
||||
<td>
|
||||
М.П.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</template>
|
||||
|
||||
<template id="contract_bottom_contact_data_template">
|
||||
<table width="100%" border="0">
|
||||
<tr valign="top">
|
||||
<td width="49%">
|
||||
<br/><b>ПРОДАВЕЦ</b>
|
||||
</td>
|
||||
|
||||
<td width="49%">
|
||||
<br/><b>ПОКУПАТЕЛЬ</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<t t-set="person" t-value="doc.company_id"/>
|
||||
<t t-call="client_contracts.contract_inn_kpp_info"/>
|
||||
<t t-set="person" t-value="doc.partner_id"/>
|
||||
<t t-call="client_contracts.contract_inn_kpp_info"/>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<t t-set="person" t-value="doc.company_id"/>
|
||||
<t t-call="client_contracts.contract_payment_template"/>
|
||||
<t t-set="person" t-value="doc.partner_id"/>
|
||||
<t t-call="client_contracts.contract_payment_template"/>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b><t t-esc="doc.company_id.representative_id.function"/></b>:<br/>
|
||||
<t t-esc="doc.company_id.representative_id.name"/></td>
|
||||
<td valign="top">
|
||||
<b>Уполномоченный представитель</b>:<br/>
|
||||
<t t-esc="doc.partner_id.representative_id.name" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="3" align="left">
|
||||
<span id="br" style="display:none"><br/></span>
|
||||
<div id="sign"><img src="pic/rog_sign.png" border="0" width="180"/></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
_________________________
|
||||
</td>
|
||||
<td>
|
||||
_________________________
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
М.П.
|
||||
<div id="stamp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="pic/stamp.png" border="0" width="160"/></div>
|
||||
</td>
|
||||
<td>
|
||||
М.П.</td>
|
||||
<td class="to_hide"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</template>
|
||||
|
||||
<template id="contract_bottom_contact_data_fiz_template">
|
||||
<table width="100%" border="0">
|
||||
<tr valign="top">
|
||||
<td width="49%">
|
||||
<br/><b>ПРОДАВЕЦ</b>
|
||||
</td>
|
||||
|
||||
<td width="49%">
|
||||
<br/><b>ПОКУПАТЕЛЬ</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<t t-set="person" t-value="doc.company_id"/>
|
||||
<t t-call="client_contracts.contract_inn_kpp_info"/>
|
||||
<t t-set="person" t-value="doc.partner_id"/>
|
||||
<t t-call="client_contracts.contract_inn_kpp_info"/>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<t t-esc="doc.partner_id.name"/><br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<b>Паспорт</b>:
|
||||
<t t-esc="doc.partner_id.passport_data"/>
|
||||
<b>Адрес:</b>
|
||||
<t t-esc="doc.partner_id.full_adress"/>
|
||||
<b>Телефон:</b>
|
||||
<t t-esc="doc.partner_id.phone" />
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<b><t t-esc="doc.company_id.representative_id.function"/></b>:<br/>
|
||||
<t t-esc="doc.company_id.representative_id.name"/></td>
|
||||
<td valign="top">
|
||||
<br/>
|
||||
<br/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td colspan="3" align="left">
|
||||
<span id="br" style="display:none"><br/></span>
|
||||
<div id="sign"><img src="pic/rog_sign.png" border="0" width="180"/></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
_________________________
|
||||
</td>
|
||||
<td>
|
||||
_________________________
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
М.П.
|
||||
<div id="stamp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="pic/stamp.png" border="0" width="160"/></div>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td class="to_hide"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</template>
|
||||
|
||||
<template id="contract_template">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<div class="article">
|
||||
<t t-call="client_contracts.contract_header_template"/>
|
||||
<table align="tablecenter" border="0px" cellpadding="0" width="100%" style="font-family:Arial; font-size:12px; border-collapse:collapse">
|
||||
<t t-call="client_contracts.contract_number_and_date"/>
|
||||
<t t-call="client_contracts.contract_contact_partner_template"/>
|
||||
</table>
|
||||
<table align="center" border="0px" cellpadding="0" width="100%" style="font-family:Arial; font-size:12px; border-collapse:collapse">
|
||||
<t t-call="client_contracts.contract_contact_seller_template"/>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<b>заключили настоящий Договор о нижеследующем:</b>
|
||||
</td>
|
||||
</tr>
|
||||
<t t-call="client_contracts.contract_chapter_1_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_2_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_3_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_4_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_5_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_6_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_7_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_8_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_9_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_10_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_11_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_12_template"/>
|
||||
</table>
|
||||
<t t-call="client_contracts.contract_bottom_contact_data_template"/>
|
||||
<p style="page-break-before:always;"> </p>
|
||||
<t t-call="client_contracts.contract_appex_template"/>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="contract_fiz_template">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<div class="article">
|
||||
<t t-call="client_contracts.contract_header_template"/>
|
||||
<table align="tablecenter" border="0px" cellpadding="0" width="100%" style="font-family:Arial; font-size:12px; border-collapse:collapse">
|
||||
<t t-call="client_contracts.contract_number_and_date"/>
|
||||
<t t-call="client_contracts.contract_contact_partner_fiz_template"/>
|
||||
</table>
|
||||
<table align="center" border="0px" cellpadding="0" width="100%" style="font-family:Arial; font-size:12px; border-collapse:collapse">
|
||||
<t t-call="client_contracts.contract_contact_seller_template"/>
|
||||
<tr valign="top">
|
||||
<td colspan="2">
|
||||
<b>заключили настоящий Договор о нижеследующем:</b>
|
||||
</td>
|
||||
</tr>
|
||||
<t t-call="client_contracts.contract_chapter_1_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_2_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_3_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_4_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_5_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_6_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_7_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_8_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_9_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_10_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_11_template"/>
|
||||
<t t-call="client_contracts.contract_chapter_12_template"/>
|
||||
</table>
|
||||
<t t-call="client_contracts.contract_bottom_contact_data_fiz_template"/>
|
||||
<p style="page-break-before:always;"> </p>
|
||||
<t t-call="client_contracts.contract_appex_template"/>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="contract_appex_only_template">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
<div class="article">
|
||||
<t t-call="client_contracts.contract_appex_template"/>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</data>
|
||||
</odoo>
|
Loading…
x
Reference in New Issue
Block a user