..
  nd_node:
    nde_name: Home
  parent: 500
 
-----------------------------------------------------------------------
Lokai Software Suite
-----------------------------------------------------------------------

.. rubric:: Workhorse software for business processes

.. sidebar:: Use it for

  **Data Management**

    Use the job manager for automatic data processing; capture
    exceptions as tickets.

  **Software development**

    Store and manage activities such as tickets or user stories; group
    activities into development stages; integrate development
    documentation; manage multiple teams.

  **Customer Relationship Management**

    Use tickets to manage customer development; easily extendable to
    feed sales pipeline data.

  **Works Management**

    Extend the data to suit the work; group tasks as needed; use the
    job manager for background report generation.

Business Oriented
----------------------------------------

Lokai is a flexible business process management tool for businesses. A
single instance of the tool can handle as many projects or tasks as
required, with no need to deploy separate project or process specific
environments that cannot share data.

Mixing Data Types
----------------------------------------

The tool freely mixes documentation, activity management and data
access. There is no constraint on how this might be done, and
different tasks or projects may use different arrangements within the
same environment.

Managing Access
----------------------------------------

Access management allows people to see and manipulate data in ways
that are appropriate to their role and work. Team members may work on
more than one task or project. Managers may manage more than one
project. A person can be a team member on one project and a manager on
another.

Flexible and Extendable
----------------------------------------

The key to this flexibility is a hierarchical data model with
interlinking between sub-trees. The structure and the links are fully
user controlled.

Lokai is a web served application, written in Python. The software is
simple to deploy at any organisational level and will happily
co-exists with other web applications on the same server.

The code is extendable to allow a great deal of flexibility in the
type of data represented, and in the presentation of that data. Each
node in the hierarchy can be different. At its simplest, this allows
for activities and documentation to be held in the same structure, so
that everything relevant to the project or process is to
hand. Whatever data is being handled, the user is presented with a
consistent interface where access rules and navigation are given.

.. raw:: pdf

   PageBreak

..
  nd_node:
    nde_name: Components
  parent: Home

-----------------------------------------------------------------------
Major Components
-----------------------------------------------------------------------

Lokai provides three facilities for business process support.


lk_job_manager
----------------------------------------

A message board queueing mechanism for background processes. Each job
examines its input folders for things to do, and, when a particular
request has been completed, an output can be placed into one or more
output folders which, in turn, are input folders for other processes.

There is an enhanced logger that allows applications to turn
data or processing issues into tickets in the `lk_worker` facility.

lk_ui
----------------------------------------

A structured web framework that allows multiple applications to share
common main menu navigation. Multiple applications can be mounted onto
a common URL base. Each application provides a menu maker that can be
as dynamic as the application needs. All applications share the same
login and session management, and all applications share the main
template for display. The result is a consistent look and feel that
helps users understand the system.

lk_worker
----------------------------------------

An extendable application based on a network style database structure
that can be thought of as a set of interlinked hierarchies.

Each node in the network can represent anything: some text for
display, details of a task to do, or anything else that might be
appropriate. In this way documents and activities can be freely
interspersed.

Access control is achieved by allocating users to nodes in the
network. A user can see all nodes below the node they are allocated
to, but no others. Different permission types can also be used and
these might be interpreted by the application code to further manage
what users can and cannot do.

.. raw:: pdf

   PageBreak

..
  nd_node:
    nde_name: Components Context
  parent: Home

-----------------------------------------------------------------------
Components in Context
-----------------------------------------------------------------------

The components can be used in many ways, and they do not necessarily
all have to be used together (although there are some dependencies).
The most complete example comes from a business dealing with data:
capturing it, processing it and, perhaps, reporting on it.  These
steps often require many separate automatic processes, if only because
the input data comes from more than one source, and the sources are
not necessarily synchronised.  The processes must be linked together
so that they run when data is available, and there must be some way of
capturing issues that arise and bringing these to someone's attention.

This picture gives the general idea.

.. page_img:: #/file/business_context.png

In this, we see the data handling processes working under
`lk_job_manager`. They use the enhanced logging to log issues to the
`lk_worker` database, and `lk_ui` is used to wrap the `lk_worker` user
interface application.

That side of the diagram uses features of Lokai out of the box.

On the other side, we can imagine the reporting process posting links
into the `lk_worker` data so that users see a structured view of what
is available. This, too, can use Lokai out of the box, but it might
also be a place where specific business extensions might be
appropriate, depending on what is supposed to happen with the reports.

.. raw:: pdf

   PageBreak

..
  nd_node:
    nde_name: Dependencies
  parent: Home

-----------------------------------------------------------------------
Standing on the Shoulders of Others
-----------------------------------------------------------------------

Lokai uses these Python packages (in no particular order):

`reStructuredText <http://docutils.sourceforge.net/rst.html>`_

  This is the supported text formatting mark-up language. It is used
  in processing free text descriptions (such as this page).

`Werkzeug <http://werkzeug.pocoo.org/>`_

  Werkzeug is a straightforward WSGI utility that allows a great deal
  of flexibility in structuring applications and their configuration.
  Most importantly, it can just be used, without having to worry about
  layers of interpretation.

`Jinja templates <http://jinja.pocoo.org/>`_

  Werkzeug and Jinja are stablemates, so the choice might be obvious,
  but Jinja does do the job very nicely.

`SQL Alchemy <http://www.sqlalchemy.org/>`_

  This is fast becoming the standard Python ORM (if it isn't there
  already). For Lokai, the key feature is being able to build SQL
  piecemeal in response to whatever information is available.  Lokai
  extensions depend very much on this.

`pyutilib <https://software.sandia.gov/trac/pyutilib>`_

  This provides a component management environment that is central to
  the extendability of Lokai. Extensions can inherit from each other
  and creating and using extension points is simplicity itself.

We should not forget also:

`Quixote <w.mems-exchange.org/software/quixote/>`_

  This is a light weight web framework used in the early development
  work.  It didn't quite work out, but Lokai has borrowed the forms
  and widget mechanism.

.. raw:: pdf

   PageBreak

..
  nd_node:
    nde_name: Development
  parent: 600

.. raw:: pdf

   PageBreak

..
  nd_node:
    nde_name: Tickets
    nde_type: generic
  parent: Development

Tickets
-----------------------------------------------------------------------

Lokai development tickets are kept here. These describe new development
ideas, enhancements and bug fixes that require work.

To find tickets of interest, use the 'search' tab, otherwise you can
go straight to the 'list' tab and browse.

You need to be a registered user to be able to change or add tickets.

.. raw:: pdf

   PageBreak

..
  nd_node:
    nde_name: Notes and Comments
  parent: Development

Notes and Comments
-----------------------------------------------------------------------

This area is for contributions to the documentation, how-to recipes,
hints and tips.

.. raw:: pdf

   PageBreak

..
  nd_node:
    nde_name: Adding Extensions
  parent: Development

Adding Extensions
-----------------------------------------------------------------------

TO DO
