Odoo 10 - Расчетное поле (часть 2) - PullRequest
0 голосов
/ 08 октября 2018

Вот поля моего класса и моей функции вычисления:

half_pension = fields.Boolean(string='School catering', copy=False)
half_pension_begin_date = fields.Date(string='Start date school catering', copy=False)
half_pension_end_date = fields.Date(string='End date school catering', copy=False)
half_pension_id = fields.Many2one(comodel_name="ecole.halfpension.school", string="Restoration Place")
half_pension_days_value = fields.Integer(string='Days value', copy=False, store=True)
half_pension_binary_value = fields.Char(string='Binary value', copy=False, store=True)
half_pension_monday = fields.Boolean(string='Monday', copy=False, store=False, compute='convert_bin_dec')
half_pension_tuesday = fields.Boolean(string='Tuesday', copy=False, store=False, compute='convert_bin_dec')
half_pension_wednesday = fields.Boolean(string='Wednesday', copy=False, readonly="1")
half_pension_thursday = fields.Boolean(string='Thursday', copy=False, store=False, compute='convert_bin_dec')
half_pension_friday = fields.Boolean(string='Friday', copy=False, store=False, compute='convert_bin_dec')




# Function that converts to binary and synchronize a value in binary and days of the week
    @api.depends('half_pension_days_value')
    @api.onchange('half_pension',
                  'half_pension_monday',
                  'half_pension_tuesday',
                  'half_pension_thursday',
                  'half_pension_friday')
    def convert_bin_dec(self):
        for record in self:
            if record.half_pension:
                if record.half_pension_days_value != 0:
                    print "J'ai un nombre décimal"
                    # On transforme le total en valeur binaire (deviens string)
                    values = dec2bin(record.half_pension_days_value, 7)
                    record.half_pension_binary_value = values

                    list_values = []
                    for lettre in values:
                        list_values.append(lettre)

                    print list_values

                    # # On sépare dans des variables nos valeurs
                    if list_values[6] != '0':
                        record.half_pension_monday = True
                    else:
                        record.half_pension_monday = False
                    if list_values[5] != '0':
                        record.half_pension_tuesday = True
                    else:
                        record.half_pension_tuesday = False
                    if list_values[4] != '0':
                        record.half_pension_wednesday = True
                    else:
                        record.half_pension_wednesday = False
                    if list_values[3] != '0':
                        record.half_pension_thursday = True
                    else:
                        record.half_pension_thursday = False
                    if list_values[2] != '0':
                        record.half_pension_friday = True
                    else:
                        record.half_pension_friday = False
                # on récupère les valeur booleenne pour chaque enregistrement
                value_monday = record.half_pension_monday
                value_tuesday = record.half_pension_tuesday
                value_thursday = record.half_pension_thursday
                value_friday = record.half_pension_friday

                # On assigne une valeur si c'est True ou False à chaque jours
                if value_monday:
                    monday_decimal = 1
                else:
                    monday_decimal = 0

                if value_tuesday:
                    tuesday_decimal = 2
                else:
                    tuesday_decimal = 0

                if value_thursday:
                    thursday_decimal = 8
                else:
                    thursday_decimal = 0

                if value_friday:
                    friday_decimal = 16
                else:
                    friday_decimal = 0

                # On fait le total
                total_decimal = monday_decimal + tuesday_decimal + thursday_decimal + friday_decimal
                record.half_pension_days_value = total_decimal

                # On transforme le total en valeur binaire (deviens string)
                values = dec2bin(total_decimal, 7)
                record.half_pension_binary_value = values

                # On met le statut de l'inscription a 2 pour l'inscription cantine
                record.status_ws = "2"
            else:
                record.half_pension_days_value = 0
                record.half_pension_binary_value = "0000000"
                record.status_ws = "3"

Функция почти завершена.Это работает.

Проблема в том, что с одной стороны я хочу вычислить значения моих логических значений (на основе десятичного числа, зарегистрированного в базе в поле "half_pension_days_value") и, наоборот, вычислилзначение поля "half_pension_days_value" согласно проверенному логическому значению.

В настоящее время мой код работает, если я выбираю значение.Это также сработало, когда я поставил галочку в будние дни (но не остался, когда вернулся, чтобы отредактировать свою запись).Если я просто использую декоратор onchange ('half_pension_days_value'), мои булевы дни недели по-прежнему имеют значение False.

Вот изображение, которое лучше понять:

enter image description here

Пример. В настоящее время, если я изменю значение дней на 3, будут проверяться понедельник и вторник.Это хорошо, за исключением того, что я хотел бы проверить это сам (в настоящее время только для чтения).Я не знаю, если я достаточно ясно, не стесняйтесь, дайте мне знать.

сердечно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...