# commands

## Time

This command take no attributes and returns the current servertime.

### time

Returns an *ElementTree* object.

```python
print(commands.Time().tostring())
>>> b'<Time/>'
```

> Supports `tostring()` and `prettify()`.

## Read

This command is used to read objects.

| **attribute** | **type** | **description**                                                                                                                      |
| ------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| type          | String   | an OpenAir complex type                                                                                                              |
| method        | String   | one of: all, equal to, not equal to, custom equal to, user, project, not exported                                                    |
| attribs       | Dict     | one of: limit, deleted, include\_flag&#x73;*, \_include\_nondeleted*, \_with\_project\_only, base\_currency, generic, enable\_custom |
| filters       | List     | a list of Filter objects                                                                                                             |
| orderby       | Dict     | keys: field, order (default 'asc')                                                                                                   |
| fields        | List     | a list of field names                                                                                                                |

### read

Returns an *ElementTree* object.

```python
xml_data = commands.Read(
    'Slip',
    'all',
    {'limit': '0, 1000'},
    None,
    None,
    ['customerid', 'id', 'projectid']
).read()

print(xml_data)
>>> b'<Read limit="0, 1000" method="all" type="Slip"><_Return><customerid /><id /><projectid /></_Return></Read>'
```

> Supports `tostring()` and `prettify()`.

## Read.Filter

This command is used to create read filter objects.

| **attribute** | **type**       | **description**                                                                                                                                                                                                                                                                                                           |
| ------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| filter        | String \| None | one of: open-envelopes, open-envelopes, approved-envelopes, rejected-envelopes, submitted-envelopes, nonreimbursed-envelopes, reimbursable-envelope, open-slips, approved-slips, open-timesheets, approved-timesheets, rejected-timesheets, submitted-timesheets, not-exported, approved-revenue-recognition-transactions |
| field         | String \| None | a field name to filter on                                                                                                                                                                                                                                                                                                 |
| datatype      | Datatype       | a datatype.Datatpe object                                                                                                                                                                                                                                                                                                 |

### getFilter

Returns a dictionary containing filter data.

```python
date = datatypes.Datatype(
    'Date',
    {
        'month': '11',
        'day': '24',
        'year': '2013'
    }
)

slip = datatypes.Datatype(
    'Slip',
    {
        'customerid': '7',
        'projectid': '14'
    }
)

filter1 = commands.Read.Filter(
    'older-than',
    'date',
    date
).getFilter()

filter2 = commands.Read.Filter(
    None,
    None,
    slip
).getFilter()

xml_data = commands.Read(
    'Slip',
    'equal to',
    {'limit': '0, 1000'},
    [filter1, filter2],
    None,
    ['customerid', 'id', 'projectid']
).read()

print(xml_data)
>>> b'<Read field="date" filter="older-than" limit="0, 1000" method="equal to" type="Slip"><Date><year>2013</year><day>24</day><month>11</month></Date><Slip><projectid>14</projectid><customerid>7</customerid></Slip><_Return><customerid /><id /><projectid /></_Return></Read>'
```

## Report

Use the Report command to run a report and email a PDF copy of a Timesheet, Envelope (Exp Report), or Saved report.

| **attribute** | **type** | **description**                                                   |
| ------------- | -------- | ----------------------------------------------------------------- |
| type          | String   | an OpenAir complex type                                           |
| report        | Datatype | a datatype.Datatype object; one of Timesheet, Envelope, or Report |

### getReport

Returns an *ElementTree* object.

```python
# create datatype object
report = datatypes.Datatype(
    'Timesheet',
    {
        'relatedid': '1286',
        'email_report': '1'
    }
)

# create report object
xml_data = commands.Report(
    'Timesheet',
    report
)
print(xml_data.tostring())
>>> b'<Report type="Timesheet"><Timesheet><relatedid>1286</relatedid><email_report>1</email_report></Timesheet></Report>'
```

> Supports `tostring()` and `prettify()`.

