looks like working
This commit is contained in:
parent
9289cb6ea2
commit
bf46d26287
@ -11,7 +11,7 @@
|
|||||||
"category": "Invoicing & Payments",
|
"category": "Invoicing & Payments",
|
||||||
"version": "14.0.1.0.0",
|
"version": "14.0.1.0.0",
|
||||||
"depends": ["base", "contacts", "hr", "l10n_ru", "sale", "sale_margin"],
|
"depends": ["base", "contacts", "hr", "l10n_ru", "sale", "sale_margin"],
|
||||||
"external_dependencies": {"python": ["docxtpl"]},
|
"external_dependencies": {"python": ["docxtpl", "num2words"]},
|
||||||
"data": [
|
"data": [
|
||||||
"data/assets_extension.xml",
|
"data/assets_extension.xml",
|
||||||
"data/fields_default.xml",
|
"data/fields_default.xml",
|
||||||
|
@ -68,8 +68,8 @@ class PartnerContract(models.Model): # , IDocument, Extension):
|
|||||||
default=lambda self: self.date_conclusion,
|
default=lambda self: self.date_conclusion,
|
||||||
)
|
)
|
||||||
contract_annex_ids = fields.One2many(
|
contract_annex_ids = fields.One2many(
|
||||||
"res.partner.contract.annex",
|
comodel_name="res.partner.contract.annex",
|
||||||
"contract_id",
|
inverse_name="contract_id",
|
||||||
string="Annexes",
|
string="Annexes",
|
||||||
help="Annexes to this contract",
|
help="Annexes to this contract",
|
||||||
)
|
)
|
||||||
@ -101,6 +101,7 @@ class PartnerContract(models.Model): # , IDocument, Extension):
|
|||||||
self.write({"state": "draft"})
|
self.write({"state": "draft"})
|
||||||
|
|
||||||
def action_print_form(self):
|
def action_print_form(self):
|
||||||
|
self.ensure_one()
|
||||||
view = self.env.ref(
|
view = self.env.ref(
|
||||||
"{}.res_partner_wizard_print_document_view".format(MODULE_NAME)
|
"{}.res_partner_wizard_print_document_view".format(MODULE_NAME)
|
||||||
)
|
)
|
||||||
@ -121,9 +122,11 @@ class PartnerContract(models.Model): # , IDocument, Extension):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def get_name_by_document_template(self, document_template_id):
|
def get_name_by_document_template(self, document_template_id):
|
||||||
|
self.ensure_one()
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def get_filename_by_document_template(self, document_template_id):
|
def get_filename_by_document_template(self, document_template_id):
|
||||||
|
self.ensure_one()
|
||||||
return _("{type} {number} from {date}").format(
|
return _("{type} {number} from {date}").format(
|
||||||
type=_(
|
type=_(
|
||||||
dict(document_template_id._fields["document_type"].selection).get(
|
dict(document_template_id._fields["document_type"].selection).get(
|
||||||
@ -140,10 +143,12 @@ class PartnerContract(models.Model): # , IDocument, Extension):
|
|||||||
Returns:
|
Returns:
|
||||||
datetime.datetime -- date_conclusion_fix or date_conclusion or create_date
|
datetime.datetime -- date_conclusion_fix or date_conclusion or create_date
|
||||||
"""
|
"""
|
||||||
|
self.ensure_one()
|
||||||
date = self.date_conclusion_fix or self.date_conclusion
|
date = self.date_conclusion_fix or self.date_conclusion
|
||||||
return date or self.create_date
|
return date or self.create_date
|
||||||
|
|
||||||
def _(self, arg):
|
@staticmethod
|
||||||
|
def _(arg):
|
||||||
"""Uses in xml action (data/fields_default)
|
"""Uses in xml action (data/fields_default)
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
@ -8,6 +8,7 @@ from ..utils import MODULE_NAME
|
|||||||
# from ..utils.misc import Extension, IDocument
|
# from ..utils.misc import Extension, IDocument
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ContractOrderAnnex(models.Model): # , IDocument, Extension):
|
class ContractOrderAnnex(models.Model): # , IDocument, Extension):
|
||||||
_name = "res.partner.contract.annex"
|
_name = "res.partner.contract.annex"
|
||||||
_inherit = ["client_contracts.utils"]
|
_inherit = ["client_contracts.utils"]
|
||||||
@ -51,6 +52,7 @@ class ContractOrderAnnex(models.Model): # , IDocument, Extension):
|
|||||||
help="Contract Annexes counter",
|
help="Contract Annexes counter",
|
||||||
)
|
)
|
||||||
currency_id = fields.Many2one(
|
currency_id = fields.Many2one(
|
||||||
|
comodel_name="res.currency",
|
||||||
string="Currency",
|
string="Currency",
|
||||||
default=lambda self: self.env.company.currency_id,
|
default=lambda self: self.env.company.currency_id,
|
||||||
)
|
)
|
||||||
@ -140,16 +142,21 @@ class ContractOrderAnnex(models.Model): # , IDocument, Extension):
|
|||||||
order=order_number,
|
order=order_number,
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.model
|
def create(self, values_list):
|
||||||
def create(self, values):
|
_logger.debug("\n\n Values: %s\n\n", values_list)
|
||||||
_logger.debug("\n\n Values: %s\n\n", values)
|
if isinstance(values_list, dict):
|
||||||
record = super().create(values)
|
values_list = [values_list]
|
||||||
# Fill annex_id to domain it in future
|
_logger.debug("\n\n Values fixed: %s\n\n", values_list)
|
||||||
record.order_id.contract_annex_id = record.id
|
records = super(ContractOrderAnnex, self).create(values_list)
|
||||||
# Counter
|
for record in records:
|
||||||
record.counter = record.contract_id.contract_annex_number
|
# Fill annex_id to domain it in future
|
||||||
record.contract_id.contract_annex_number += 1 # TODO: should I use a sequence?
|
# record.order_id.contract_annex_id = record.id
|
||||||
return record
|
# Counter
|
||||||
|
record.counter = record.contract_id.contract_annex_number
|
||||||
|
record.contract_id.contract_annex_number += (
|
||||||
|
1 # TODO: should I use a sequence?
|
||||||
|
)
|
||||||
|
return records
|
||||||
|
|
||||||
def action_print_form(self):
|
def action_print_form(self):
|
||||||
view = self.env.ref(
|
view = self.env.ref(
|
||||||
|
@ -13,11 +13,12 @@ class ContractField(models.Model):
|
|||||||
)
|
)
|
||||||
technical_name = fields.Char(
|
technical_name = fields.Char(
|
||||||
string="Technical Name",
|
string="Technical Name",
|
||||||
help="Name uses in template",
|
help="Name for using in templates",
|
||||||
required=True,
|
required=True,
|
||||||
)
|
)
|
||||||
description = fields.Char(
|
description = fields.Char(
|
||||||
string="Description",
|
string="Description",
|
||||||
|
help="Description for this field to be showed in fields list in print form creation wizard.",
|
||||||
translate=True,
|
translate=True,
|
||||||
default="",
|
default="",
|
||||||
)
|
)
|
||||||
@ -26,5 +27,7 @@ class ContractField(models.Model):
|
|||||||
)
|
)
|
||||||
visible = fields.Boolean(
|
visible = fields.Boolean(
|
||||||
string="Visible",
|
string="Visible",
|
||||||
|
help="To show this field in fields list in print form creation wizard\n"
|
||||||
|
"User can change showed field's values in wizard.",
|
||||||
default=True,
|
default=True,
|
||||||
)
|
)
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
|
||||||
access_contracts_contracts,access_contracts_contracts,model_res_partner_contract,base.group_user,1,1,1,1
|
access_contracts_contracts,access_contracts_contracts,model_res_partner_contract,base.group_user,1,1,1,1
|
||||||
|
|
||||||
access_contracts_field,access_contracts_field,model_res_partner_contract_field,base.group_user,1,0,0,0
|
access_contracts_field,access_contracts_field,model_res_partner_contract_field,base.group_user,1,0,0,0
|
||||||
|
access_contracts_field_manager,access_contracts_field,model_res_partner_contract_field,base.group_no_one,1,1,1,1
|
||||||
|
|
||||||
access_contracts_field_transient,access_contracts_field_transient,model_res_partner_contract_field_transient,base.group_user,1,1,1,1
|
access_contracts_field_transient,access_contracts_field_transient,model_res_partner_contract_field_transient,base.group_user,1,1,1,1
|
||||||
access_contracts_field_contract_annex,access_contracts_field_contract_annex,model_res_partner_contract_annex,base.group_user,1,1,1,1
|
access_contracts_field_contract_annex,access_contracts_field_contract_annex,model_res_partner_contract_annex,base.group_user,1,1,1,1
|
||||||
access_contract_document_template,access_contract_document_template,model_res_partner_document_template,base.group_user,1,0,0,0
|
access_contract_document_template,access_contract_document_template,model_res_partner_document_template,base.group_user,1,0,0,0
|
||||||
access_contract_document_template_manager,access_contract_document_template,model_res_partner_document_template,hr.group_hr_manager,1,1,1,1
|
access_contract_document_template_manager,access_contract_document_template,model_res_partner_document_template,base.group_no_one,1,1,1,1
|
||||||
access_contracts_wizard,access_contracts_wizard,model_res_partner_contract_wizard,base.group_user,1,1,1,1
|
access_contracts_wizard,access_contracts_wizard,model_res_partner_contract_wizard,base.group_user,1,1,1,1
|
||||||
|
|
@ -1,312 +0,0 @@
|
|||||||
# 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 >
|
|
||||||
< 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
|
|
@ -23,13 +23,13 @@ from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_
|
|||||||
class Utils(models.AbstractModel):
|
class Utils(models.AbstractModel):
|
||||||
_name = "client_contracts.utils"
|
_name = "client_contracts.utils"
|
||||||
|
|
||||||
'''@staticmethod
|
"""@staticmethod
|
||||||
def parse_odoo_date(date: str):
|
def parse_odoo_date(date: str):
|
||||||
return dt.datetime.strptime(date, DEFAULT_SERVER_DATE_FORMAT)
|
return dt.datetime.strptime(date, DEFAULT_SERVER_DATE_FORMAT)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_odoo_datetime(datetime: str):
|
def parse_odoo_datetime(datetime: str):
|
||||||
return dt.datetime.strptime(datetime, DEFAULT_SERVER_DATETIME_FORMAT)'''
|
return dt.datetime.strptime(datetime, DEFAULT_SERVER_DATETIME_FORMAT)"""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def to_fixed(number, digit=2):
|
def to_fixed(number, digit=2):
|
||||||
|
@ -13,7 +13,7 @@ from num2words import CONVERTER_CLASSES, CONVERTES_TYPES
|
|||||||
|
|
||||||
# Jinja2 Global Method
|
# Jinja2 Global Method
|
||||||
def num2words_(number, **kwargs):
|
def num2words_(number, **kwargs):
|
||||||
if _performConvert(number):
|
if _perform_convert(number):
|
||||||
if "lang" not in kwargs:
|
if "lang" not in kwargs:
|
||||||
kwargs["lang"] = "ru"
|
kwargs["lang"] = "ru"
|
||||||
if "to" not in kwargs or kwargs["to"] not in CONVERTES_TYPES:
|
if "to" not in kwargs or kwargs["to"] not in CONVERTES_TYPES:
|
||||||
@ -23,7 +23,7 @@ def num2words_(number, **kwargs):
|
|||||||
|
|
||||||
# Jinja2 Global Method
|
# Jinja2 Global Method
|
||||||
def num2words_currency(number, **kwargs):
|
def num2words_currency(number, **kwargs):
|
||||||
if _performConvert(number):
|
if _perform_convert(number):
|
||||||
if "lang" not in kwargs:
|
if "lang" not in kwargs:
|
||||||
kwargs["lang"] = "ru"
|
kwargs["lang"] = "ru"
|
||||||
if "to" not in kwargs or kwargs["to"] not in CONVERTES_TYPES:
|
if "to" not in kwargs or kwargs["to"] not in CONVERTES_TYPES:
|
||||||
@ -34,7 +34,6 @@ def num2words_currency(number, **kwargs):
|
|||||||
total = result.split(",")[0]
|
total = result.split(",")[0]
|
||||||
part_word = result.split()[-1]
|
part_word = result.split()[-1]
|
||||||
part_number = Decimal(str(number)) % 1
|
part_number = Decimal(str(number)) % 1
|
||||||
|
|
||||||
return "{total}, {part_n} {part_w}".format(
|
return "{total}, {part_n} {part_w}".format(
|
||||||
total=total.capitalize(),
|
total=total.capitalize(),
|
||||||
part_n="{:02d}".format(int(part_number * 100)),
|
part_n="{:02d}".format(int(part_number * 100)),
|
||||||
@ -42,15 +41,13 @@ def num2words_currency(number, **kwargs):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _performConvert(number):
|
def _perform_convert(number):
|
||||||
if isinstance(number, int) or isinstance(number, float):
|
if isinstance(number, int) or isinstance(number, float):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if isinstance(number, str):
|
if isinstance(number, str):
|
||||||
try:
|
try:
|
||||||
number = float(number)
|
number = float(number)
|
||||||
return True
|
return True
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
@ -41,8 +41,12 @@
|
|||||||
<!-- Uses to generate number of Annex -->
|
<!-- Uses to generate number of Annex -->
|
||||||
<field name="contract_annex_number" invisible="1"/>
|
<field name="contract_annex_number" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Annexed Specifications" name="annexes" attrs="{'invisible': ['|', ('id', '=', False), ('state', 'in', 'draft')]}">
|
<group string="Annexed Specifications" name="annexes"> <!--attrs="{'invisible': ['|', ('id', '=', False), ('state', 'in', 'draft')]}"-->
|
||||||
<field name="contract_annex_ids" nolabel="1">
|
<field name="contract_annex_ids"
|
||||||
|
nolabel="1"
|
||||||
|
mode="tree"
|
||||||
|
attrs="{'readonly': ['|', ('id', '=', False), ('state', 'in', 'draft')]}"
|
||||||
|
>
|
||||||
<tree>
|
<tree>
|
||||||
<field name="display_name" string="Name"/>
|
<field name="display_name" string="Name"/>
|
||||||
<button name="action_print_form" type="object" string="Print" attrs="{'invisible': [('id', '=', False)]}"/>
|
<button name="action_print_form" type="object" string="Print" attrs="{'invisible': [('id', '=', False)]}"/>
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
import pdb
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from odoo import api, fields, models
|
from odoo import api, fields, models, _
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError, UserError
|
||||||
|
|
||||||
from ..utils import MODULE_NAME
|
from ..utils import MODULE_NAME
|
||||||
from ..utils.docxtpl import get_document_from_values_stream
|
from ..utils.docxtpl import get_document_from_values_stream
|
||||||
@ -17,10 +19,15 @@ class ContractWizard(models.TransientModel): # , Extension):
|
|||||||
_inherit = ["client_contracts.utils"]
|
_inherit = ["client_contracts.utils"]
|
||||||
|
|
||||||
def _default_target(self):
|
def _default_target(self):
|
||||||
_logger.debug("\n\n model: %s | id: %s \n\n", self.env.context.get("active_model"), self.env.context.get("self_id"))
|
_logger.debug(
|
||||||
|
"\n\n model: %s | id: %s \n\n",
|
||||||
|
self.env.context.get("active_model"),
|
||||||
|
self.env.context.get("self_id"),
|
||||||
|
)
|
||||||
return "{model},{target_id}".format(
|
return "{model},{target_id}".format(
|
||||||
# model=self.active_model, target_id=int(self.env.context.get("self_id"))
|
# model=self.active_model, target_id=int(self.env.context.get("self_id"))
|
||||||
model=self.env.context.get("active_model"), target_id=int(self.env.context.get("self_id"))
|
model=self.env.context.get("active_model"),
|
||||||
|
target_id=int(self.env.context.get("self_id")),
|
||||||
)
|
)
|
||||||
|
|
||||||
def _default_document_template(self):
|
def _default_document_template(self):
|
||||||
@ -114,12 +121,22 @@ class ContractWizard(models.TransientModel): # , Extension):
|
|||||||
Looks as a tree view of *_contract_field_transient model in xml
|
Looks as a tree view of *_contract_field_transient model in xml
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_contract_field(technical_name):
|
def get_contract_field_data(field_name, field_value):
|
||||||
return self.env["res.partner.contract.field"].search(
|
rec = self.env["res.partner.contract.field"].search(
|
||||||
[
|
[("technical_name", "=", field_name)]
|
||||||
("technical_name", "=", technical_name),
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
if not rec:
|
||||||
|
raise UserError(
|
||||||
|
_(
|
||||||
|
'Field "%s" specified in template, not found in model "res.partner.contract.field"'
|
||||||
|
)
|
||||||
|
% field_name
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
"contract_field_id": rec.id,
|
||||||
|
"visible": rec.visible,
|
||||||
|
"value": field_value,
|
||||||
|
}
|
||||||
|
|
||||||
model_to_action = {
|
model_to_action = {
|
||||||
"res.partner.contract": "action_get_contract_context",
|
"res.partner.contract": "action_get_contract_context",
|
||||||
@ -133,6 +150,37 @@ class ContractWizard(models.TransientModel): # , Extension):
|
|||||||
self.env.ref(action).with_context({"onchange_self": self.target}).run()
|
self.env.ref(action).with_context({"onchange_self": self.target}).run()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
transient_fields_data = [
|
||||||
|
get_contract_field_data(field_name, field_value)
|
||||||
|
for field_name, field_value in contract_context_values.items()
|
||||||
|
]
|
||||||
|
transient_fields_hidden_data = list(
|
||||||
|
filter(lambda item: not item["visible"], transient_fields_data)
|
||||||
|
)
|
||||||
|
transient_fields_data = list(
|
||||||
|
filter(lambda item: item["visible"], transient_fields_data)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.transient_field_ids = [
|
||||||
|
(
|
||||||
|
6,
|
||||||
|
False,
|
||||||
|
self.env["res.partner.contract.field.transient"]
|
||||||
|
.create(transient_fields_data)
|
||||||
|
.ids,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
self.transient_field_ids_hidden = [
|
||||||
|
(
|
||||||
|
6,
|
||||||
|
False,
|
||||||
|
self.env["res.partner.contract.field.transient"]
|
||||||
|
.create(transient_fields_hidden_data)
|
||||||
|
.ids,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
"""
|
||||||
self.transient_field_ids = [ # one2many
|
self.transient_field_ids = [ # one2many
|
||||||
(
|
(
|
||||||
4,
|
4,
|
||||||
@ -159,6 +207,7 @@ class ContractWizard(models.TransientModel): # , Extension):
|
|||||||
self.transient_field_ids = (
|
self.transient_field_ids = (
|
||||||
self.transient_field_ids - self.transient_field_ids_hidden
|
self.transient_field_ids - self.transient_field_ids_hidden
|
||||||
)
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
# Other
|
# Other
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user