Как создавать отчеты excel для Odoo 15, используя python3.


Отчетность Odoo ERP

Odoo — это замечательное программное обеспечение ERP с открытым исходным кодом. Когда вы видите, как много она может сделать, это действительно удивительный инструмент.

Однако его функции отчетности часто не идеальны из коробки. И хотя вы можете потратить часы на создание пользовательского отчета Odoo (который вам придется менять через несколько месяцев), я обнаружил, что гораздо проще создать свой собственный с помощью python!

Я создам скрипт на python3 для генерации отчетов по всем продуктам во всех местах.

Я расскажу о следующем. Вы можете найти репозиторий с моим кодом в конце.

Как настроить для локального соскабливания данных Odoo
Как соскабливать продукты и местоположения
Как создавать отчеты в Excel по требованию

Подготовка к работе

Вам понадобятся все обычные средства для входа в Odoo, а также некоторые дополнительные, если вы используете локальный хостинг. Мы также будем использовать pandas.

# !/usr/bin/env python3

import pandas as pd
import xmlrpc.client
import ssl

# Begin Login to Odoo#

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

url = "http://localhost:8069"
db = "test"
username = "test@gmail.com"
password = "test"

models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url))
common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url))
uid = common.authenticate(db, username, password, {})

Вход в полноэкранный режим Выход из полноэкранного режима

Получение данных о товаре и местоположении.

Теперь мы готовы приступить к сбору данных! В данном случае я буду действовать просто, мне нужны только все мои продукты, без дополнительной фильтрации. Вы можете добавить дополнительные параметры, например. Мне нужны все продукты, которые изменяются или создаются пользователем.

После того, как у меня есть все идентификаторы продуктов, теперь я хочу найти ВСЕ мои местоположения, в которых действительно есть продукты, поэтому в этом случае я хочу

 ['on_hand', '=', True]]])
Войти в полноэкранный режим Выйти из полноэкранного режима

Получить данные

all_products = models.execute_kw(db, uid, password, 'product.product', 'search',
                                 [[['type', '=', 'product']]])


on_hand_data = models.execute_kw(db, uid, password,
                                 'stock.quant', 'search_read',
                                 [[['product_id', '=', all_products], ['on_hand', '=', True]]])


Войти в полноэкранный режим Выйти из полноэкранного режима

Собираем все вместе

Теперь мы готовы приступить к сбору данных! В данном случае я буду действовать просто, мне нужны только все мои товары, без дополнительной фильтрации. Вы можете добавить дополнительные параметры, например. Мне нужны все продукты, которые изменяются или создаются пользователем.

Итак, у вас есть данные, готовые к работе! Что теперь?

Теперь мы запустим цикл for для каждого продукта. Подсказка: я обнаружил, что для большинства отчетов это все, что нужно: Фильтрация циклов for

Мы будем использовать метод чтения поиска, чтобы получить ВСЕ данные по каждому товару.

search_read
Вход в полноэкранный режим Выход из полноэкранного режима

Мы построим 3 списка и позволим pandas обработать данные.

product = []
locations = []
quantity = []

for i in on_hand_data:

    product.append(i['product_id'][1])
    quantity.append(i['quantity'])
    locations.append(i['location_id'][1])

df = pd.DataFrame()

df['Product'] = product
df['Locations'] = locations
df['quantity'] = quantity


 # Converting to excel
df.to_excel('data.xlsx', index=False)





Войти в полноэкранный режим Выход из полноэкранного режима

Вот и все! Посмотрите на чистый и простой отчет!

Оцените статью
Procodings.ru
Добавить комментарий