Code Monkey home page Code Monkey logo

django-slick-reporting's Introduction

https://img.shields.io/readthedocs/django-slick-reporting https://api.travis-ci.org/ra-systems/django-slick-reporting.svg?branch=master https://img.shields.io/codecov/c/github/ra-systems/django-slick-reporting

Django Slick Reporting

A one stop reports engine with batteries included.

Features

  • Effortlessly create Simple, Grouped, Time series and Crosstab reports in a handful of code lines.
  • Create your Custom Calculation easily, which will be integrated with the above reports types
  • Optimized for speed.
  • Batteries included! Charts.js , DataTable.net & a Bootstrap form.

Installation

Use the package manager pip to install django-slick-reporting.

pip install django-slick-reporting

Usage

From high Level,

You can use SampleReportView which is an enhanced subclass of ``django.views.generic.FormView`` like this

# in views.py
from django.db.models import Sum
from slick_reporting.views import SampleReportView
from .models import MySalesItems

class TotalProductSales(SampleReportView):

    # The model where you have the data
    report_model = MySalesItems

    # the main date to use if date filter is needed
    date_field = 'date_placed'
    # date_field support traversing, you can
    # date_field = 'order__date_placed'

    # A foreign key to group calculation on
    group_by = 'product'

    # The columns you want to display , `quantity` and `value` are fields on `MySalesItem` model.
    columns = ['title', BaseReportField.create(Sum, 'quantity') , BaseReportField.create(Sum, 'value') ]

    # Another way making use of the built-in Report Fields which is identical to the above
    # columns = ['title', '__total_quantity__', '__total__']

# in your urls.py
path('url-to-report', TotalProductSales.as_view())

This will return a page, with a table looking like

Product Total Quantity Total Value
Product 1 8 120
Product 2 13 240

You can also do a monthly time series :

# in views.py
from slick_reporting.views import SampleReportView
from .models import MySalesItems

class MonthlyProductSales(SampleReportView):
    report_model = MySalesItems
    date_field = 'date_placed'
    group_by = 'product'
    columns = ['name', 'sku']

    # Analogy for time series
    time_series_pattern = 'monthly'
    time_series_columns = ['__total_quantity__']

This would return a table looking something like this:

Product Name SKU Total Quantity in Jan 20 Total Quantity in Feb 20 Total Quantity in ... Total Quantity in December 20
Product 1 <from product model> 10 15 ... 14
Product 2 <from product model> 11 12 ... 12
Product 3 <from product model> 17 12 ... 17

This example code assumes your "MySalesItems" model contains the fields `product` as foreign key, `quantity` as number , and `date_placed` as a date field. It also assumes your `Product` model has an SKU field.. Change those to better suit your structure.

--

On a low level

You can interact with the ReportGenerator using same syntax as used with the SampleReportView .

from slick_reporting.generator import ReportGenerator
from . models import MySalesModel

report = ReportGenerator(report_model=MySalesModel,
                        group_by='product',
                        columns=['title', '__total__']
)
report.get_report_data() #-> [{'title':'Product 1', '__total__: 56}, {'title':'Product 2', '__total__: 43}, ]

This is just a scratch, for more please visit the documentation

Batteries Included

Slick Reporting comes with

A Preview:

Shipped in View Page

Documentation

Available on Read The Docs

Road Ahead

This project is young and can use your support.

Some of the ideas / features that ought be added

  • Support Other backends like SQL Alchemy & Pandas
  • Support Grouping by non foreign key fields
  • Support Time Series and Crosstab at the same time

Running tests

Create a virtual environment (maybe with virtual slick_reports_test), activate it; Then ,

$ git clone [email protected]:ra-systems/django-slick-reporting.git
$ cd tests
$ python -m pip install -e ..

$ python runtests.py
#     Or for Coverage report
$ coverage run --include=../* runtests.py [-k]
$ coverage html

Support & Contributing

Please consider star the project to keep an eye on it. Your PRs, reviews are most welcome and needed.

We honor the well formulated Django's guidelines to serve as contribution guide here too.

Authors

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.