Merge branch 'development' into 'master'

Development

See merge request tabulasense/client_contracts!10
This commit is contained in:
Иван Широких 2020-01-28 12:38:26 +05:00
commit a797555596
53 changed files with 1341 additions and 436 deletions

11
TODOLIST.md Normal file
View File

@ -0,0 +1,11 @@
# TODO LIST
## Features
## Fixes
- Change all `parents` to `genitive`
- Merge `document_type` and `template_type` in `res.partner.document.template`
- Change `annex_number` to `annex_counter`
## Big feature
- Separate XML actions that generates transient fields for all types of documents

View File

@ -12,12 +12,15 @@
"version": "0.1.1", "version": "0.1.1",
"depends": ["base", "contacts", "russian_requisites", "sale",], "depends": ["base", "contacts", "russian_requisites", "sale",],
"data": [ "data": [
"data/assets_extension.xml",
"data/document_templates.xml",
"data/fields_default.xml", "data/fields_default.xml",
"data/payment_terms.xml", "data/payment_terms.xml",
"security/ir.model.access.csv", "security/ir.model.access.csv",
"views/res_partner_contract.xml", "views/res_partner_contract.xml",
"views/res_partner_contract_annex.xml", "views/res_partner_contract_annex.xml",
"views/res_partner_template_print.xml", "views/res_partner_contract_field.xml",
"views/res_partner_document_template.xml",
"views/res_partner.xml", "views/res_partner.xml",
"views/sale_order.xml", "views/sale_order.xml",
"wizard/res_partner_contract_wizard.xml", "wizard/res_partner_contract_wizard.xml",

10
data/assets_extension.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<template id="assets_backend" name="im assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/client_contracts/static/src/css/mimetypes.css"/>
</xpath>
</template>
</data>
</odoo>

331
data/document_templates.xml Normal file
View File

@ -0,0 +1,331 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- Original -->
<record id="document_contract_postavki_person" model="ir.attachment">
<field name="name">Договор Поставки Исходный</field>
<field name="datas_fname">Договор Поставки Исходный</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/contract_postavki.docx" type="base64"/>
</record>
<record id="template_contract_postavki_person" model="res.partner.document.template">
<field name="name">Договор Поставки Исходный</field>
<field name="attachment_id" ref="document_contract_postavki_person"/>
<field name="document_type"></field>
<field name="document_type_name"></field>
<field name="template_type"></field>
<field name="company_type"></field>
<field name="sequence">0</field>
</record>
<!-- Individual -->
<!-- Contract -->
<record id="document_contract_postavki_person" model="ir.attachment">
<field name="name">Договор Поставки Физлицо</field>
<field name="datas_fname">Договор поставки</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/person/contract_postavki_person.docx" type="base64"/>
</record>
<record id="template_contract_postavki_person" model="res.partner.document.template">
<field name="name">Договор поставки</field>
<field name="attachment_id" ref="document_contract_postavki_person"/>
<field name="document_type">contract</field>
<field name="document_type_name"></field>
<field name="template_type">contract</field>
<field name="company_type">person</field>
<field name="sequence">10</field>
</record>
<!-- Annexes -->
<record id="document_bill_person" model="ir.attachment">
<field name="name">Счёт Физлицо</field>
<field name="datas_fname">Счёт</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/person/bill_person.docx" type="base64"/>
</record>
<record id="template_bill_person" model="res.partner.document.template">
<field name="name">Счёт</field>
<field name="attachment_id" ref="document_bill_person"/>
<field name="document_type">annex</field>
<field name="document_type_name">bill</field>
<field name="template_type">annex</field>
<field name="company_type">person</field>
<field name="sequence">9</field>
</record>
<record id="document_specification_person" model="ir.attachment">
<field name="name">Спецификация Физлицо</field>
<field name="datas_fname">Спецификация</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/person/specification_person.docx" type="base64"/>
</record>
<record id="template_specification_person" model="res.partner.document.template">
<field name="name">Спецификация</field>
<field name="attachment_id" ref="document_specification_person"/>
<field name="document_type">annex</field>
<field name="document_type_name">specification</field>
<field name="template_type">annex</field>
<field name="company_type">person</field>
<field name="sequence">10</field>
</record>
<record id="document_addition_list_soglasovania_person" model="ir.attachment">
<field name="name">Лист согласования Физлицо</field>
<field name="datas_fname">Лист согласования</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/person/addition_list_soglasovania_person.docx" type="base64"/>
</record>
<record id="template_addition_list_soglasovania_person" model="res.partner.document.template">
<field name="name">Лист согласования</field>
<field name="attachment_id" ref="document_addition_list_soglasovania_person"/>
<field name="document_type">addition</field>
<field name="document_type_name">approval_list</field>
<field name="template_type">annex</field>
<field name="company_type">person</field>
<field name="sequence">20</field>
</record>
<record id="document_addition_act_1_person" model="ir.attachment">
<field name="name">Акт приема-передачи Физлицо</field>
<field name="datas_fname">Акт приема-передачи</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/person/addition_act_1_person.docx" type="base64"/>
</record>
<record id="template_addition_act_1_person" model="res.partner.document.template">
<field name="name">Акт приема-передачи</field>
<field name="attachment_id" ref="document_addition_act_1_person"/>
<field name="document_type">addition</field>
<field name="document_type_name">act_at</field>
<field name="template_type">annex</field>
<field name="company_type">person</field>
<field name="sequence">30</field>
</record>
<record id="document_addition_act_2_person" model="ir.attachment">
<field name="name">Акт приема-сдачи Физлицо</field>
<field name="datas_fname">Акт приема-сдачи</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/person/addition_act_2_person.docx" type="base64"/>
</record>
<record id="template_addition_act_2_person" model="res.partner.document.template">
<field name="name">Акт приема-сдачи</field>
<field name="attachment_id" ref="document_addition_act_2_person"/>
<field name="document_type">addition</field>
<field name="document_type_name">act_ad</field>
<field name="template_type">annex</field>
<field name="company_type">person</field>
<field name="sequence">40</field>
</record>
<!-- Sole Proprietor -->
<!-- Contract -->
<record id="document_contract_postavki_sp" model="ir.attachment">
<field name="name">Договор поставки ИП</field>
<field name="datas_fname">Договор поставки</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/sp/contract_postavki_sp.docx" type="base64"/>
</record>
<record id="template_contract_postavki_sp" model="res.partner.document.template">
<field name="name">Договор поставки</field>
<field name="attachment_id" ref="document_contract_postavki_sp"/>
<field name="document_type">contract</field>
<field name="document_type_name"></field>
<field name="template_type">contract</field>
<field name="company_type">sp</field>
<field name="sequence">20</field>
</record>
<!-- Annexes -->
<record id="document_specification_sp" model="ir.attachment">
<field name="name">Спецификация ИП</field>
<field name="datas_fname">Спецификация</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/sp/specification_sp.docx" type="base64"/>
</record>
<record id="template_specification_sp" model="res.partner.document.template">
<field name="name">Спецификация</field>
<field name="attachment_id" ref="document_specification_sp"/>
<field name="document_type">annex</field>
<field name="document_type_name">specification</field>
<field name="template_type">annex</field>
<field name="company_type">sp</field>
<field name="sequence">10</field>
</record>
<record id="document_bill_sp" model="ir.attachment">
<field name="name">Счёт ИП</field>
<field name="datas_fname">Счёт</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/sp/bill_sp.docx" type="base64"/>
</record>
<record id="template_bill_sp" model="res.partner.document.template">
<field name="name">Счёт</field>
<field name="attachment_id" ref="document_bill_sp"/>
<field name="document_type">annex</field>
<field name="document_type_name">bill</field>
<field name="template_type">annex</field>
<field name="company_type">sp</field>
<field name="sequence">9</field>
</record>
<record id="document_addition_list_soglasovania_sp" model="ir.attachment">
<field name="name">Лист согласования ИП</field>
<field name="datas_fname">Лист согласования</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/sp/addition_list_soglasovania_sp.docx" type="base64"/>
</record>
<record id="template_addition_list_soglasovania_sp" model="res.partner.document.template">
<field name="name">Лист согласования</field>
<field name="attachment_id" ref="document_addition_list_soglasovania_sp"/>
<field name="document_type">addition</field>
<field name="document_type_name">approval_list</field>
<field name="template_type">annex</field>
<field name="company_type">sp</field>
<field name="sequence">20</field>
</record>
<record id="document_addition_act_1_sp" model="ir.attachment">
<field name="name">Акт приема-передачи ИП</field>
<field name="datas_fname">Акт приема-передачи</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/sp/addition_act_1_sp.docx" type="base64"/>
</record>
<record id="template_addition_act_1_sp" model="res.partner.document.template">
<field name="name">Акт приема-передачи</field>
<field name="attachment_id" ref="document_addition_act_1_sp"/>
<field name="document_type">addition</field>
<field name="document_type_name">act_at</field>
<field name="template_type">annex</field>
<field name="company_type">sp</field>
<field name="sequence">30</field>
</record>
<record id="document_addition_act_2_sp" model="ir.attachment">
<field name="name">Акт приема-сдачи ИП</field>
<field name="datas_fname">Акт приема-сдачи</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/sp/addition_act_2_sp.docx" type="base64"/>
</record>
<record id="template_addition_act_2_sp" model="res.partner.document.template">
<field name="name">Акт приема-сдачи</field>
<field name="attachment_id" ref="document_addition_act_2_sp"/>
<field name="document_type">addition</field>
<field name="document_type_name">act_ad</field>
<field name="template_type">annex</field>
<field name="company_type">sp</field>
<field name="sequence">40</field>
</record>
<!-- Private Limited Company -->
<!-- Contract -->
<record id="document_contract_postavki_plc" model="ir.attachment">
<field name="name">Договор поставки ООО</field>
<field name="datas_fname">Договор поставки</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/plc/contract_postavki_plc.docx" type="base64"/>
</record>
<record id="template_contract_postavki_plc" model="res.partner.document.template">
<field name="name">Договор поставки</field>
<field name="attachment_id" ref="document_contract_postavki_plc"/>
<field name="document_type">contract</field>
<field name="document_type_name"></field>
<field name="template_type">contract</field>
<field name="company_type">plc</field>
<field name="sequence">30</field>
</record>
<!-- Annexes -->
<record id="document_specification_plc" model="ir.attachment">
<field name="name">Спецификация ООО</field>
<field name="datas_fname">Спецификация</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/plc/specification_plc.docx" type="base64"/>
</record>
<record id="template_specification_plc" model="res.partner.document.template">
<field name="name">Спецификация</field>
<field name="attachment_id" ref="document_specification_plc"/>
<field name="document_type">annex</field>
<field name="document_type_name">specification</field>
<field name="template_type">annex</field>
<field name="company_type">plc</field>
<field name="sequence">10</field>
</record>
<!-- Annexes -->
<record id="document_bill_plc" model="ir.attachment">
<field name="name">Счёт ООО</field>
<field name="datas_fname">Счёт</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/plc/bill_plc.docx" type="base64"/>
</record>
<record id="template_bill_plc" model="res.partner.document.template">
<field name="name">Счёт</field>
<field name="attachment_id" ref="document_bill_plc"/>
<field name="document_type">annex</field>
<field name="document_type_name">bill</field>
<field name="template_type">annex</field>
<field name="company_type">plc</field>
<field name="sequence">9</field>
</record>
<record id="document_addition_list_soglasovania_plc" model="ir.attachment">
<field name="name">Лист согласования ООО</field>
<field name="datas_fname">Лист согласования</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/plc/addition_list_soglasovania_plc.docx" type="base64"/>
</record>
<record id="template_addition_list_soglasovania_plc" model="res.partner.document.template">
<field name="name">Лист согласования</field>
<field name="attachment_id" ref="document_addition_list_soglasovania_plc"/>
<field name="document_type">addition</field>
<field name="document_type_name">approval_list</field>
<field name="template_type">annex</field>
<field name="company_type">plc</field>
<field name="sequence">20</field>
</record>
<record id="document_addition_act_1_plc" model="ir.attachment">
<field name="name">Акт приема-передачи ООО</field>
<field name="datas_fname">Акт приема-передачи</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/plc/addition_act_1_plc.docx" type="base64"/>
</record>
<record id="template_addition_act_1_plc" model="res.partner.document.template">
<field name="name">Акт приема-передачи</field>
<field name="attachment_id" ref="document_addition_act_1_plc"/>
<field name="document_type">addition</field>
<field name="document_type_name">act_at</field>
<field name="template_type">annex</field>
<field name="company_type">plc</field>
<field name="sequence">30</field>
</record>
<record id="document_addition_act_2_plc" model="ir.attachment">
<field name="name">Акт приема-сдачи ООО</field>
<field name="datas_fname">Акт приема-сдачи</field>
<field name="type">binary</field>
<field name="datas" file="client_contracts/static/assets/documents/plc/addition_act_2_plc.docx" type="base64"/>
</record>
<record id="template_addition_act_2_plc" model="res.partner.document.template">
<field name="name">Акт приема-сдачи</field>
<field name="attachment_id" ref="document_addition_act_2_plc"/>
<field name="document_type">addition</field>
<field name="document_type_name">act_ad</field>
<field name="template_type">annex</field>
<field name="company_type">plc</field>
<field name="sequence">40</field>
</record>
</data>
</odoo>

View File

@ -15,11 +15,14 @@ self = record
partner = self.partner_id # res.partner partner = self.partner_id # res.partner
partner_bank = partner.bank_ids and partner.bank_ids[0] # res.partner.bank partner_bank = partner.bank_ids and partner.bank_ids[0] # res.partner.bank
partner_bank_name = partner_bank.bank_id.name + (" г. {city}".format(city=partner_bank.bank_id.city) if partner_bank.bank_id.city else "")
seller = self.company_id seller = self.company_id
seller_bank = seller.bank_ids and seller.bank_ids[0] seller_bank = seller.bank_ids and seller.bank_ids[0]
seller_bank_name = seller_bank.bank_id.name + (" г. {city}".format(city=seller_bank.bank_id.city) if seller_bank.bank_id.city else "")
# Functions # Functions
_ = self._
get_date = self.get_date get_date = self.get_date
# Parse date # Parse date
@ -35,6 +38,9 @@ yyyy = date.year
yy = yyyy % 100 yy = yyyy % 100
MM = months[mm] MM = months[mm]
dd = dd if dd // 10 else '0{}'.format(dd)
mm = mm if mm // 10 else '0{}'.format(mm)
# ctx keys must be decalared in this xml with id equal to "contract_field_{technical_name}" # ctx keys must be decalared in this xml with id equal to "contract_field_{technical_name}"
ctx = { ctx = {
"contract_number": self.name, "contract_number": self.name,
@ -45,34 +51,42 @@ ctx = {
"yy": yy, "yy": yy,
"yyyy": yyyy, "yyyy": yyyy,
"seller_name": seller.name, "seller_name": seller.name_write,
"seller_company_form": _(dict(seller._fields['company_form'].selection).get(seller.company_form)), "seller_company_form": _(dict(seller._fields['company_form'].selection).get(seller.company_form)),
"seller_representer_name": seller.representative_id.name, "seller_representer_name": seller.representative_id.name,
"seller_representer_name_parent": seller.representative_id.name_genitive, "seller_representer_name_parent": seller.representative_id.name_genitive,
"seller_representer_name_initials": seller.representative_id.name_initials, "seller_representer_name_initials": seller.representative_id.name_initials,
"seller_representer_function": seller.representative_id.function,
"seller_representer_function_parent": seller.representative_id.function_genitive,
"seller_representer_document_parent": seller.representative_document, "seller_representer_document_parent": seller.representative_document,
"seller_inn": seller.vat, "seller_inn": seller.vat,
"seller_kpp": seller.iec, "seller_kpp": seller.iec,
"seller_ogrn": seller.psrn, "seller_ogrn": seller.psrn,
"seller_business_address": seller.full_address, "seller_business_address": seller.full_address,
"seller_phone": seller.phone, "seller_phone": seller.phone,
"seller_whatsapp": seller.whatsapp,
"seller_telegram": seller.telegram,
"seller_email": seller.email, "seller_email": seller.email,
"partner_name": partner.name, "partner_name": partner.name_write,
"partner_inn": partner.vat, "partner_inn": partner.vat,
"partner_business_address": partner.full_address, "partner_business_address": partner.full_address,
"partner_phone": partner.phone, "partner_phone": partner.phone,
"partner_whatsapp": partner.whatsapp,
"partner_telegram": partner.telegram,
"partner_email": partner.email, "partner_email": partner.email,
} }
if partner_bank: if partner_bank:
ctx.update({ ctx.update({
"partner_bank": partner_bank_name,
"partner_rs": partner_bank.acc_number, "partner_rs": partner_bank.acc_number,
"partner_ks": partner_bank.bank_id.corr_account, "partner_ks": partner_bank.bank_id.corr_account,
"partner_bic": partner_bank.bank_id.bic, "partner_bic": partner_bank.bank_id.bic,
}) })
if seller_bank: if seller_bank:
ctx.update({ ctx.update({
"seller_bank": seller_bank_name,
"seller_rs": seller_bank.acc_number, "seller_rs": seller_bank.acc_number,
"seller_ks": seller_bank.bank_id.corr_account, "seller_ks": seller_bank.bank_id.corr_account,
"seller_bic": seller_bank.bank_id.bic, "seller_bic": seller_bank.bank_id.bic,
@ -82,11 +96,18 @@ if seller_bank:
# Person # Person
if not partner.is_company: if not partner.is_company:
ctx.update({ ctx.update({
"partner_representer_name": partner.name_write,
"partner_representer_name_initials": partner.name_initials, "partner_representer_name_initials": partner.name_initials,
"partner_representer_passport_number": partner.passport_number, "partner_representer_passport_number": partner.passport_number,
"partner_representer_passport_date": partner.passport_date, "partner_representer_passport_date": partner.passport_date,
"partner_representer_passport_department": partner.passport_department, "partner_representer_passport_department": partner.passport_department,
"partner_representer_passport_department_code": partner.passport_department_code,
}) })
if not partner.name_write:
ctx.update({
"partner_name": partner.name,
"partner_representer_name": partner.name,
})
else: else:
# Company # Company
ctx.update({ ctx.update({
@ -94,6 +115,8 @@ else:
"partner_representer_name": partner.representative_id.name, "partner_representer_name": partner.representative_id.name,
"partner_representer_name_parent": partner.representative_id.name_genitive, "partner_representer_name_parent": partner.representative_id.name_genitive,
"partner_representer_name_initials": partner.representative_id.name_initials, "partner_representer_name_initials": partner.representative_id.name_initials,
"partner_representer_function": partner.representative_id.function,
"partner_representer_function_parent": partner.representative_id.function_genitive,
"partner_representer_document_parent": partner.representative_document, "partner_representer_document_parent": partner.representative_document,
}) })
@ -106,6 +129,7 @@ else:
"partner_representer_passport_number": partner.representative_id.passport_number, "partner_representer_passport_number": partner.representative_id.passport_number,
"partner_representer_passport_date": partner.representative_id.passport_date, "partner_representer_passport_date": partner.representative_id.passport_date,
"partner_representer_passport_department": partner.representative_id.passport_department, "partner_representer_passport_department": partner.representative_id.passport_department,
"partner_representer_passport_department_code": partner.representative_id.passport_department_code,
}) })
if partner.company_form == 'plc': if partner.company_form == 'plc':
# Private Limited Company # Private Limited Company
@ -131,13 +155,17 @@ action = ctx
# Aliases # Aliases
self = record self = record
seller = self.contract_id.company_id seller = self.company_id
partner = self.contract_id.partner_id partner = self.partner_id
seller_bank = seller.bank_ids and seller.bank_ids[0] seller_bank = seller.bank_ids and seller.bank_ids[0]
seller_bank_name = seller_bank.bank_id.name + (" г. {city}".format(city=seller_bank.bank_id.city) if seller_bank.bank_id.city else "")
partner_bank = partner.bank_ids and partner.bank_ids[0] partner_bank = partner.bank_ids and partner.bank_ids[0]
partner_bank_name = partner_bank.bank_id.name + (" г. {city}".format(city=partner_bank.bank_id.city) if partner_bank.bank_id.city else "")
# Functions # Functions
_ = self.contract_id._
get_date = self.contract_id.get_date get_date = self.contract_id.get_date
# Parse date # Parse date
@ -153,9 +181,25 @@ yyyy = date.year
yy = yyyy % 100 yy = yyyy % 100
MM = months[mm] MM = months[mm]
dd = dd if dd // 10 else '0{}'.format(dd)
mm = mm if mm // 10 else '0{}'.format(mm)
order_date = self.parse_odoo_datetime(self.order_id.date_order)
# ctx keys must be decalared in this xml with id equal to "contract_field_{technical_name}" # ctx keys must be decalared in this xml with id equal to "contract_field_{technical_name}"
ctx = { ctx = {
"contract_number": self.contract_id.name, "contract_number": self.contract_id.name,
"annex_name": self.name,
"annex_number": self.counter,
"order_name": self.order_id.name,
"order_date": "{} {} {}".format(order_date.day, months[order_date.month], order_date.year),
"payment_part_one": self.payment_part_one,
"payment_part_two": self.payment_part_two,
"payment_part_three": self.payment_part_three,
"delivery_period": self.delivery_period,
"dd": dd, "dd": dd,
"mm": mm, "mm": mm,
@ -163,11 +207,13 @@ ctx = {
"yy": yy, "yy": yy,
"yyyy": yyyy, "yyyy": yyyy,
"seller_name": seller.name, "seller_name": seller.name_write,
"seller_company_form": seller.read(["company_form"])[0]['company_form'], "seller_company_form": _(dict(seller._fields['company_form'].selection).get(seller.company_form)),
"seller_representer_name": seller.representative_id.name, "seller_representer_name": seller.representative_id.name,
"seller_representer_name_parent": seller.representative_id.name_genitive, "seller_representer_name_parent": seller.representative_id.name_genitive,
"seller_representer_name_initials": seller.representative_id.name_initials, "seller_representer_name_initials": seller.representative_id.name_initials,
"seller_representer_function": seller.representative_id.function,
"seller_representer_function_parent": seller.representative_id.function_genitive,
"seller_inn": seller.vat, "seller_inn": seller.vat,
"seller_kpp": seller.iec, "seller_kpp": seller.iec,
@ -176,7 +222,7 @@ ctx = {
"seller_phone": seller.phone, "seller_phone": seller.phone,
"seller_email": seller.email, "seller_email": seller.email,
"partner_name": partner.name, "partner_name": partner.name_write,
"partner_representer_name": partner.representative_id.name, "partner_representer_name": partner.representative_id.name,
"partner_representer_name_initials": partner.representative_id.name_initials, "partner_representer_name_initials": partner.representative_id.name_initials,
"partner_inn": partner.vat, "partner_inn": partner.vat,
@ -187,12 +233,14 @@ ctx = {
if partner_bank: if partner_bank:
ctx.update({ ctx.update({
"partner_bank": partner_bank_name,
"partner_rs": partner_bank.acc_number, "partner_rs": partner_bank.acc_number,
"partner_ks": partner_bank.bank_id.corr_account, "partner_ks": partner_bank.bank_id.corr_account,
"partner_bic": partner_bank.bank_id.bic, "partner_bic": partner_bank.bank_id.bic,
}) })
if seller_bank: if seller_bank:
ctx.update({ ctx.update({
"seller_bank": seller_bank_name,
"seller_rs": seller_bank.acc_number, "seller_rs": seller_bank.acc_number,
"seller_ks": seller_bank.bank_id.corr_account, "seller_ks": seller_bank.bank_id.corr_account,
"seller_bic": seller_bank.bank_id.bic, "seller_bic": seller_bank.bank_id.bic,
@ -202,17 +250,25 @@ if seller_bank:
# Person # Person
if not partner.is_company: if not partner.is_company:
ctx.update({ ctx.update({
"partner_representer_name": partner.name_write,
"partner_representer_name_initials": partner.name_initials, "partner_representer_name_initials": partner.name_initials,
"partner_representer_passport_number": partner.passport_number, "partner_representer_passport_number": partner.passport_number,
"partner_representer_passport_date": partner.passport_date, "partner_representer_passport_date": partner.passport_date,
"partner_representer_passport_department": partner.passport_department, "partner_representer_passport_department": partner.passport_department,
}) })
if not partner.name_write:
ctx.update({
"partner_name": partner.name,
"partner_representer_name": partner.name,
})
else: else:
# Company # Company
ctx.update({ ctx.update({
"partner_company_form": partner.read(["company_form"])[0]['company_form'], "partner_company_form": _(dict(partner._fields['company_form'].selection).get(partner.company_form)),
"partner_representer_name_parent": partner.representative_id.name_genitive, "partner_representer_name_parent": partner.representative_id.name_genitive,
"partner_representer_document_parent": partner.representative_document, "partner_representer_document_parent": partner.representative_document,
"partner_representer_function": partner.representative_id.function,
"partner_representer_function_parent": partner.representative_id.function_genitive,
}) })
if partner.company_form == 'sp': if partner.company_form == 'sp':
@ -246,6 +302,35 @@ action = ctx
<field name="sequence">1</field> <field name="sequence">1</field>
</record> </record>
<record id="contract_field_annex_name" model="res.partner.contract.field">
<field name="name">Annex Name</field>
<field name="technical_name">annex_name</field>
<field name="description"></field>
<field name="sequence">2</field>
</record>
<record id="contract_field_annex_number" model="res.partner.contract.field">
<field name="name">Annex Number</field>
<field name="technical_name">annex_number</field>
<field name="description"></field>
<field name="sequence">2</field>
<field name="visible">False</field>
</record>
<record id="contract_field_order_name" model="res.partner.contract.field">
<field name="name">Order Name</field>
<field name="technical_name">order_name</field>
<field name="description"></field>
<field name="sequence">3</field>
</record>
<record id="contract_field_order_date" model="res.partner.contract.field">
<field name="name">Order Date</field>
<field name="technical_name">order_date</field>
<field name="description"></field>
<field name="sequence">4</field>
</record>
<record id="contract_field_dd" model="res.partner.contract.field"> <record id="contract_field_dd" model="res.partner.contract.field">
<field name="name">Day</field> <field name="name">Day</field>
<field name="technical_name">dd</field> <field name="technical_name">dd</field>
@ -258,6 +343,7 @@ action = ctx
<field name="technical_name">mm</field> <field name="technical_name">mm</field>
<field name="description">Number</field> <field name="description">Number</field>
<field name="sequence">16</field> <field name="sequence">16</field>
<field name="visible">False</field>
</record> </record>
<record id="contract_field_MM" model="res.partner.contract.field"> <record id="contract_field_MM" model="res.partner.contract.field">
@ -272,6 +358,7 @@ action = ctx
<field name="technical_name">yy</field> <field name="technical_name">yy</field>
<field name="description">Short</field> <field name="description">Short</field>
<field name="sequence">40</field> <field name="sequence">40</field>
<field name="visible">False</field>
</record> </record>
<record id="contract_field_yyyy" model="res.partner.contract.field"> <record id="contract_field_yyyy" model="res.partner.contract.field">
@ -293,16 +380,32 @@ action = ctx
<field name="description"></field> <field name="description"></field>
</record> </record>
<record id="contract_field_delivery_time" model="res.partner.contract.field"> <record id="contract_field_payment_part_one" model="res.partner.contract.field">
<field name="name">Delivery Time</field> <field name="name">Payment Part 1</field>
<field name="technical_name">delivery_time</field> <field name="technical_name">payment_part_one</field>
<field name="description"></field> <field name="description"></field>
<field name="sequence">35</field>
</record> </record>
<record id="contract_field_payment_term" model="res.partner.contract.field"> <record id="contract_field_payment_part_two" model="res.partner.contract.field">
<field name="name">Payment Term</field> <field name="name">Payment Part 2</field>
<field name="technical_name">payment_term</field> <field name="technical_name">payment_part_two</field>
<field name="description"></field> <field name="description"></field>
<field name="sequence">36</field>
</record>
<record id="contract_field_payment_part_three" model="res.partner.contract.field">
<field name="name">Payment Part 3</field>
<field name="technical_name">payment_part_three</field>
<field name="description"></field>
<field name="sequence">37</field>
</record>
<record id="contract_field_delivery_period" model="res.partner.contract.field">
<field name="name">Delivery Period</field>
<field name="technical_name">delivery_period</field>
<field name="description"></field>
<field name="sequence">38</field>
</record> </record>
@ -399,6 +502,13 @@ action = ctx
<field name="sequence">144</field> <field name="sequence">144</field>
</record> </record>
<record id="contract_field_seller_representer_passport_department_code" model="res.partner.contract.field">
<field name="name">Passport Department Code</field>
<field name="technical_name">seller_representer_passport_department_code</field>
<field name="description">Seller Representative</field>
<field name="sequence">146</field>
</record>
<record id="contract_field_seller_inn" model="res.partner.contract.field"> <record id="contract_field_seller_inn" model="res.partner.contract.field">
<field name="name">INN</field> <field name="name">INN</field>
<field name="technical_name">seller_inn</field> <field name="technical_name">seller_inn</field>
@ -476,6 +586,20 @@ action = ctx
<field name="sequence">232</field> <field name="sequence">232</field>
</record> </record>
<record id="contract_field_seller_whatsapp" model="res.partner.contract.field">
<field name="name">WhatsApp</field>
<field name="technical_name">seller_whatsapp</field>
<field name="description">Seller</field>
<field name="sequence">233</field>
</record>
<record id="contract_field_seller_telegram" model="res.partner.contract.field">
<field name="name">Telegram</field>
<field name="technical_name">seller_telegram</field>
<field name="description">Seller</field>
<field name="sequence">234</field>
</record>
<record id="contract_field_seller_email" model="res.partner.contract.field"> <record id="contract_field_seller_email" model="res.partner.contract.field">
<field name="name">Email</field> <field name="name">Email</field>
<field name="technical_name">seller_email</field> <field name="technical_name">seller_email</field>
@ -577,6 +701,13 @@ action = ctx
<field name="sequence">344</field> <field name="sequence">344</field>
</record> </record>
<record id="contract_field_partner_representer_passport_department_code" model="res.partner.contract.field">
<field name="name">Passport Department Code</field>
<field name="technical_name">partner_representer_passport_department_code</field>
<field name="description">Partner Representative</field>
<field name="sequence">346</field>
</record>
<record id="contract_field_partner_inn" model="res.partner.contract.field"> <record id="contract_field_partner_inn" model="res.partner.contract.field">
<field name="name">INN</field> <field name="name">INN</field>
<field name="technical_name">partner_inn</field> <field name="technical_name">partner_inn</field>
@ -654,6 +785,20 @@ action = ctx
<field name="sequence">432</field> <field name="sequence">432</field>
</record> </record>
<record id="contract_field_partner_whatsapp" model="res.partner.contract.field">
<field name="name">WhatsApp</field>
<field name="technical_name">partner_whatsapp</field>
<field name="description">Partner</field>
<field name="sequence">433</field>
</record>
<record id="contract_field_partner_telegram" model="res.partner.contract.field">
<field name="name">Telegram</field>
<field name="technical_name">partner_telegram</field>
<field name="description">Partner</field>
<field name="sequence">434</field>
</record>
<record id="contract_field_partner_email" model="res.partner.contract.field"> <record id="contract_field_partner_email" model="res.partner.contract.field">
<field name="name">Email</field> <field name="name">Email</field>
<field name="technical_name">partner_email</field> <field name="technical_name">partner_email</field>

View File

@ -6,10 +6,10 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 11.0-20191106\n" "Project-Id-Version: Odoo Server 11.0-20191106\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-12-28 10:32+0000\n" "POT-Creation-Date: 2020-01-22 11:29+0000\n"
"PO-Revision-Date: 2019-12-28 10:32+0000\n" "PO-Revision-Date: 2020-01-22 11:29+0000\n"
"Last-Translator: <>\n" "Last-Translator: Stepan Savelyev\n"
"Language-Team: \n" "Language-Team: RYDLAB\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n" "Content-Transfer-Encoding: \n"
@ -41,6 +41,20 @@ msgstr "Оплата в 2 этапа"
msgid "3 stages" msgid "3 stages"
msgstr "Оплата в 3 этапа" msgstr "Оплата в 3 этапа"
#. module: client_contracts
#: code:addons/client_contracts/models/res_partner_document_template.py:31
#: selection:res.partner.document.template,document_type_name:0
#, python-format
msgid "Act of Acceptance and Delivery"
msgstr "Акт сдачи-приемки"
#. module: client_contracts
#: code:addons/client_contracts/models/res_partner_document_template.py:30
#: selection:res.partner.document.template,document_type_name:0
#, python-format
msgid "Act of Acceptance and Transfer"
msgstr "Акт приема-передачи"
#. module: client_contracts #. 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_partner_street_actual
#: model:ir.model.fields,field_description:client_contracts.field_res_users_street_actual #: model:ir.model.fields,field_description:client_contracts.field_res_users_street_actual
@ -48,9 +62,11 @@ msgid "Actual Address"
msgstr "Актуальный адрес" msgstr "Актуальный адрес"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_users_okpo #: code:addons/client_contracts/models/res_partner_document_template.py:21
msgid "All-Russian Classifier of Enterprises and Organizations" #: selection:res.partner.document.template,document_type:0
msgstr "Общероссийский классификатор предприятий и организаций" #, python-format
msgid "Addition"
msgstr "Дополнение"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_amount_fractional #: model:res.partner.contract.field,name:client_contracts.contract_field_amount_fractional
@ -63,21 +79,27 @@ msgid "Amount Whole Part"
msgstr "Целая часть суммы" msgstr "Целая часть суммы"
#. module: client_contracts #. module: client_contracts
#: code:addons/client_contracts/wizard/res_partner_contract_wizard.py:139 #: code:addons/client_contracts/models/res_partner_document_template.py:20
#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates_annex #: selection:res.partner.document.template,document_type:0
#: selection:res.partner.document.template,template_type:0
#, python-format #, python-format
msgid "Annex" msgid "Annex"
msgstr "Приложение" msgstr "Приложение"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view #: model:res.partner.contract.field,name:client_contracts.contract_field_annex_name
msgid "Annex values" msgid "Annex Name"
msgstr "Поля в печатном приложении" msgstr "Наименование приложения"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_annex_number
msgid "Annex Number"
msgstr "Номер приложения"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Annexed orders" msgid "Annexed Specifications"
msgstr "Приложенные заказы" msgstr "Приложенные спецификации"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_contract_annex_ids #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_contract_annex_ids
@ -90,11 +112,11 @@ msgid "Annexes to this contract"
msgstr "Приложения к договору" msgstr "Приложения к договору"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_name #: code:addons/client_contracts/models/res_partner_document_template.py:29
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_name #: selection:res.partner.document.template,document_type_name:0
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_name #, python-format
msgid "Attachment Name" msgid "Approval List"
msgstr "Название вложения" msgstr "Лист согласования"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_bic #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_bic
@ -124,6 +146,13 @@ msgstr "Наименование банка"
msgid "Bank Payment Account" msgid "Bank Payment Account"
msgstr "Расчётный счёт" msgstr "Расчётный счёт"
#. module: client_contracts
#: code:addons/client_contracts/models/res_partner_document_template.py:27
#: selection:res.partner.document.template,document_type_name:0
#, python-format
msgid "Bill"
msgstr "Счёт"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_business_address #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_business_address
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_business_address #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_business_address
@ -146,15 +175,14 @@ msgid "Closed"
msgstr "Закрыт" msgstr "Закрыт"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_company_id
#: 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_company_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_company_id #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_company_id
msgid "Company" msgid "Company"
msgstr "Компания" msgstr "Компания"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_company_type #: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_company_type
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_company_type
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_company_type
msgid "Company Type" msgid "Company Type"
msgstr "Тип компании" msgstr "Тип компании"
@ -169,14 +197,15 @@ msgid "Contact"
msgstr "Контакт" msgstr "Контакт"
#. module: client_contracts #. module: client_contracts
#: code:addons/client_contracts/wizard/res_partner_contract_wizard.py:136 #: code:addons/client_contracts/models/res_partner_document_template.py:19
#: model:ir.model,name:client_contracts.model_res_partner_contract #: 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_annex_contract_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient__contract_wizard_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
#: 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 #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
#: selection:res.partner.contract.wizard,target:0 #: selection:res.partner.contract.wizard,target:0
#: selection:res.partner.document.template,document_type:0
#: selection:res.partner.document.template,template_type:0
#, python-format #, python-format
msgid "Contract" msgid "Contract"
msgstr "Договор" msgstr "Договор"
@ -205,6 +234,7 @@ msgid "Contract Field Transient"
msgstr "Фактическое поле договора" msgstr "Фактическое поле договора"
#. module: client_contracts #. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_contract_field_action
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_transient_field_ids #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_transient_field_ids
msgid "Contract Fields" msgid "Contract Fields"
msgstr "Поля договора" msgstr "Поля договора"
@ -224,11 +254,6 @@ msgstr "Номер договора"
msgid "Contract parameters" msgid "Contract parameters"
msgstr "Информация" 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 #. 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_action
#: model:ir.actions.act_window,name:client_contracts.res_partner_contract_partner_action #: model:ir.actions.act_window,name:client_contracts.res_partner_contract_partner_action
@ -245,41 +270,46 @@ msgstr "Договоры"
msgid "Counter for generate Annex name" msgid "Counter for generate Annex name"
msgstr "Счётчик для генерации имени приложения к договору" msgstr "Счётчик для генерации имени приложения к договору"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_annex_counter
msgid "Counter of Contract Annexes"
msgstr "Счётчик приложений к договору"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_date_ts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_date_ts
msgid "Create Date Ts" msgid "Create Date Ts"
msgstr "Создан (таймстамп)" msgstr "Создан (таймстамп)"
#. module: client_contracts #. 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_document_view
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
msgid "Create a document" msgid "Create a document"
msgstr "Создать документ" msgstr "Создать документ"
#. module: client_contracts #. 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_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_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_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_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_document_template_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_create_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_create_uid
msgid "Created by" msgid "Created by"
msgstr "Создано" msgstr "Создано"
#. module: client_contracts #. module: client_contracts
#: code:addons/client_contracts/models/res_partner_contract.py:40
#: 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_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_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_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_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_document_template_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_create_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_create_date
#, python-format
msgid "Created on" msgid "Created on"
msgstr "Создан" msgstr "Создан"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_currency_id
msgid "Currency"
msgstr "Валюта"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_date_conclusion_fix #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_date_conclusion_fix
msgid "Date of manual conclusion" msgid "Date of manual conclusion"
@ -296,9 +326,27 @@ msgid "Day"
msgstr "День" msgstr "День"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_delivery_time #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form
msgid "Delivery"
msgstr "Доставка"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_delivery_address
msgid "Delivery Address"
msgstr "Адрес доставки"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_delivery_period
msgid "Delivery Period"
msgstr "Срок поставки"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_delivery_period
msgid "Delivery Period (days)"
msgstr "Срок поставки изделий"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_sale_order_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" msgid "Delivery Time"
msgstr "Срок доставки" msgstr "Срок доставки"
@ -308,24 +356,63 @@ msgstr "Срок доставки"
msgid "Description" msgid "Description"
msgstr "Описание" msgstr "Описание"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form
msgid "Design"
msgstr "Дизайн"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_design_cost
msgid "Design Cost"
msgstr "Стоимость разработки дизайна"
#. module: client_contracts #. 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_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_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_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_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_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_document_template_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_display_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_display_name
msgid "Display Name" msgid "Display Name"
msgstr "Отображаемое Имя" msgstr "Отображаемое Имя"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_document_type_name
msgid "Document"
msgstr "Документ"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_document_parent #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_document_parent
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_document_parent #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_document_parent
msgid "Document Genitive" msgid "Document Genitive"
msgstr "Документ (род.падеж)" msgstr "Документ (род.падеж)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_document_name
msgid "Document Name"
msgstr "Имя документа"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_document_template
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_document_template
msgid "Document Template"
msgstr "Шаблон документа"
#. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_document_template_action
msgid "Document Templates"
msgstr "Шаблоны документов"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_design_doc_cost
msgid "Documentation Design Cost"
msgstr "Стоимость разработки КД"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_design_doc_period
msgid "Documentation Design Period (days)"
msgstr "Срок подготовки КД"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_email #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_email
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_email #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_email
@ -365,8 +452,8 @@ msgid "Function"
msgstr "Должность" msgstr "Должность"
#. module: client_contracts #. 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_partner_function_genitive
#: model:ir.model.fields,field_description:client_contracts.field_res_users_function_parent_case #: model:ir.model.fields,field_description:client_contracts.field_res_users_function_genitive
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_function_parent #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_function_parent
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_function_parent #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_function_parent
msgid "Function Genitive" msgid "Function Genitive"
@ -382,10 +469,9 @@ msgstr "Generate Context for Contract"
#: 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_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_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_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_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_document_template_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_id
msgid "ID" msgid "ID"
msgstr "Номер" msgstr "Номер"
@ -408,17 +494,47 @@ msgid "IP Number"
msgstr "ИП Серия и номер" msgstr "ИП Серия и номер"
#. module: client_contracts #. module: client_contracts
#: selection:res.partner.template.print,company_type:0 #: model:ir.model.fields,help:client_contracts.field_res_partner_telegram
#: selection:res.partner.template.print.annex,company_type:0 #: model:ir.model.fields,help:client_contracts.field_res_users_telegram
#: selection:res.partner.template.print.contract,company_type:0 msgid "If a contact have a Telegram number or identifier"
msgstr "Номер или идентификатор в Telegram"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_whatsapp
#: model:ir.model.fields,help:client_contracts.field_res_users_whatsapp
msgid "If a contact have a WhatsApp number"
msgstr "Номер в WhatsApp"
#. module: client_contracts
#: selection:res.partner.document.template,company_type:0
msgid "Individual" msgid "Individual"
msgstr "Физическое лицо" msgstr "Физическое лицо"
#. module: client_contracts #. 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_contract_annex_view_form
msgid "Info" msgid "Info"
msgstr "Информация" msgstr "Информация"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form
msgid "Installation"
msgstr "Монтаж"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_installation_address
msgid "Installation Address"
msgstr "Монтаж по адресу"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_installation_cost
msgid "Installation Cost"
msgstr "Стоимость монтажа"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_installation_period
msgid "Installation Period (days)"
msgstr "Срок монтажа изделий"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_company_form #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_company_form
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_company_form #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_company_form
@ -437,9 +553,7 @@ msgstr "КПП"
#: 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___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_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_contract_wizard___last_update
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print___last_update #: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template___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" msgid "Last Modified on"
msgstr "Последнее изменение" msgstr "Последнее изменение"
@ -448,22 +562,25 @@ msgstr "Последнее изменение"
#: 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_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_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_wizard_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_contract_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_write_uid #: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_write_uid
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_write_uid
msgid "Last Updated by" msgid "Last Updated by"
msgstr "Последний раз обновлено" msgstr "Последний раз обновил"
#. module: client_contracts #. 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_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_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_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_wizard_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_contract_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_write_date #: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_write_date
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_write_date
msgid "Last Updated on" msgid "Last Updated on"
msgstr "Последний раз обновлено" msgstr "Последнее обновление"
#. module: client_contracts
#: model:ir.model,name:client_contracts.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Лид / Потенциальная сделка"
#. module: client_contracts #. 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_annex_view_form
@ -480,6 +597,8 @@ msgstr "Месяц"
#: 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_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_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_name #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_name
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_name
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_name #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_name
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_name #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_name
@ -488,21 +607,32 @@ msgid "Name"
msgstr "Название" msgstr "Название"
#. module: client_contracts #. 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_partner_name_genitive
#: model:ir.model.fields,field_description:client_contracts.field_res_users_name_parent_case #: model:ir.model.fields,field_description:client_contracts.field_res_users_name_genitive
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name_parent #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name_parent
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_name_parent #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_name_parent
msgid "Name Genitive" msgid "Name Genitive"
msgstr "Имя (род.падеж)" msgstr "Имя (род.падеж)"
#. module: client_contracts #. 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_partner_name_initials
#: model:ir.model.fields,field_description:client_contracts.field_res_users_name_initials_case #: model:ir.model.fields,field_description:client_contracts.field_res_users_name_initials
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name_initials #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_name_initials
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_name_initials #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_name_initials
msgid "Name Initials" msgid "Name Initials"
msgstr "Фамилия с инициалами" msgstr "Фамилия с инициалами"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_info_inherit_view
msgid "Name in ERP"
msgstr "Название в ERP"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_name_write
#: model:ir.model.fields,field_description:client_contracts.field_res_users_name_write
msgid "Name in contracts"
msgstr "Название в договоре"
#. module: client_contracts #. 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_technical_name
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_field_transient_technical_name #: model:ir.model.fields,help:client_contracts.field_res_partner_contract_field_transient_technical_name
@ -521,7 +651,6 @@ msgid "Number"
msgstr "Число" msgstr "Число"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_users_okpo
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_okpo #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_okpo
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_okpo #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_okpo
msgid "OKPO" msgid "OKPO"
@ -532,6 +661,21 @@ msgstr "ОКПО"
msgid "Order" msgid "Order"
msgstr "Заказ" msgstr "Заказ"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_order_date
msgid "Order Date"
msgstr "Дата заказа"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_order_name
msgid "Order Name"
msgstr "Имя заказа"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_annex_order_id
msgid "Orders with this partner which are not uses in annexes yet"
msgstr "Заказы, заключённые с этим партнёром и ещё не использующиеся в приложениях"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_ogrn #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_ogrn
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_ogrn #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_ogrn
@ -551,9 +695,9 @@ msgid "Parent Case"
msgstr "В родительном падеже" msgstr "В родительном падеже"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_partner_id
#: 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_partner_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_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
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_bank #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_bank
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_bic #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_bic
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_business_address #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_business_address
@ -568,6 +712,8 @@ msgstr "В родительном падеже"
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_okpo #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_okpo
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_phone #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_phone
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_rs #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_rs
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_telegram
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_whatsapp
msgid "Partner" msgid "Partner"
msgstr "Партнёр" msgstr "Партнёр"
@ -586,10 +732,17 @@ msgstr "Партнёр; Сертификат о регистрации ИП"
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_name_parent #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_name_parent
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_date #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_date
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_department #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_department
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_department_code
#: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_number #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_number
msgid "Partner Representative" msgid "Partner Representative"
msgstr "Представитель Партнёра" msgstr "Представитель Партнёра"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_passport_department_code
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_passport_department_code
msgid "Passport Department Code"
msgstr "Код подразделения, выдавшего паспорт"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_passport_department #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_representer_passport_department
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_passport_department #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_representer_passport_department
@ -609,14 +762,39 @@ msgid "Passport №"
msgstr "Паспорт №" msgstr "Паспорт №"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_payment_term #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form
msgid "Payment Term" msgid "Payment"
msgstr "Условия оплаты" msgstr "Оплата"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_payment_term #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_payment_part_one
msgid "Payment Terms" msgid "Payment 1 Part (%)"
msgstr "Условия оплаты" msgstr "Оплата первой части в размере (%)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_payment_part_two
msgid "Payment 2 Part (%)"
msgstr "Оплата второй части в размере (%)"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_payment_part_three
msgid "Payment 3 Part (%)"
msgstr "Оплата третьей части в размере (%)"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_payment_part_one
msgid "Payment Part 1"
msgstr "Оплата первой части (%)"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_payment_part_two
msgid "Payment Part 2"
msgstr "Оплата второй части (%)"
#. module: client_contracts
#: model:res.partner.contract.field,name:client_contracts.contract_field_payment_part_three
msgid "Payment Part 3"
msgstr "Оплата третьей части (%)"
#. module: client_contracts #. module: client_contracts
#: model:account.payment.term,note:client_contracts.payment_term_postpayment #: model:account.payment.term,note:client_contracts.payment_term_postpayment
@ -651,24 +829,18 @@ msgid "Phone"
msgstr "Телефон" msgstr "Телефон"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_prepaid_expense
msgid "Prepaid Expense"
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 #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
msgid "Print" msgid "Print"
msgstr "Печать" msgstr "Печать"
#. module: client_contracts #. module: client_contracts
#: code:addons/client_contracts/models/res_partner_contract.py:95 #: code:addons/client_contracts/models/res_partner_contract.py:99
#, python-format #, python-format
msgid "Print Form of Contract" msgid "Print Form of Contract"
msgstr "Форма печати договора" msgstr "Форма печати договора"
#. module: client_contracts #. module: client_contracts
#: code:addons/client_contracts/models/res_partner_contract_annex.py:63 #: code:addons/client_contracts/models/res_partner_contract_annex.py:111
#, python-format #, python-format
msgid "Print Form of Contract Annex" msgid "Print Form of Contract Annex"
msgstr "Форма печати приложения к договору" msgstr "Форма печати приложения к договору"
@ -689,26 +861,19 @@ msgid "Print Template Contract Annex"
msgstr "Вложение-шаблон приложения к договору" msgstr "Вложение-шаблон приложения к договору"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_print_template_contract #: selection:res.partner.document.template,company_type:0
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
#: selection:res.partner.template.print,company_type:0
#: selection:res.partner.template.print.annex,company_type:0
#: selection:res.partner.template.print.contract,company_type:0
msgid "Private Limited Company" msgid "Private Limited Company"
msgstr "Общество с ограниченной ответственностью" msgstr "Общество с ограниченной ответственностью"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_development_period
msgid "Product Development Period (days)"
msgstr "Срок разработки изделий"
#. module: client_contracts #. module: client_contracts
#: model:ir.model,name:client_contracts.model_sale_order #: model:ir.model,name:client_contracts.model_sale_order
msgid "Quotation" msgid "Quotation"
msgstr "Предложение цен" msgstr "Оферта"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form
@ -727,18 +892,12 @@ msgstr "Представитель"
msgid "Representative acts on the basis of" msgid "Representative acts on the basis of"
msgstr "Представитель действует на основании" msgstr "Представитель действует на основании"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
msgid "Requisites"
msgstr "Реквизиты"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.search_res_partner_contract_filter #: model:ir.ui.view,arch_db:client_contracts.search_res_partner_contract_filter
msgid "Search Contract" msgid "Search Contract"
msgstr "Поиск договора" msgstr "Поиск договора"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_bank #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_bank
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_bic #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_bic
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_business_address #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_business_address
@ -753,6 +912,8 @@ msgstr "Поиск договора"
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_okpo #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_okpo
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_phone #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_phone
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_rs #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_rs
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_telegram
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_whatsapp
msgid "Seller" msgid "Seller"
msgstr "Продавец" msgstr "Продавец"
@ -771,12 +932,14 @@ msgstr "Продавец; Сертификат о регистрации ИП"
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_name_parent #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_name_parent
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_date #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_date
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_department #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_department
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_department_code
#: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_number #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_number
msgid "Seller Representative" msgid "Seller Representative"
msgstr "Представитель Продавца" msgstr "Представитель Продавца"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_sequence #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_sequence
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_sequence
msgid "Sequence" msgid "Sequence"
msgstr "Нумерация" msgstr "Нумерация"
@ -796,12 +959,22 @@ msgid "Signed"
msgstr "Подписан" msgstr "Подписан"
#. module: client_contracts #. module: client_contracts
#: selection:res.partner.template.print,company_type:0 #: selection:res.partner.document.template,company_type:0
#: selection:res.partner.template.print.annex,company_type:0
#: selection:res.partner.template.print.contract,company_type:0
msgid "Sole Proprietor" msgid "Sole Proprietor"
msgstr "Индивидуальный предприниматель" msgstr "Индивидуальный предприниматель"
#. module: client_contracts
#: code:addons/client_contracts/models/res_partner_document_template.py:28
#: selection:res.partner.document.template,document_type_name:0
#, python-format
msgid "Specification"
msgstr "Спецификация"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_specification_name
msgid "Specification Name"
msgstr "Имя спецификации"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_state #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_state
msgid "Status" msgid "Status"
@ -819,27 +992,27 @@ msgid "Technical Name"
msgstr "Техническое название" msgstr "Техническое название"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view #: model:ir.model.fields,field_description:client_contracts.field_res_partner_telegram
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view #: model:ir.model.fields,field_description:client_contracts.field_res_users_telegram
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_telegram
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_telegram
msgid "Telegram"
msgstr "Telegram"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_document_view
msgid "Template" msgid "Template"
msgstr "Шаблон" msgstr "Шаблон"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_template_print_annex_view_form #: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_attachment_id
msgid "Template Annex"
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_attachment_id
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_attachment_id
msgid "Template Attachment" msgid "Template Attachment"
msgstr "Вложение-шаблон" msgstr "Вложение-шаблон"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_template_print_contract_view_form #: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_template_type
msgid "Template Contract" msgid "Template Type"
msgstr "Шаблон договора" msgstr "Тип шаблона"
#. module: client_contracts #. module: client_contracts
#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates #: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates
@ -847,15 +1020,55 @@ msgid "Templates"
msgstr "Шаблоны" msgstr "Шаблоны"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_annex_name #: model:ir.model.fields,help:client_contracts.field_res_partner_name_write
msgid "The Number of Annex" #: model:ir.model.fields,help:client_contracts.field_res_users_name_write
msgstr "Номер приложения" msgid "This name uses in contracts"
msgstr "Наименование, используемое при заполнении договоров"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_total_cost
msgid "Total Cost"
msgstr "Общая стоимость"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_transient_field_ids_hidden
msgid "Transient Field Ids Hidden"
msgstr "Transient Field Ids Hidden"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_document_type
msgid "Type of document"
msgstr "Вид документа"
#. module: client_contracts
#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_annex_currency_id
msgid "Utility field to express amount currency"
msgstr "Служебное поле, чтобы выразить суммы в валюте"
#. module: client_contracts #. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_value #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_value
msgid "Value" msgid "Value"
msgstr "Значение" msgstr "Значение"
#. module: client_contracts
#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_document_view
msgid "Values"
msgstr "Значения"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_visible
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_visible
msgid "Visible"
msgstr "Видимый"
#. module: client_contracts
#: model:ir.model.fields,field_description:client_contracts.field_res_partner_whatsapp
#: model:ir.model.fields,field_description:client_contracts.field_res_users_whatsapp
#: model:res.partner.contract.field,name:client_contracts.contract_field_partner_whatsapp
#: model:res.partner.contract.field,name:client_contracts.contract_field_seller_whatsapp
msgid "WhatsApp"
msgstr "WhatsApp"
#. module: client_contracts #. module: client_contracts
#: model:res.partner.contract.field,description:client_contracts.contract_field_MM #: model:res.partner.contract.field,description:client_contracts.contract_field_MM
msgid "Word" msgid "Word"
@ -868,24 +1081,9 @@ msgid "Year"
msgstr "Год" msgstr "Год"
#. module: client_contracts #. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_annex_line #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_info_inherit_view
msgid "res.partner.contract.annex.line" msgid "i.e. Ural Bank for Reconstruction and Development"
msgstr "res.partner.contract.annex.line" msgstr "напр. «Уральский банк реконструкции и развития»"
#. 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 #. module: client_contracts
#: model:ir.model,name:client_contracts.model_res_partner_contract_wizard #: model:ir.model,name:client_contracts.model_res_partner_contract_wizard
@ -893,11 +1091,13 @@ msgid "res.partner.contract.wizard"
msgstr "res.partner.contract.wizard" msgstr "res.partner.contract.wizard"
#. module: client_contracts #. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_print_annex_action #: code:addons/client_contracts/models/res_partner_contract_annex.py:64
msgid "res.partner.template.print.annex.action" #, python-format
msgstr "res.partner.template.print.annex.action" msgid "{name} from {date}"
msgstr "{name} от {date}"
#. module: client_contracts #. module: client_contracts
#: model:ir.actions.act_window,name:client_contracts.res_partner_print_contract_action #: code:addons/client_contracts/models/res_partner_contract.py:112
msgid "res.partner.template.print.contract.action" #, python-format
msgstr "res.partner.template.print.contract.action" msgid "{type} {number} from {date}"
msgstr "{type} {number} от {date}"

View File

@ -3,4 +3,5 @@ from . import res_partner_contract
from . import res_partner_contract_annex from . import res_partner_contract_annex
from . import res_partner_contract_field from . import res_partner_contract_field
from . import res_partner_contract_field_transient from . import res_partner_contract_field_transient
from . import res_partner_document_template
from . import sale_order from . import sale_order

View File

@ -4,6 +4,9 @@ from odoo import api, fields, models
class ResPartner(models.Model): class ResPartner(models.Model):
_inherit = "res.partner" _inherit = "res.partner"
name_write = fields.Char(
string="Name in contracts", help="This name uses in contracts",
)
name_genitive = fields.Char(string="Name Genitive",) name_genitive = fields.Char(string="Name Genitive",)
name_initials = fields.Char(string="Name Initials",) name_initials = fields.Char(string="Name Initials",)
function_genitive = fields.Char(string="Function Genitive",) function_genitive = fields.Char(string="Function Genitive",)
@ -24,6 +27,12 @@ class ResPartner(models.Model):
string="Representative acts on the basis of", help="Parent Case", string="Representative acts on the basis of", help="Parent Case",
) )
signature = fields.Binary(string="Client signature") signature = fields.Binary(string="Client signature")
whatsapp = fields.Char(
string="WhatsApp", help="If a contact have a WhatsApp number",
)
telegram = fields.Char(
string="Telegram", help="If a contact have a Telegram number or identifier",
)
@api.depends("street", "street2", "city", "state_id", "zip", "country_id") @api.depends("street", "street2", "city", "state_id", "zip", "country_id")
def _compute_full_address(self): def _compute_full_address(self):

View File

@ -1,12 +1,12 @@
import datetime import datetime
from odoo import _, api, fields, models from odoo import _, api, fields, models
from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
from ..utils import MODULE_NAME from ..utils import MODULE_NAME
from ..utils.misc import Extension, IDocument
class PartnerContract(models.Model): class PartnerContract(models.Model, IDocument, Extension):
_name = "res.partner.contract" _name = "res.partner.contract"
_description = "Contract" _description = "Contract"
_inherit = ["mail.thread", "mail.activity.mixin", "mail.followers"] _inherit = ["mail.thread", "mail.activity.mixin", "mail.followers"]
@ -36,6 +36,7 @@ class PartnerContract(models.Model):
"""Returns timestamp of now by local datetime""" """Returns timestamp of now by local datetime"""
return datetime.datetime.now().timestamp() return datetime.datetime.now().timestamp()
res_model = fields.Char(default=lambda self: self._name)
name = fields.Char(string="Contract number", default=_get_default_name,) name = fields.Char(string="Contract number", default=_get_default_name,)
create_date = fields.Datetime(string="Created on") create_date = fields.Datetime(string="Created on")
create_date_ts = fields.Char(default=_get_default_create_date_ts) create_date_ts = fields.Char(default=_get_default_create_date_ts)
@ -90,7 +91,9 @@ class PartnerContract(models.Model):
@api.multi @api.multi
def action_print_form(self): def action_print_form(self):
view = self.env.ref("{}.res_partner_wizard_print_contract_view".format(MODULE_NAME)) view = self.env.ref(
"{}.res_partner_wizard_print_document_view".format(MODULE_NAME)
)
return { return {
"name": _("Print Form of Contract"), "name": _("Print Form of Contract"),
"type": "ir.actions.act_window", "type": "ir.actions.act_window",
@ -101,6 +104,20 @@ class PartnerContract(models.Model):
"context": {"self_id": self.id}, "context": {"self_id": self.id},
} }
def get_name_by_document_template(self, document_template_id):
return self.name
def get_filename_by_document_template(self, document_template_id):
return _("{type} {number} from {date}").format(
type=_(
dict(document_template_id._fields["document_type"].selection).get(
document_template_id.document_type
)
),
number=self.name,
date=self.get_date().strftime("%d.%m.%Y"),
)
def get_date(self): def get_date(self):
"""Uses in xml action (data/fields_default) """Uses in xml action (data/fields_default)
@ -109,37 +126,15 @@ class PartnerContract(models.Model):
""" """
date = self.date_conclusion_fix or self.date_conclusion date = self.date_conclusion_fix or self.date_conclusion
if date: if date:
date = datetime.datetime.strptime(date, DEFAULT_SERVER_DATE_FORMAT) date = self.parse_odoo_date(date)
else: else:
date = self.create_date date = self.parse_odoo_datetime(self.create_date)
date = datetime.datetime.strptime(date, DEFAULT_SERVER_DATETIME_FORMAT)
return date return date
def _(self, arg):
"""Uses in xml action (data/fields_default)
class PrintTemplate(models.Model): Arguments:
_name = "res.partner.template.print" arg {str} -- String to translate
_description = "Print Template" """
return _(arg)
name = fields.Char(related="attachment_id.name",)
attachment_id = fields.Many2one(
"ir.attachment", string="Template Attachment", required=True,
)
company_type = fields.Selection(
selection=[
("person", "Individual"),
("sp", "Sole Proprietor"),
("plc", "Private Limited Company"),
]
)
class PrintTemplateContract(models.Model):
_name = "res.partner.template.print.contract"
_inherit = "res.partner.template.print"
_description = "Print Template Contract"
class PrintTemplateAnnex(models.Model):
_name = "res.partner.template.print.annex"
_inherit = "res.partner.template.print"
_description = "Print Template Contract Annex"

View File

@ -3,38 +3,74 @@ import math
from odoo import _, api, fields, models from odoo import _, api, fields, models
from ..utils import MODULE_NAME from ..utils import MODULE_NAME
from ..utils.misc import Extension, IDocument
class ContractOrderAnnex(models.Model): class ContractOrderAnnex(models.Model, IDocument, Extension):
_name = "res.partner.contract.annex" _name = "res.partner.contract.annex"
_description = "Contract Annex" _description = "Contract Annex"
name = fields.Char(string="Name", help="The Number of Annex") name = fields.Char(string="Name",)
order_id = fields.Many2one("sale.order", string="Order", required=True,) display_name = fields.Char(compute="_compute_display_name",)
specification_name = fields.Char(compute="_compute_specification_name",)
contract_id = fields.Many2one( contract_id = fields.Many2one(
"res.partner.contract", string="Contract", readonly=True, "res.partner.contract", string="Contract", readonly=True,
) )
company_id = fields.Many2one("res.partner", related="contract_id.company_id",)
partner_id = fields.Many2one("res.partner", related="contract_id.partner_id",)
order_id = fields.Many2one(
"sale.order",
string="Order",
help="Orders with this partner which are not uses in annexes yet",
required=True,
)
date_conclusion = fields.Date( date_conclusion = fields.Date(
string="Conclusion Date", default=fields.Date.today(), string="Conclusion Date", default=fields.Date.today(),
) )
prepaid_expense = fields.Float(string="Prepaid Expense", default=0) counter = fields.Integer(string="", help="Counter of Contract Annexes",)
delivery_time = fields.Integer(related="order_id.delivery_time", readonly=True,) currency_id = fields.Many2one(related="company_id.currency_id", readonly=True,)
payment_term = fields.Many2one(
"account.payment.term", related="order_id.payment_term_id", readonly=True,
)
@api.onchange("contract_id") development_period = fields.Integer("Product Development Period (days)",)
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( design_cost = fields.Monetary(string="Design Cost",)
contract=contract_number, annex=annex_number
design_doc_period = fields.Integer(string="Documentation Design Period (days)",)
design_doc_cost = fields.Monetary(string="Documentation Design Cost",)
delivery_address = fields.Char(string="Delivery Address",)
delivery_period = fields.Integer(string="Delivery Period (days)")
installation_address = fields.Char(string="Installation Address",)
installation_period = fields.Integer(string="Installation Period (days)",)
installation_cost = fields.Integer(string="Installation Cost",)
total_cost = fields.Monetary(string="Total Cost",)
payment_part_one = fields.Float(string="Payment 1 Part (%)", default=100)
payment_part_two = fields.Float(string="Payment 2 Part (%)",)
payment_part_three = fields.Float(string="Payment 3 Part (%)",)
@api.multi
@api.depends("name")
def _compute_display_name(self):
for record in self:
record.display_name = "{} {}".format(
record.counter or record.contract_id.contract_annex_number, record.name
)
@api.depends("specification_name", "contract_id", "order_id")
def _compute_specification_name(self):
self.specification_name = _("{name} from {date}").format(
name="{}-{}".format(self.contract_id.name, self.order_id.name),
date=self.contract_id.get_date().strftime("%d.%m.%Y"),
) )
# Compute domain for order_id because of bug with @api.onchange("order_id")
# not working correctly domain in model def _domain_order_id(self):
"""Using domain function because of
simple domain does not working properly because of
contract_id is still False"""
return { return {
"domain": { "domain": {
"order_id": [ "order_id": [
@ -44,6 +80,15 @@ class ContractOrderAnnex(models.Model):
} }
} }
@api.onchange("order_id")
def _onchange_order_id(self):
contract_number = self.contract_id.name
order_number = self.order_id.name or "SO###"
self.name = "{contract}-{order}".format(
contract=contract_number, order=order_number,
)
@api.model @api.model
def create(self, values): def create(self, values):
record = super().create(values) record = super().create(values)
@ -51,14 +96,17 @@ class ContractOrderAnnex(models.Model):
# Fill annex_id to domain it in future # Fill annex_id to domain it in future
record.order_id.contract_annex_id = record.id record.order_id.contract_annex_id = record.id
# Add counter # Counter
record.contract_id.contract_annex_number += 1 record.counter = record.contract_id.contract_annex_number
record.contract_id.contract_annex_number += 1 # TODO: should I use a sequence?
return record return record
@api.multi @api.multi
def action_print_form(self): def action_print_form(self):
view = self.env.ref("{}.res_partner_wizard_print_annex_view".format(MODULE_NAME)) view = self.env.ref(
"{}.res_partner_wizard_print_document_view".format(MODULE_NAME)
)
return { return {
"name": _("Print Form of Contract Annex"), "name": _("Print Form of Contract Annex"),
"type": "ir.actions.act_window", "type": "ir.actions.act_window",
@ -69,6 +117,44 @@ class ContractOrderAnnex(models.Model):
"context": {"self_id": self.id}, "context": {"self_id": self.id},
} }
def get_name_by_document_template(self, document_template_id):
return (
{
"specification": "{counter} {name}",
"approval_list": "{counter}.1 {name}-1",
"act_at": "{counter}.2 {name}-2",
"act_ad": "{counter}.3 {name}-3",
}
.get(document_template_id.document_type_name, "Unknown")
.format(counter=self.counter, name=self.name,)
)
def get_filename_by_document_template(self, document_template_id):
return "{type}{name}".format(
type=_(
dict(document_template_id._fields["document_type"].selection).get(
document_template_id.document_type
)
),
name={
"bill": "{counter} {type} {name}",
"specification": "{counter} {type} {name}",
"approval_list": "{counter}.1 {type} {name}-1",
"act_at": "{counter}.2 {type} {name}-2",
"act_ad": "{counter}.3 {type} {name}-3",
}
.get(document_template_id.document_type_name)
.format(
counter=self.counter,
type=_(
dict(
document_template_id._fields["document_type_name"].selection
).get(document_template_id.document_type_name)
),
name=self.name,
),
)
def modf(self, arg): def modf(self, arg):
"""Math.modf function for using in XML ir.action.server code """Math.modf function for using in XML ir.action.server code
Uses in data/fields_default.xml Uses in data/fields_default.xml

View File

@ -11,3 +11,4 @@ class ContractField(models.Model):
) )
description = fields.Char(string="Description", translate=True, default="",) description = fields.Char(string="Description", translate=True, default="",)
sequence = fields.Integer(string="Sequence",) sequence = fields.Integer(string="Sequence",)
visible = fields.Boolean(string="Visible", default=True,)

View File

@ -18,4 +18,5 @@ class ContractFieldTransient(models.TransientModel):
description = fields.Char( description = fields.Char(
related="contract_field_id.description", string="Description", readonly=True, related="contract_field_id.description", string="Description", readonly=True,
) )
visible = fields.Boolean(related="contract_field_id.visible",)
value = fields.Char(string="Value", default="",) value = fields.Char(string="Value", default="",)

View File

@ -0,0 +1,44 @@
from odoo import _, fields, models
class DocumentTemplate(models.Model):
_name = "res.partner.document.template"
_description = "Document Template"
_order = "company_type,document_type,sequence"
name = fields.Char()
attachment_id = fields.Many2one(
"ir.attachment",
string="Template Attachment",
ondelete="cascade",
required=True,
)
document_type = fields.Selection(
string="Type of document",
selection=[
("contract", _("Contract")),
("annex", _("Annex")),
("addition", _("Addition")),
],
)
document_type_name = fields.Selection(
string="Document",
selection=[
("bill", _("Bill")),
("specification", _("Specification")),
("approval_list", _("Approval List")),
("act_at", _("Act of Acceptance and Transfer")),
("act_ad", _("Act of Acceptance and Delivery")),
],
)
company_type = fields.Selection(
selection=[
("person", "Individual"),
("sp", "Sole Proprietor"),
("plc", "Private Limited Company"),
]
)
template_type = fields.Selection(
selection=[("contract", "Contract"), ("annex", "Annex"),]
)
sequence = fields.Integer()

View File

@ -4,5 +4,4 @@ access_contracts_contracts,access_contracts_contracts,model_res_partner_contract
access_contracts_field,access_contracts_field,model_res_partner_contract_field,base.group_user,1,0,0,0 access_contracts_field,access_contracts_field,model_res_partner_contract_field,base.group_user,1,0,0,0
access_contracts_field_transient,access_contracts_field_transient,model_res_partner_contract_field_transient,base.group_user,1,1,1,1 access_contracts_field_transient,access_contracts_field_transient,model_res_partner_contract_field_transient,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_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,0,0,0 access_contract_document_template,access_contract_document_template,model_res_partner_document_template,base.group_user,1,0,0,0
access_contract_annex_template,access_contract_annex_template,model_res_partner_template_print_annex,base.group_user,1,0,0,0

1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
4 access_contracts_field_transient access_contracts_field_transient model_res_partner_contract_field_transient base.group_user 1 1 1 1
5 access_contracts_field_contract_annex access_contracts_field_contract_annex model_res_partner_contract_annex base.group_user 1 1 1 1
6 access_contract_document_template access_contract_document_template model_res_partner_template_print_contract model_res_partner_document_template base.group_user 1 0 0 0
7

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
.o_image[data-mimetype$='msword'],
.o_image[data-mimetype$='application/vnd.openxmlformats-officedocument.wordprocessingml.document'] {
background-image: url('/client_contracts/static/src/img/msword.png');
}

BIN
static/src/img/msword.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1 +1 @@
MODULE_NAME = __package__.split('.')[-2] MODULE_NAME = __package__.split(".")[-2]

28
utils/misc.py Normal file
View File

@ -0,0 +1,28 @@
import datetime as dt
import inspect
from odoo import fields
from odoo.tools.misc import (DEFAULT_SERVER_DATE_FORMAT,
DEFAULT_SERVER_DATETIME_FORMAT)
class IDocument(object):
"""Class must be used as an interface for create new document based model"""
def get_name_by_document_template(self, document_template_id: fields.Many2one):
raise NotImplementedError(
"Method {} is not implemented".format(inspect.currentframe().f_code.co_name)
)
def get_filename_by_document_template(self, document_template_id: fields.Many2one):
raise NotImplementedError(
"Method {} is not implemented".format(inspect.currentframe().f_code.co_name)
)
class Extension(object):
def parse_odoo_date(self, date: str):
return dt.datetime.strptime(date, DEFAULT_SERVER_DATE_FORMAT)
def parse_odoo_datetime(self, datetime: str):
return dt.datetime.strptime(datetime, DEFAULT_SERVER_DATETIME_FORMAT)

View File

@ -3,27 +3,18 @@
<!-- res.partner.contract.field action window --> <!-- res.partner.contract.field action window -->
<record id="res_partner_contract_field_action" model="ir.actions.act_window"> <record id="res_partner_contract_field_action" model="ir.actions.act_window">
<field name="name">res.partner.contract.field.action</field> <field name="name">Contract Fields</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.contract.field</field> <field name="res_model">res.partner.contract.field</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="view_type">form</field> <field name="view_type">form</field>
</record> </record>
<!-- res.partner.template.print.contract action window --> <!-- res.partner.document.template action window -->
<record id="res_partner_print_contract_action" model="ir.actions.act_window"> <record id="res_partner_document_template_action" model="ir.actions.act_window">
<field name="name">res.partner.template.print.contract.action</field> <field name="name">Document Templates</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.template.print.contract</field> <field name="res_model">res.partner.document.template</field>
<field name="view_mode">tree,form</field>
<field name="view_type">form</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_mode">tree,form</field>
<field name="view_type">form</field> <field name="view_type">form</field>
</record> </record>
@ -35,21 +26,34 @@
<field name="priority" eval="25"/> <field name="priority" eval="25"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="attributes">
<attribute name="placeholder">Name in ERP</attribute>
</xpath>
<xpath expr="//field[@name='type']" position="before"> <xpath expr="//field[@name='type']" position="before">
<field name="name" attrs="{'invisible': [('company_type', '=', 'company')]}"/> <field name="name_write" placeholder="i.e. Ural Bank for Reconstruction and Development" attrs="{'invisible': [('is_company', '=', False)]}"/>
<field name="name_genitive" attrs="{'invisible': [('company_type', '=', 'company')]}"/> <field name="name_genitive" attrs="{'invisible': [('is_company', '=', True)]}"/>
<field name="name_initials" attrs="{'invisible': [('company_type', '=', 'company')]}"/> <field name="name_initials" attrs="{'invisible': [('is_company', '=', True)]}"/>
</xpath>
<xpath expr="//field[@name='function']" position="after">
<field name="function_genitive" attrs="{'invisible': [('is_company', '=', True)]}"/>
</xpath> </xpath>
<xpath expr="//field[@name='category_id']" position="after"> <xpath expr="//field[@name='category_id']" position="after">
<field name="representative_id" domain="[('company_type', '=', 'person')]" attrs="{'invisible': [('company_type', '!=', 'company')]}"/> <field name="representative_id" domain="[('is_company', '=', False)]" attrs="{'invisible': [('is_company', '=', False)]}"/>
<field name="representative_document" attrs="{'invisible': [('company_type', '!=', 'company')]}"/> <field name="representative_document" attrs="{'invisible': [('is_company', '=', False)]}"/>
<field name="signature" widget="image"/> <field name="signature" widget="image"/>
</xpath> </xpath>
<xpath expr="//field[@name='function']" position="after"> <xpath expr="//field[@name='function']" position="after">
<field name="function_genitive" attrs="{'invisible': [('is_company','=', True)]}"/> <field name="function_genitive" attrs="{'invisible': [('is_company','=', True)]}" invisible="1"/>
</xpath>
<xpath expr="//field[@name='email']" position="before">
<field name="whatsapp" attrs="{'invisible': [('is_company', '=', True)]}"/>
<field name="telegram" attrs="{'invisible': [('is_company', '=', True)]}"/>
</xpath> </xpath>
</field> </field>
@ -86,18 +90,7 @@
<menuitem id="res_partner_menu_contracts_templates" <menuitem id="res_partner_menu_contracts_templates"
name="Templates" name="Templates"
parent="res_partner_menu_contracts" parent="res_partner_menu_contracts"
sequence="2"/> action="res_partner_document_template_action"
<menuitem id="res_partner_menu_contracts_templates_contract"
name="Contract"
parent="res_partner_menu_contracts_templates"
action="res_partner_print_contract_action"
sequence="1"/>
<menuitem id="res_partner_menu_contracts_templates_annex"
name="Annex"
parent="res_partner_menu_contracts_templates"
action="res_partner_print_annex_action"
sequence="2"/> sequence="2"/>
</odoo> </odoo>

View File

@ -8,8 +8,9 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Contracts"> <tree string="Contracts">
<field name="name"/> <field name="name"/>
<field name="date_conclusion"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="date_conclusion"/>
<field name="state"/>
</tree> </tree>
</field> </field>
</record> </record>
@ -19,7 +20,7 @@
<field name="name">Contract Form</field> <field name="name">Contract Form</field>
<field name="model">res.partner.contract</field> <field name="model">res.partner.contract</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Contract"> <form string="Contract" create="0">
<header attrs="{'invisible': [('id', '=', False)]}"> <header attrs="{'invisible': [('id', '=', False)]}">
<button name="action_sign" type="object" string="Sign" states="draft" class="oe_highlight"/> <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_close" type="object" string="Close" states="sign" class="oe_highlight"/>
@ -40,9 +41,12 @@
<!-- Uses to generate number of Annex --> <!-- Uses to generate number of Annex -->
<field name="contract_annex_number" invisible="1"/> <field name="contract_annex_number" invisible="1"/>
</group> </group>
<group string="Annexed orders" name="annexes" attrs="{'invisible': [('id', '=', False)]}"> <group string="Annexed Specifications" name="annexes" attrs="{'invisible': [('id', '=', False)]}">
<field name="contract_annex_ids"> <field name="contract_annex_ids" nolabel="1">
<field name="name"/> <tree>
<field name="display_name" string="Name"/>
<button name="action_print_form" type="object" string="Print" attrs="{'invisible': [('id', '=', False)]}"/>
</tree>
</field> </field>
</group> </group>
</sheet> </sheet>

View File

@ -10,20 +10,39 @@
<form string="Contract Annex"> <form string="Contract Annex">
<sheet> <sheet>
<group> <group name="options" invisible="1">
<field name="display_name" invisible="1"/>
<field name="currency_id" invisible="1"/>
</group>
<group name="info" string="Info">
<field name="name" placeholder="Leave empty for compute"/> <field name="name" placeholder="Leave empty for compute"/>
<field name="contract_id" attrs="{'invisible': [('contract_id', '=', False)]}"/> <field name="contract_id" attrs="{'invisible': [('contract_id', '=', False)]}"/>
<field name="order_id"/> <field name="order_id" options="{'no_create': True}"/>
<field name="date_conclusion"/> <field name="date_conclusion"/>
<field name="payment_term" invisible="1"/>
<field name="delivery_time" invisible="1"/>
</group> </group>
<group> <group name="design" string="Design">
<button name="action_print_form" type="object" string="Print" attrs="{'invisible': [('contract_id', '=', False)]}"/> <field name="design_cost"/>
<field name="design_doc_period"/>
<field name="design_doc_cost"/>
</group>
<group name="delivery" string="Delivery">
<field name="delivery_address"/>
<field name="delivery_period"/>
</group>
<group name="installation" string="Installation">
<field name="installation_address"/>
<field name="installation_period"/>
<field name="installation_cost"/>
</group>
<group name="payment" string="Payment">
<field name="total_cost"/>
<field name="payment_part_one" widget="integer"/>
<field name="payment_part_two" widget="integer"/>
<field name="payment_part_three" widget="integer"/>
</group> </group>
</sheet> </sheet>
</form> </form>
</field> </field>
</record> </record>

View File

@ -0,0 +1,20 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- res.partner.contract.field tree view -->
<record id="res_partner_contract_field_view_tree" model="ir.ui.view">
<field name="name">res.partner.contract.field.view.tree</field>
<field name="model">res.partner.contract.field</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="description"/>
<field name="technical_name"/>
<field name="visible"/>
</tree>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,17 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<!-- res.partner.document.template tree view -->
<record id="res_partner_document_template_view_tree" model="ir.ui.view">
<field name="name">res.partner.document.template.view.tree</field>
<field name="model">res.partner.document.template</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="company_type"/>
<field name="document_type"/>
</tree>
</field>
</record>
</odoo>

View File

@ -1,40 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- res.partner.template.print.contract form view -->
<record id="res_partner_template_print_contract_view_form" model="ir.ui.view">
<field name="name">res.partner.template.print.contract.view.form</field>
<field name="model">res.partner.template.print.contract</field>
<field name="arch" type="xml">
<form string="Template Contract">
<sheet>
<group>
<field name="name"/>
<field name="attachment_id"/>
<field name="company_type"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- res.partner.template.print.annex form view -->
<record id="res_partner_template_print_annex_view_form" model="ir.ui.view">
<field name="name">res.partner.template.print.annex.view.form</field>
<field name="model">res.partner.template.print.annex</field>
<field name="arch" type="xml">
<form string="Template Annex">
<sheet>
<group>
<field name="name"/>
<field name="attachment_id"/>
<field name="company_type"/>
</group>
</sheet>
</form>
</field>
</record>
</data>
</odoo>

View File

@ -1,22 +1,37 @@
# -*- coding: utf-8 -*-
import base64 import base64
import logging
from odoo import _, api, fields, models from odoo import api, fields, models
from odoo.exceptions import UserError from odoo.exceptions import ValidationError
from ..utils import MODULE_NAME from ..utils import MODULE_NAME
from ..utils.docxtpl import get_document_from_values_stream from ..utils.docxtpl import get_document_from_values_stream
_logger = logging.getLogger(__name__)
class ContractWizard(models.TransientModel): class ContractWizard(models.TransientModel):
_name = "res.partner.contract.wizard" _name = "res.partner.contract.wizard"
def _get_default_partner(self): def _default_target(self):
current_id = self.env.context.get("active_id") return "{model},{target_id}".format(
return self.env["res.partner.contract"].browse(current_id).partner_id.id model=self.active_model, target_id=int(self.env.context.get("self_id"))
)
def _default_document_template(self):
return self.env["res.partner.document.template"].search(self._get_template_domain(), limit=1)
def _get_template_domain(self):
template_type = {
"res.partner.contract": "contract",
"res.partner.contract.annex": "annex",
}.get(self.active_model, False)
company_type = (
self.partner_id.company_form if self.partner_id.is_company else "person"
)
document_template_domain = [
("template_type", "=", template_type),
("company_type", "=", company_type),
]
return document_template_domain
target = fields.Reference( target = fields.Reference(
selection=[ selection=[
@ -24,24 +39,63 @@ class ContractWizard(models.TransientModel):
("res.partner.contract.annex", "Contract Annex"), ("res.partner.contract.annex", "Contract Annex"),
], ],
string="Target", string="Target",
default=_default_target,
) )
company_id = fields.Many2one("res.partner", string="Company") company_id = fields.Many2one(
partner_id = fields.Many2one("res.partner", string="Partner") "res.partner", string="Company", compute="_compute_company_id",
print_template_contract = fields.Many2one(
"res.partner.template.print.contract", string="Print Template of Contract",
) )
print_template_annex = fields.Many2one( partner_id = fields.Many2one(
"res.partner.template.print.annex", string="Print Template of Contract Annex", "res.partner", string="Partner", compute="_compute_partner_id",
)
document_name = fields.Char(
string="Document Name", compute="_compute_document_name"
)
document_template = fields.Many2one(
"res.partner.document.template",
string="Document Template",
default=_default_document_template,
readonly=False,
) )
transient_field_ids = fields.One2many( transient_field_ids = fields.One2many(
"res.partner.contract.field.transient", "res.partner.contract.field.transient",
"_contract_wizard_id", "_contract_wizard_id",
string="Contract Fields", string="Contract Fields",
) )
transient_field_ids_hidden = fields.One2many(
"res.partner.contract.field.transient", "_contract_wizard_id",
)
@api.onchange("target") @api.depends("company_id", "target")
def _onchange_target(self): def _compute_company_id(self):
if self.target:
self.company_id = self.target.company_id
@api.depends("partner_id", "target")
def _compute_partner_id(self):
if self.target:
self.partner_id = self.target.partner_id
@api.depends("document_name", "document_template", "target")
def _compute_document_name(self):
self.document_name = self.target.get_name_by_document_template(
self.document_template
)
@api.constrains("document_template")
def _check_document_template(self):
if not self.document_template:
raise ValidationError("You did not set up the template...")
@api.onchange('document_template')
def _domain_document_template(self):
return {
"domain": {
"document_template": self._get_template_domain(),
}
}
@api.onchange("document_template")
def _onchange_document_template(self):
"""Creates transient fields for generate contract template """Creates transient fields for generate contract template
Looks as a tree view of *_contract_field_transient model in xml Looks as a tree view of *_contract_field_transient model in xml
""" """
@ -51,36 +105,11 @@ class ContractWizard(models.TransientModel):
[("technical_name", "=", technical_name),] [("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 = { model_to_action = {
"res.partner.contract": "{}.action_get_contract_context".format(MODULE_NAME), "res.partner.contract": "action_get_contract_context",
"res.partner.contract.annex": "{}.action_get_annex_context".format(MODULE_NAME), "res.partner.contract.annex": "action_get_annex_context",
} }
action = model_to_action[active_model] action = "{}.{}".format(MODULE_NAME, model_to_action[self.active_model])
# Get dictionary for `transient_fields_ids` with editable fields # Get dictionary for `transient_fields_ids` with editable fields
# With data from Odoo database # With data from Odoo database
@ -98,50 +127,33 @@ class ContractWizard(models.TransientModel):
.id, .id,
0, 0,
) )
for field, value in sorted(contract_context_values.items(), key=lambda tpl: self.env.ref("{}.contract_field_{}".format(MODULE_NAME, tpl[0])).sequence) for field, value in sorted(
contract_context_values.items(),
key=lambda tpl: self.env.ref(
"{}.contract_field_{}".format(MODULE_NAME, tpl[0])
).sequence,
)
] ]
self.transient_field_ids_hidden = (
# Set up template domain self.transient_field_ids - self.transient_field_ids.filtered("visible")
company_type = (
self.partner_id.company_form if self.partner_id.is_company else "person"
) )
return { self.transient_field_ids = (
"domain": { self.transient_field_ids - self.transient_field_ids_hidden
"print_template_contract": [("company_type", "=", company_type)], )
"print_template_annex": [("company_type", "=", company_type)],
} # Other
}
@api.multi @api.multi
def get_docx_contract(self): def get_docx_contract(self):
template = self._get_template() template = self.document_template.attachment_id
if not template: template_path = template._full_path(template.store_fname)
raise UserError("Template must be set up")
path_to_template = template._full_path(template.store_fname) payload = self.payload()
binary_data = get_document_from_values_stream(template_path, payload).read()
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) encoded_data = base64.b64encode(binary_data)
attachment_name = "{name}-{number}.{ext}".format( get_fn = self.target.get_filename_by_document_template
number=self.target.name, attachment_name = "{}.docx".format(get_fn(self.document_template or "Unknown"))
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( document_as_attachment = self.env["ir.attachment"].create(
{ {
@ -152,7 +164,51 @@ class ContractWizard(models.TransientModel):
} }
) )
# Send message with attachment to a mail.thread of the company return self.afterload(document_as_attachment)
def payload(self):
# Collect fields into a key-value structure
fields = {
transient_field.technical_name: transient_field.value
for transient_field in (
self.transient_field_ids + self.transient_field_ids_hidden
)
if transient_field.technical_name and transient_field.value
}
# Extend with special case
if self.target._name == "res.partner.contract.annex":
fields.update(
{
"annex_name": self.document_name,
"specification_name": self.target.specification_name,
}
)
# Extend with order product lines
if hasattr(self.target, "order_id") and self.target.order_id.order_line:
def number_generator(n=1):
while (True):
yield n
n += 1
counter = number_generator()
fields.update(
{
"order_products": [
{
"number": next(counter),
"label": item.product_id.name,
"count": item.product_uom_qty,
"unit": item.product_uom.name,
"cost": item.price_unit,
"amount": item.price_subtotal,
} for item in self.target.order_id.order_line or []
]
}
)
return fields
def afterload(self, result):
res_id = self.target.id res_id = self.target.id
if hasattr(self.target, "contract_id"): if hasattr(self.target, "contract_id"):
res_id = self.target.contract_id.id res_id = self.target.contract_id.id
@ -162,16 +218,12 @@ class ContractWizard(models.TransientModel):
"model": "res.partner.contract", "model": "res.partner.contract",
"res_id": res_id, "res_id": res_id,
"message_type": "comment", "message_type": "comment",
"attachment_ids": [(4, document_as_attachment.id, False)], "attachment_ids": [(4, result.id, False)],
} }
) )
return document_as_attachment return result
@api.multi @property
def _get_template(self): def active_model(self):
model_to_template = { return self.env.context.get("active_model")
"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

@ -1,23 +1,28 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<record id="res_partner_wizard_print_contract_view" model="ir.ui.view"> <record id="res_partner_wizard_print_document_view" model="ir.ui.view">
<field name="name">Print Contract</field> <field name="name">Generate Document</field>
<field name="model">res.partner.contract.wizard</field> <field name="model">res.partner.contract.wizard</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<group string="Template"> <group string="Template">
<field name="print_template_contract"></field> <field name="document_template"></field>
</group> </group>
<group name="requisites" string="Requisites">
<group invisible="1">
<!-- Need for generate a document -->
<field name="target"/> <field name="target"/>
<field name="partner_id" string="Partner" readonly="1"/> <field name="partner_id"/>
<field name="company_id" string="Seller" readonly="1"/> <field name="company_id"/>
</group> </group>
<group string="Contract values" colspan="4">
<field name="transient_field_ids"> <button string="Create a document" type="object" name="get_docx_contract" />
<group string="Values">
<field name="transient_field_ids" nolabel="1" colspan="4">
<tree editable="1" create="0" delete="0"> <tree editable="1" create="0" delete="0">
<field name="name"/> <field name="name"/>
<field name="value"/> <field name="value"/>
@ -25,42 +30,9 @@
<field name="technical_name" invisible="1"/> <field name="technical_name" invisible="1"/>
</tree> </tree>
</field> </field>
<field name="transient_field_ids_hidden" invisible="1"/>
</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 string="Template">
<field name="print_template_annex"></field>
</group>
<group name="info" string="Info">
<field name="target"/>
</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>
<button string="Create a document" type="object" name="get_docx_contract" />
<footer/> <footer/>
</form> </form>