tickets (Ticket management)

The lino_xl.lib.tickets plugin adds functionality for managing tickets.

A tested document

This is a tested document. The following instructions are used for initialization:

>>> import lino
>>> lino.startup('lino_book.projects.team.settings.demo')
>>> from lino.api.doctest import *

Overview

A ticket is a question, issue or problem reported by a human who asks us for help. It is the smallest unit for organizing our work.

This plugins also installs comments : The comments framework. Users can comment on a ticket.

Tickets are grouped into sites. Users must be subscribed to a site in order to report tickets on a site. All the subscribers of a site will get notified about new tickets, changes and new comments to a ticket. The site* of a ticket indicates who is going to watch changes on that ticket.

Tickets

A ticket is a concrete question or problem formulated by a human who asks our team to work on it and find an answer or solution.

The author of a ticket is the user who created it. The author can optionally specify an end user, which means that they created the ticket in behalf* of that external person.

A ticket can be assigned to a given user who is "responsible" for working on it. It can be reassigned to another user. Users can "take" an unassigned ticket.

class lino_xl.lib.tickets.Ticket

The Django model used to represent a ticket.

A ticket has the following database fields.

Different relations to users:

user

The author or reporter of this ticket. The user who reported this ticket to the database and is responsible for managing it.

end_user

The end user who is asking for help. This may be an external person who is not registered as a system user.

assigned_to

The user who has been assigned to work on this ticket.

Descriptive fields:

description

A complete and concise description of the ticket. This should describe in more detail what this ticket is about. If the ticket has evolved during time, it should reflect the latest version.

The description can contain memo commands defined by the application.

site

The site this ticket belongs to. You can select only sites you are subscribed to.

upgrade_notes

A formatted text field meant for writing instructions for the hoster's site administrator when doing an upgrade where this ticket is being deployed.

waiting_for

What to do next. An unformatted one-line text which describes what this ticket is waiting for.

state

The state of this ticket. See TicketStates.

Relations to other tickets:

duplicate_of

A pointer to another ticket which is regarded as the first occurence of the same problem.

A ticket with a non-empty duplicate_of field can be called a "duplicate". The number (primary key) of a duplicate is theoretically higher than the number of the ticket it duplicates.

The state of a duplicate does not automatically become that of the duplicated ticket. Each ticket continues to have its own state. Example: Some long time ago, with Mathieu, we agreed that ticket #100 can go to Sleeping. Now Aurélie reported the same problem again as #904. This means that we should talk about it. And even before talking with her, I'd like to have a look at the code in order to estimate whether it is difficult or not, so I set the state of #904 to ToDo.

deadline

Specify that the ticket must be done for a given date.

TODO: Triagers should have a table of tickets having this field non-empty and are still in an active state.

priority

How urgent this ticket is.

Choicelist field pointing to lino_xl.lib.xl.Priorities.

rating

How the author rates the work which has been done on this ticket.

reporting_type

An indication about who is going to pay for work on this site. See ReportingTypes.

Ticket state

The state of a ticket expresses in which phase of its life cycle this ticket is.

You can see which ticket states are defined on your site using Explorer ‣ Tickets ‣ Ticket states.

See lino_noi.lib.tickets.TicketStates for a real world example.

class lino_xl.lib.tickets.TicketStates

The choicelist for the state of a ticket.

Sites

A site is a place where work is being done. Sites can be anything your team uses for grouping their tickets into more long-term "tasks" or "projects". Zulip calls them "streams", Slack calls them "Channels".

class lino_xl.lib.tickets.Site

The Django model representing a site.

description
reporting_type
state
ref
name
company
contact_person
deadline
class lino_xl.lib.tickets.Sites
watcher
show_exposed
state
class lino_xl.lib.tickets.MySites

Shows the sites for which I have a subscription.

Sleeping and closed sites are not shown by default.

List of the sites in our demo database:

