diff --git a/TODOLIST.md b/TODOLIST.md new file mode 100644 index 0000000..01f3874 --- /dev/null +++ b/TODOLIST.md @@ -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 diff --git a/__manifest__.py b/__manifest__.py index 95d8003..bfe6d85 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -12,12 +12,15 @@ "version": "0.1.1", "depends": ["base", "contacts", "russian_requisites", "sale",], "data": [ + "data/assets_extension.xml", + "data/document_templates.xml", "data/fields_default.xml", "data/payment_terms.xml", "security/ir.model.access.csv", "views/res_partner_contract.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/sale_order.xml", "wizard/res_partner_contract_wizard.xml", diff --git a/data/assets_extension.xml b/data/assets_extension.xml new file mode 100644 index 0000000..51bf76c --- /dev/null +++ b/data/assets_extension.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/data/document_templates.xml b/data/document_templates.xml new file mode 100644 index 0000000..48e4684 --- /dev/null +++ b/data/document_templates.xml @@ -0,0 +1,331 @@ + + + + + + + + Договор Поставки Исходный + Договор Поставки Исходный + binary + + + + Договор Поставки Исходный + + + + + + 0 + + + + + + + + Договор Поставки Физлицо + Договор поставки + binary + + + + Договор поставки + + contract + + contract + person + 10 + + + + + Счёт Физлицо + Счёт + binary + + + + Счёт + + annex + bill + annex + person + 9 + + + + Спецификация Физлицо + Спецификация + binary + + + + Спецификация + + annex + specification + annex + person + 10 + + + + Лист согласования Физлицо + Лист согласования + binary + + + + Лист согласования + + addition + approval_list + annex + person + 20 + + + + Акт приема-передачи Физлицо + Акт приема-передачи + binary + + + + Акт приема-передачи + + addition + act_at + annex + person + 30 + + + + Акт приема-сдачи Физлицо + Акт приема-сдачи + binary + + + + Акт приема-сдачи + + addition + act_ad + annex + person + 40 + + + + + + + + + Договор поставки ИП + Договор поставки + binary + + + + Договор поставки + + contract + + contract + sp + 20 + + + + + + Спецификация ИП + Спецификация + binary + + + + Спецификация + + annex + specification + annex + sp + 10 + + + + Счёт ИП + Счёт + binary + + + + Счёт + + annex + bill + annex + sp + 9 + + + + Лист согласования ИП + Лист согласования + binary + + + + Лист согласования + + addition + approval_list + annex + sp + 20 + + + + Акт приема-передачи ИП + Акт приема-передачи + binary + + + + Акт приема-передачи + + addition + act_at + annex + sp + 30 + + + + Акт приема-сдачи ИП + Акт приема-сдачи + binary + + + + Акт приема-сдачи + + addition + act_ad + annex + sp + 40 + + + + + + + + + Договор поставки ООО + Договор поставки + binary + + + + Договор поставки + + contract + + contract + plc + 30 + + + + + Спецификация ООО + Спецификация + binary + + + + Спецификация + + annex + specification + annex + plc + 10 + + + + + Счёт ООО + Счёт + binary + + + + Счёт + + annex + bill + annex + plc + 9 + + + + Лист согласования ООО + Лист согласования + binary + + + + Лист согласования + + addition + approval_list + annex + plc + 20 + + + + Акт приема-передачи ООО + Акт приема-передачи + binary + + + + Акт приема-передачи + + addition + act_at + annex + plc + 30 + + + + Акт приема-сдачи ООО + Акт приема-сдачи + binary + + + + Акт приема-сдачи + + addition + act_ad + annex + plc + 40 + + + + diff --git a/data/fields_default.xml b/data/fields_default.xml index 4446eba..12633a3 100644 --- a/data/fields_default.xml +++ b/data/fields_default.xml @@ -15,11 +15,14 @@ self = record partner = self.partner_id # res.partner 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_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 +_ = self._ get_date = self.get_date # Parse date @@ -35,6 +38,9 @@ yyyy = date.year yy = yyyy % 100 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 = { "contract_number": self.name, @@ -45,34 +51,42 @@ ctx = { "yy": yy, "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_representer_name": seller.representative_id.name, "seller_representer_name_parent": seller.representative_id.name_genitive, "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_inn": seller.vat, "seller_kpp": seller.iec, "seller_ogrn": seller.psrn, "seller_business_address": seller.full_address, "seller_phone": seller.phone, + "seller_whatsapp": seller.whatsapp, + "seller_telegram": seller.telegram, "seller_email": seller.email, - "partner_name": partner.name, + "partner_name": partner.name_write, "partner_inn": partner.vat, "partner_business_address": partner.full_address, "partner_phone": partner.phone, + "partner_whatsapp": partner.whatsapp, + "partner_telegram": partner.telegram, "partner_email": partner.email, } if partner_bank: ctx.update({ + "partner_bank": partner_bank_name, "partner_rs": partner_bank.acc_number, "partner_ks": partner_bank.bank_id.corr_account, "partner_bic": partner_bank.bank_id.bic, }) if seller_bank: ctx.update({ + "seller_bank": seller_bank_name, "seller_rs": seller_bank.acc_number, "seller_ks": seller_bank.bank_id.corr_account, "seller_bic": seller_bank.bank_id.bic, @@ -82,11 +96,18 @@ if seller_bank: # Person if not partner.is_company: ctx.update({ + "partner_representer_name": partner.name_write, "partner_representer_name_initials": partner.name_initials, "partner_representer_passport_number": partner.passport_number, "partner_representer_passport_date": partner.passport_date, "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: # Company ctx.update({ @@ -94,6 +115,8 @@ else: "partner_representer_name": partner.representative_id.name, "partner_representer_name_parent": partner.representative_id.name_genitive, "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, }) @@ -106,6 +129,7 @@ else: "partner_representer_passport_number": partner.representative_id.passport_number, "partner_representer_passport_date": partner.representative_id.passport_date, "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': # Private Limited Company @@ -131,13 +155,17 @@ action = ctx # Aliases self = record -seller = self.contract_id.company_id -partner = self.contract_id.partner_id +seller = self.company_id +partner = self.partner_id 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_name = partner_bank.bank_id.name + (" г. {city}".format(city=partner_bank.bank_id.city) if partner_bank.bank_id.city else "") # Functions +_ = self.contract_id._ get_date = self.contract_id.get_date # Parse date @@ -153,9 +181,25 @@ yyyy = date.year yy = yyyy % 100 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 = { "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, "mm": mm, @@ -163,11 +207,13 @@ ctx = { "yy": yy, "yyyy": yyyy, - "seller_name": seller.name, - "seller_company_form": seller.read(["company_form"])[0]['company_form'], + "seller_name": seller.name_write, + "seller_company_form": _(dict(seller._fields['company_form'].selection).get(seller.company_form)), "seller_representer_name": seller.representative_id.name, "seller_representer_name_parent": seller.representative_id.name_genitive, "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_kpp": seller.iec, @@ -176,7 +222,7 @@ ctx = { "seller_phone": seller.phone, "seller_email": seller.email, - "partner_name": partner.name, + "partner_name": partner.name_write, "partner_representer_name": partner.representative_id.name, "partner_representer_name_initials": partner.representative_id.name_initials, "partner_inn": partner.vat, @@ -187,12 +233,14 @@ ctx = { if partner_bank: ctx.update({ + "partner_bank": partner_bank_name, "partner_rs": partner_bank.acc_number, "partner_ks": partner_bank.bank_id.corr_account, "partner_bic": partner_bank.bank_id.bic, }) if seller_bank: ctx.update({ + "seller_bank": seller_bank_name, "seller_rs": seller_bank.acc_number, "seller_ks": seller_bank.bank_id.corr_account, "seller_bic": seller_bank.bank_id.bic, @@ -202,17 +250,25 @@ if seller_bank: # Person if not partner.is_company: ctx.update({ + "partner_representer_name": partner.name_write, "partner_representer_name_initials": partner.name_initials, "partner_representer_passport_number": partner.passport_number, "partner_representer_passport_date": partner.passport_date, "partner_representer_passport_department": partner.passport_department, }) + if not partner.name_write: + ctx.update({ + "partner_name": partner.name, + "partner_representer_name": partner.name, + }) else: # Company 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_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': @@ -246,6 +302,35 @@ action = ctx 1 + + Annex Name + annex_name + + 2 + + + + Annex Number + annex_number + + 2 + False + + + + Order Name + order_name + + 3 + + + + Order Date + order_date + + 4 + + Day dd @@ -258,6 +343,7 @@ action = ctx mm Number 16 + False @@ -272,6 +358,7 @@ action = ctx yy Short 40 + False @@ -293,16 +380,32 @@ action = ctx - - Delivery Time - delivery_time + + Payment Part 1 + payment_part_one + 35 - - Payment Term - payment_term + + Payment Part 2 + payment_part_two + 36 + + + + Payment Part 3 + payment_part_three + + 37 + + + + Delivery Period + delivery_period + + 38 @@ -399,6 +502,13 @@ action = ctx 144 + + Passport Department Code + seller_representer_passport_department_code + Seller Representative + 146 + + INN seller_inn @@ -476,6 +586,20 @@ action = ctx 232 + + WhatsApp + seller_whatsapp + Seller + 233 + + + + Telegram + seller_telegram + Seller + 234 + + Email seller_email @@ -577,6 +701,13 @@ action = ctx 344 + + Passport Department Code + partner_representer_passport_department_code + Partner Representative + 346 + + INN partner_inn @@ -654,6 +785,20 @@ action = ctx 432 + + WhatsApp + partner_whatsapp + Partner + 433 + + + + Telegram + partner_telegram + Partner + 434 + + Email partner_email diff --git a/i18n/ru.po b/i18n/ru.po index b48285f..9abc06a 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -6,10 +6,10 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0-20191106\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-28 10:32+0000\n" -"PO-Revision-Date: 2019-12-28 10:32+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"POT-Creation-Date: 2020-01-22 11:29+0000\n" +"PO-Revision-Date: 2020-01-22 11:29+0000\n" +"Last-Translator: Stepan Savelyev\n" +"Language-Team: RYDLAB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -41,6 +41,20 @@ msgstr "Оплата в 2 этапа" msgid "3 stages" 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 #: 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 @@ -48,9 +62,11 @@ msgid "Actual Address" msgstr "Актуальный адрес" #. module: client_contracts -#: model:ir.model.fields,help:client_contracts.field_res_users_okpo -msgid "All-Russian Classifier of Enterprises and Organizations" -msgstr "Общероссийский классификатор предприятий и организаций" +#: code:addons/client_contracts/models/res_partner_document_template.py:21 +#: selection:res.partner.document.template,document_type:0 +#, python-format +msgid "Addition" +msgstr "Дополнение" #. module: client_contracts #: model:res.partner.contract.field,name:client_contracts.contract_field_amount_fractional @@ -63,21 +79,27 @@ msgid "Amount Whole Part" msgstr "Целая часть суммы" #. module: client_contracts -#: code:addons/client_contracts/wizard/res_partner_contract_wizard.py:139 -#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates_annex +#: code:addons/client_contracts/models/res_partner_document_template.py:20 +#: selection:res.partner.document.template,document_type:0 +#: selection:res.partner.document.template,template_type:0 #, python-format msgid "Annex" msgstr "Приложение" #. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view -msgid "Annex values" -msgstr "Поля в печатном приложении" +#: model:res.partner.contract.field,name:client_contracts.contract_field_annex_name +msgid "Annex Name" +msgstr "Наименование приложения" + +#. module: client_contracts +#: model:res.partner.contract.field,name:client_contracts.contract_field_annex_number +msgid "Annex Number" +msgstr "Номер приложения" #. module: client_contracts #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form -msgid "Annexed orders" -msgstr "Приложенные заказы" +msgid "Annexed Specifications" +msgstr "Приложенные спецификации" #. module: client_contracts #: 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 "Приложения к договору" #. module: client_contracts -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_name -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_name -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_name -msgid "Attachment Name" -msgstr "Название вложения" +#: code:addons/client_contracts/models/res_partner_document_template.py:29 +#: selection:res.partner.document.template,document_type_name:0 +#, python-format +msgid "Approval List" +msgstr "Лист согласования" #. module: client_contracts #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_bic @@ -124,6 +146,13 @@ msgstr "Наименование банка" msgid "Bank Payment Account" 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 #: 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 @@ -146,15 +175,14 @@ msgid "Closed" msgstr "Закрыт" #. 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_wizard_company_id msgid "Company" msgstr "Компания" #. 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_template_print_company_type -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_company_type +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_company_type msgid "Company Type" msgstr "Тип компании" @@ -169,14 +197,15 @@ msgid "Contact" msgstr "Контакт" #. 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.fields,field_description:client_contracts.field_res_partner_contract_annex_contract_id #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient__contract_wizard_id #: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts -#: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates_contract #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form #: selection:res.partner.contract.wizard,target:0 +#: selection:res.partner.document.template,document_type:0 +#: selection:res.partner.document.template,template_type:0 #, python-format msgid "Contract" msgstr "Договор" @@ -205,6 +234,7 @@ msgid "Contract Field Transient" msgstr "Фактическое поле договора" #. 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 msgid "Contract Fields" msgstr "Поля договора" @@ -224,11 +254,6 @@ msgstr "Номер договора" msgid "Contract parameters" msgstr "Информация" -#. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view -msgid "Contract values" -msgstr "Поля в печатном договоре" - #. module: client_contracts #: model:ir.actions.act_window,name:client_contracts.res_partner_contract_action #: model:ir.actions.act_window,name:client_contracts.res_partner_contract_partner_action @@ -245,41 +270,46 @@ msgstr "Договоры" msgid "Counter for generate Annex name" 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 #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_date_ts msgid "Create Date Ts" msgstr "Создан (таймстамп)" #. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view +#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_document_view msgid "Create a document" msgstr "Создать документ" #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_create_uid +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_create_uid #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_create_uid #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_create_uid #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_create_uid -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_create_uid -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_create_uid -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_create_uid +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_create_uid msgid "Created by" msgstr "Создано" #. 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_create_date #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_create_date #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_create_date #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_create_date -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_create_date -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_create_date -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_create_date -#, python-format +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_create_date msgid "Created on" 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 #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_date_conclusion_fix msgid "Date of manual conclusion" @@ -296,9 +326,27 @@ msgid "Day" msgstr "День" #. 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:res.partner.contract.field,name:client_contracts.contract_field_delivery_time msgid "Delivery Time" msgstr "Срок доставки" @@ -308,24 +356,63 @@ msgstr "Срок доставки" msgid "Description" 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 #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_display_name #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_display_name #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_display_name #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_display_name #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_display_name -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_display_name -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_display_name -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_display_name +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_display_name msgid "Display Name" 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 #: 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 msgid "Document Genitive" 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 #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_email #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_email @@ -365,8 +452,8 @@ msgid "Function" msgstr "Должность" #. module: client_contracts -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_function_parent_case -#: model:ir.model.fields,field_description:client_contracts.field_res_users_function_parent_case +#: 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_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_seller_representer_function_parent 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_field_id #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_id +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_id #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_id -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_id -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_contract_id -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_id +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_id msgid "ID" msgstr "Номер" @@ -408,17 +494,47 @@ msgid "IP Number" 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 +#: model:ir.model.fields,help:client_contracts.field_res_partner_telegram +#: model:ir.model.fields,help:client_contracts.field_res_users_telegram +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" msgstr "Физическое лицо" #. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view +#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form msgid "Info" 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 #: 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 @@ -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_transient___last_update #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard___last_update -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print___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 +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template___last_update msgid "Last Modified on" 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_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_template_print_contract_write_uid -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_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_document_template_write_uid msgid "Last Updated by" -msgstr "Последний раз обновлено" +msgstr "Последний раз обновил" #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_write_date #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_write_date #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_write_date #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_write_date -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_template_print_annex_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_template_print_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_document_template_write_date 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 #: 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_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_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_representer_name #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_name @@ -488,21 +607,32 @@ msgid "Name" msgstr "Название" #. module: client_contracts -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_name_parent_case -#: model:ir.model.fields,field_description:client_contracts.field_res_users_name_parent_case +#: 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_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_seller_representer_name_parent msgid "Name Genitive" msgstr "Имя (род.падеж)" #. module: client_contracts -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_name_initials_case -#: model:ir.model.fields,field_description:client_contracts.field_res_users_name_initials_case +#: 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 #: 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 msgid "Name Initials" 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 #: 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 @@ -521,7 +651,6 @@ msgid "Number" msgstr "Число" #. 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_seller_okpo msgid "OKPO" @@ -532,6 +661,21 @@ msgstr "ОКПО" msgid "Order" 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 #: model:res.partner.contract.field,name:client_contracts.contract_field_partner_ogrn #: model:res.partner.contract.field,name:client_contracts.contract_field_seller_ogrn @@ -551,9 +695,9 @@ msgid "Parent Case" msgstr "В родительном падеже" #. 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_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_bic #: 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_phone #: 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" 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_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_code #: model:res.partner.contract.field,description:client_contracts.contract_field_partner_representer_passport_number msgid "Partner Representative" 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 #: 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 @@ -609,14 +762,39 @@ msgid "Passport №" msgstr "Паспорт №" #. module: client_contracts -#: model:res.partner.contract.field,name:client_contracts.contract_field_payment_term -msgid "Payment Term" -msgstr "Условия оплаты" +#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_annex_view_form +msgid "Payment" +msgstr "Оплата" #. module: client_contracts -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_payment_term -msgid "Payment Terms" -msgstr "Условия оплаты" +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_payment_part_one +msgid "Payment 1 Part (%)" +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 #: model:account.payment.term,note:client_contracts.payment_term_postpayment @@ -651,24 +829,18 @@ msgid "Phone" msgstr "Телефон" #. 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 msgid "Print" msgstr "Печать" #. 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 msgid "Print Form of Contract" msgstr "Форма печати договора" #. 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 msgid "Print Form of Contract Annex" msgstr "Форма печати приложения к договору" @@ -689,26 +861,19 @@ msgid "Print Template Contract Annex" msgstr "Вложение-шаблон приложения к договору" #. module: client_contracts -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_print_template_contract -msgid "Print Template of Contract" -msgstr "Шаблон-Вложение договора" - -#. module: client_contracts -#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_wizard_print_template_annex -msgid "Print Template of Contract Annex" -msgstr "Шаблон-Вложение приложения к договору" - -#. module: client_contracts -#: 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 +#: selection:res.partner.document.template,company_type:0 msgid "Private Limited Company" 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 #: model:ir.model,name:client_contracts.model_sale_order msgid "Quotation" -msgstr "Предложение цен" +msgstr "Оферта" #. module: client_contracts #: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_form @@ -727,18 +892,12 @@ msgstr "Представитель" msgid "Representative acts on the basis of" msgstr "Представитель действует на основании" -#. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view -msgid "Requisites" -msgstr "Реквизиты" - #. module: client_contracts #: model:ir.ui.view,arch_db:client_contracts.search_res_partner_contract_filter msgid "Search Contract" msgstr "Поиск договора" #. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view #: 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_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_phone #: 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" 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_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_code #: model:res.partner.contract.field,description:client_contracts.contract_field_seller_representer_passport_number msgid "Seller Representative" msgstr "Представитель Продавца" #. 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_document_template_sequence msgid "Sequence" msgstr "Нумерация" @@ -796,12 +959,22 @@ msgid "Signed" 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 +#: selection:res.partner.document.template,company_type:0 msgid "Sole Proprietor" 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 #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_state msgid "Status" @@ -819,27 +992,27 @@ msgid "Technical Name" msgstr "Техническое название" #. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_annex_view -#: model:ir.ui.view,arch_db:client_contracts.res_partner_wizard_print_contract_view +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_telegram +#: 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" msgstr "Шаблон" #. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_template_print_annex_view_form -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 +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_attachment_id msgid "Template Attachment" msgstr "Вложение-шаблон" #. module: client_contracts -#: model:ir.ui.view,arch_db:client_contracts.res_partner_template_print_contract_view_form -msgid "Template Contract" -msgstr "Шаблон договора" +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_document_template_template_type +msgid "Template Type" +msgstr "Тип шаблона" #. module: client_contracts #: model:ir.ui.menu,name:client_contracts.res_partner_menu_contracts_templates @@ -847,15 +1020,55 @@ msgid "Templates" msgstr "Шаблоны" #. module: client_contracts -#: model:ir.model.fields,help:client_contracts.field_res_partner_contract_annex_name -msgid "The Number of Annex" -msgstr "Номер приложения" +#: model:ir.model.fields,help:client_contracts.field_res_partner_name_write +#: model:ir.model.fields,help:client_contracts.field_res_users_name_write +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 #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_field_transient_value msgid "Value" 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 #: model:res.partner.contract.field,description:client_contracts.contract_field_MM msgid "Word" @@ -868,24 +1081,9 @@ msgid "Year" msgstr "Год" #. module: client_contracts -#: model:ir.model,name:client_contracts.model_res_partner_contract_annex_line -msgid "res.partner.contract.annex.line" -msgstr "res.partner.contract.annex.line" - -#. module: client_contracts -#: model:ir.model,name:client_contracts.model_res_partner_contract_annex_type -msgid "res.partner.contract.annex.type" -msgstr "res.partner.contract.annex.type" - -#. module: client_contracts -#: model:ir.actions.act_window,name:client_contracts.res_partner_contract_field_action -msgid "res.partner.contract.field.action" -msgstr "res.partner.contract.field.action" - -#. module: client_contracts -#: model:ir.model,name:client_contracts.model_res_partner_contract_template -msgid "res.partner.contract.template" -msgstr "res.partner.contract.template" +#: model:ir.ui.view,arch_db:client_contracts.res_partner_contract_info_inherit_view +msgid "i.e. Ural Bank for Reconstruction and Development" +msgstr "напр. «Уральский банк реконструкции и развития»" #. module: client_contracts #: 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" #. module: client_contracts -#: model:ir.actions.act_window,name:client_contracts.res_partner_print_annex_action -msgid "res.partner.template.print.annex.action" -msgstr "res.partner.template.print.annex.action" +#: code:addons/client_contracts/models/res_partner_contract_annex.py:64 +#, python-format +msgid "{name} from {date}" +msgstr "{name} от {date}" #. module: client_contracts -#: model:ir.actions.act_window,name:client_contracts.res_partner_print_contract_action -msgid "res.partner.template.print.contract.action" -msgstr "res.partner.template.print.contract.action" +#: code:addons/client_contracts/models/res_partner_contract.py:112 +#, python-format +msgid "{type} {number} from {date}" +msgstr "{type} {number} от {date}" diff --git a/models/__init__.py b/models/__init__.py index 9be2ae2..7656172 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -3,4 +3,5 @@ from . import res_partner_contract from . import res_partner_contract_annex from . import res_partner_contract_field from . import res_partner_contract_field_transient +from . import res_partner_document_template from . import sale_order diff --git a/models/res_partner.py b/models/res_partner.py index 6ed46e7..7a9f426 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -4,6 +4,9 @@ from odoo import api, fields, models class ResPartner(models.Model): _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_initials = fields.Char(string="Name Initials",) 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", ) 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") def _compute_full_address(self): diff --git a/models/res_partner_contract.py b/models/res_partner_contract.py index 3afef6d..db95c18 100644 --- a/models/res_partner_contract.py +++ b/models/res_partner_contract.py @@ -1,12 +1,12 @@ import datetime 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.misc import Extension, IDocument -class PartnerContract(models.Model): +class PartnerContract(models.Model, IDocument, Extension): _name = "res.partner.contract" _description = "Contract" _inherit = ["mail.thread", "mail.activity.mixin", "mail.followers"] @@ -36,6 +36,7 @@ class PartnerContract(models.Model): """Returns timestamp of now by local datetime""" return datetime.datetime.now().timestamp() + res_model = fields.Char(default=lambda self: self._name) name = fields.Char(string="Contract number", default=_get_default_name,) create_date = fields.Datetime(string="Created on") create_date_ts = fields.Char(default=_get_default_create_date_ts) @@ -90,7 +91,9 @@ class PartnerContract(models.Model): @api.multi 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 { "name": _("Print Form of Contract"), "type": "ir.actions.act_window", @@ -101,6 +104,20 @@ class PartnerContract(models.Model): "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): """Uses in xml action (data/fields_default) @@ -109,37 +126,15 @@ class PartnerContract(models.Model): """ date = self.date_conclusion_fix or self.date_conclusion if date: - date = datetime.datetime.strptime(date, DEFAULT_SERVER_DATE_FORMAT) + date = self.parse_odoo_date(date) else: - date = self.create_date - date = datetime.datetime.strptime(date, DEFAULT_SERVER_DATETIME_FORMAT) + date = self.parse_odoo_datetime(self.create_date) return date + def _(self, arg): + """Uses in xml action (data/fields_default) -class PrintTemplate(models.Model): - _name = "res.partner.template.print" - _description = "Print Template" - - 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" + Arguments: + arg {str} -- String to translate + """ + return _(arg) diff --git a/models/res_partner_contract_annex.py b/models/res_partner_contract_annex.py index 6aa8b38..cbafbf7 100644 --- a/models/res_partner_contract_annex.py +++ b/models/res_partner_contract_annex.py @@ -3,38 +3,74 @@ import math from odoo import _, api, fields, models 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" _description = "Contract Annex" - name = fields.Char(string="Name", help="The Number of Annex") - order_id = fields.Many2one("sale.order", string="Order", required=True,) + name = fields.Char(string="Name",) + display_name = fields.Char(compute="_compute_display_name",) + specification_name = fields.Char(compute="_compute_specification_name",) + contract_id = fields.Many2one( "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( string="Conclusion Date", default=fields.Date.today(), ) - prepaid_expense = fields.Float(string="Prepaid Expense", default=0) - delivery_time = fields.Integer(related="order_id.delivery_time", readonly=True,) - payment_term = fields.Many2one( - "account.payment.term", related="order_id.payment_term_id", readonly=True, - ) + counter = fields.Integer(string="№", help="Counter of Contract Annexes",) + currency_id = fields.Many2one(related="company_id.currency_id", readonly=True,) - @api.onchange("contract_id") - def _onchange_contract_id(self): - # Compute name if there is no custom name - contract_number = self.contract_id.name - annex_number = self.contract_id.contract_annex_number + development_period = fields.Integer("Product Development Period (days)",) - self.name = "{contract}--{annex}".format( - contract=contract_number, annex=annex_number + design_cost = fields.Monetary(string="Design Cost",) + + 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 - # not working correctly domain in model + @api.onchange("order_id") + def _domain_order_id(self): + """Using domain function because of + simple domain does not working properly because of + contract_id is still False""" return { "domain": { "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 def create(self, values): record = super().create(values) @@ -51,14 +96,17 @@ class ContractOrderAnnex(models.Model): # Fill annex_id to domain it in future record.order_id.contract_annex_id = record.id - # Add counter - record.contract_id.contract_annex_number += 1 + # Counter + record.counter = record.contract_id.contract_annex_number + record.contract_id.contract_annex_number += 1 # TODO: should I use a sequence? return record @api.multi 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 { "name": _("Print Form of Contract Annex"), "type": "ir.actions.act_window", @@ -69,6 +117,44 @@ class ContractOrderAnnex(models.Model): "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): """Math.modf function for using in XML ir.action.server code Uses in data/fields_default.xml diff --git a/models/res_partner_contract_field.py b/models/res_partner_contract_field.py index d251f24..25d6897 100644 --- a/models/res_partner_contract_field.py +++ b/models/res_partner_contract_field.py @@ -11,3 +11,4 @@ class ContractField(models.Model): ) description = fields.Char(string="Description", translate=True, default="",) sequence = fields.Integer(string="Sequence",) + visible = fields.Boolean(string="Visible", default=True,) diff --git a/models/res_partner_contract_field_transient.py b/models/res_partner_contract_field_transient.py index 43e214b..07f043c 100644 --- a/models/res_partner_contract_field_transient.py +++ b/models/res_partner_contract_field_transient.py @@ -18,4 +18,5 @@ class ContractFieldTransient(models.TransientModel): description = fields.Char( related="contract_field_id.description", string="Description", readonly=True, ) + visible = fields.Boolean(related="contract_field_id.visible",) value = fields.Char(string="Value", default="",) diff --git a/models/res_partner_document_template.py b/models/res_partner_document_template.py new file mode 100644 index 0000000..16d1c6d --- /dev/null +++ b/models/res_partner_document_template.py @@ -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() diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 12e0fba..96a55dc 100755 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -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_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_contract_document_template,access_contract_document_template,model_res_partner_template_print_contract,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 +access_contract_document_template,access_contract_document_template,model_res_partner_document_template,base.group_user,1,0,0,0 diff --git a/static/assets/documents/bill.docx b/static/assets/documents/bill.docx new file mode 100644 index 0000000..67bf78d Binary files /dev/null and b/static/assets/documents/bill.docx differ diff --git a/static/assets/documents/common/bill.docx b/static/assets/documents/common/bill.docx new file mode 100644 index 0000000..4b9ff8f Binary files /dev/null and b/static/assets/documents/common/bill.docx differ diff --git a/static/assets/documents/contract_postavki.docx b/static/assets/documents/contract_postavki.docx new file mode 100644 index 0000000..462a1b8 Binary files /dev/null and b/static/assets/documents/contract_postavki.docx differ diff --git a/static/assets/documents/original/Акт приема-передачи.docx b/static/assets/documents/original/Акт приема-передачи.docx new file mode 100644 index 0000000..ea8b6d6 Binary files /dev/null and b/static/assets/documents/original/Акт приема-передачи.docx differ diff --git a/static/assets/documents/original/Акт приема-сдачи.docx b/static/assets/documents/original/Акт приема-сдачи.docx new file mode 100644 index 0000000..a81a961 Binary files /dev/null and b/static/assets/documents/original/Акт приема-сдачи.docx differ diff --git a/static/assets/documents/original/Договор поставки мебельных изделий - Copy.docx b/static/assets/documents/original/Договор поставки мебельных изделий - Copy.docx new file mode 100644 index 0000000..bb97cea Binary files /dev/null and b/static/assets/documents/original/Договор поставки мебельных изделий - Copy.docx differ diff --git a/static/assets/documents/original/Договор поставки мебельных изделий.docx b/static/assets/documents/original/Договор поставки мебельных изделий.docx new file mode 100644 index 0000000..462a1b8 Binary files /dev/null and b/static/assets/documents/original/Договор поставки мебельных изделий.docx differ diff --git a/static/assets/documents/original/Лист согласования.docx b/static/assets/documents/original/Лист согласования.docx new file mode 100644 index 0000000..8397dc4 Binary files /dev/null and b/static/assets/documents/original/Лист согласования.docx differ diff --git a/static/assets/documents/original/Спецификация.docx b/static/assets/documents/original/Спецификация.docx new file mode 100644 index 0000000..840da6c Binary files /dev/null and b/static/assets/documents/original/Спецификация.docx differ diff --git a/static/assets/documents/person/addition_act_1_person.docx b/static/assets/documents/person/addition_act_1_person.docx new file mode 100644 index 0000000..0a6d808 Binary files /dev/null and b/static/assets/documents/person/addition_act_1_person.docx differ diff --git a/static/assets/documents/person/addition_act_2_person.docx b/static/assets/documents/person/addition_act_2_person.docx new file mode 100644 index 0000000..35474c0 Binary files /dev/null and b/static/assets/documents/person/addition_act_2_person.docx differ diff --git a/static/assets/documents/person/addition_list_soglasovania_person.docx b/static/assets/documents/person/addition_list_soglasovania_person.docx new file mode 100644 index 0000000..203a7bf Binary files /dev/null and b/static/assets/documents/person/addition_list_soglasovania_person.docx differ diff --git a/static/assets/documents/person/bill_person.docx b/static/assets/documents/person/bill_person.docx new file mode 100644 index 0000000..ced8f83 Binary files /dev/null and b/static/assets/documents/person/bill_person.docx differ diff --git a/static/assets/documents/person/contract_postavki_person.docx b/static/assets/documents/person/contract_postavki_person.docx new file mode 100644 index 0000000..6f47f5a Binary files /dev/null and b/static/assets/documents/person/contract_postavki_person.docx differ diff --git a/static/assets/documents/person/specification_person.docx b/static/assets/documents/person/specification_person.docx new file mode 100644 index 0000000..6bfe078 Binary files /dev/null and b/static/assets/documents/person/specification_person.docx differ diff --git a/static/assets/documents/plc/addition_act_1_plc.docx b/static/assets/documents/plc/addition_act_1_plc.docx new file mode 100644 index 0000000..37bb07d Binary files /dev/null and b/static/assets/documents/plc/addition_act_1_plc.docx differ diff --git a/static/assets/documents/plc/addition_act_2_plc.docx b/static/assets/documents/plc/addition_act_2_plc.docx new file mode 100644 index 0000000..29c4c3e Binary files /dev/null and b/static/assets/documents/plc/addition_act_2_plc.docx differ diff --git a/static/assets/documents/plc/addition_list_soglasovania_plc.docx b/static/assets/documents/plc/addition_list_soglasovania_plc.docx new file mode 100644 index 0000000..3e6c6e7 Binary files /dev/null and b/static/assets/documents/plc/addition_list_soglasovania_plc.docx differ diff --git a/static/assets/documents/plc/bill_plc.docx b/static/assets/documents/plc/bill_plc.docx new file mode 100644 index 0000000..5e63f8c Binary files /dev/null and b/static/assets/documents/plc/bill_plc.docx differ diff --git a/static/assets/documents/plc/contract_postavki_plc.docx b/static/assets/documents/plc/contract_postavki_plc.docx new file mode 100644 index 0000000..2fdadd3 Binary files /dev/null and b/static/assets/documents/plc/contract_postavki_plc.docx differ diff --git a/static/assets/documents/plc/specification_plc.docx b/static/assets/documents/plc/specification_plc.docx new file mode 100644 index 0000000..13153eb Binary files /dev/null and b/static/assets/documents/plc/specification_plc.docx differ diff --git a/static/assets/documents/sp/addition_act_1_sp.docx b/static/assets/documents/sp/addition_act_1_sp.docx new file mode 100644 index 0000000..da01acc Binary files /dev/null and b/static/assets/documents/sp/addition_act_1_sp.docx differ diff --git a/static/assets/documents/sp/addition_act_2_sp.docx b/static/assets/documents/sp/addition_act_2_sp.docx new file mode 100644 index 0000000..0bd89ea Binary files /dev/null and b/static/assets/documents/sp/addition_act_2_sp.docx differ diff --git a/static/assets/documents/sp/addition_list_soglasovania_sp.docx b/static/assets/documents/sp/addition_list_soglasovania_sp.docx new file mode 100644 index 0000000..98d194b Binary files /dev/null and b/static/assets/documents/sp/addition_list_soglasovania_sp.docx differ diff --git a/static/assets/documents/sp/bill_sp.docx b/static/assets/documents/sp/bill_sp.docx new file mode 100644 index 0000000..021c43a Binary files /dev/null and b/static/assets/documents/sp/bill_sp.docx differ diff --git a/static/assets/documents/sp/contract_postavki_sp.docx b/static/assets/documents/sp/contract_postavki_sp.docx new file mode 100644 index 0000000..d819a83 Binary files /dev/null and b/static/assets/documents/sp/contract_postavki_sp.docx differ diff --git a/static/assets/documents/sp/specification_sp.docx b/static/assets/documents/sp/specification_sp.docx new file mode 100644 index 0000000..ec463fa Binary files /dev/null and b/static/assets/documents/sp/specification_sp.docx differ diff --git a/static/src/css/mimetypes.css b/static/src/css/mimetypes.css new file mode 100644 index 0000000..313896c --- /dev/null +++ b/static/src/css/mimetypes.css @@ -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'); +} diff --git a/static/src/img/msword.png b/static/src/img/msword.png new file mode 100644 index 0000000..5ac980f Binary files /dev/null and b/static/src/img/msword.png differ diff --git a/utils/__init__.py b/utils/__init__.py index 5b306d3..6d0f55e 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -1 +1 @@ -MODULE_NAME = __package__.split('.')[-2] +MODULE_NAME = __package__.split(".")[-2] diff --git a/utils/misc.py b/utils/misc.py new file mode 100644 index 0000000..9050bf8 --- /dev/null +++ b/utils/misc.py @@ -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) diff --git a/views/res_partner.xml b/views/res_partner.xml index 43a0884..fb950f1 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -3,27 +3,18 @@ - res.partner.contract.field.action + Contract Fields ir.actions.act_window res.partner.contract.field tree,form form - - - res.partner.template.print.contract.action + + + Document Templates ir.actions.act_window - res.partner.template.print.contract - tree,form - form - - - - - res.partner.template.print.annex.action - ir.actions.act_window - res.partner.template.print.annex + res.partner.document.template tree,form form @@ -35,21 +26,34 @@ + + Name in ERP + + - - - + + + + + + + - - + + - + + + + + + @@ -86,18 +90,7 @@ - - - - diff --git a/views/res_partner_contract.xml b/views/res_partner_contract.xml index 143ba07..1480ad6 100644 --- a/views/res_partner_contract.xml +++ b/views/res_partner_contract.xml @@ -8,8 +8,9 @@ - + + @@ -19,7 +20,7 @@ Contract Form res.partner.contract -
+