Odoo V11 - Как я могу заставить вычисляемое поле, как редактировать вручную - PullRequest
0 голосов
/ 23 октября 2018

У меня есть вычисляемое поле в модели 'hr.payslip'.

cumulative_income_tax_base_previous = fields.Float(string="Kümülatif 
   Gelir Vergisi Matrahı" 
   compute='_get_previous_payslip_fields',store=True)

Я хочу отредактировать это поле в соответствии с другим полем (тип является логическим) в той же модели.

first_access = fields.Boolean(string="İlk bordro girişi mi ?", 
default=False)

Если для этого поля установлено значение true, я хочу редактировать вычисляемое вручную поле.В представлении формы я установил атрибут readonly: True для моего вычислительного поля.

<xpath expr="//group[@name='accounting']" position="after">
   <group name="other_calculation" string="Dİğer Hesaplamalar">
       <field name="first_access"/>
       <field name="cumulative_income_tax_base_previous"
            attrs="{'readonly':[('first_access', '!=', True)], 
                    'required': [('first_access', '=', True)]}"/>

   </group>
 </xpath>

Но я не учился в классе питона.Когда я редактирую его вручную, он присваивается нулю.Как я могу решить эту проблему

@api.one
@api.depends('employee_id', 'date_from', 'date_to', 'first_access')
def _get_previous_payslip_fields(self):            
 for record in self:
    if record.employee_id and record.date_from and record.date_to 
          and not record.line_ids:

        .... (some codes)

        payslip_object = self.env['hr.payslip'].search(domain, 

        order='id desc', limit=1)


        if payslip_object and not record.first_access:  

          record.gv_rate_init_previous=payslip_object['gv_rate_init']

          record.cumulative_income_tax_base_previous = 
                   payslip_object['cumulative_income_tax_base']
        else:
             ... ? ( When the first access field is set True)

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Просто добавьте в xml force_save = "1" и сохраните = True в Python: например:

  1. XML:

    <field name="your_field"  force_save="1"/>
    
  2. Python:

    your_fields = fields.Float("Your field", compute=compute_method, store=True)
    
0 голосов
/ 23 октября 2018

Вы должны добавить параметр inverse в объявлении поля Python, например:

cumulative_income_tax_base_previous = fields.Float(string="Kümülatif 
Gelir Vergisi Matrahı" 
compute='_get_previous_payslip_fields',
inveres='_set_previous_payslip_fields',
store=True)

См. Документацию: https://www.odoo.com/documentation/11.0/reference/orm.html#computed-fields

...