Merge branch 'development' into 'master'

Development

See merge request tabulasense/client_contracts!7
This commit is contained in:
Иван Широких 2019-12-25 18:12:52 +05:00
commit 40140dd148
31 changed files with 1960 additions and 2244 deletions

View File

@ -1,2 +1,9 @@
# client_contracts # Account Contracts
## Summary
Create and storage form for contracts. Generate a print form of document of contract.
## Features
- Contract management: create, sign, close, renew
- Create .docx form of contract using any document template
- Fields in document fill from Odoo models

View File

@ -1,4 +1,2 @@
# -*- coding: utf-8 -*-
from . import controllers
from . import models from . import models
from . import wizard

View File

@ -1,35 +1,24 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
{ {
'name': "client_contracts", "name": "client_contracts",
"summary": """
'summary': """ Print forms for contracts with clients""",
Module for storing and creating print forms for contracts with clients""", "description": """
'description': """
Module for storing and creating print forms for contracts with clients Module for storing and creating print forms for contracts with clients
""", """,
"author": "RYDLAB",
'author': "RYDLAB", "website": "http://rydlab.ru",
'website': "http://rydlab.ru", "category": "Invoicing & Payments",
"version": "0.1.1",
# Categories can be used to filter modules in modules listing "depends": ["base", "contacts", "russian_requisites", "sale",],
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml "data": [
# for the full list "data/fields_default.xml",
'category': 'hr', "data/payment_terms.xml",
'version': '0.1', "security/ir.model.access.csv",
"views/res_partner_contract.xml",
# any module necessary for this one to work correctly "views/res_partner_contract_annex.xml",
'depends': ['base', 'sale'], "views/res_partner.xml",
"views/sale_order.xml",
# always loaded "wizard/res_partner_contract_wizard.xml",
'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',
], ],
} }

View File

@ -1,3 +0,0 @@
# -*- coding: utf-8 -*-
from . import controllers

View File

@ -1,16 +0,0 @@
# -*- 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)

346
data/fields_default.xml Normal file
View File

@ -0,0 +1,346 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- Action -->
<record id="action_get_contract_context" model="ir.actions.server">
<field name="name">Generate Context for Contract</field>
<field name="model_id" ref="client_contracts.model_res_partner_contract_wizard"/>
<field name="binding_model_id" ref="client_contracts.model_res_partner_contract_wizard" />
<field name="state">code</field>
<field name="code">
# Aliases
self = record
partner = self.partner_id # res.partner
partner_bank = partner.bank_ids[0] # res.partner.bank
seller = self.company_id
seller_bank = seller.bank_ids[0]
# ctx keys must be declared in this xml
ctx = {
"contract_number": self.name,
"date_conclusion": self.date_conclusion_fix or self.date_conclusion,
"seller_company_name": seller.name,
"seller_business_address": seller.full_address,
"seller_representer_name": seller.representative_id.name,
"seller_representer_name_parent": seller.representative_id.name_parent_case,
"seller_representer_name_initials": seller.representative_id.name_initials_case,
"seller_representer_function": seller.representative_id.function,
"seller_representer_function_parent_case": seller.representative_id.function_parent_case,
"seller_inn": seller.inn,
"seller_kpp": seller.kpp,
"seller_bic": False,
"seller_ogrn": seller.psrn,
"seller_bank": False,
"seller_bank_account": False,
"seller_phone": partner.phone,
"partner_company_name": partner.name,
"partner_business_address": partner.full_address,
"partner_representer_name": partner.representative_id.name,
"partner_representer_name_parent": partner.representative_id.name_parent_case,
"partner_representer_name_initials": partner.representative_id.name_initials_case,
"partner_representer_function": partner.representative_id.function,
"partner_representer_function_parent_case": partner.representative_id.function_parent_case,
"partner_inn": partner.inn,
"partner_kpp": partner.kpp,
"partner_bic": False,
"partner_ogrn": partner.psrn,
"partner_bank": False,
"partner_bank_account": False,
"partner_phone": partner.phone,
}
if partner_bank:
ctx.update({
"partner_bic": partner_bank.bank_id.bic,
"partner_bank": partner_bank.bank_id.name,
"partner_bank_account": partner_bank.acc_number,
})
if seller_bank:
ctx.update({
"seller_bic": seller_bank.bank_id.bic,
"seller_bank": seller_bank.bank_id.name,
"seller_bank_account": seller_bank.acc_number,
})
action = ctx
</field>
</record>
<!-- Action -->
<record id="action_get_annex_context" model="ir.actions.server">
<field name="name">Generate Context for Contract</field>
<field name="model_id" ref="client_contracts.model_res_partner_contract_wizard"/>
<field name="binding_model_id" ref="client_contracts.model_res_partner_contract_wizard" />
<field name="state">code</field>
<field name="code">
# Aliases
self = record
order = self.order_id
seller = self.contract_id.company_id
partner = self.contract_id.partner_id
# Functions
modf = self.modf
# ctx keys must be decalared in this xml
ctx = {
"contract_number": self.contract_id.name,
"amount_whole": 0,
"amount_fractional": 0,
"payment_term": False,
"delivery_time": False,
"seller_company_name": seller.name,
"seller_representer_name": seller.representative_id.name,
"seller_representer_function": seller.representative_id.function,
"partner_company_name": partner.name,
"partner_representer_name": partner.representative_id.name,
"partner_representer_function": partner.representative_id.function,
}
if order:
amount = modf(order.amount_total)
fractional, whole = amount
payment_term = order.payment_term_id.name
payment_term = payment_term and payment_term.lower()
delivery_time = order.delivery_time
ctx.update({
"amount_whole": whole,
"amount_fractional": fractional,
"payment_term": payment_term,
"delivery_time": delivery_time,
})
action = ctx
</field>
</record>
<!-- Common fields -->
<record id="contract_field_contract_number" model="res.partner.contract.field">
<field name="name">Contract Number</field>
<field name="technical_name">contract_number</field>
<field name="description"></field>
</record>
<record id="contract_field_contract_conclusion_date" model="res.partner.contract.field">
<field name="name">Conclusion Date</field>
<field name="technical_name">date_conclusion</field>
<field name="description"></field>
</record>
<record id="contract_field_amount_whole" model="res.partner.contract.field">
<field name="name">Amount Whole Part</field>
<field name="technical_name">amount_whole</field>
<field name="description"></field>
</record>
<record id="contract_field_amount_fractional" model="res.partner.contract.field">
<field name="name">Amount Fractional Part</field>
<field name="technical_name">amount_fractional</field>
<field name="description"></field>
</record>
<record id="contract_field_delivery_time" model="res.partner.contract.field">
<field name="name">Delivery Time</field>
<field name="technical_name">delivery_time</field>
<field name="description"></field>
</record>
<record id="contract_field_payment_term" model="res.partner.contract.field">
<field name="name">Payment Term</field>
<field name="technical_name">payment_term</field>
<field name="description"></field>
</record>
<!-- Seller -->
<record id="contract_field_seller_company_name" model="res.partner.contract.field">
<field name="name">Seller Company Name</field>
<field name="technical_name">seller_company_name</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_business_address" model="res.partner.contract.field">
<field name="name">Seller Business Address</field>
<field name="technical_name">seller_business_address</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_representer_name" model="res.partner.contract.field">
<field name="name">Seller Representer Name</field>
<field name="technical_name">seller_representer_name</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_representer_name_parent" model="res.partner.contract.field">
<field name="name">Seller Representer Parent Name</field>
<field name="technical_name">seller_representer_name_parent</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_representer_name_initials" model="res.partner.contract.field">
<field name="name">Seller Representer Initials Name</field>
<field name="technical_name">seller_representer_name_initials</field>
<field name="description"></field>
<field name="description"></field>
</record>
<record id="contract_field_seller_representer_function" model="res.partner.contract.field">
<field name="name">Seller Representer Function</field>
<field name="technical_name">seller_representer_function</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_representer_function_parent_case" model="res.partner.contract.field">
<field name="name">Seller Representer Function Parent Case</field>
<field name="technical_name">seller_representer_function_parent_case</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_inn" model="res.partner.contract.field">
<field name="name">Seller INN</field>
<field name="technical_name">seller_inn</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_kpp" model="res.partner.contract.field">
<field name="name">Seller KPP</field>
<field name="technical_name">seller_kpp</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_bic" model="res.partner.contract.field">
<field name="name">Seller BIC</field>
<field name="technical_name">seller_bic</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_psrn" model="res.partner.contract.field">
<field name="name">Seller PSRN</field>
<field name="technical_name">seller_ogrn</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_bank" model="res.partner.contract.field">
<field name="name">Seller Bank Name</field>
<field name="technical_name">seller_bank</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_bank_account" model="res.partner.contract.field">
<field name="name">Seller Bank Account</field>
<field name="technical_name">seller_bank_account</field>
<field name="description"></field>
</record>
<record id="contract_field_seller_phone" model="res.partner.contract.field">
<field name="name">Seller Phone</field>
<field name="technical_name">seller_phone</field>
<field name="description"></field>
</record>
<!-- Partner -->
<record id="contract_field_partner_company_name" model="res.partner.contract.field">
<field name="name">Partner Company Name</field>
<field name="technical_name">partner_company_name</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_business_address" model="res.partner.contract.field">
<field name="name">Partner Business Address</field>
<field name="technical_name">partner_business_address</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_representer_name" model="res.partner.contract.field">
<field name="name">Partner Representer Name</field>
<field name="technical_name">partner_representer_name</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_representer_name_parent" model="res.partner.contract.field">
<field name="name">Partner Representer Parent Name</field>
<field name="technical_name">partner_representer_name_parent</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_representer_name_initials" model="res.partner.contract.field">
<field name="name">Partner Representer Initials Name</field>
<field name="technical_name">partner_representer_name_initials</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_representer_function" model="res.partner.contract.field">
<field name="name">Partner Representer Function</field>
<field name="technical_name">partner_representer_function</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_representer_function_parent_case" model="res.partner.contract.field">
<field name="name">Partner Representer Function Parent Case</field>
<field name="technical_name">partner_representer_function_parent_case</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_inn" model="res.partner.contract.field">
<field name="name">Partner INN</field>
<field name="technical_name">partner_inn</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_kpp" model="res.partner.contract.field">
<field name="name">Partner KPP</field>
<field name="technical_name">partner_kpp</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_bic" model="res.partner.contract.field">
<field name="name">Partner BIC</field>
<field name="technical_name">partner_bic</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_psrn" model="res.partner.contract.field">
<field name="name">Partner PSRN</field>
<field name="technical_name">partner_ogrn</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_bank" model="res.partner.contract.field">
<field name="name">Partner Bank Name</field>
<field name="technical_name">partner_bank</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_bank_account" model="res.partner.contract.field">
<field name="name">Partner Bank Account</field>
<field name="technical_name">partner_bank_account</field>
<field name="description"></field>
</record>
<record id="contract_field_partner_phone" model="res.partner.contract.field">
<field name="name">Partner Phone</field>
<field name="technical_name">partner_phone</field>
<field name="description"></field>
</record>
</data>
</odoo>

