diff --git a/models/res_partner_contract_annex.py b/models/res_partner_contract_annex.py index 7665048..cf3f4da 100755 --- a/models/res_partner_contract_annex.py +++ b/models/res_partner_contract_annex.py @@ -1,11 +1,12 @@ import math +import logging from odoo import _, api, fields, models from ..utils import MODULE_NAME # from ..utils.misc import Extension, IDocument - +_logger = logging.getLogger(__name__) class ContractOrderAnnex(models.Model): # , IDocument, Extension): _name = "res.partner.contract.annex" @@ -141,6 +142,7 @@ class ContractOrderAnnex(models.Model): # , IDocument, Extension): @api.model def create(self, values): + _logger.debug("\n\n Values: %s\n\n", values) record = super().create(values) # Fill annex_id to domain it in future record.order_id.contract_annex_id = record.id diff --git a/utils/contract_context_values.py b/utils/contract_context_values.py new file mode 100644 index 0000000..8067ad7 --- /dev/null +++ b/utils/contract_context_values.py @@ -0,0 +1,312 @@ +# Aliases +self = record # res.partner.contract + +partner = self.partner_id # res.partner +seller = self.company_id + +# Functions +_ = self._ +get_date = self.get_date + +# Parse date +months = ["", + "января", "февраля", "марта", "апреля", + "мая", "июня", "июля", "августа", + "сентября", "октября", "ноября", "декабря", + ] +date = get_date() +dd = date.day +mm = date.month +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, + + "dd": dd, + "mm": mm, + "MM": MM, + "yy": yy, + "yyyy": yyyy, + + "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_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, +} + +seller_bank = seller.bank_ids and seller.bank_ids[0] +if seller_bank: + bank = seller_bank.bank_id + bank_name = bank and bank.name or "" + bank_city = "г. {city}".format(city=bank.city) if bank and bank.city else "" + seller_bank_name = "{} {}".format(bank_name, bank_city).strip() + + ctx.update({ + "seller_bank": seller_bank_name, + "seller_rs": seller_bank.acc_number, + "seller_ks": bank.corr_account, + "seller_bic": bank.bic, + }) + +partner_bank = partner.bank_ids and partner.bank_ids[0] +if partner_bank: + bank = partner_bank.bank_id + bank_name = bank and bank.name or "" + bank_city = "г. {city}".format(city=bank.city) if bank and bank.city else "" + partner_bank_name = "{} {}".format(bank_name, bank_city).strip() + + ctx.update({ + "partner_bank": partner_bank_name, + "partner_rs": partner_bank.acc_number, + "partner_ks": bank.corr_account, + "partner_bic": bank.bic, + }) + +# 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({ + "partner_company_form": _(dict(partner._fields['company_form'].selection).get(partner.company_form)), + "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, + }) + + if partner.company_form == 'sp': + # Sole Proprietor + ctx.update({ + "partner_ip_number": partner.sp_register_number, + "partner_ip_date": partner.sp_register_date, + "partner_ogrnip": partner.psrn_sp, + "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 + ctx.update({ + "partner_kpp": partner.iec, + "partner_ogrn": partner.psrn, + }) + +action = ctx +< / field > +< / record > + +< !-- Action --> +< record +id = "action_get_annex_context" +model = "ir.actions.server" > +< field +name = "name" > Generate +Context +for Annex +< field +name = "model_id" +ref = "client_contracts.model_res_partner_contract_wizard" / > +< field +name = "binding_model_id" +ref = "client_contracts.model_res_partner_contract_wizard" / > +< field +name = "state" > code < / field > +< field +name = "code" > + +# Aliases +self = record # res.partner.contract.annex + +seller = self.company_id +partner = self.partner_id + +# Functions +_ = self.contract_id._ +get_date = self.contract_id.get_date + +# Parse date +months = ["", + "января", "февраля", "марта", "апреля", + "мая", "июня", "июля", "августа", + "сентября", "октября", "ноября", "декабря", + ] +date = get_date() +dd = date.day +mm = date.month +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.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), + + "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, + "payment_part_three": self.payment_part_three, + "delivery_period": self.delivery_period, + + "dd": dd, + "mm": mm, + "MM": MM, + "yy": yy, + "yyyy": yyyy, + + "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, + "seller_ogrn": seller.psrn, + "seller_business_address": seller.full_address, + "seller_phone": seller.phone, + "seller_email": seller.email, + + "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, + "partner_business_address": partner.full_address, + "partner_phone": partner.phone, + "partner_email": partner.email, +} + +seller_bank = seller.bank_ids and seller.bank_ids[0] +if seller_bank: + bank = seller_bank.bank_id + bank_name = bank and bank.name or "" + bank_city = "г. {city}".format(city=bank.city) if bank and bank.city else "" + seller_bank_name = "{} {}".format(bank_name, bank_city).strip() + + ctx.update({ + "seller_bank": seller_bank_name, + "seller_rs": seller_bank.acc_number, + "seller_ks": bank.corr_account, + "seller_bic": bank.bic, + }) + +partner_bank = partner.bank_ids and partner.bank_ids[0] +if partner_bank: + bank = partner_bank.bank_id + bank_name = bank and bank.name or "" + bank_city = "г. {city}".format(city=bank.city) if bank and bank.city else "" + partner_bank_name = "{} {}".format(bank_name, bank_city).strip() + + ctx.update({ + "partner_bank": partner_bank_name, + "partner_rs": partner_bank.acc_number, + "partner_ks": bank.corr_account, + "partner_bic": bank.bic, + }) + +# 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": _(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': + # Sole Proprietor + ctx.update({ + "partner_ip_number": partner.sp_register_number, + "partner_ip_date": partner.sp_register_date, + "partner_ogrnip": partner.psrn_sp, + "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, + }) + if partner.company_form == 'plc': + # Private Limited Company + ctx.update({ + "partner_kpp": partner.iec, + "partner_ogrn": partner.psrn, + }) + +action = ctx \ No newline at end of file diff --git a/wizard/res_partner_contract_wizard.xml b/wizard/res_partner_contract_wizard.xml index 2890da8..febf2be 100755 --- a/wizard/res_partner_contract_wizard.xml +++ b/wizard/res_partner_contract_wizard.xml @@ -10,11 +10,12 @@ + - +