>>> rt.show(tickets.Sites)
=========== ===================== ===================== ================ ======== ============== ====
 Reference   Designation           Client                Contact person   Remark   Workflow       ID
----------- --------------------- --------------------- ---------------- -------- -------------- ----
 pypi        pypi                                                                  **⚒ Active**   3
 welket      Rumma & Ko OÜ         Rumma & Ko OÜ         Andreas Arens             **⚒ Active**   1
 welsch      Bäckerei Ausdemwald   Bäckerei Ausdemwald   Annette Arens             **⚒ Active**   2
=========== ===================== ===================== ================ ======== ============== ====

List of sites to which Jean is "subscribed" (i.e. that are assigned to a team where Jean is member):

>>> rt.login("jean").show(tickets.MySites)
===================== ============= ==============
 Site                  Description   Workflow
--------------------- ------------- --------------
 `welket <Detail>`__                 **⚒ Active**
 `welsch <Detail>`__                 **⚒ Active**
===================== ============= ==============

List of tickets that have not yet been assigned to a site:

>>> pv = dict(has_site=dd.YesNo.no)
>>> rt.show(tickets.AllTickets, param_values=pv)
... 
===== ============================================== ========== =============== ======
 ID    Summary                                        Priority   Workflow        Site
----- ---------------------------------------------- ---------- --------------- ------
 110   Why is foo so bar                              Normal     **☐ Ready**
 108   No more foo when bar is gone                   Normal     **⚒ Working**
 100   Cannot delete foo                              Normal     **⚒ Working**
 94    How can I see where bar?                       Normal     **☐ Ready**
 90    No more foo when bar is gone                   Normal     **☎ Talk**
 80    Foo never bars                                 Normal     **☒ Refused**
 70    'NoneType' object has no attribute 'isocode'   Normal     **☐ Ready**
 66    Irritating message when bar                    Normal     **☎ Talk**
 60    Default account in invoices per partner        Normal     **⚒ Working**
 52    'NoneType' object has no attribute 'isocode'   Normal     **⚒ Working**
 50    Misc optimizations in Baz                      Normal     **☎ Talk**
 40    How can I see where bar?                       Normal     **☒ Refused**
 38    Why is foo so bar                              Normal     **☐ Ready**
 30    Irritating message when bar                    Normal     **☐ Ready**
 24    Default account in invoices per partner        Normal     **☒ Refused**
 20    Why is foo so bar                              Normal     **⚒ Working**
 10    Where can I find a Foo when bazing Bazes?      Normal     **☎ Talk**
===== ============================================== ========== =============== ======

Subscriptions

class lino_xl.lib.tickets.Subscription

The Django model representing a subscription.

site

The site.

user

The user.

primary

Whether this is the primary subscription of this user.

Checking this field will automatically uncheck any previous primary subscriptions.

Ticket types

A ticket type, or the type of a ticket, is a way to classify that ticket. This information may be used in service reports or statistics defined by the application.

You can configure the list of ticket types via Configure ‣ Tickets ‣ Ticket types.

The demo fixture defines the following ticket types.

>>> rt.show(tickets.TicketTypes)
============= ================== ================== ================
 Designation   Designation (de)   Designation (fr)   Reporting type
------------- ------------------ ------------------ ----------------
 Bugfix        Bugfix             Bugfix
 Enhancement   Enhancement        Enhancement
 Upgrade       Upgrade            Upgrade
============= ================== ================== ================
class lino_xl.lib.tickets.TicketType

The Django model used to represent a ticket type.

name
reporting_type