27
data/payment_terms.xml Normal file
View File

@ -0,0 +1,27 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data noupdate="0">
<record id="payment_term_prepaid" model="account.payment.term">
<field name="name">100% Prepaid</field>
<field name="note">Payment terms: 100% Prepaid</field>
<field name="sequence">1</field>
</record>
<record id="payment_term_postpayment" model="account.payment.term">
<field name="name">100% Postpaid</field>
<field name="note">Payment terms: 100% Postpaid</field>
<field name="sequence">2</field>
</record>
<record id="payment_term_partial_2" model="account.payment.term">
<field name="name">2 stages</field>
<field name="note">Payment terms: Partial 2 Stages</field>
<field name="sequence">3</field>
</record>
<record id="payment_term_partial_3" model="account.payment.term">
<field name="name">3 stages</field>
<field name="note">Payment terms: Partial 3 Stages</field>
<field name="sequence">4</field>
</record>
</data>
</odoo>

View File

@ -1,30 +0,0 @@
<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>

733
i18n/ru.po Normal file
View File

@ -0,0 +1,733 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * client_contracts
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0-20191106\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-12-25 11:27+0000\n"
"PO-Revision-Date: 2019-12-25 11:27+0000\n"
"Last-Translator: Stepan Savelyev\n"
"Language-Team: RYDLAB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_count
#: model:ir.model.fields,field_description:client_contracts.field_res_users_contract_count
msgid "# of contracts"
msgstr "кол-во договоров"
#. module: client_contracts
#: model:account.payment.term,name:client_contracts.payment_term_postpayment
msgid "100% Postpaid"
msgstr "100% постоплата"
#. module: client_contracts
#: model:account.payment.term,name:client_contracts.payment_term_prepaid
msgid "100% Prepaid"
msgstr "100% предоплата"
#. module: client_contracts
#: model:account.payment.term,name:client_contracts.payment_term_partial_2
msgid "2 stages"
msgstr "Оплата в 2 этапа"
#. module: client_contracts
#: model:account.payment.term,name:client_contracts.payment_term_partial_3
msgid "3 stages"
msgstr "Оплата в 3 этапа"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_street_actual
#: model:ir.model.fields,field_description:client_contracts.field_res_users_street_actual
msgid "Actual Address"
msgstr "Актуальный адрес"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_amount_fractional
msgid "Amount Fractional Part"
msgstr "Дробная часть суммы"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_amount_whole
msgid "Amount Whole Part"
msgstr "Целая часть суммы"
#. module: client_contracts
#: code:addons/client_contracts/wizard/res_partner_contract_wizard.py:145
#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates_annex
#, python-format
msgid "Annex"
msgstr "Приложение"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view
msgid "Annex values"
msgstr "Поля в печатном приложении"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Annexed orders"
msgstr "Приложенные заказы"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_contract_annex_ids
msgid "Annexes"
msgstr "Приложения"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_contract_annex_ids
msgid "Annexes to this contract"
msgstr "Приложения к договору"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_info_inherit_view
msgid "Banks"
msgstr "Банки"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_signature
msgid "Client signature"
msgstr "Подпись или печать"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Close"
msgstr "Закрыть"
#. module: client_contracts
#: selection:res.partner.contract,state:0
msgid "Closed"
msgstr "Закрыт"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_company_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_company_id
msgid "Company"
msgstr "Компания"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_date_conclusion
#: model:res.partner.contract.field,name:client_contracts.contract_field_contract_conclusion_date
msgid "Conclusion Date"
msgstr "Дата подписания"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner
msgid "Contact"
msgstr "Контакт"
#. module: client_contracts
#: code:addons/client_contracts/wizard/res_partner_contract_wizard.py:142
#: model:ir.model,name:client_contracts.model_res_partner_contract
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_contract_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient__contract_wizard_id
#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts
#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates_contract
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
#: selection:res.partner.contract.wizard,target:0
#, python-format
msgid "Contract"
msgstr "Договор"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_annex
#: model:ir.model.fields,field_description:client_contracts.field_sale_order_contract_annex_id
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form
#: selection:res.partner.contract.wizard,target:0
msgid "Contract Annex"
msgstr "Приложение к договору"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_contract_annex_number
msgid "Contract Annex Number"
msgstr "Счётчик приложений к договору"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_field
msgid "Contract Field"
msgstr "Поле договора"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_field_transient
msgid "Contract Field Transient"
msgstr "Фактическое поле договора"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_transient_field_ids
msgid "Contract Fields"
msgstr "Поля договора"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_contract_number
msgid "Contract Number"
msgstr "Номер договора"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_name
msgid "Contract number"
msgstr "Номер договора"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Contract parameters"
msgstr "Информация"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
msgid "Contract values"
msgstr "Поля в печатном договоре"
#. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_contract_action
#: model:ir.actions.act_window,name:client_contracts.res_partner_contract_partner_action
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_client_contract_ids
#: model:ir.model.fields,field_description:client_contracts.field_res_users_client_contract_ids
#: model:ir.ui.menu,name:client_contracts.res_partner_contract_menu_act
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_tree
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_view_buttons
msgid "Contracts"
msgstr "Договоры"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_contract_annex_number
msgid "Counter for generate Annex name"
msgstr "Счётчик для генерации имени приложения к договору"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_date_ts
msgid "Create Date Ts"
msgstr "Создан (таймстамп)"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
msgid "Create a document"
msgstr "Создать документ"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_create_uid
msgid "Created by"
msgstr "Создано"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_create_date
msgid "Created on"
msgstr "Создан"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_date_conclusion_fix
msgid "Date of manual conclusion"
msgstr "Дата подписания"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_date_conclusion
msgid "Date of system conclusion"
msgstr "Дата подписания системой"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_is_default
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_is_default
msgid "Default Template"
msgstr "Default Template"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_delivery_time
#: model:ir.model.fields,field_description:client_contracts.field_sale_order_delivery_time
#: model:res.partner.contract.field,name:client_contracts.contract_field_delivery_time
msgid "Delivery Time"
msgstr "Срок доставки"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_description
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_description
msgid "Description"
msgstr "Описание"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_display_name
msgid "Display Name"
msgstr "Отображаемое Имя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_contract_field_id
msgid "Field"
msgstr "Поле"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_date_conclusion_fix
msgid "Field for manual edit when contract is signed or closed"
msgstr "Поле для ручного редактирования, когда договор подписан либо закрыт"
#. module: client_contracts
#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_fields
msgid "Fields"
msgstr "Поля"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_full_address
#: model:ir.model.fields,field_description:client_contracts.field_res_users_full_address
msgid "Full Address"
msgstr "Полный адрес"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_function_parent_case
#: model:ir.model.fields,field_description:client_contracts.field_res_users_function_parent_case
msgid "Function Parent Case"
msgstr "Должность в родительном падеже"
#. module: client_contracts
#: model:ir.actions.server,name:client_contracts.action_get_annex_context
#: model:ir.actions.server,name:client_contracts.action_get_contract_context
msgid "Generate Context for Contract"
msgstr "Generate Context for Contract"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_id
msgid "ID"
msgstr "Номер"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view
msgid "Info"
msgstr "Информация"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract___last_update
msgid "Last Modified on"
msgstr "Последнее изменение"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_write_uid
msgid "Last Updated by"
msgstr "Последний раз обновлено"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_write_date
msgid "Last Updated on"
msgstr "Последний раз обновлено"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form
msgid "Leave empty for compute"
msgstr "Оставить пустым для автозаполнения..."
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_name
msgid "Name"
msgstr "Название"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_name_initials_case
#: model:ir.model.fields,field_description:client_contracts.field_res_users_name_initials_case
msgid "Name Initials Case"
msgstr "Фамилия с инициалами"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_name_parent_case
#: model:ir.model.fields,field_description:client_contracts.field_res_users_name_parent_case
msgid "Name Parent Case"
msgstr "Полное имя в родительном падеже"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_field_technical_name
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_field_transient_technical_name
msgid "Name uses in template"
msgstr "Имя поля, используемое в шаблоне"
#. module: client_contracts
#: selection:res.partner.contract,state:0
msgid "New"
msgstr "Новый"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_order_id
msgid "Order"
msgstr "Заказ"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_partner_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_partner_id
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
msgid "Partner"
msgstr "Партнёр"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_bic
msgid "Partner BIC"
msgstr "БИК Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_bank_account
msgid "Partner Bank Account"
msgstr "Расчётный счёт Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_bank
msgid "Partner Bank Name"
msgstr "Наименование банка Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_business_address
msgid "Partner Business Address"
msgstr "Юридический адрёс Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_company_name
msgid "Partner Company Name"
msgstr "Наименование компании Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_inn
msgid "Partner INN"
msgstr "ИНН Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_kpp
msgid "Partner KPP"
msgstr "КПП Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_psrn
msgid "Partner PSRN"
msgstr "ОГРН Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_phone
msgid "Partner Phone"
msgstr "Телефон Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_function
msgid "Partner Representer Function"
msgstr "Должность представителя Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_function_parent_case
msgid "Partner Representer Function Parent Case"
msgstr "Должность представителя Партнёра в родительном падеже"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name_initials
msgid "Partner Representer Initials Name"
msgstr "Фамилия с инициалами представителя Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name
msgid "Partner Representer Name"
msgstr "Полное имя представителя Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name_parent
msgid "Partner Representer Parent Name"
msgstr "Полное имя в родительном падеже Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_payment_term
msgid "Payment Term"
msgstr "Условия оплаты"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_payment_term
msgid "Payment Terms"
msgstr "Условия оплаты"
#. module: client_contracts
#: model:account.payment.term,note:client_contracts.payment_term_postpayment
msgid "Payment terms: 100% Postpaid"
msgstr "Условия оплаты: постоплата"
#. module: client_contracts
#: model:account.payment.term,note:client_contracts.payment_term_prepaid
msgid "Payment terms: 100% Prepaid"
msgstr "Условия оплаты: 100% предоплата"
#. module: client_contracts
#: model:account.payment.term,note:client_contracts.payment_term_partial_2
msgid "Payment terms: Partial 2 Stages"
msgstr "Условия оплаты: частично в 2 этапа"
#. module: client_contracts
#: model:account.payment.term,note:client_contracts.payment_term_partial_3
msgid "Payment terms: Partial 3 Stages"
msgstr "Условия оплаты: частично в 3 этапа"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_representative_id
#: model:ir.model.fields,help:client_contracts.field_res_users_representative_id
msgid "Person, who represents company"
msgstr "Представитель компании"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_prepaid_expence
msgid "Prepaid Expence"
msgstr "Аванс"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Print"
msgstr "Печать"
#. module: client_contracts
#: code:addons/client_contracts/models/res_partner_contract.py:91
#, python-format
msgid "Print Form of Contract"
msgstr "Форма печати договора"
#. module: client_contracts
#: code:addons/client_contracts/models/res_partner_contract_annex.py:61
#, python-format
msgid "Print Form of Contract Annex"
msgstr "Форма печати приложения к договору"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_template_print_contract
msgid "Print Template Contract"
msgstr "Вложение-шаблон договора"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_template_print_annex
msgid "Print Template Contract Annex"
msgstr "Вложение-шаблон приложения к договору"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_print_template_contract
msgid "Print Template of Contract"
msgstr "Шаблон-Вложение договора"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_print_template_annex
msgid "Print Template of Contract Annex"
msgstr "Шаблон-Вложение приложения к договору"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_sale_order
msgid "Quotation"
msgstr "Предложение цен"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Renew"
msgstr "Возобновлено"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_representative_id
#: model:ir.model.fields,field_description:client_contracts.field_res_users_representative_id
msgid "Representative"
msgstr "Представитель"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
msgid "Requisites"
msgstr "Реквизиты"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.search_res_partner_contract_filter
msgid "Search Contract"
msgstr "Поиск договора"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
msgid "Seller"
msgstr "Продавец"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_bic
msgid "Seller BIC"
msgstr "БИК Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_bank_account
msgid "Seller Bank Account"
msgstr "Расчётный счёт Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_bank
msgid "Seller Bank Name"
msgstr "Наименование банка Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_business_address
msgid "Seller Business Address"
msgstr "Юридический адрес Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_company_name
msgid "Seller Company Name"
msgstr "Наименование компании Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_inn
msgid "Seller INN"
msgstr "ИНН Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_kpp
msgid "Seller KPP"
msgstr "КПП Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_psrn
msgid "Seller PSRN"
msgstr "ОГРН Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_phone
msgid "Seller Phone"
msgstr "Телефон Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_function
msgid "Seller Representer Function"
msgstr "Должность представителя Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_function_parent_case
msgid "Seller Representer Function Parent Case"
msgstr "Должность представителя Продавца в родительном падеже"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_name_initials
msgid "Seller Representer Initials Name"
msgstr "Фамилия с инициалами представителя Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_name
msgid "Seller Representer Name"
msgstr "Полное имя представителя Продавца"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_name_parent
msgid "Seller Representer Parent Name"
msgstr "Полное имя в родительном падеже Продавца"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Sign"
msgstr "Подписано"
#. module: client_contracts
#: selection:res.partner.contract,state:0
msgid "Signed"
msgstr "Подписан"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_state
msgid "Status"
msgstr "Статус"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_target
msgid "Target"
msgstr "Ссылка"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_technical_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_technical_name
msgid "Technical Name"
msgstr "Техническое название"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_attachment_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_attachment_id
msgid "Template Attachment"
msgstr "Вложение-шаблон"
#. module: client_contracts
#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates
msgid "Templates"
msgstr "Шаблоны"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_annex_name
msgid "The Number of Annex"
msgstr "Номер приложения"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_value
msgid "Value"
msgstr "Значение"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_annex_line
msgid "res.partner.contract.annex.line"
msgstr "res.partner.contract.annex.line"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_annex_type
msgid "res.partner.contract.annex.type"
msgstr "res.partner.contract.annex.type"
#. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_contract_field_action
msgid "res.partner.contract.field.action"
msgstr "res.partner.contract.field.action"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_template
msgid "res.partner.contract.template"
msgstr "res.partner.contract.template"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_wizard
msgid "res.partner.contract.wizard"
msgstr "res.partner.contract.wizard"
#. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_print_annex_action
msgid "res.partner.template.print.annex.action"
msgstr "res.partner.template.print.annex.action"
#. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_print_contract_action
msgid "res.partner.template.print.contract.action"
msgstr "res.partner.template.print.contract.action"

