Skip to Content
Odoo Меню
  • Увійти
  • Спробуйте це безкоштовно
  • Додатки
    Фінанси
    • Бухоблік
    • Виставлення рахунку
    • Витрати
    • Електронні таблиці (BI)
    • Документи
    • Підпис
    Продажі
    • CRM
    • Продажі
    • POS Магазин
    • POS Ресторан
    • Підписки
    • Оренда
    Веб-сайти
    • Конструктор веб-сайту
    • Електронна комерція
    • Блог
    • Форум
    • Живий чат
    • Електронне навчання
    Ланцюг поставок
    • Склад
    • Виробництво
    • PLM
    • Купівлі
    • Технічне обслуговування
    • Якість
    Кадри
    • Співробітники
    • Рекрутинг
    • Відпустки
    • Оцінювання
    • Рекомендації
    • Автотранспорт
    Маркетинг
    • Маркетинг соцмереж
    • Email-маркетинг
    • SMS-маркетинг
    • Події
    • Автом. маркетингу
    • Опитування
    Послуги
    • Проект
    • Табелі
    • Виїзне обслуговування
    • Служба підтримки
    • Планування
    • Призначення
    Продуктивність
    • Обговорення
    • Схвалення
    • IoT
    • IP-телефонія
    • База знань
    • WhatsApp
    Сторонні модулі Odoo Studio Платформа Odoo Cloud
  • Сфери
    Роздрібна торгівля
    • Книжковий магазин
    • Магазин одягу
    • Магазин меблів
    • Продуктовий магазин
    • Магазин будівельних матеріалів
    • Магазин іграшок
    Food & Hospitality
    • Бар та паб
    • Ресторан
    • Фастфуд
    • Guest House
    • Дистриб'ютор напоїв
    • Hotel
    Real Estate
    • Real Estate Agency
    • Архітектурна фірма
    • Будівництво
    • Управління нерухомістю
    • Садівництво
    • Асоціація власників нерухомості
    Consulting
    • Accounting Firm
    • Партнер Odoo
    • Marketing Agency
    • Юридична фірма
    • Придбання Талантів
    • Аудит та сертифікація
    Виробництво
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Корпоративні подарунки
    Здоров'я & Фітнес
    • Спортивний клуб
    • Оптика
    • Фітнес-центр
    • Практики здоров'я
    • Аптека
    • Салон краси
    Trades
    • Ремонтник
    • IT-обладнання та Підтримка
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Екологічна агенція
    • Оренда білбордів
    • Фотографія
    • Лізинг велосипедів
    • Реселлер програмного забезпечення
    Browse all Industries
  • Спільнота
    Навчання
    • Навчальний посібник
    • Документація
    • Сертифікації
    • Тренування
    • Блог
    • Подкаст
    Сприяйте Освіті
    • Програма навчання
    • Бізнес гра Scale Up!
    • Відвідайте Odoo
    Отримайте програмне забезпечення
    • Завантаження
    • Порівняйте версії
    • Релізи
    Співпрацюйте
    • Github
    • Форум
    • Події
    • Переклади
    • Стати партнером
    • Services for Partners
    • Зареєструйте вашу бухгалтерську фірму
    Отримайте послуги
    • Знайдіть партнера
    • Знайдіть бухгалтера
    • Зустріньтеся з консультантом
    • Послуги з впровадження
    • Референси клієнтів
    • Підтримка
    • Оновлення
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Отримати демо
  • Ціни
  • Допомога

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Бухоблік
  • Склад
  • PoS
  • Проект
  • MRP
All apps
Вам необхідно зареєструватися, щоб взаємодіяти зі спільнотою.
All Posts Люди Значки
Мітки (View all)
odoo accounting v14 pos v15
Про цей форум
Вам необхідно зареєструватися, щоб взаємодіяти зі спільнотою.
All Posts Люди Значки
Мітки (View all)
odoo accounting v14 pos v15
Про цей форум
Допомога

I Need Help Fixing A ZeroDivisionError In My Purchase Order

Підписатися

Отримуйте сповіщення про активність щодо цієї публікації

Це запитання позначене
purchase_orderenvcomputed-fieldspurchase.order.line
1 Відповісти
5244 Переглядів
Аватар
Abdel-Rahman Megahed

I am currntly running Odoo v13 Community Edition. I am trying to edit the purchase order model by inheriting the model to my custom created model. I want to get the currency_rate field by using the env stuff. I still do not fully understand how it works so I tried to calculate the field (by using the code below) and I got a ZeroDivisionError (below the code)

I need help if anyone can tell me how do I search the env for the purchase order tied with the orderline and why do I get the ZeroDivisionError.

Thank you in advance


Here is the code:

class PurchOrderLine(models.Model):

    _inherit = 'purchase.order.line'

    x_price_unit = fields.Float(readonly=True, compute="calc_unit_p", string='Unit Price in EGP', store=False)

    x_sub_tot = fields.Float(readonly=True, compute="calc_sub_t", string='Subtotal in EGP', store=False)


    @api.depends('price_unit')

    def calc_unit_p(self):

        for p in self:

            po = p.env['purchase.order'].search([])

            p.x_price_unit = p.price_unit / po.currency_rate


    @api.depends('price_subtotal')

    def calc_sub_t(self):

        for p in self:

            if 

            po = p.env['purchase.order'].search([])

            p.x_sub_tot = p.price_subtotal / po.currency_rate


And this is the Full Error:

Error:

Odoo Server Error


Traceback (most recent call last):

  File "/opt/odoo/odoo/odoo/api.py", line 745, in get

    value = self._data[field][record._ids[0]]