Which reporting type to use in a service report. See :class:ReportingTypes`.

class lino_xl.lib.tickets.TicketTypes

The list of all ticket types.

Deciding what to do next

Show all active tickets reported by me.

>>> rt.login('jean').show(tickets.MyTickets)
... 
========== ==================================================================== ============= ============== ========= ======= ====== =============================================
 Priority   Ticket                                                               Assigned to   Planned time   Regular   Extra   Free   Workflow
---------- -------------------------------------------------------------------- ------------- -------------- --------- ------- ------ ---------------------------------------------
 Normal     `#113 (⛶ Misc optimizations in Baz) <Detail>`__                                                                            [✋] [▶] **⛶ New** → [☾] [☎] [☉] [⚒] [☐] [☑]
 Normal     `#106 (☎ 'NoneType' object has no attribute 'isocode') <Detail>`__   Jean                                                  [▶] **☎ Talk** → [☾] [☉] [⚒] [☐] [☑] [☒]
 Normal     `#99 (☉ No more foo when bar is gone) <Detail>`__                    Luc                                                   [▶] **☉ Open** → [☾] [☎] [⚒] [☐] [☑] [☒]
 Normal     `#92 (⚒ Why is foo so bar) <Detail>`__                               Mathieu                                               [▶] **⚒ Working** → [☾] [☎] [☐] [☑] [☒]
 Normal     `#78 (☐ Default account in invoices per partner) <Detail>`__         Jean                                                  [▶] **☐ Ready** → [☎] [☑] [☒]
 Normal     `#57 (⛶ Irritating message when bar) <Detail>`__                                                                           [✋] [▶] **⛶ New** → [☾] [☎] [☉] [⚒] [☐] [☑]
 Normal     `#50 (☎ Misc optimizations in Baz) <Detail>`__                       Jean                                                  [▶] **☎ Talk** → [☾] [☉] [☐] [☒]
 Normal     `#43 (☉ 'NoneType' object has no attribute 'isocode') <Detail>`__    Luc                                                   [▶] **☉ Open** → [☾] [☎] [⚒] [☐] [☑] [☒]
 Normal     `#36 (⚒ No more foo when bar is gone) <Detail>`__                    Mathieu                                               [▶] **⚒ Working** → [☾] [☎] [☐] [☑] [☒]
 Normal     `#22 (☐ How can I see where bar?) <Detail>`__                        Jean                                                  [▶] **☐ Ready** → [☎] [☑] [☒]
 Normal     `#1 (⛶ Föö fails to bar when baz) <Detail>`__                                                                              [✋] [■] **⛶ New** → [☾] [☎] [☉] [⚒] [☐] [☑]
========== ==================================================================== ============= ============== ========= ======= ====== =============================================

The state of a site

>>> rt.show(tickets.SiteStates)
... 
======= ========== ========== ============= =========
 value   name       text       Button text   Exposed
------- ---------- ---------- ------------- ---------
 10      draft      Draft      ⛶             Yes
 20      active     Active     ⚒             Yes
 30      stable     Stable     ☉             Yes
 40      sleeping   Sleeping   ☾             No
 50      closed     Closed     ☑             No
======= ========== ========== ============= =========

The backlog

The TicketsBySite panel shows all the tickets for a given site. It is a scrum backlog.

>>> welket = tickets.Site.objects.get(ref="welket")
>>> rt.show(tickets.TicketsBySite, welket)
... 
===================== ========================================================= ============== ========== ======= ====== ===============
 Priority              Ticket                                                    Planned time   Regular    Extra   Free   Workflow