View File

@ -1,601 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * client_contracts
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-11-12 06:53+0000\n"
"PO-Revision-Date: 2018-11-12 06:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_adress
msgid " Context Partner Adress"
msgstr " Адрес покупателя в договоре"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_count
#: model:ir.model.fields,field_description:client_contracts.field_res_users_contract_count
msgid "# of contracts"
msgstr "кол-во договоров"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Active"
msgstr "Актив"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_annex_lines
msgid "Annex Lines"
msgstr "Доп.условия"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_annex_type
msgid "Annex Type"
msgstr "Шаблоны доп.условий"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Annex info"
msgstr "Доп. условия"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Annex info lines"
msgstr "Строки доп.условий"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_description
msgid "Annex template description"
msgstr "Текст шаблона доп.условия"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_name
msgid "Annex template name"
msgstr "Название шаблона доп.условия"
#. module: client_contracts
#: model:ir.ui.menu,name:client_contracts.res_partner_contract_annex_type_menu
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_type_view
msgid "Annex type"
msgstr "Шаблон доп.условия"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Annexed orders"
msgstr "Приложенные заказы"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_order_ids
msgid "Annexes"
msgstr "Приложения"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_order_ids
msgid "Annexes to this contract"
msgstr "Заказы, приложенные к этому договору"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_wizard_order_id
msgid "Appex"
msgstr "Заказ-приложение"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_order_id
msgid "Appex order"
msgstr "Заказ-приложение"
#. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.order_contract_tree
msgid "Appexes"
msgstr "Приложения"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_bank_account
#: model:ir.model.fields,field_description:client_contracts.field_res_users_bank_account
msgid "Bank account"
msgstr "Банковский счет"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_signature
msgid "Client signature"
msgstr "Подпись клиента/печать организации"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_company_id
msgid "Company"
msgstr "Компания"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Company values"
msgstr "Значения для продавца"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner
msgid "Contact"
msgstr "Контакт"
#. module: client_contracts
#: model:ir.actions.report,name:client_contracts.contract_appex_only_template_print
#: model:ir.actions.report,name:client_contracts.contract_company_template
#: model:ir.actions.report,name:client_contracts.contract_personal_template
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_contract_id
#: model:ir.model.fields,field_description:client_contracts.field_sale_order_contract_id
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Contract"
msgstr "Контракт"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_partner_id
msgid "Contract Partner"
msgstr "Покупатель"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_date
msgid "Contract date"
msgstr "Дата заключения договора"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_delivery_term
msgid "Contract delivery term"
msgstr "Сроки доставки"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_delivery_term_word
msgid "Contract delivery term word"
msgstr "Сроки доставки(прописью)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_job_name
#: model:ir.model.fields,field_description:client_contracts.field_res_users_contract_job_name
msgid "Contract job name"
msgstr "Должность(в родительногм падеже)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_name_5614
#: model:ir.model.fields,field_description:client_contracts.field_res_users_contract_name
msgid "Contract name"
msgstr "ФИО/название(в родительном падеже)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_name
msgid "Contract number"
msgstr "Номер договора"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Contract parameters"
msgstr "Параметры договора"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_partner_id
msgid "Contract partner"
msgstr "Покупатель"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_payment_term
msgid "Contract payment term"
msgstr "Срок оплаты"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_payment_term_word
msgid "Contract payment term word"
msgstr "Срок оплаты(прописью)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_summ_word
msgid "Contract summ word"
msgstr "Сумма договора(прописью)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_summ_kop
msgid "Contract summ(kop)"
msgstr "Сумма договора(копейки)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_summ_rub
msgid "Contract summ(rub)"
msgstr "Сумма договора(рубли)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_summ_rub_word
msgid "Contract summ(rub), word"
msgstr "Сумма договора(рубли, прописью)"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Contract values"
msgstr "Переменные для договора"
#. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_contract_wizard_action
msgid "Contract wizard"
msgstr "Формирование печатной формы договора"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_sale_order_contract_id
msgid "Contract, assigned to this order"
msgstr "Договора, привязанные к этому заказу"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_client_contract_ids
#: model:ir.model.fields,field_description:client_contracts.field_res_users_client_contract_ids
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_tree
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_view_buttons
msgid "Contracts"
msgstr "Договора"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_client_contract_ids
#: model:ir.model.fields,help:client_contracts.field_res_users_client_contract_ids
msgid "Contracts for this partner"
msgstr "Договора этого покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_create_uid
msgid "Created by"
msgstr "Создано"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_create_date
msgid "Created on"
msgstr "Создан"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_date
msgid "Date of conclusion"
msgstr "Дата заключения"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_date
msgid "Date, when contract was concluded"
msgstr "Дата, когда договор был заключен"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Delivery and payment terms"
msgstr "Сроки поставки и оплаты"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_delivery_terms
msgid "Delivery terms"
msgstr "Сроки поставки"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_description
msgid "Description"
msgstr "Описание"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_template_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_display_name
msgid "Display Name"
msgstr "Отображаемое Имя"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Form DOCX from template"
msgstr "Сформировать DOCX из шаблона"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Form contract with company"
msgstr "Сформировать договор с фирмой"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Form contract with personal"
msgstr "Сформировать договор с частным лицом"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Form only appex contract"
msgstr "Сформировать только приложение"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_full_adress
#: model:ir.model.fields,field_description:client_contracts.field_res_users_full_adress
msgid "Full Adress"
msgstr "Полный адрес"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_template_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_id
msgid "ID"
msgstr "Номер"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_template_is_contract_template
msgid "Is Contract Template"
msgstr "Является шаблоном договора?"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_job_name
#: model:ir.model.fields,help:client_contracts.field_res_users_contract_job_name
msgid "Job position as it would be in contract"
msgstr "Название должности. как оно будет отображено в договоре"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_template___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard___last_update
msgid "Last Modified on"
msgstr "Последнее изменение"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_template_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_write_uid
msgid "Last Updated by"
msgstr "Последний раз обновил"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_line_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_type_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_template_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_write_date
msgid "Last Updated on"
msgstr "Последнее обновление"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_name_5614
#: model:ir.model.fields,help:client_contracts.field_res_users_contract_name
msgid "Name, as it would be in contract"
msgstr "ФИО, как оно будет отображено в договора"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_name
msgid "Number of contract, letters and digits"
msgstr "Номер договора. Генерируется автоматически"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Order info"
msgstr "Информация о заказе"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_partner_id
msgid "Partner"
msgstr "Партнёр"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_bik
msgid "Partner bank bik"
msgstr "БИК банка покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_bank
msgid "Partner bank name"
msgstr "Название банка покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_contract_name
msgid "Partner contract name"
msgstr "ФИО покупателя(в родительном падеже)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_rs
msgid "Partner corresponding account"
msgstr "Рассчетный счет покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_inn
msgid "Partner inn"
msgstr "ИНН покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_kpp
msgid "Partner kpp"
msgstr "КПП покупателя"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Partner parameters"
msgstr "Параметры покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_passport_data
msgid "Partner passport data"
msgstr "Паспортные данные покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_phone
msgid "Partner phone"
msgstr "Телефон покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_representer_name
msgid "Partner representer name"
msgstr "ФИО представителя покупателя"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_wizard_partner_id
msgid "Partner to render contract"
msgstr "Покупатель, с которым заключается контракт"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Partner values"
msgstr "Данные покупателя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_passport_data
#: model:ir.model.fields,field_description:client_contracts.field_res_users_passport_data
msgid "Passport"
msgstr "Паспотрные данные"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_passport_data
#: model:ir.model.fields,help:client_contracts.field_res_users_passport_data
msgid "Passport data"
msgstr "Пасспортные данные"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_payment_terms
msgid "Payment term"
msgstr "Сроки оплаты"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_representative_id
#: model:ir.model.fields,help:client_contracts.field_res_users_representative_id
msgid "Person, who represents company"
msgstr "Человек, представляющий продавца/покупателя"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_sale_order
msgid "Quotation"
msgstr "Оферта"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_representative_id
#: model:ir.model.fields,field_description:client_contracts.field_res_users_representative_id
msgid "Representative"
msgstr "Представитель"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.search_res_partner_contract_filter
msgid "Search Contract"
msgstr "Найти договор"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_bik
msgid "Seller bank bik"
msgstr "БИК банка продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_bank
msgid "Seller bank name"
msgstr "Название банка продавца"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_wizard_company_id
msgid "Seller company"
msgstr "Компания-продавец"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_contract_name
msgid "Seller contract name"
msgstr "Название продавца(в родительном падеже)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_rs
msgid "Seller corresponding account"
msgstr "Рассчетный счет продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_adress
msgid "Seller full adress"
msgstr "Полный адрес продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_inn
msgid "Seller inn"
msgstr "ИНН продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_kpp
msgid "Seller kpp"
msgstr "КПП продавца"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_wizard_view
msgid "Seller parameters"
msgstr "Параметры продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_phone
msgid "Seller phone"
msgstr "Телефон продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_representer_contract_job_name
msgid "Seller representer contract job name"
msgstr "Название должности представителя продавца(в родительном падеже)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_representer_contract_name
msgid "Seller representer contract name"
msgstr "ФИО представителя продавца(в родительном падеже)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_representer_job_name
msgid "Seller representer job name"
msgstr "Должность представителя продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_seller_representer_name
msgid "Seller representer name"
msgstr "ФИО представителя продавца"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_template
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_template_view
msgid "Template"
msgstr "Шаблон"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_wizard_template
msgid "Template for contract"
msgstr "Шаблон договора"
#. module: client_contracts
#: model:ir.ui.menu,name:client_contracts.res_partner_contract_templates
msgid "Templates"
msgstr "Шаблоны"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_type
msgid "Type of contract"
msgstr "Тип договора"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_wizard_payment_terms
msgid "When customer must pay"
msgstr "Срок оплаты счета покупателем"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_wizard_delivery_terms
msgid "When product must be delivered"
msgstr "Срок доставки товара покупателю"
#. module: client_contracts
#: selection:res.partner.contract.wizard,type:0
msgid "With company"
msgstr "С фирмой"
#. module: client_contracts
#: selection:res.partner.contract.wizard,type:0
msgid "With person"
msgstr "С частным лицом"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard__context_partner_representer_contract_name
msgid "partner representer contract name"
msgstr "ФИО представителя покупателя(в родительном падеже)"

