Я пользователь Odoo (не разработчик). У меня есть пользовательский модуль, в котором есть 2 ошибки, я пытаюсь понять, как исправить ошибки, но я не могу найти решение. Я думаю, что код заинтересован в файле модели. Модуль, путем сканирования штрих-кода в настраиваемом поле, добавляет строку продукта в Заказ с продуктом, Описание, Кол-во, Цена за единицу, но без учета налогов. Если один и тот же штрих-код продукта сканируется дольше, увеличивается количество в той же линейке продуктов. Первая ошибка: не добавлять налоги, у меня есть линейка продуктов без налогов. Я видел внутри кода, и нет никакой команды, которая вызывает налоги. Второй ошибкой является удержание цены. Модуль позволяет добавлять и обновлять цену вручную путем сканирования штрих-кода настраиваемого поля, а внутри кода есть команда для удержания последнего обновления значения цены. Без этого, если продукт будет отсканирован снова, вернитесь к цене odoo. Проблемы в том, что значение удерживающей цены не разблокируется, когда я go из текущего заказа, поэтому, если я создам новый заказ или обновлю существующий заказ, применяется пользовательский модуль, применяется значение цены, сохраненное в предыдущем заказе, а не цена продукта odoo.
------------ Первая часть кода:
# added the price history map
priceHistory = {}
class SaleOrder(models.Model):
"""Inherit Sale Order."""
_inherit = "sale.order"
barcode = fields.Char(string='Barcode', size=50)
def _add_product(self, product, qty, price):
"""Add line or update qty and price based on barcode."""
corresponding_line = self.order_line.filtered(lambda r: r.product_id.id == product.id)
if corresponding_line:
corresponding_line[0].product_uom_qty += float(qty)
corresponding_line[0].price_unit = float(price) or product.list_price
else:
self.order_line += self.order_line.new({
'product_id': product.id,
'product_uom_qty': qty,
'name': product.name,
'product_uom': product.uom_id.id,
'price_unit': float(price) or product.list_price,
})
return True
Здесь я попытался добавить:
'tax_id' : account.tax
ниже строки
'price_unit': float(price) or product.list_price,
но не работает.
------------ Последняя часть кода
if product_id:
# get the history price
if price_position == -1:
#if priceHistory.has_key(product_id.id):
if product_id.id in priceHistory.keys():
price = priceHistory[product_id.id]
self._add_product(product_id, qty, price)
self.barcode = barcode = None
#save the product price
priceHistory[product_id.id] = price
return
Здесь, если я удаляю:
#save the product price
priceHistory[product_id.id] = price
, я могу решить проблему оставшейся стоимости в цене, но создаю новую проблему: если модуль добавляет продукт с новой сопоставленной ценой, а затем снова добавляет тот же продукт без цена совпадает, в той же линейке продуктов количество увеличивается, но предыдущее значение цены заменяется на цену odoo. Поэтому мне нужно, чтобы последняя цена товара обновлялась вручную с помощью моего пользовательского модуля во время добавления продуктов (как в настоящее время модуль делает), но priceHistory должен быть удален, когда я go из текущего ордера. Кто-нибудь может дать какие-либо предложения для решения этой проблемы? Большое спасибо
Я забыл, в оригинальном файле после кода, который я разместил, есть также эта часть кода:
'''
class SaleOrderLine(models.Model):
"""Inherit Sale Order Line."""
_inherit = "sale.order.line"
barcode = fields.Char(string='Barcode')
'''
Может быть, может повлиять на что-то?