--------------------- --------------------------------------------------------- -------------- ---------- ------- ------ ---------------
 Normal                *#115 (☉ 'NoneType' object has no attribute 'isocode')*                                            **☉ Open**
 Normal                *#114 (☎ Default account in invoices per partner)*                                                 **☎ Talk**
 Normal                *#106 (☎ 'NoneType' object has no attribute 'isocode')*                                            **☎ Talk**
 Normal                *#97 (⛶ 'NoneType' object has no attribute 'isocode')*                                             **⛶ New**
 Normal                *#91 (☉ Cannot delete foo)*                                                                        **☉ Open**
 Normal                *#84 (⚒ Irritating message when bar)*                                                              **⚒ Working**
 Normal                *#82 (☎ Cannot delete foo)*                                                                        **☎ Talk**
 Normal                *#74 (☎ Why is foo so bar)*                                                                        **☎ Talk**
 Normal                *#73 (⛶ Cannot delete foo)*                                                                        **⛶ New**
 Normal                *#68 (⚒ Misc optimizations in Baz)*                                                                **⚒ Working**
 Normal                *#67 (☉ How can I see where bar?)*                                                                 **☉ Open**
 Normal                *#62 (☐ Foo never bars)*                                                                           **☐ Ready**
 Normal                *#58 (☎ How can I see where bar?)*                                                                 **☎ Talk**
 Normal                *#49 (⛶ How can I see where bar?)*                                                                 **⛶ New**
 Normal                *#44 (⚒ Foo never bars)*                                                                           **⚒ Working**
 Normal                *#43 (☉ 'NoneType' object has no attribute 'isocode')*                                             **☉ Open**
 Normal                *#42 (☎ Default account in invoices per partner)*                                                  **☎ Talk**
 Normal                *#36 (⚒ No more foo when bar is gone)*                                                             **⚒ Working**
 Normal                *#25 (⛶ 'NoneType' object has no attribute 'isocode')*                                             **⛶ New**
 Normal                *#19 (☉ Cannot delete foo)*                                                                        **☉ Open**
 Normal                *#18 (☎ No more foo when bar is gone)*                                                             **☎ Talk**
 Normal                *#14 (☐ Bar cannot baz)*                                                                           **☐ Ready**
 Normal                *#12 (⚒ Foo cannot bar)*                                                                           **⚒ Working**
 Normal                *#4 (⚒ Foo and bar don't baz)*                                           1:24                      **⚒ Working**
 Normal                *#1 (⛶ Föö fails to bar when baz)*                                                                 **⛶ New**
 **Total (25 rows)**                                                                            **1:24**
===================== ========================================================= ============== ========== ======= ====== ===============

Note that the above table shows no state change actions in the Workflow column. That's because in this doctest it is being requested by anonymous. For an authenticated developer it looks like this:

>>> rt.login("robin").show(tickets.TicketsBySite, welket)
... 
===================== ==================================================================== ============== ========== ======= ====== =============================================
 Priority              Ticket                                                               Planned time   Regular    Extra   Free   Workflow
--------------------- -------------------------------------------------------------------- -------------- ---------- ------- ------ ---------------------------------------------
 Normal                `#115 (☉ 'NoneType' object has no attribute 'isocode') <Detail>`__                                            [▶] **☉ Open** → [☾] [☎] [⚒] [☐] [☑] [☒]
 Normal                `#114 (☎ Default account in invoices per partner) <Detail>`__                                                 [▶] **☎ Talk** → [☾] [☉] [⚒] [☐] [☑] [☒]
 Normal                `#106 (☎ 'NoneType' object has no attribute 'isocode') <Detail>`__                                            [▶] **☎ Talk** → [☾] [☉] [⚒] [☐] [☑] [☒]
 Normal                `#97 (⛶ 'NoneType' object has no attribute 'isocode') <Detail>`__                                             [✋] [▶] **⛶ New** → [☾] [☎] [☉] [⚒] [☐] [☑]
 Normal                `#91 (☉ Cannot delete foo) <Detail>`__                                                                        [▶] **☉ Open** → [☾] [☎] [⚒] [☐] [☑] [☒]
 ...
 Normal                `#36 (⚒ No more foo when bar is gone) <Detail>`__                                                             [▶] **⚒ Working** → [☾] [☎] [☐] [☑] [☒]
 Normal                `#25 (⛶ 'NoneType' object has no attribute 'isocode') <Detail>`__                                             [✋] [▶] **⛶ New** → [☾] [☎] [☉] [⚒] [☐] [☑]
 Normal                `#19 (☉ Cannot delete foo) <Detail>`__                                                                        [▶] **☉ Open** → [☾] [☎] [⚒] [☐] [☑] [☒]
 Normal                `#18 (☎ No more foo when bar is gone) <Detail>`__                                                             [▶] **☎ Talk** → [☾] [☉] [⚒] [☐] [☑] [☒]
 Normal                `#14 (☐ Bar cannot baz) <Detail>`__                                                                           [▶] **☐ Ready** → [☎] [☑] [☒]
 Normal                `#12 (⚒ Foo cannot bar) <Detail>`__                                                                           [▶] **⚒ Working** → [☾] [☎] [☐] [☑] [☒]
 Normal                `#4 (⚒ Foo and bar don't baz) <Detail>`__                                           1:24                      [▶] **⚒ Working** → [☾] [☎] [☐] [☑] [☒]
 Normal                `#1 (⛶ Föö fails to bar when baz) <Detail>`__                                                                 [✋] [▶] **⛶ New** → [☾] [☎] [☉] [⚒] [☐] [☑]
 **Total (25 rows)**                                                                                       **1:24**
