diff --git a/data/fields_default.xml b/data/fields_default.xml index 12633a3..21c35fa 100644 --- a/data/fields_default.xml +++ b/data/fields_default.xml @@ -195,6 +195,17 @@ ctx = { "order_name": self.order_id.name, "order_date": "{} {} {}".format(order_date.day, months[order_date.month], order_date.year), + + "design_cost": self.to_fixed(self.design_cost), + "design_period": self.design_period, + "design_doc_cost": self.to_fixed(self.design_doc_cost), + "design_doc_period": self.design_doc_period, + "delivery_address": self.delivery_address, + "delivery_period": self.delivery_period, + "installation_address": self.installation_address, + "installation_cost": self.to_fixed(self.installation_cost), + "installation_period": self.installation_period, + "total_cost": self.to_fixed(self.total_cost), "payment_part_one": self.payment_part_one, "payment_part_two": self.payment_part_two, @@ -331,11 +342,81 @@ action = ctx 4 + + Design Cost + design_cost + + False + + + + Design Period + design_period + + False + + + + Design Documentation Period + design_doc_period + + False + + + + Design Documentation Cost + design_doc_cost + + False + + + + Delivery Address + delivery_address + + False + + + + Delivery Period + delivery_period + + False + + + + Installation Address + installation_address + + False + + + + Installation Cost + installation_cost + + False + + + + Installation Period + installation_period + + False + + + + Total Cost + total_cost + + False + + Day dd Number - 8 + 11 @@ -401,13 +482,6 @@ action = ctx 37 - - Delivery Period - delivery_period - - 38 - - diff --git a/i18n/ru.po b/i18n/ru.po index 9abc06a..1af1a75 100644 --- a/i18n/ru.po +++ b/i18n/ru.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0-20191106\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-01-22 11:29+0000\n" -"PO-Revision-Date: 2020-01-22 11:29+0000\n" +"POT-Creation-Date: 2020-01-29 11:03+0000\n" +"PO-Revision-Date: 2020-01-29 11:03+0000\n" "Last-Translator: Stepan Savelyev\n" "Language-Team: RYDLAB\n" "MIME-Version: 1.0\n" @@ -306,6 +306,7 @@ msgid "Created on" msgstr "Создан" #. module: client_contracts +#: model:ir.model.fields,field_description:client_contracts.field_crm_lead_currency_id #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_currency_id msgid "Currency" msgstr "Валюта" @@ -332,6 +333,7 @@ msgstr "Доставка" #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_delivery_address +#: model:res.partner.contract.field,name:client_contracts.contract_field_delivery_address msgid "Delivery Address" msgstr "Адрес доставки" @@ -363,9 +365,26 @@ msgstr "Дизайн" #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_design_cost +#: model:res.partner.contract.field,name:client_contracts.contract_field_design_cost msgid "Design Cost" msgstr "Стоимость разработки дизайна" +#. module: client_contracts +#: model:res.partner.contract.field,name:client_contracts.contract_field_design_doc_cost +msgid "Design Documentation Cost" +msgstr "Стоимость разработки КД" + +#. module: client_contracts +#: model:res.partner.contract.field,name:client_contracts.contract_field_design_doc_period +msgid "Design Documentation Period" +msgstr "Срок разработки КД" + +#. module: client_contracts +#: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_design_period +#: model:res.partner.contract.field,name:client_contracts.contract_field_design_period +msgid "Design Period" +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 @@ -522,14 +541,21 @@ msgstr "Монтаж" #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_installation_address +#: model:res.partner.contract.field,name:client_contracts.contract_field_installation_address msgid "Installation Address" msgstr "Монтаж по адресу" #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_installation_cost +#: model:res.partner.contract.field,name:client_contracts.contract_field_installation_cost msgid "Installation Cost" msgstr "Стоимость монтажа" +#. module: client_contracts +#: model:res.partner.contract.field,name:client_contracts.contract_field_installation_period +msgid "Installation Period" +msgstr "Срок монтажа изделий" + #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_installation_period msgid "Installation Period (days)" @@ -834,13 +860,13 @@ msgid "Print" msgstr "Печать" #. module: client_contracts -#: code:addons/client_contracts/models/res_partner_contract.py:99 +#: code:addons/client_contracts/models/res_partner_contract.py:98 #, python-format msgid "Print Form of Contract" msgstr "Форма печати договора" #. module: client_contracts -#: code:addons/client_contracts/models/res_partner_contract_annex.py:111 +#: code:addons/client_contracts/models/res_partner_contract_annex.py:110 #, python-format msgid "Print Form of Contract Annex" msgstr "Форма печати приложения к договору" @@ -865,11 +891,6 @@ msgstr "Вложение-шаблон приложения к договору" 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" @@ -1027,6 +1048,7 @@ msgstr "Наименование, используемое при заполне #. module: client_contracts #: model:ir.model.fields,field_description:client_contracts.field_res_partner_contract_annex_total_cost +#: model:res.partner.contract.field,name:client_contracts.contract_field_total_cost msgid "Total Cost" msgstr "Общая стоимость" @@ -1091,13 +1113,13 @@ msgid "res.partner.contract.wizard" msgstr "res.partner.contract.wizard" #. module: client_contracts -#: code:addons/client_contracts/models/res_partner_contract_annex.py:64 +#: code:addons/client_contracts/models/res_partner_contract_annex.py:63 #, python-format msgid "{name} from {date}" msgstr "{name} от {date}" #. module: client_contracts -#: code:addons/client_contracts/models/res_partner_contract.py:112 +#: code:addons/client_contracts/models/res_partner_contract.py:111 #, python-format msgid "{type} {number} from {date}" msgstr "{type} {number} от {date}" diff --git a/models/res_partner_contract_annex.py b/models/res_partner_contract_annex.py index cbafbf7..04b9be3 100644 --- a/models/res_partner_contract_annex.py +++ b/models/res_partner_contract_annex.py @@ -31,8 +31,7 @@ class ContractOrderAnnex(models.Model, IDocument, Extension): counter = fields.Integer(string="№", help="Counter of Contract Annexes",) currency_id = fields.Many2one(related="company_id.currency_id", readonly=True,) - development_period = fields.Integer("Product Development Period (days)",) - + design_period = fields.Integer(string="Design Period",) design_cost = fields.Monetary(string="Design Cost",) design_doc_period = fields.Integer(string="Documentation Design Period (days)",) diff --git a/models/res_partner_document_template.py b/models/res_partner_document_template.py index 16d1c6d..7de7d06 100644 --- a/models/res_partner_document_template.py +++ b/models/res_partner_document_template.py @@ -4,7 +4,7 @@ from odoo import _, fields, models class DocumentTemplate(models.Model): _name = "res.partner.document.template" _description = "Document Template" - _order = "company_type,document_type,sequence" + _order = "template_type desc,company_type,sequence" name = fields.Char() attachment_id = fields.Many2one( diff --git a/static/assets/documents/person/addition_act_1_person.docx b/static/assets/documents/person/addition_act_1_person.docx index 0a6d808..d19d5b3 100644 Binary files a/static/assets/documents/person/addition_act_1_person.docx 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 index 35474c0..02f7132 100644 Binary files a/static/assets/documents/person/addition_act_2_person.docx and b/static/assets/documents/person/addition_act_2_person.docx differ diff --git a/static/assets/documents/person/bill_person.docx b/static/assets/documents/person/bill_person.docx index ced8f83..a9ff92c 100644 Binary files a/static/assets/documents/person/bill_person.docx and b/static/assets/documents/person/bill_person.docx differ diff --git a/static/assets/documents/person/specification_person.docx b/static/assets/documents/person/specification_person.docx index 6bfe078..177e127 100644 Binary files a/static/assets/documents/person/specification_person.docx 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 index 37bb07d..5bd22d8 100644 Binary files a/static/assets/documents/plc/addition_act_1_plc.docx 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 index 29c4c3e..d01dac8 100644 Binary files a/static/assets/documents/plc/addition_act_2_plc.docx and b/static/assets/documents/plc/addition_act_2_plc.docx differ diff --git a/static/assets/documents/plc/bill_plc.docx b/static/assets/documents/plc/bill_plc.docx index 5e63f8c..38b0c87 100644 Binary files a/static/assets/documents/plc/bill_plc.docx and b/static/assets/documents/plc/bill_plc.docx differ diff --git a/static/assets/documents/plc/specification_plc.docx b/static/assets/documents/plc/specification_plc.docx index 13153eb..3ba5236 100644 Binary files a/static/assets/documents/plc/specification_plc.docx 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 index da01acc..b2a21a6 100644 Binary files a/static/assets/documents/sp/addition_act_1_sp.docx 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 index 0bd89ea..929a1da 100644 Binary files a/static/assets/documents/sp/addition_act_2_sp.docx and b/static/assets/documents/sp/addition_act_2_sp.docx differ diff --git a/static/assets/documents/sp/bill_sp.docx b/static/assets/documents/sp/bill_sp.docx index 021c43a..e994f44 100644 Binary files a/static/assets/documents/sp/bill_sp.docx and b/static/assets/documents/sp/bill_sp.docx differ diff --git a/static/assets/documents/sp/specification_sp.docx b/static/assets/documents/sp/specification_sp.docx index ec463fa..317e817 100644 Binary files a/static/assets/documents/sp/specification_sp.docx and b/static/assets/documents/sp/specification_sp.docx differ diff --git a/utils/misc.py b/utils/misc.py index 9050bf8..e59704f 100644 --- a/utils/misc.py +++ b/utils/misc.py @@ -26,3 +26,8 @@ class Extension(object): def parse_odoo_datetime(self, datetime: str): return dt.datetime.strptime(datetime, DEFAULT_SERVER_DATETIME_FORMAT) + + def to_fixed(self, number, digit=2): + if isinstance(number, str) and number.isdigit(): + number = float(number) + return format(number, ".{digit}f".format(digit=digit)) diff --git a/views/res_partner_contract_annex.xml b/views/res_partner_contract_annex.xml index 48c76a3..9157dcb 100644 --- a/views/res_partner_contract_annex.xml +++ b/views/res_partner_contract_annex.xml @@ -21,6 +21,7 @@ + diff --git a/wizard/res_partner_contract_wizard.py b/wizard/res_partner_contract_wizard.py index ba94e6d..27770cb 100644 --- a/wizard/res_partner_contract_wizard.py +++ b/wizard/res_partner_contract_wizard.py @@ -1,13 +1,17 @@ import base64 +import logging from odoo import api, fields, models from odoo.exceptions import ValidationError from ..utils import MODULE_NAME from ..utils.docxtpl import get_document_from_values_stream +from ..utils.misc import Extension + +_logger = logging.getLogger(__name__) -class ContractWizard(models.TransientModel): +class ContractWizard(models.TransientModel, Extension): _name = "res.partner.contract.wizard" def _default_target(self): @@ -173,7 +177,6 @@ class ContractWizard(models.TransientModel): 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": @@ -194,19 +197,21 @@ class ContractWizard(models.TransientModel): fields.update( { - "order_products": [ + "products": [ { "number": next(counter), "label": item.product_id.name, + "description": item.product_id.description_sale, "count": item.product_uom_qty, "unit": item.product_uom.name, - "cost": item.price_unit, - "amount": item.price_subtotal, + "cost": self.to_fixed(item.price_unit), + "subtotal": self.to_fixed(item.price_subtotal), } for item in self.target.order_id.order_line or [] - ] + ], + "total_amount": self.to_fixed(sum(self.target.order_id.order_line.mapped("price_subtotal"))) } ) - return fields + return self.middleware_fields(fields) def afterload(self, result): res_id = self.target.id @@ -224,6 +229,18 @@ class ContractWizard(models.TransientModel): return result + def middleware_fields(self, kv): + + # Debug False values + empty = [] + for k,v in list(kv.items()): + if not v: + empty.append(k) + kv.pop(k) + _logger.debug("Empty fields: {}".format(empty)) + + return kv + @property def active_model(self): return self.env.context.get("active_model")