View File

@ -1,3 +1,6 @@
# -*- coding: utf-8 -*- from . import res_partner
from . import res_partner_contract
from . import models, contract_wizard from . import res_partner_contract_annex
from . import res_partner_contract_field
from . import res_partner_contract_field_transient
from . import sale_order

View File

@ -1,408 +0,0 @@
# -*- 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.depends('contract_id')
def _compute_context_name(self):
self._context_name = self.contract_id.name
@api.depends('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.depends('partner_id')
def _compute_context_partner_contract_name(self):
self._context_partner_contract_name = self.partner_id.contract_name
@api.depends('partner_id')
def _compute_context_partner_adress(self):
self._compute_context_partner_adress = self.partner_id.full_adress
@api.depends('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.depends('partner_id')
def _compute_context_partner_inn(self):
self._context_partner_inn = self.partner_id.inn
@api.depends('partner_id')
def _compute_context_partner_kpp(self):
self._context_partner_kpp = self.partner_id.kpp
@api.depends('partner_id')
def _compute_context_partner_rs(self):
self._context_partner_rs = self.partner_id.bank_account.acc_number
@api.depends('partner_id')
def _compute_context_partner_bik(self):
self._context_partner_bik = self.partner_id.bank_account.bank_id.bic
@api.depends('partner_id')
def _compute_context_partner_bank(self):
self._context_partner_bank = self.partner_id.bank_account.bank_id.name
@api.depends('partner_id')
def _compute_context_partner_phone(self):
self._context_partner_phone = self.partner_id.phone
@api.depends('partner_id')
def _compute_context_partner_representer_name(self):
self._context_partner_representer_name = self.partner_id.representative_id.name
@api.depends('company_id')
def _compute_context_seller_contract_name(self):
self._context_seller_contract_name = self.company_id.contract_name
@api.depends('company_id')
def _compute_context_seller_adress(self):
self._context_seller_adress = self.company_id.full_adress
@api.depends('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.depends('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.depends('company_id')
def _compute_context_seller_inn(self):
self._context_seller_inn = self.company_id.inn
@api.depends('company_id')
def _compute_context_seller_kpp(self):
self._context_seller_kpp = self.company_id.kpp
@api.depends('company_id')
def _compute_context_seller_rs(self):
self._context_seller_rs = self.company_id.bank_account.acc_number
@api.depends('company_id')
def _compute_context_seller_bik(self):
self._context_seller_bik = self.company_id.bank_account.bank_id.bic
@api.depends('company_id')
def _compute_context_seller_bank(self):
self._context_seller_bank = self.company_id.bank_account.bank_id.name
@api.depends('company_id')
def _compute_context_seller_phone(self):
self._context_seller_phone = self.company_id.phone
@api.depends('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.depends('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.depends('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.depends('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.depends('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.depends('order_id')
def _compute_context_summ_word(self):
self._context_summ_word = numeral.rubles(self.order_id.amount_total)
@api.depends('delivery_terms')
def _compute_context_delivery_term(self):
self._context_delivery_term = self.delivery_terms
@api.depends('delivery_terms')
def _compute_context_delivery_term_word(self):
self._context_delivery_term_word = numeral.in_words(self.delivery_terms)
@api.depends('payment_terms')
def _compute_context_payment_term(self):
self._context_payment_term = self.payment_terms
@api.depends('payment_terms')
def _compute_context_payment_term_word(self):
self._context_payment_term_word = numeral.in_words(self.payment_terms)
_context_name = fields.Char(string='Contract number', compute='_compute_context_name', readonly=True)
_context_date = fields.Char(string='Contract date', compute='_compute_context_date', readonly=True)
_context_partner_contract_name = fields.Char(string='Partner contract name',
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(string='partner representer contract name',
compute='_compute_context_partner_representer_contract_name', readonly=True)
_context_partner_inn = fields.Char(string='Partner inn', compute='_compute_context_partner_inn', readonly=True)
_context_partner_kpp = fields.Char(string='Partner kpp', compute='_compute_context_partner_kpp', readonly=True)
_context_partner_rs = fields.Char(string='Partner corresponding account',
compute='_compute_context_partner_rs',
readonly=True)
_context_partner_bik = fields.Char(string='Partner bank bik',
compute='_compute_context_partner_bik',
readonly=True)
_context_partner_bank = fields.Char(string='Partner bank name',
compute='_compute_context_partner_bank',
readonly=True)
_context_partner_phone = fields.Char(string='Partner phone',
compute='_compute_context_partner_phone',
readonly=True)
_context_partner_representer_name = fields.Char(string='Partner representer name',
compute='_compute_context_partner_representer_name',
readonly=True)
_context_seller_contract_name = fields.Char(string='Seller contract name',
compute='_compute_context_seller_contract_name',
readonly=True)
_context_seller_adress = fields.Char(string='Seller full adress',
compute='_compute_context_seller_adress',
readonly=True)
_context_seller_representer_contract_job_name = fields.Char(string='Seller representer contract job name',
compute='_compute_context_seller_representer_contract_job_name', readonly=True)
_context_seller_representer_contract_name = fields.Char(string='Seller representer contract name',
compute='_compute_context_seller_representer_contract_name',
readonly=True)
_context_seller_inn = fields.Char(string='Seller inn', compute='_compute_context_seller_inn', readonly=True)
_context_seller_kpp = fields.Char(string='Seller kpp', compute='_compute_context_seller_kpp', readonly=True)
_context_seller_rs = fields.Char(string='Seller corresponding account',
compute='_compute_context_seller_rs',
readonly=True)
_context_seller_bik = fields.Char(string='Seller bank bik', compute='_compute_context_seller_bik', readonly=True)
_context_seller_bank = fields.Char(string='Seller bank name', compute='_compute_context_seller_bank', readonly=True)
_context_seller_phone = fields.Char(string='Seller phone', compute='_compute_context_seller_phone', readonly=True)
_context_seller_representer_job_name = fields.Char(string='Seller representer job name',
compute='_compute_context_seller_representer_job_name',
readonly=True)
_context_seller_representer_name = fields.Char(string='Seller representer name',
compute='_compute_context_seller_representer_name', readonly=True)
_context_summ_rub = fields.Char(string='Contract summ(rub)', compute='_compute_context_summ_rub', readonly=True)
_context_summ_rub_word = fields.Char(string='Contract summ(rub), word',
compute='_compute_context_summ_rub_word',
readonly=True)
_context_summ_kop = fields.Char(string='Contract summ(kop)', compute='_compute_context_summ_kop', readonly=True)
_context_summ_word = fields.Char(string='Contract summ word', compute='_compute_context_summ_word', readonly=True)
_context_delivery_term = fields.Char(string='Contract delivery term',
compute='_compute_context_delivery_term',
readonly=True)
_context_delivery_term_word = fields.Char(string='Contract delivery term word',
compute='_compute_context_delivery_term_word',
readonly=True)
_context_payment_term = fields.Char(string='Contract payment term',
compute='_compute_context_payment_term', readonly=True)
_context_payment_term_word = fields.Char(string='Contract payment term word',
compute='_compute_context_payment_term_word', readonly=True)
_context_partner_passport_data = fields.Char(string='Partner passport data',
compute='_compute_partner_passport_data',
readonly=True)
@api.onchange('partner_id')
def _compute_partner_passport_data(self):
return self.partner_id.passport_data
@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_passport_data': self.partner_id.passport_data,
'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("db_name")
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',
}

View File

@ -1,118 +0,0 @@
# -*- 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')
def _calculate_contract_name(self, _date):
contract_date = datetime.strptime(_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
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):
datetime_now = datetime.now().strftime("%Y-%m-%d")
vals['name'] = self._calculate_contract_name(datetime_now)
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):
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)
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)

46
models/res_partner.py Normal file
View File

@ -0,0 +1,46 @@
from odoo import api, fields, models
class ResPartner(models.Model):
_inherit = "res.partner"
name_parent_case = fields.Char(string="Name Parent Case",)
name_initials_case = fields.Char(string="Name Initials Case",)
function_parent_case = fields.Char(string="Function Parent Case",)
client_contract_ids = fields.One2many(
"res.partner.contract", "partner_id", string="Contracts",
)
contract_count = fields.Integer(
compute="_compute_contract_count", string="# of contracts"
)
full_address = fields.Char(
compute="_compute_full_address"
) # Check for res.partner.contact_address in base/res
street_actual = fields.Many2one("res.partner", string="Actual Address",)
representative_id = fields.Many2one(
"res.partner", string="Representative", help="Person, who represents company"
)
signature = fields.Binary(string="Client signature")
@api.depends("street", "street2", "city", "state_id", "zip", "country_id")
def _compute_full_address(self):
for record in self:
data = filter(
None,
map(
lambda s: s and s.strip(),
[
record.zip,
record.street,
record.street2,
record.country_id.name,
record.city,
],
),
)
record.full_address = ", ".join(data)
@api.one
@api.depends("self.client_contract_ids")
def _compute_contract_count(self):
self.contract_count = len(self.client_contract_ids)

View File

@ -0,0 +1,118 @@
import datetime
from odoo import _, api, fields, models
class PartnerContract(models.Model):
_name = "res.partner.contract"
_description = "Contract"
_inherit = ["mail.thread", "mail.activity.mixin", "mail.followers"]
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()
name = fields.Char(string="Contract number", default=_get_default_name,)
create_date_ts = fields.Char(default=_get_default_create_date_ts)
date_conclusion = fields.Date(string="Date of system conclusion",)
date_conclusion_fix = fields.Date(
string="Date of manual conclusion",
help="Field for manual edit when contract is signed or closed",
default=lambda self: self.date_conclusion,
)
contract_annex_ids = fields.One2many(
"res.partner.contract.annex",
"contract_id",
string="Annexes",
help="Annexes to this contract",
)
contract_annex_number = fields.Integer(
default=1, help="Counter for generate Annex name"
)
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.user.company_id.partner_id,
)
state = fields.Selection(
[("draft", "New"), ("sign", "Signed"), ("close", "Closed"),],
string="Status",
readonly=True,
copy=False,
index=True,
track_visibility="onchange",
track_sequence=3,
default="draft",
)
@api.multi
def action_sign(self):
self.write({"state": "sign", "date_conclusion": fields.Date.today()})
@api.multi
def action_close(self):
self.write({"state": "close"})
@api.multi
def action_renew(self):
self.write({"state": "draft"})
@api.multi
def action_print_form(self):
view = self.env.ref("client_contracts.res_partner_wizard_print_contract_view")
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},
}
class PrintTemplateContract(models.Model):
_name = "res.partner.template.print.contract"
_description = "Print Template Contract"
attachment_id = fields.Many2one(
"ir.attachment", string="Template Attachment", required=True,
)
is_default = fields.Boolean(string="Default Template", default=False,)
class PrintTemplateAnnex(models.Model):
_name = "res.partner.template.print.annex"
_description = "Print Template Contract Annex"
attachment_id = fields.Many2one(
"ir.attachment", string="Template Attachment", required=True,
)
is_default = fields.Boolean(string="Default Template", default=False,)

