Пользовательский модуль Odoo исправить строку заказа налогов? - PullRequest
0 голосов
/ 15 января 2020

Я пользователь 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')
'''

Может быть, может повлиять на что-то?

1 Ответ

1 голос
/ 16 января 2020

Чтобы добавить налог, используйте:

'tax_id' : [(4, account.tax.id)]

Чтобы получить историю цен в текущем заказе, добавьте order.id в качестве ключа к priceHistory.

priceHistory = {'order_id1': {'product_id1': ..., 'product_id2': ...}, ...}

Посмотрите на Таблица product_price_history, в которой отслеживаются стандартные цены product.template по мере их изменения.

...