===================== ==================================================================== ============== ========== ======= ====== =============================================

Comments

In Lino Noi comments are visible even to anonymous users:

>>> rt.show(comments.Comments, column_names="id user owner short_preview", limit=10)
... 
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| ID | Author          | Controlled by    | Preview                                                                        |
+====+=================+==================+================================================================================+
| 1  | Jean            | *Developers*     | Styled comment pasted from word!                                               |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 2  | Luc             | *Managers*       | Who| What| Done?                                                               |
|    |                 |                  | ---|---|---                                                                    |
|    |                 |                  | Him| Bar|                                                                      |
|    |                 |                  | Her| Foo the Bar|  **x**                                                       |
|    |                 |                  | Them| Floop the pig                                                            |
|    |                 |                  | | x                                                                            |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 3  | Marc            | *Front-end team* | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc cursus felis     |
|    |                 |                  | nisi, eu pellentesque lorem lobortis non. Aenean non sodales neque, vitae      |
|    |                 |                  | venenatis lectus. In eros dui, gravida et dolor at, pellentesque hendrerit     |
|    |                 |                  | magna. Quisque vel lectus dictum, rhoncus massa feugiat, condimentum sem.      |
|    |                 |                  | Donec elit nisl, placerat vitae imperdiet eget, hendrerit nec quam. Ut         |
|    |                 |                  | elementum ligula vitae odio efficitur rhoncus. Duis in blandit neque. Sed      |
|    |                 |                  | dictum mollis volutpat. Morbi at est et nisi euismod viverra. Nulla quis lacus |
|    |                 |                  | vitae ante sollicitudin tincidunt. Donec nec enim in leo vulputate ultrices.   |
|    |                 |                  | Suspendisse potenti. Ut elit nibh, porta ut enim ac, convallis molestie risus. |
|    |                 |                  | Praesent consectetur lacus lacus, in faucibus justo fringilla vel. (...)       |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 4  | Mathieu         | *Developers*     | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec interdum dictum |
|    |                 |                  | erat. Fusce condimentum erat a pulvinar ultricies. (...)                       |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 5  | Romain Raffault | *Managers*       | breaking (...)                                                                 |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 6  | Rolf Rompen     | *Front-end team* | (...)                                                                          |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 7  | Robin Rood      | *Developers*     | Some plain text.                                                               |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 8  | Jean            | *Managers*       | Two paragraphs of plain text. (...)                                            |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 9  | Luc             | *Front-end team* | Styled comment pasted from word!                                               |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
| 10 | Marc            | *Developers*     | Who| What| Done?                                                               |
|    |                 |                  | ---|---|---                                                                    |
|    |                 |                  | Him| Bar|                                                                      |
|    |                 |                  | Her| Foo the Bar|  **x**                                                       |
|    |                 |                  | Them| Floop the pig                                                            |
|    |                 |                  | | x                                                                            |
+----+-----------------+------------------+--------------------------------------------------------------------------------+
>>> obj = tickets.Ticket.objects.get(pk=2)
>>> rt.login('luc').show(comments.CommentsByRFC, obj)
... 
<p><b>Write comment</b></p><ul><li><a ...>...</a> by <a href="Detail">Luc</a> [<b> Reply </b>] <a ...>⁜</a><div id="comment-86"><p>Very confidential comment</p></div></li></ul>