View File

@ -0,0 +1,74 @@
import math
from odoo import _, api, fields, models
class ContractOrderAnnex(models.Model):
_name = "res.partner.contract.annex"
_description = "Contract Annex"
name = fields.Char(string="Name", help="The Number of Annex")
order_id = fields.Many2one("sale.order", string="Order", required=True,)
contract_id = fields.Many2one(
"res.partner.contract", string="Contract", readonly=True,
)
date_conclusion = fields.Date(
string="Conclusion Date", default=fields.Date.today(),
)
prepaid_expence = fields.Float(string="Prepaid Expence", default=0)
delivery_time = fields.Integer(related="order_id.delivery_time", readonly=True,)
payment_term = fields.Many2one(
"account.payment.term", related="order_id.payment_term_id", readonly=True,
)
@api.onchange("contract_id")
def _onchange_contract_id(self):
# Compute name if there is no custom name
contract_number = self.contract_id.name
annex_number = self.contract_id.contract_annex_number
self.name = "{contract}--{annex}".format(
contract=contract_number, annex=annex_number
)
# Compute domain for order_id because of bug with
# not working correctly domain in model
return {
"domain": {
"order_id": [
("partner_id", "=", self.contract_id.partner_id.id),
("contract_annex_id", "=", False),
]
}
}
@api.model
def create(self, values):
record = super().create(values)
# Fill annex_id to domain it in future
record.order_id.contract_annex_id = record.id
# Add counter
record.contract_id.contract_annex_number += 1
return record
@api.multi
def action_print_form(self):
view = self.env.ref("client_contracts.res_partner_wizard_print_annex_view")
return {
"name": _("Print Form of Contract Annex"),
"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},
}
def modf(self, arg):
"""Math.modf function for using in XML ir.action.server code
Uses in data/fields_default.xml
"""
return math.modf(arg)