## Add

Use the Add command to add records.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| type          | String   | an OpenAir complex type   |
| attribs       | Dict     | one of: enable\_custom    |
| datatype      | Datatype | a datatype.Datatpe object |

### add

Returns an *ElementTree* object.

```python
# create datatype object for adding a date record
date = datatypes.Datatype(
    'Date',
    {'month': '06', 'day': '10', 'year': '2013'}
)

# create datatype object for adding a record
project = datatypes.Datatype(
    'Project',
    {'name': 'New project', 'customerid': '7', 'userid': '1', 'start_date': date}
)

# create add object
xml_data = commands.Add('Project', {}, project)
print(xml_data.tostring())
>>> b'<Add type="Project"><Project><start_date><Date><year>2013</year><day>10</day><month>06</month></Date></start_date><userid>1</userid><name>New project</name><customerid>7</customerid></Project></Add>'
```

> Supports `tostring()` and `prettify()`.

## Delete

Use the Delete command to delete records.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| type          | String   | an OpenAir complex type   |
| datatype      | Datatype | a datatype.Datatpe object |

### delete

Returns an *ElementTree* object.

```python
slip = datatypes.Datatype(
    'Slip',
    {'id': '1428'}
)
xml_data = commands.Delete('Slip', slip)
print(xml_data.tostring())
>>> b'<Delete type="Slip"><Slip><id>1428</id></Slip></Delete>'
```

> Supports `tostring()` and `prettify()`.

## Modify

Use the Modify command to modify records.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| type          | String   | an OpenAir complex type   |
| attribs       | Dict     | one of: enable\_custom    |
| datatype      | Datatype | a datatype.Datatpe object |

### modify

Returns an *ElementTree* object.

```python
# create datatype object for modifying a record
invoice = datatypes.Datatype(
    'Invoice',
    {'id': '476'}
)

# create modify object
xml_data = commands.Modify('Invoice', {}, invoice)
print(xml_data.tostring())
>>> b'<Modify type="Invoice"><Invoice><id>476</id></Invoice></Modify>'
```

> Supports `tostring()` and `prettify()`.

## ModifyOnCondition

Use the ModifyOnCondition command to perform actions such as updating the external\_id of a record type only if the update time on the OpenAir server is older.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| type          | String   | an OpenAir complex type   |
| datatype1     | Datatype | a datatype.Datatpe object |
| datatype2     | Datatype | a datatype.Datatpe object |

### modify

Returns an *ElementTree* object.

```python
# create datatype object for modifying a record
invoice = datatypes.Datatype(
    'Invoice',
    {'id': '476', 'external_id': '123456789'}
)

date = datatypes.Datatype(
    'Date',
    {'month': '03', 'day': '14', 'year': '2012', 'hour': '08', 'minute': '35', 'second': '43'}
)

# create modifyoncondition object
xml_data = commands.ModifyOnCondition('Invoice', invoice, date)
print(xml_data.tostring())
>>> b'<ModifyOnCondition condition="if-not-updated" type="Invoice"><Invoice><id>476</id><external_id>123456789</external_id></Invoice><Date><hour>08</hour><month>03</month><second>43</second><year>2012</year><day>14</day><minute>35</minute></Date></ModifyOnCondition>'
```

> Supports `tostring()` and `prettify()`.

## Submit

Use the Submit command to submit records for approval.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| type          | String   | an OpenAir complex type   |
| datatype      | Datatype | a datatype.Datatpe object |
| approval      | Datatype | a datatype.Datatpe object |

### submit

Returns an *ElementTree* object.

```python
# create datatype object to submit
timesheet = datatypes.Datatype(
    'Timesheet',
    {'id': '476'}
)

# create datatype object for approval
approval = datatypes.Datatype(
    'Approval',
    {'cc': 'name@company.com', 'notes': 'submit notes'}
)

# create submit object
xml_data = commands.Submit('Timesheet', timesheet, approval)
print(xml_data.tostring())
>>> b'<Submit type="Timesheet"><Timesheet><id>476</id></Timesheet><Approval><cc>name@company.com</cc><notes>submit notes</notes></Approval></Submit>'
```