KeyError: <NewId 0x7f9aff5a7490>


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/opt/odoo/odoo/odoo/fields.py", line 1000, in __get__

    value = env.cache.get(record, self)

  File "/opt/odoo/odoo/odoo/api.py", line 751, in get

    raise CacheMiss(record, field)

odoo.exceptions.CacheMiss: ('purchase.order.line(<NewId 0x7f9aff5a7490>,).x_price_unit', None)


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/opt/odoo/odoo/odoo/http.py", line 624, in _handle_exception

    return super(JsonRequest, self)._handle_exception(exception)

  File "/opt/odoo/odoo/odoo/http.py", line 310, in _handle_exception

    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])

  File "/opt/odoo/odoo/odoo/tools/pycompat.py", line 14, in reraise

    raise value

  File "/opt/odoo/odoo/odoo/http.py", line 669, in dispatch

    result = self._call_function(**self.params)

  File "/opt/odoo/odoo/odoo/http.py", line 350, in _call_function

    return checked_call(self.db, *args, **kwargs)

  File "/opt/odoo/odoo/odoo/service/model.py", line 94, in wrapper

    return f(dbname, *args, **kwargs)

  File "/opt/odoo/odoo/odoo/http.py", line 339, in checked_call

    result = self.endpoint(*a, **kw)

  File "/opt/odoo/odoo/odoo/http.py", line 915, in __call__

    return self.method(*args, **kw)

  File "/opt/odoo/odoo/odoo/http.py", line 515, in response_wrap

    response = f(*args, **kw)

  File "/opt/odoo/odoo/addons/web/controllers/main.py", line 1322, in call_kw

    return self._call_kw(model, method, args, kwargs)

  File "/opt/odoo/odoo/addons/web/controllers/main.py", line 1314, in _call_kw

    return call_kw(request.env[model], method, args, kwargs)

  File "/opt/odoo/odoo/odoo/api.py", line 387, in call_kw

    result = _call_kw_multi(method, model, args, kwargs)

  File "/opt/odoo/odoo/odoo/api.py", line 374, in _call_kw_multi

    result = method(recs, *args, **kwargs)

  File "/opt/odoo/odoo/odoo/models.py", line 6149, in onchange

    value = record[name]

  File "/opt/odoo/odoo/odoo/models.py", line 5684, in __getitem__

    return self._fields[key].__get__(self, type(self))

  File "/opt/odoo/odoo/odoo/fields.py", line 1024, in __get__

    self.compute_value(recs)

  File "/opt/odoo/odoo/odoo/fields.py", line 1109, in compute_value

    records._compute_field_value(self)

  File "/opt/odoo/odoo/odoo/models.py", line 3966, in _compute_field_value

    getattr(self, field.compute)()

  File "/opt/odoo/odoo/cust_addons/invoice/invoice.py", line 32, in calc_unit_p

    p.x_price_unit = p.price_unit / po.currency_rate

ZeroDivisionError: float division by zero

0
Аватар
Відмінити
Аватар
Niyas Raphy (Walnut Software Solutions)
Найкраща відповідь

Hi,

You are getting zero division error because the value in po.currency_rate used in division is 0. And as per the math, we cannot divide a number by 0. So you have to add a if condition to ensure that po.currency_rate have non zero value. Also rest of the code seems to have issue(check and correct it per logic/need).

@api.depends('price_unit')
def calc_unit_p(self):
for p in self:
po = p.env['purchase.order'].search([], limit=1)
if po.currency_rate != 0:
p.x_price_unit = p.price_unit / po.currency_rate
else:
p.x_price_unit = p.price_unit

Thanks

0
Аватар
Відмінити
Abdel-Rahman Megahed
Автор

How can the currency rate value be 0 when it is displayed as another value? maybe the p.env line is wrong?

I cannot tell because I do not understand it that well. If it was wrong, how can I modify it so that the purchase order that the purchase order line is part of becomes stored in po?

Thank you for your answer

Enjoying the discussion? Don't just read, join in!

Create an account today to enjoy exclusive features and engage with our awesome community!

Реєстрація
Related Posts Відповіді Переглядів Дія
How can I customize purchase order report and purchase order form view Вирішено
purchase_order purchase.order.line
Аватар
Аватар
1
вер. 21
8002
Need Help in Computing a Field Value in Purchase Order
purchase_order compute purchase.order.line
Аватар
2
жовт. 20
3712
By Selecting Product, Vendor's Name will Appear
res.partner purchase_order vendor purchase.order.line
Аватар
0
січ. 24
2013
How do I get a field from another Model
purchase purchase_order compute order.line purchase.order.line
Аватар
Аватар
1
січ. 23
6738
How to create compute fields in purchase order line Вирішено
python xml purchase_order v14 purchase.order.line
Аватар
Аватар
Аватар
2
квіт. 22
4889
Спільнота
  • Навчальний посібник
  • Документація
  • Форум
Open Source
  • Завантаження
  • Github
  • Runbot
  • Переклади
Послуги
  • Хостинг Odoo.sh
  • Підтримка
  • Оновлення
  • Кастомні доробки
  • Навчання
  • Знайдіть бухгалтера
  • Знайдіть партнера
  • Стати партнером
Про нас
  • Наша компанія
  • Торгові активи
  • Зв'яжіться з нами
  • Вакансії
  • Події
  • Подкаст
  • Блог
  • Клієнти
  • Юридичні документи • Конфіденційність
  • Безпека
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo - це набір програм для роботи з відкритим кодом, які охоплюють всі ваші потреби компанії: CRM, електронна комерція, бухгалтерський облік, склад, точка продажу, управління проектами тощо.

Унікальна пропозиція Odoo - це одночасно дуже проста у використанні та повністю інтегрована.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now