Отчетность 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)
Вот и все! Посмотрите на чистый и простой отчет!