2016-10-24 7 views
4

Мне нужно получить доступное количество продуктов от запаса ооо.Как получить доступное количество продуктов (Odoo v8 и v9)

Есть несколько моделей, в которых я Stock_quant, stock_move, stock_location.

То, что я пытаюсь достичь две вещи:

  1. продукты всего доступного количества
  2. Доступные продукты количество в зависимости от местоположения

Может кто-нибудь, пожалуйста, руководство меня?

ответ

2

Связанные с запасом поля определяются в продуктах (функциональном поле) и непосредственно от продукта, вы можете получить запас для всех складов/мест или для индивидуального местоположения/склада.

Пример:

Для всех складов/местоположения

product = self.env['product.product'].browse(PRODUCT_ID) 
available_qty = product.qty_available 

Для индивидуального местоположения/склада (WAREHOUSE_ID/LOCATION_ID должен быть заменен фактическим идентификатором)

product = self.env['product.product'].browse(PRODUCT_ID) 
available_qty = product.with_context({'warehouse' : WAREHOUSE_ID}).qty_available 

available_qty = product.with_context({'location' : LOCATION_ID}).qty_available 

Другие поля также есть.

Forecasted Stock => virtual_available 
Incoming Stock => incoming 
Outgoing Stock => outgoing 

Вы можете получить доступ ко всем этим полям аналогичным образом. Если вы не передадите какой-либо склад/место в контексте, он будет возвращать запас всех складов вместе.

Для получения более подробной информации вы можете обратиться к product.py в складе модуль.

Решение:

@api.onchange('product_id','source_location') 
def product_qty_location_check(self): 
    if self.product_id and self.source_location: 
     product = self.product_id 
     available_qty = product.with_context({'location' : self.source_location.id}).qty_‌​available 
     print available_qty 
+0

Я написал следующий кусок кода, но он дает ошибку. –

+0

'@ api.onchange (' product_id ',' source_location ') def product_qty_location_check (self): if self.product_id и self.source_location: product = self.env [' product.product ']. product_id.id) available_qty = product.with_context (склад = self.source_location.id) .qty_available печати available_qty» ошибка ** MissingError Одним из документов, которые вы пытаетесь получить доступ, был удален, пожалуйста, попробуйте снова после обновления. ** –

+0

** Спасибо. ** Я должен был послать словарь. –

-2

Для Odoo 8,9 и 10:

with 
    uitstock as (
    select 
     t.name product, sum(product_qty) sumout, m.product_id, m.product_uom 
    from stock_move m 
     left join product_product p on m.product_id = p.id 
     left join product_template t on p.product_tmpl_id = t.id 
    where 
     m.state like 'done' 
     and m.location_id in (select id from stock_location where complete_name like '%Stock%') 
     and m.location_dest_id not in (select id from stock_location where complete_name like '%Stock%') 
    group by product_id,product_uom, t.name order by t.name asc 
), 
    instock as (
    select 
     t.list_price purchaseprice, t.name product, sum(product_qty) sumin, m.product_id, m.product_uom 
    from stock_move m 
     left join product_product p on m.product_id = p.id 
     left join product_template t on p.product_tmpl_id = t.id 
    where 
     m.state like 'done' and m.location_id not in (select id from stock_location where complete_name like '%Stock%') 
     and m.location_dest_id in (select id from stock_location where complete_name like '%Stock%') 
    group by product_id,product_uom, t.name, t.list_price order by t.name asc 
) 
select 
    i.product, sumin-coalesce(sumout,0) AS stock, sumin, sumout, purchaseprice, ((sumin-coalesce(sumout,0)) * purchaseprice) as stockvalue 
from uitstock u 
    full outer join instock i on u.product = i.product