Filtering tickets

This is a list of the parameters you can use for filterings tickets.

>>> show_fields(tickets.AllTickets, all=True)
... 
+--------------------+--------------------+-----------------------------------------------------------------------+
| Internal name      | Verbose name       | Help text                                                             |
+====================+====================+=======================================================================+
| user               | Author             | The author or reporter of this ticket. The user who reported this     |
|                    |                    | ticket to the database and is responsible for managing it.            |
+--------------------+--------------------+-----------------------------------------------------------------------+
| end_user           | End user           | Only rows concerning this end user.                                   |
+--------------------+--------------------+-----------------------------------------------------------------------+
| assigned_to        | Assigned_to        | Only tickets with this user assigned.                                 |
+--------------------+--------------------+-----------------------------------------------------------------------+
| not_assigned_to    | Not assigned to    | Only that this user is not assigned to.                               |
+--------------------+--------------------+-----------------------------------------------------------------------+
| interesting_for    | Interesting for    | Only tickets interesting for this partner.                            |
+--------------------+--------------------+-----------------------------------------------------------------------+
| site               | Site               | Select a site if you want to see only tickets for this site.          |
+--------------------+--------------------+-----------------------------------------------------------------------+
| has_site           | Has site           | Show only (or hide) tickets which have a site assigned.               |
+--------------------+--------------------+-----------------------------------------------------------------------+
| state              | State              | Only rows having this state.                                          |
+--------------------+--------------------+-----------------------------------------------------------------------+
| priority           | Priority           | Only rows having this priority.                                       |
+--------------------+--------------------+-----------------------------------------------------------------------+
| show_assigned      | Assigned           | Show only (or hide) tickets that are assigned to somebody.            |
+--------------------+--------------------+-----------------------------------------------------------------------+
| show_active        | Active             | Show only (or hide) tickets which are active (i.e. state is Talk      |
|                    |                    | or ToDo).                                                             |
+--------------------+--------------------+-----------------------------------------------------------------------+
| show_todo          | To do              | Show only (or hide) tickets which are todo (i.e. state is New         |
|                    |                    | or ToDo).                                                             |
+--------------------+--------------------+-----------------------------------------------------------------------+
| show_private       | Private            | Show only (or hide) tickets that are marked private.                  |
+--------------------+--------------------+-----------------------------------------------------------------------+
| start_date         | Date from          | Start of observed date range                                          |
+--------------------+--------------------+-----------------------------------------------------------------------+
| end_date           | until              | End of observed date range                                            |
+--------------------+--------------------+-----------------------------------------------------------------------+
| observed_event     | Observed event     |                                                                       |
+--------------------+--------------------+-----------------------------------------------------------------------+
| has_ref            | Has reference      |                                                                       |
+--------------------+--------------------+-----------------------------------------------------------------------+
| last_commenter     | Commented Last     | Only tickets that have this use commenting last.                      |
+--------------------+--------------------+-----------------------------------------------------------------------+
| not_last_commenter | Not Commented Last | Only tickets where this use is not the last commenter.                |
+--------------------+--------------------+-----------------------------------------------------------------------+
| subscriber         | Site Subscriber    | Limit tickets to tickets that have a site this user is subscribed to. |
+--------------------+--------------------+-----------------------------------------------------------------------+

Discussions