View File

@ -0,0 +1,12 @@
from odoo import fields, models
class ContractField(models.Model):
_name = "res.partner.contract.field"
_description = "Contract Field"
name = fields.Char(string="Name", required=True, translate=True,)
technical_name = fields.Char(
string="Technical Name", help="Name uses in template", required=True,
)
description = fields.Char(string="Description", translate=True, default="",)

View File

@ -0,0 +1,21 @@
from odoo import fields, models
class ContractFieldTransient(models.TransientModel):
_name = "res.partner.contract.field.transient"
_description = "Contract Field Transient"
_contract_wizard_id = fields.Many2one(
"res.partner.contract.wizard", string="Contract", readonly=True,
)
contract_field_id = fields.Many2one("res.partner.contract.field", string="Field",)
name = fields.Char(related="contract_field_id.name", string="Name", readonly=True,)
technical_name = fields.Char(
related="contract_field_id.technical_name",
string="Technical Name",
readonly=True,
)
description = fields.Char(
related="contract_field_id.description", string="Description", readonly=True,
)
value = fields.Char(string="Value", default="",)

26
models/sale_order.py Normal file
View File

@ -0,0 +1,26 @@
from odoo import api, fields, models
class SaleOrder(models.Model):
_inherit = "sale.order"
delivery_time = fields.Integer(string="Delivery Time", default=45,)
contract_annex_id = fields.Many2one(
"res.partner.contract.annex", string="Contract Annex", readonly=True,
)
# Extend default field
payment_term_id = fields.Many2one(
"account.payment.term",
domain=lambda self: [("id", "in", self._get_payment_terms())],
)
@api.multi
def _get_payment_terms(self):
ref = self.env.ref
terms = (
ref("client_contracts.payment_term_prepaid").id,
ref("client_contracts.payment_term_postpayment").id,
ref("client_contracts.payment_term_partial_2").id,
ref("client_contracts.payment_term_partial_3").id,
)
return terms

9
security/ir.model.access.csv Normal file → Executable file
View File

@ -1,2 +1,7 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 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
access_contracts_contracts,access_contracts_contracts,model_res_partner_contract,base.group_user,1,1,1,1
access_contracts_field,access_contracts_field,model_res_partner_contract_field,base.group_user,1,1,1,1
access_contracts_field_contract_annex,access_contracts_field_contract_annex,model_res_partner_contract_annex,base.group_user,1,1,1,1
access_contract_document_template,access_contract_document_template,model_res_partner_template_print_contract,base.group_user,1,1,1,1
access_contract_annex_template,access_contract_annex_template,model_res_partner_template_print_annex,base.group_user,1,1,1,1

1 id name model_id:id model_id/id group_id:id group_id/id perm_read perm_write perm_create perm_unlink
2 access_client_contracts_client_contracts access_contracts_contracts client_contracts.client_contracts access_contracts_contracts model_client_contracts_client_contracts model_res_partner_contract base.group_user 1 0 1 0 1 0 1
3 access_contracts_field access_contracts_field model_res_partner_contract_field base.group_user 1 1 1 1
4 access_contracts_field_contract_annex access_contracts_field_contract_annex model_res_partner_contract_annex base.group_user 1 1 1 1
5 access_contract_document_template access_contract_document_template model_res_partner_template_print_contract base.group_user 1 1 1 1
6 access_contract_annex_template access_contract_annex_template model_res_partner_template_print_annex base.group_user 1 1 1 1
7

0
utils/__init__.py Normal file
View File

11
utils/docxtpl.py Normal file
View File

@ -0,0 +1,11 @@
import io
from docxtpl import DocxTemplate
def get_document_from_values_stream(path_to_template: str, vals: dict):
doc = DocxTemplate(path_to_template)
doc.render(vals)
file_stream = io.BytesIO()
doc.save(file_stream)
file_stream.seek(0)
return file_stream

View File

@ -1,125 +0,0 @@
<?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>
<group name="template" string="Templates">
<field name="template" string="Templates"/>
</group>
<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 string="Contract values">
<group string="Contract">
<field name="_context_name"/>
<field name="_context_date"/>
<field name="_context_summ_rub"/>
<field name="_context_summ_rub_word"/>
<field name="_context_summ_kop"/>
<field name="_context_summ_word"/>
<field name="_context_delivery_term"/>
<field name="_context_delivery_term_word"/>
<field name="_context_payment_term"/>
<field name="_context_payment_term_word"/>
</group>
<group string="Company values">
<field name="_context_seller_contract_name"/>
<field name="_context_seller_adress"/>
<field name="_context_seller_representer_contract_job_name"/>
<field name="_context_seller_representer_contract_name"/>
<field name="_context_seller_inn"/>
<field name="_context_seller_kpp"/>
<field name="_context_seller_rs"/>
<field name="_context_seller_bik"/>
<field name="_context_seller_bank"/>
<field name="_context_seller_phone"/>
<field name="_context_seller_representer_job_name"/>
<field name="_context_seller_representer_name"/>
</group>
<group string="Partner values">
<field name="_context_partner_contract_name"/>
<field name="_context_partner_adress"/>
<field name="_context_partner_representer_contract_name"/>
<field name="_context_partner_inn"/>
<field name="_context_partner_kpp"/>
<field name="_context_partner_rs"/>
<field name="_context_partner_bik"/>
<field name="_context_partner_bank"/>
<field name="_context_partner_phone"/>
<field name="_context_partner_representer_name"/>
</group>
</group>
</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>

View File

