Jakiś czas temu zainteresowałem się oprogramowaniem o nazwie Odoo. Jest to system zarządzania przedsiębiorstwem mający cały szereg modułów pozwalających na obsługę pracowników, prowadzenie działań marketingowych, nadzorowanie sprzedaży, produkcji, tworzenie stron internetowych przedsiębiorstwa i całkiem sporo innych.

Oferta Odoo

Odoo posiada dwie wersje:

  1. Darmową w formie wolnego oprogramowania (Community)
  2. Płatną zarządzaną przez firmę Odoo SA

Wersja Community nie posiada wszystkich modułów oraz mierzy się ze wszystkimi potencjalnymi problemami oprogramowania typu open source (np. brak ustruktyryzowanego wsparcia). Za to jest całkowicie darmowa i posiada cały zestaw możliwych do zainstalowania dodatków tworzonych przez społeczność.

Wersja płatna ma parę opcji do wyboru, opiszę tylko dwie podstawowe:

  1. Jeśli wykorzystuje się tylko jeden główny moduł, to dostęp do oprogramowania poprzez Odoo.com jest darmowy dla dowolnej liczby użytkowników. Wybierając jeden moduł otrzymuje się w pakiecie także wszystkie inne pakiety, które są niezbędne do obsługi wybranego modułu.
  2. Jeśli wykorzystuje się więcej niż jeden moduł, to uzyskuje się dostęp do wszystkich oferowanych przez Odoo.com modułów, ale należy zapłacić (w momencie pisania tego tekstu cena wynosiła 12 euro miesięcznie) za każdego użytkownika

Zależności między modułami

Od razu nasuwa się pytanie: “Jakie moduły zostaną zainstalowane, gdy wybiorę jeden z nich”. Innymi słowy, jakie są zależności między modułami?

Niestety na stronach Odoo nie znalazłem takiej informacji. Parę lat temu, gdy Odoo.com miało jeszcze inny model płatności, istniało narzędzie pozwalające zobaczyć te zależności. Teraz jednak już takiego narzędzia nie znalazłem.

W związku z tym zdecydowałem się sam je zbadać. Poniżej znajdziecie przedstawienie zależności między modułami w formie grafu. Każdy okrąg przedstawia osobny moduł, a linie pokazują połączenia między nimi. Strzałki pokazują, który moduł jest “ważniejszy”: moduł przy główce strzałki będzie zainstalowany razem z modułem przy początku strzałki. Wykres jest interaktywny, można go przybliżać i oddalać kółkiem myszy oraz zaznaczać i zmieniać położenie modułów.

Przykład: Instalując moduł Shop Floor zainstalowane zostaną także moduły Manufacturing, Employees, Inventory i Discuss.

Jak to jest zrobione

Zbieranie danych

Dane zebrałem przeklikując wielokrotnie przez instalator dostępny na Odoo.com, żeby zobaczyć które moduły zostaną zainstalowane przy wybraniu konkretnego modułu.

Kompletność danych

Dane nie są kompletne. Sprawdziłem większość dostępnych modułów, ale nie wszystkie. Dla tych, których nie sprawdziłem, powinno być w miarę oczywiste, jakie inne moduły zostaną razem z nimi zainstalowane.

Obróbka informacji

Zależności między modułami zapisałem w pliku tekstowym w formie par “source - target”. Plik ten wczytałem do Pythona (pandas). Otrzymaną tabelę przekształciłem do reprezentacji w formie grafu (networkx), a na koniec stworzyłem wizualizację grafu (pyvis.network). Poniżej pełny skrypt.

import pandas as pd
import networkx as nx
from pyvis.network import Network

df = pd.read_csv('data/OdooModulesConnections.txt', delimiter='\t+', engine='python', names=['Source', 'Target'])

print(df.head())

G = nx.from_pandas_edgelist(df, source='Source', target='Target')

net = Network()
net.set_options("""
const options = {
  "edges": {
    "arrows": {
      "from": {
        "enabled": true,
        "scaleFactor": 0.75
      }
    }
  }
}
""")
net.from_nx(G)
net.show('OdooModulesConnections.html')