Should we replace the Ticket.duplicate_of field by a link type (an additional choice in LinkTypes) called "Duplicated/Duplicated by"? No. We had this before and preferred the field, because a field is at least one click less, and because we want users to define a clear hierarchy with a clear root ticket. You can have a group of tickets which are all direct or indirect duplicates of this "root of all other problems".

Sometimes there is nothing to do for a ticket, but it is not "sleeping" because it might become active at any moment when some kind of event happens. (e.g. a customer answers a callback, a server error occurs again). Should we introduce a new state "Waiting" to differentiate such tickets from those who went asleep due to lack of attention? Rather not. That's what "Sleeping" (also) means. A sleeping ticket can wake up any time. We just don't want to be reminded about it all the time. One challenge is that when the "trigger" occurs which would wake up the sleeping ticket. At that moment we don't want to create a new ticket just because we forgot about the sleeping one. To avoid this we must currently simply search in "All tickets" before creating a new one.

Other languages

The ticket states in German:

>>> rt.show(tickets.TicketStates, language="de")
====== =========== ================ ============= =======
 Wert   name        Text             Button text   Aktiv
------ ----------- ---------------- ------------- -------
 10     new         Neu              ⛶             Ja
 15     talk        Besprechen       ☎             Ja
 20     opened      Offen            ☉             Ja
 22     working     In Bearbeitung   ⚒             Ja
 30     sleeping    Schläft          ☾             Nein
 40     ready       Bereit           ☐             Ja
 50     closed      Abgeschlossen    ☑             Nein
 60     cancelled   Abgelehnt        ☒             Nein
====== =========== ================ ============= =======

Views reference

There are many tables used to show lists of tickets.

class lino_xl.lib.tickets.Tickets

Base class for all tables of tickets.

site

Select a site if you want to see only tickets for this site.

show_private

Show only (or hide) tickets that are marked private.

show_todo

Show only (or hide) tickets which are todo (i.e. state is New or ToDo).

show_active

Show only (or hide) tickets which are active (i.e. state is Talk or ToDo).

show_assigned

Show only (or hide) tickets that are assigned to somebody.

has_site

Show only (or hide) tickets which have a site assigned.

feasable_by

Show only tickets for which the given supplier is competent.

class lino_xl.lib.tickets.AllTickets

Shows all tickets.

class lino_xl.lib.tickets.RefTickets

Shows all tickets that have a reference.

class lino_xl.lib.tickets.PublicTickets

Shows all public tickets.

class lino_xl.lib.tickets.TicketsToTriage

Shows tickets that need to be triaged. Currently this is equivalent to those having their state set to new.

class lino_xl.lib.tickets.TicketsToTalk
class lino_xl.lib.tickets.TicketsNeedingMyFeedback

Shows tickets that are waiting for my feedback.

These are tickets in state Talk where you are not the last commenter. Only tickets on sites that you are subscribed to. Includes tickets with no comments.

class lino_xl.lib.tickets.MyTicketsNeedingFeedback

Shows tickets assigned to me and waiting for feedback from others.

Shows tickets of sites that you are subscribed to which are in state Talk where you are the last commenter.

class lino_xl.lib.tickets.UnassignedTickets
class lino_xl.lib.tickets.ActiveTickets

Show all tickets that are in an active state.

class lino_xl.lib.tickets.MyTickets

Show all active tickets reported by me.

class lino_xl.lib.tickets.TicketsByEndUser
class lino_xl.lib.tickets.TicketsByType
class lino_xl.lib.tickets.DuplicatesByTicket

Shows the tickets which are marked as duplicates of this (i.e. whose duplicate_of field points to this ticket.

class lino_xl.lib.tickets.TicketsSummary

Abstract base class for ticket tables with a summary.

class lino_xl.lib.tickets.MyTicketsToWork

Show all active tickets assigned to me.

class lino_xl.lib.tickets.TicketsBySite