# Ticket Operations and User Rights

This section describes [user rights](#user-rights) required when performing [Ticket API methods](/api-reference/tickets.md).

## **Creating and modifying ticket**

When creating or modifying [ticket](/data-models.md#ticket), specific [user rights](/user-rights.md) are required, based on payload data and whether ticket with given identifier already exists.

* `TicketCreate`: necessary when no existing ticket with given identifier is found.
* `TicketUpdate`: necessary when attempting to modify an open ticket with a given identifier. This applies when the ticket is linked to an authorized user (determined through the `employee.userName` property).
* `TicketUpdateAny`: necessary when attempting to modify an open ticket with a given identifier. This applies when the ticket is linked to a user other than the authorized user (determined through the `employee.userName` property).
* `TicketRename`: necessary when attempting to modify `name` property of an existing open ticket.
* `TicketSetDiscount`: necessary when attempting to set a non-zero value for the `discountRate` property of a new ticket or changing it from an existing ticket. If the ticket is associated with a [customer](/data-models.md#customer) (through the `customer` property), setting a value equal to the customer's discount rate (`customer.discountRate`) is allowed and doesn't require this right.
* `TicketSetCustomer`: necessary when attempting to set non-null value for `customer` property of a new ticket or changing it for an existing ticket.
* `TicketHandover`: necessary when attempting to associate ticket with user other than the authorized user (determined through the `employee.userName` property).
* `TicketTakeover`: necessary when attempting to switch the association of a ticket from a user other than the authorized user (identified through the `employee.userName` property) to the authorized user. The execution of this operation also required `TicketUpdateAny` [user right](/user-rights.md).

## **Deleting ticket**

When deleting existing opened ticket, specific [user rights](/user-rights.md) are required, based on properties of existing ticket.

* `TicketDelete`: neccessary when deleting ticket associated with authorized user (determined through the `employee.userName` property).
* `TicketUpdateAny`: necessary deleting ticket linked to a user other than the authorized user (determined through the `employee.userName` property).
* `Storno`: necessary when deleting ticket containing at least one [ticket item](/data-models.md#ticketitem) in `items` collection with a quantity greater than zero.

## Closing ticket

When closing ticket, following [user rights](#user-rights) are required:

* `TicketClose`: necessary when closing ticket.&#x20;
* `TicketCloseAny`: necessary when closing ticket linked to a user other than the authorized user (determined through the `employee.userName` property).
* `TicketCloseAs`: necessary when closing ticket in behalf of user other than the authorized user (determined through the `user.userName` property of [`TicketCloseContext`](/data-models.md#ticketclosecontext)).
* `TicketCloseToAnyFiscal`: necessary when closing a ticket on a [fiscal device](/data-models.md#fiscal) that is not the *default* fiscal device. For more details on how to evaluate the default fiscal device, please refer to the [Evaluating the Default Fiscal Name](#evaluating-the-default-fiscal-name) section.
* `TicketUpdate`: necessary when ticket is linked to an authorized user (determined through the `employee.userName` property).
* `TicketUpdateAny`: necessary when ticket is linked to a user other than the authorized user (determined through the `employee.userName` property).

### **Evaluating the Default Fiscal Name**

This section outlines the procedure for determining the default [fiscal device](/data-models.md#fiscal) for a [ticket](/data-models.md#ticket)

1. **Using Zone's defaultFiscalName Property:** The default fiscal name is extracted from the `defaultFiscalName` property of the [Zone](/data-models.md#zone) linked to the [Ticket](/data-models.md#ticket) through the [Ticket](/data-models.md#ticket)'s `location` property. If the `location` property is empty (equal to `null`), move on to the next step.
2. **Checking Device's Settings.DefaultFiscalName Property:** The `Settings.DefaultFiscalName` property of the [Device](/data-models.md#device) associated with the authorized user is checked. If the property value is equal to `null`, proceed to the next step.
3. **No Default Fiscal Name Set:** If none of the above steps yield a default fiscal name, it means that the default fiscal name is not configured. In such cases, the `TicketCloseToAnyFiscal` [user right](/user-rights.md) is not required.

## Printing preliminary ticket

When printing preliminary ticket, following [user rights](#user-rights) are required:

* `TicketPrintPreliminary`
* `TicketUpdate`: necessary when ticket is linked to an authorized user (determined through the `employee.userName` property).
* `TicketUpdateAny`: necessary when ticket is linked to a user other than the authorized user (determined through the `employee.userName` property).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.portos.sk/api-reference/tickets/ticket-operations-and-user-rights.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