> Supports `tostring()` and `prettify()`.

## CreateAccount

Use the CreateAccount command to create a new OpenAir account.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| company       | Datatype | a datatype.Datatpe object |
| user          | Datatype | a datatype.Datatpe object |

### create

Returns an *ElementTree* object.

```python
# create datatype object for company
company = datatypes.Datatype(
    'Company',
    {'nickname': 'New Account'}
)

# create datatype object for user
user = datatypes.Datatype(
    'User',
    {'nickname': 'JAdmin', 'password': 'p@ssw0rd', 'email': 'jadmin@company.com'}
)

# create createaccount object
xml_data = commands.CreateAccount(company, user)
print(xml_data.tostring())
>>> b'<CreateAccount><Company><nickname>New Account</nickname></Company><User><password>p@ssw0rd</password><nickname>JAdmin</nickname><addr><Address><email>jadmin@company.com</email></Address></addr></User></CreateAccount>'
```

> Supports `tostring()` and `prettify()`.

## CreateUser

Use the CreateUser command to create a new OpenAir user.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| company       | Datatype | a datatype.Datatpe object |
| user          | Datatype | a datatype.Datatpe object |

### create

Returns an *ElementTree* object.

```python
# CreateUser is identical to CreateAccount
xml_data = commands.CreateUser(company, user)
print(xml_data.tostring())
>>> b'<CreateUser><Company><nickname>New Account</nickname></Company><User><password>p@ssw0rd</password><nickname>JAdmin</nickname><addr><Address><email>jadmin@company.com</email></Address></addr></User></CreateUser>'
```

> Supports `tostring()` and `prettify()`.

## Switch

Use the Switch command to customize the appearance of the product using switches and settings.

| **attribute** | **type** | **description**           |
| ------------- | -------- | ------------------------- |
| type          | String   | an OpenAir complex type   |
| user          | Datatype | a datatype.Datatpe object |

### switch

Returns an *ElementTree* object.

```python
flag = datatypes.Datatype(
    'Flag',
    {'name': '_switch_name', 'setting': '1'}
)
xml_data = commands.Switch('User', flag)
print(xml_data.tostring())
>>> b'<User><flags><Flag><setting>1</setting><name>_switch_name</name></Flag></flags></User>'
```

> Supports `tostring()` and `prettify()`.

## MakeURL

Use the MakeURL command to obtain a URL for a specific application and screen.

| **attribute** | **type** | **description**                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| uid           | String   | the id of a valid logged in user                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| page          | String   | one of: default-url, company-settings, currency-rates, import-export, custom-fields, list-reports, list-customers, list-projects, list-prospects, list-resources, list-timesheets, create-timesheet, list-timebills, list-invoices, create-invoice, list-envelope-receipts, list-envelopes, create-envelope, create-envelope-receipt, dashboard, list-purchase-requests, quick-search-resources, custom-search-resources, view-invoice, dashboard-project, grid-timesheet, report-timesheet |
| app           | String   | one of: 'km', 'ma', 'pb', 'rm', 'pm', 'ta, 'te', or 'tb'                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| arg           | Datatype | a datatype.Datatpe object                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |

### makeurl

Returns an *ElementTree* object.

```python
timesheet = datatypes.Datatype('Timesheet', {'id': '1245'})
xml_data = commands.MakeURL('1', 'grid-timesheet', 'ta', timesheet)
print(xml_data.tostring())
>>> b'<MakeURL><arg><Timesheet><id>1245</id></Timesheet></arg><uid>1</uid><page>grid-timesheet</page><app>ta</app></MakeURL>'
```

> Supports `tostring()` and `prettify()`.


---

# 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://23maverick23.gitbook.io/oaxmlapi/docs/commands.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.
