Odoo 12 - Работа с глобальной переменной default_foo (res.config.settings) - PullRequest
0 голосов
/ 15 марта 2020

Из различных сообщений на этом сайте у меня есть следующий код (ниже разделителя), который работает для создания глобальной переменной. Однако вся онлайн-справка, такая как https://odoo-development.readthedocs.io/en/latest/dev/py/res.config.settings.html#default -xxx , содержит инструкции по настройке TODO.

Часть первая вопроса, как мне установить default_paper_markup из файла запуска, на который ссылаются как data / pse_data. xml в манифесте? Я хотел бы, чтобы этот набор был таким любой будущий импорт мог бы извлечь из этого выгоду.

Вторая часть вопроса, когда я хочу применить default_paper_markup в формуле
т.е. total_price = total_cost * default_paper_markup?
Использую ли я default_paper_markup (поскольку, как мне кажется, для полей default_ * не требуется get_value () / set_value () для извлечения / сохранения), или я использую paper_markup из моего модуля как глобальный переменная? То же самое относится и к копированию его в поле позиции оценки (например, заказа на продажу), чтобы оно стало историческим?

ОБНОВЛЕНИЕ: С https://github.com/odoo/odoo/blob/11.0/odoo/addons/base/res/res_config.py, "Метод default_get извлекает значения, которые отражают текущее состояние полей, таких как 'default_XXX ',' group_XXX 'и' module_XXX '. Он также вызывает все методы с именем, которое начинается с' get_default_ '; такие методы могут быть определены для предоставления текущих значений для других полей. " Означает ли это, что я должен записать default_get(how?) или get_default_paper_markup(how?) в локальную переменную, прежде чем использовать ее в методе, выполняющем вычисления? / UPDATE

Часть третья вопроса , как примечание, при поиске в Odoo 12 CE значения default_ во всех res_config_settings. * Ничего не возвращает. Это сейчас устарело или просто не используется? Я не должен использовать это и только использовать функции? Например, используя соответствующее поле, выполните поиск quotation_validity_days в следующем формате: addons / sale / models /


res_config_settings.py

class ResConfigSettings(models.TransientModel):

    _inherit = 'res.config.settings'

    default_paper_markup = fields.Float(
        default_model='pse.paper'
    )

res_config_settings_views. xml

    <record id="res_config_settings_view_form" model="ir.ui.view">
        <field name="name">res.config.settings.view.form.inherit.pse</field>
        <field name="model">res.config.settings</field>
        <field name="priority" eval="70"/>
        <field name="inherit_id" ref="base.res_config_settings_view_form"/>
        <field name="arch" type="xml">
            <xpath expr="//div[hasclass('settings')]" position="inside">
                <div class="app_settings_block" data-string="PSE Data-String" string="PSE" data-key="pse" groups="pse.group_pse_manager">
                    <h2>Paper</h2>
                    <div class="row mt16 o_settings_container">
                        <div class="col-xs-12 col-md-6 o_setting_box">
                            <div class="o_setting_right_pane">
                                <label for="default_paper_markup"/>
                                <div class="row">
                                    <div class="text-muted col-lg-8">
                                        Markup of cost for reselling paper
                                    </div>
                                </div>
                                <div class="content-group">
                                    <div class="mt16">
                                        <field name="default_paper_markup" class="o_light_label"/>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </xpath>
        </field>
    </record>

    <record id="pse_config_settings_action" model="ir.actions.act_window">
        <field name="name">Settings</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">res.config.settings</field>
        <field name="view_mode">form</field>
        <field name="target">inline</field>
        <field name="context">{'module' : 'pse'}</field>
    </record>

    <menuitem id="pse_menu_configuration"
        name="Settings"
        parent="menu_pse_configuration"
        sequence="0"
        action="pse_config_settings_action"
        groups="base.group_system"/>
</odoo>

my_model.py

    paper_markup = fields.Float(string='Markup')

1 Ответ

0 голосов
/ 17 марта 2020

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

res_config_settings.py

class ResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    paper_markup = fields.Float(
        string='Markup',
        digits=(2, 2),
        default=1.0
    )

    @api.multi
    def get_values(self):
        res = super(ResConfigSettings, self).get_values()
        res.update(
            paper_markup=float(self.env['ir.config_parameter'].sudo().get_param('pse.paper_markup'))
        )
        return res

    def set_values(self):
        super(ResConfigSettings, self).set_values()
        self.env['ir.config_parameter'].sudo().set_param('pse.paper_markup', Decimal(self.paper_markup))

res_config_settings_views. xml

...
<field name="paper_markup" class="o_light_label"/>
...

Следующие ответы часть первая делать вещи таким образом. (не забудьте добавить к манифесту)
module_data. xml

        <!-- Settings to enable -->
        <record id="config_pse_paper_markup" model="ir.config_parameter">
            <field name="key">pse.paper_markup</field>
            <field name="value">1.25</field>
        </record>

Следующие ответы часть вторая поступая таким образом.
(имя_модуля) .py

    markup = fields.Float(
        string='Cost Markup',
        help="The markup to be applied to the cost.",
        compute='_compute_markup',
        store=False
    )

    price1 = fields.Float(
        string='The Price',
        help="The resell price for paper.",
        compute='_compute_price1',
        store=False,
        inverse='_inverse_price1',
        search='_search_price1'
    )

    # ***** Compute and search fields, in the same order of fields declaration *****
    @api.multi
    def _compute_markup(self):
        for record in self:
            record.markup = float(self.env['ir.config_parameter'].sudo().get_param('pse.paper_markup'))

    @api.multi
    @api.depends('markup')
    def _compute_price1(self):
        for record in self:
            record.price1 = record.standard_price * record.markup
...