@ -1,70 +1,78 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<record id="search_res_partner_contract_filter" model="ir.ui.view"> <!-- res.partner.contract.field action window -->
<field name="name">res_partner_contract_search</field> <record id="res_partner_contract_field_action" model="ir.actions.act_window">
<field name="model">res.partner.contract</field> <field name="name">res.partner.contract.field.action</field>
<field name="arch" type="xml"> <field name="type">ir.actions.act_window</field>
<search string="Search Contract"> <field name="res_model">res.partner.contract.field</field>
<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="view_mode">tree,form</field>
<field name="context">{'search_default_partner_id': active_id}</field> <field name="view_type">form</field>
</record> </record>
<record id="order_contract_tree" model="ir.actions.act_window"> <!-- res.partner.template.print.contract action window -->
<field name="name">Appexes</field> <record id="res_partner_print_contract_action" model="ir.actions.act_window">
<field name="res_model">sale.order</field> <field name="name">res.partner.template.print.contract.action</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.template.print.contract</field>
<field name="view_mode">tree,form</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field> </record>
<!-- res.partner.template.print.annex action window -->
<record id="res_partner_print_annex_action" model="ir.actions.act_window">
<field name="name">res.partner.template.print.annex.action</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.template.print.annex</field>
<field name="view_mode">tree,form</field>
<field name="view_type">form</field>
</record>
<record id="res_partner_contract_info_inherit_view" model="ir.ui.view">
<field name="name">res.partner.contract.info</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"> <field name="arch" type="xml">
<tree string="Appexes"> <xpath expr="//field[@name='type']" position="before">
<field name="name"/>
<field name="date"/> <field name="name" attrs="{'invisible': [('company_type', '=', 'company')]}"/>
<field name="name_parent_case" attrs="{'invisible': [('company_type', '=', 'company')]}"/>
<field name="name_initials_case" attrs="{'invisible': [('company_type', '=', 'company')]}"/>
</xpath>
<xpath expr="//field[@name='category_id']" position="after">
<field name="representative_id" domain="[('company_type', '=', 'person')]" attrs="{'invisible': [('company_type', '!=', 'company')]}"/>
<field name="signature" widget="image"/>
</xpath>
<xpath expr="//page[@name='internal_notes']" position="before">
<page string="Banks" name="banks">
<group>
<field name="bank_ids" attrs="{'invisible': [('company_type', '=', 'person')]}">
<tree>
<field name="acc_number"/>
<field name="bank_id"/>
</tree> </tree>
</field> </field>
</group>
</page>
</xpath>
<!-- <xpath expr="//field[@name='vat']" position="before">
<field name="street_actual"/>
</xpath> -->
<xpath expr="//field[@name='function']" position="after">
<field name="function_parent_case" attrs="{'invisible': [('is_company','=', True)]}"/>
</xpath>
</field>
</record> </record>
<record id="res_partner_contract_view_buttons" model="ir.ui.view"> <record id="res_partner_contract_view_buttons" model="ir.ui.view">
@ -74,74 +82,40 @@
<field name="priority" eval="25"/> <field name="priority" eval="25"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<button name="toggle_active" position="before"> <button name="toggle_active" position="before">
<button class="oe_inline oe_stat_button" type="action" name="%(res_partner_contract_action)d" <button class="oe_inline oe_stat_button" type="action" name="%(res_partner_contract_partner_action)d" attrs="{'invisible': [('customer', '=', False)]}" icon="fa-pencil-square-o">
attrs="{'invisible': [('customer', '=', False)]}"
icon="fa-pencil-square-o">
<field string="Contracts" name="contract_count" widget="statinfo"/> <field string="Contracts" name="contract_count" widget="statinfo"/>
</button> </button>
</button> </button>
</field> </field>
</record> </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"> <menuitem id="res_partner_menu_contracts"
<field name="name">annex_action</field> name="Contract"
<field name="res_model">res.partner.contract.annex.type</field> parent="contacts.res_partner_menu_config"
<field name="view_type">form</field> sequence="7"/>
<field name="view_mode">tree,form,graph</field>
</record>
<record id="res_partner_contract_annex_type_view" model="ir.ui.view"> <menuitem id="res_partner_menu_contracts_fields"
<field name="name">res_partner_contract_annex_type_view</field> name="Fields"
<field name="model">res.partner.contract.annex.type</field> action="res_partner_contract_field_action"
<field name="view_type">form</field> parent="res_partner_menu_contracts"
<field name="view_mode">tree,form,graph</field> sequence="1"/>
<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"> <menuitem id="res_partner_menu_contracts_templates"
<field name="name">res_partner_contract_template_action</field> name="Templates"
<field name="res_model">res.partner.contract.template</field> parent="res_partner_menu_contracts"
<field name="view_type">form</field> sequence="2"/>
<field name="view_mode">tree,form,graph</field>
</record>
<record id="res_partner_contract_template_view" model="ir.ui.view"> <menuitem id="res_partner_menu_contracts_templates_contract"
<field name="name">res_partner_contract_template_view</field> name="Contract"
<field name="model">res.partner.contract.template</field> parent="res_partner_menu_contracts_templates"
<field name="view_type">form</field> action="res_partner_print_contract_action"
<field name="view_mode">tree,form,graph</field> sequence="1"/>
<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 id="res_partner_menu_contracts_templates_annex"
name="Annex"
<menuitem name="Templatesв" parent="sale.menu_sale_config" id="res_partner_contract_templates" action="res_partner_contract_template_action"/> parent="res_partner_menu_contracts_templates"
action="res_partner_print_annex_action"
sequence="2"/>
</odoo> </odoo>

View File

@ -0,0 +1,99 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<!-- res.partner.contract tree -->
<record id="res_partner_contract_tree" model="ir.ui.view">
<field name="name">Contracts</field>
<field name="model">res.partner.contract</field>
<field name="arch" type="xml">
<tree string="Contracts">
<field name="name"/>
<field name="date_conclusion"/>
<field name="partner_id"/>
</tree>
</field>
</record>
<!-- res.partner.contract form -->
<record id="res_partner_contract_form" model="ir.ui.view">
<field name="name">Contract Form</field>
<field name="model">res.partner.contract</field>
<field name="arch" type="xml">
<form string="Contract">
<header attrs="{'invisible': [('create_date', '=', False)]}">
<button name="action_sign" type="object" string="Sign" states="draft" class="oe_highlight"/>
<button name="action_close" type="object" string="Close" states="sign" class="oe_highlight"/>
<button name="action_renew" type="object" string="Renew" states="close"/>
<button name="action_print_form" type="object" string="Print"/>
<field name="state" widget="statusbar" statusbar_visible="draft,sign,close"/>
</header>
<sheet>
<group string="Contract parameters" name="single_params">
<field name="name" readonly="1"/>
<field name="partner_id" readonly="1"/>
<field name="create_date" readonly="1" attrs="{'invisible': [('create_date', '=', False)]}"/>
<field name="date_conclusion" readonly="1" attrs="{'invisible': ['|', ('create_date', '=', False), ('date_conclusion', '=', False)]}"/>
<field name="date_conclusion_fix" attrs="{'invisible': [('create_date', '=', False)]}"/>
<!-- Uses to generate number of Annex -->
<field name="contract_annex_number" invisible="1"/>
</group>
<group string="Annexed orders" name="annexes" attrs="{'invisible': [('create_date', '=', False)]}">
<field name="contract_annex_ids">
<field name="name"/>
</field>
</group>
</sheet>
</form>
</field>
</record>
<!-- Mail Thread -->
<!-- res.partner.contract inherit form -->
<record id="view_id" model="ir.ui.view">
<field name="name">res.partner.contract.inherit.view.form</field>
<field name="model">res.partner.contract</field>
<field name="inherit_id" ref="res_partner_contract_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet" position="after">
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</xpath>
</field>
</record>
<!-- Need it? -->
<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 id="res_partner_contract_action" model="ir.actions.act_window">
<field name="name">Contracts</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">{}</field>
</record>
<record id="res_partner_contract_partner_action" model="ir.actions.act_window">
<field name="name">Contracts</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>
</odoo>

View File

@ -0,0 +1,31 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data noupdate="0">
<!-- res.partner.contract.annex form view -->
<record id="res_partner_contract_annex_view_form" model="ir.ui.view">
<field name="name">res.partner.contract.annex.view.form</field>
<field name="model">res.partner.contract.annex</field>
<field name="arch" type="xml">
<form string="Contract Annex">
<sheet>
<group>
<field name="name" placeholder="Leave empty for compute"/>
<field name="contract_id" attrs="{'invisible': [('contract_id', '=', False)]}"/>
<field name="order_id"/>
<field name="date_conclusion"/>
<field name="payment_term"/>
<field name="delivery_time"/>
</group>
<group>
<button name="action_print_form" type="object" string="Print" attrs="{'invisible': [('contract_id', '=', False)]}"/>
</group>
</sheet>
</form>
</field>
</record>
</data>
</odoo>

21
views/sale_order.xml Normal file
View File

