Как обновить место назначения выбранных строк в Odoo V8 - PullRequest
0 голосов
/ 07 марта 2019

У меня проблема в функции Python для обновления места назначения выбранных строк в заказе на доставку.

Это мой javascript для выбора строк (в JS я вызываю функцию update_locations ()):

openerp.web_one2many_selectable = function(instance, m) 
{
var _t = instance.web._t,
    _lt = instance.web._lt;
QWeb = instance.web.qweb;

instance.web.form.widgets = instance.web.form.widgets.extend(
{
    'one2many_selectable' : 'instance.web.form.One2ManySelectable',
});

instance.web.form.One2ManySelectable = 
instance.web.form.FieldOne2Many.extend(
{
    multi_selection: true,
    start: function() 
    {
        this._super.apply(this, arguments);
        var self=this;
        self.on("change:effective_readonly", this, function(){
            if(this.get("effective_readonly"))
                self.$(".ep_button_confirm").attr("disabled", "");
            else
                self.$(".ep_button_confirm").removeAttr("disabled", "");
        });
        this.$el.prepend(QWeb.render("One2ManySelectable", {widget: this}));
        this.$el.find(".ep_button_confirm").click(function(){
            self.action_selected_lines();
        });
   },

   action_selected_lines: function()
   {
       var self=this;
       selected_ids=self.get_selected_ids_one2many();

        var model_obj=new instance.web.Model("stock.picking");
        model_obj.call('update_locations',
                    [selected_ids],{context:self.dataset.context})
        .then(function(result){
        });

   },
   get_selected_ids_one2many: function ()
   {
       var ids =[];
       this.$el.find('th.oe_list_record_selector input:checked')
               .closest('tr').each(function () {
                ids.push(parseInt($(this).context.dataset.id));
       });
       return ids;
   },
}); 
}

А вот мой Class Python (я думаю, проблема в функции update_locations ()):

from openerp import models, fields, api


class stock_picking(models.Model):
_inherit = 'stock.picking'

new_location_dest_id = fields.Many2one(
    'stock.location', 'Destination Location',
    readonly=True,
    states={
        'draft': [('readonly', False)],
        'waiting': [('readonly', False)],
        'confirmed': [('readonly', False)],
        },
    help="Location where the system will stock the finished products. This will be the default of the associated stock moves.")

@api.one
def update_locations(self):
    vals = {
        'location_dest_id': self.new_location_dest_id.id
        }
    self.move_lines.write(vals)

Когда я выбираю несколько строк, указываю место назначения и нажимаю на кнопку для изменения пункта назначения. появляется сообщение об ошибке:

Odoo MissingError Один из документов, к которым вы пытаетесь получить доступ, был удален, повторите попытку после обновления

Я доступен для получения дополнительной информации, Спасибо за вашу помощь, ребята.

1 Ответ

0 голосов
/ 15 марта 2019

Я думаю, что вам не нужен javascript, просто небольшой модуль с мастером, написанный только на python и xml.В исходном коде самого Odoo их много в качестве примеров, просто посмотрите на используемую модель models.TransientModel.

...