@ -0,0 +1,21 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<!-- sale.order inherit form view -->
<record id="view_order_form" model="ir.ui.view">
<field name="name">sale.order.inherit.view.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='payment_term_id']" position="after">
<field name="delivery_time"/>
<field name="contract_annex_id"/>
</xpath>
</field>
</record>
<menuitem id="res_partner_contract_menu_act" name="Contracts" parent="sale.sale_order_menu" action="res_partner_contract_action" sequence="4"/>
</odoo>

View File

@ -1,787 +0,0 @@
<?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">
<div t-field="doc.company_id.image" t-options="{'widget': 'image' }"/>
</td>
<td align="right">
<t t-esc="doc.company_id.phone"/> <t t-esc="doc.company_id.email" />
</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>
&amp;nbsp;
</td>
</tr>
<tr valign="top">
<td align="left" colspan="2">
Москва, <t t-esc="doc._context_date"/><br/>
</td>
</tr>
<tr>
<td>
&amp;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_inn_kpp_fiz_info">
<td>
<b><t t-esc="person.contract_name"/></b><br/>
<br/>
<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_payment_fiz_template">
<td valign="top">
<b>Паспорт</b>: <t t-esc="person.passport_data"/><br/>
<br/>
<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"><div t-field="doc.company_id.representative_id.signature" t-options="{'widget': 'image', 'border':'0', 'width':'100' }"/></div>
</td>
</tr>
<tr valign="top">
<td>
_________________________
</td>
<td>
_________________________
</td>
</tr>
<tr valign="top">
<td>
М.П.
<div id="stamp1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<div t-field="doc.company_id.signature" t-options="{'widget': 'image', 'border':'0', 'width':'100' }"/></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"><div t-field="doc.company_id.representative_id.signature" t-options="{'widget': 'image', 'border':'0', 'width':'100' }"/></div>
</td>
</tr>
<tr valign="top">
<td>
_________________________
</td>
<td>
_________________________
</td>
</tr>
<tr valign="top">
<td>
М.П.
<div id="stamp">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<div t-field="doc.company_id.signature" t-options="{'widget': 'image', 'border':'0', 'width':'100' }"/></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_fiz_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_fiz_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">
<br/>
<br/>
</td>
</tr>
<tr valign="top">
<td colspan="3" align="left">
<span id="br" style="display:none"><br/></span>
<div id="sign"><div t-field="doc.company_id.representative_id.signature" t-options="{'widget': 'image', 'border':'0', 'width':'100' }"/></div>
</td>
</tr>
<tr valign="top">
<td>
_________________________
</td>
<td>
_________________________
</td>
</tr>
<tr valign="top">
<td>
М.П.
<div id="stamp">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;<div t-field="doc.company_id.signature" t-options="{'widget': 'image', 'border':'0', 'width':'100' }"/></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>

1
wizard/__init__.py Normal file
View File

@ -0,0 +1 @@
from . import res_partner_contract_wizard

View File

@ -0,0 +1,183 @@
# -*- coding: utf-8 -*-
import base64
import logging
from odoo import _, api, fields, models
from odoo.exceptions import UserError
from ..utils.docxtpl import get_document_from_values_stream
_logger = logging.getLogger(__name__)
class ContractWizard(models.TransientModel):
_name = "res.partner.contract.wizard"
def _get_default_template_contract(self):
return (
self.env["res.partner.template.print.contract"]
.search([("is_default", "=", True)], limit=1)
.id
)
def _get_default_template_annex(self):
return (
self.env["res.partner.template.print.annex"]
.search([("is_default", "=", True)], limit=1)
.id
)
def _get_default_partner(self):
current_id = self.env.context.get("active_id")
return self.env["res.partner.contract"].browse(current_id).partner_id.id
target = fields.Reference(
selection=[
("res.partner.contract", "Contract"),
("res.partner.contract.annex", "Contract Annex"),
],
string="Target",
)
company_id = fields.Many2one("res.partner", string="Company")
partner_id = fields.Many2one("res.partner", string="Partner")
print_template_contract = fields.Many2one(
"res.partner.template.print.contract",
string="Print Template of Contract",
default=_get_default_template_contract,
)
print_template_annex = fields.Many2one(
"res.partner.template.print.annex",
string="Print Template of Contract Annex",
default=_get_default_template_annex,
)
transient_field_ids = fields.One2many(
"res.partner.contract.field.transient",
"_contract_wizard_id",
string="Contract Fields",
)
@api.onchange("target")
def _onchange_target(self):
"""Creates transient fields for generate contract template
Looks as a tree view of *_contract_field_transient model in xml
"""
def get_contract_field(technical_name):
return self.env["res.partner.contract.field"].search(
[("technical_name", "=", technical_name),]
)
# A model is the wizard called from
active_model = self.env.context.get("active_model")
# A record is the model called from (manually set with context)
target_id = self.env.context.get("self_id")
# Reference to this record
self.target = "{model},{record_id}".format(
model=active_model, record_id=int(target_id)
)
# Check for model and get this meta fields
company_id = (
self.target.company_id
if hasattr(self.target, "company_id")
else self.target.contract_id.company_id
)
partner_id = (
self.target.partner_id
if hasattr(self.target, "partner_id")
else self.target.contract_id.partner_id
)
self.company_id = company_id
self.partner_id = partner_id
model_to_action = {
"res.partner.contract": "client_contracts.action_get_contract_context",
"res.partner.contract.annex": "client_contracts.action_get_annex_context",
}
action = model_to_action[active_model]
# Get dictionary for `transient_fields_ids` with editable fields
# With data from Odoo database
contract_context_values = (
self.env.ref(action).with_context({"onchange_self": self.target}).run()
)
self.transient_field_ids = [ # one2many
(
4,
self.env["res.partner.contract.field.transient"]
.create(
{"contract_field_id": get_contract_field(field).id, "value": value,}
)
.id,
0,
)
for field, value in sorted(contract_context_values.items())
]
@api.multi
def get_docx_contract(self):
template = self._get_template()
if not template:
raise UserError("Template must be set up")
path_to_template = template._full_path(template.store_fname)
fields = {
transient_field.technical_name: transient_field.value
for transient_field in self.transient_field_ids
if transient_field.technical_name and transient_field.value
}
binary_data = get_document_from_values_stream(path_to_template, fields).read()
encoded_data = base64.b64encode(binary_data)
attachment_name = "{name}-{number}.{ext}".format(
number=self.target.name,
ext="docx",
name=(
_("Contract")
if self.target._name == "res.partner.contract"
else (
_("Annex")
if self.target._name == "res.partner.contract.annex"
else ("Unknown")
)
),
)
document_as_attachment = self.env["ir.attachment"].create(
{
"name": attachment_name,
"datas_fname": attachment_name,
"type": "binary",
"datas": encoded_data,
}
)
# Send message with attachment to a mail.thread of the company
res_id = self.target.id
if hasattr(self.target, "contract_id"):
res_id = self.target.contract_id.id
self.env["mail.message"].create(
{
"model": "res.partner.contract",
"res_id": res_id,
"message_type": "comment",
"attachment_ids": [(4, document_as_attachment.id, False)],
}
)
return document_as_attachment
@api.multi
def _get_template(self):
model_to_template = {
"res.partner.contract": self.print_template_contract.attachment_id,
"res.partner.contract.annex": self.print_template_annex.attachment_id,
}
return model_to_template.get(self.env.context.get("active_model"), False)

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="res_partner_wizard_print_contract_view" model="ir.ui.view">
<field name="name">Print Contract</field>
<field name="model">res.partner.contract.wizard</field>
<field name="arch" type="xml">
<form>
<group>
<group name="requisites" string="Requisites">
<field name="target"/>
<field name="partner_id" string="Partner" readonly="1"/>
<field name="company_id" string="Seller" readonly="1"/>
</group>
<!-- <group name="terms" string="Delivery and payment terms">
<field name="payment_terms"/>
<field name="delivery_terms"/>
</group> -->
<group string="Contract values" colspan="4">
<field name="transient_field_ids">
<tree editable="1" create="0" delete="0">
<field name="name"/>
<field name="value"/>
<field name="description" invisible="1"/>
<field name="technical_name" invisible="1"/>
</tree>
</field>
</group>
</group>
<button string="Create a document" type="object" name="get_docx_contract" />
<footer/>
</form>
</field>
</record>
<record id="res_partner_wizard_print_annex_view" model="ir.ui.view">
<field name="name">Print Annex</field>
<field name="model">res.partner.contract.wizard</field>
<field name="arch" type="xml">
<form>
<group>
<group name="info" string="Info">
<field name="target"/>
</group>
<!-- <group name="terms" string="Delivery and payment terms">
<field name="payment_terms"/>
<field name="delivery_terms"/>
</group> -->
<!-- <group name="order" string="Order Info">
<field name="order_id"/>
</group> -->
<group string="Annex values" colspan="4">
<field name="transient_field_ids">
<tree editable="1" create="0" delete="0">
<field name="name"/>
<field name="value"/>
<field name="description" invisible="1"/>
<field name="technical_name" invisible="1"/>
</tree>
</field>
</group>
</group>
<button string="Create a document" type="object" name="get_docx_contract" />
<footer/>
</form>
</field>
</record>
</odoo>