Инструкция предоставляет запросы и параметры, для использования фильтров для методов API.


Фильтры это не простые пары ключ/значение (key/value), а бесключевые массивы из определений фильтра. Каждое определение фильтра представляет собой массив, и значения массива изменяются для каждого типа фильтра.

Для каждого определения фильтра требуется как минимум «тип»(type). Тип ссылается на ключ конфигурации, такой как «равный», «неравный», «между»( eq, neq, between).

Для каждого определения фильтра требуется как минимум «поле»(field). Это имя поля целевого объекта.

Встроенная логика, как и (x или y), поддерживается через типы фильтров AndX и OrX.


Все запросы для получения данных, выполняются:

- Request Method GET  


Пример запроса:


$request = [
    'filter' => [ 
         [      
            'type'  => 'eq',  // Тип - Equal
            'field' => 'name',   //  Поле - Сущность
            'value' => 'Tom'  // Значение - Значение сущности
         ],      
    ],
];



В URL вписываете раздел и подраздел в котором будете фильтровать ->  & добавляете запрос фильтра 


Это будет выгладить вот так: https://panel.orderadmin.ru/api/*раздел*/*подраздел*?filter[0][type]=eq&filter[0][field]=*name*&filter[0][value]=*Tom*



Если вам необходимо получить данные о проводках по счету для сущности с id=1945784,  запрос фильтра будет выглядеть, вот так:

Используем тип Eq , для получения конкретных данных:

$request = [
    'filter' => [
        [
            'type'  => 'eq',      // Тип - Equal
            'field' => 'id',          // Поле - Сущность
            'value' => '1945784'     // Значение - Значение сущности
        ],
    ],
];


В строке URL, будет выглядеть запрос вот, так -> Пример: https://panel.orderadmin.ru/api/accounts/transaction?filter[0][type]=eq&filter[0][field]=id&filter[0][value]=1945784


*В ответ система вернет вам данные о проводке по счету с id - 1945784.


Если вам необходимо получить транзакции по поступлению денежных средств со статусом "подтвержден" , вы делаете запрос:

Используем тип Eq , для получения конкретных данных:

$request =  [ 
        'filter'  =>  [ 
            [ 
                    'type'  => 'eq' ,       // Тип - Equal 
                    'field'  => 'rateModifier',   // Поле - Сущность
                    'value' => '28'  // Значение - Значение сущности (поступление денежных средств в ОА = 28 )  
            ] , 
            [ 
                    'type' => 'eq' ,       // Тип - Equal 
                    'field' => 'state' ,  // Поле - Тип сущности
                    'value' => 'confirmed'   // Значение - "подтвержден" 
            ] , 
        ] 
    ];



В строке URL, будет выглядеть запрос вот, так -> Пример: https://panel.orderadmin.ru/api/accounts/transaction?filter[0][type]=eq&filter[0][field]=rateModifier&filter[0][value]=28&filter[1][type]=eq&filter[1][field]=state&filter[1][value]=confirmed


*В ответ система вернет вам все транзакции по поступлении денежных средств со статусом "подтвержден".



Если вам необходимо получить id тарифа на доставку, например, службы доставки "Почта России" вы делаете запрос:

Используем тип Eq , для получения конкретных данных:

$request = [
    'filter' => [
        [
            'type'  => 'eq',      // Тип - Equal
            'field' => 'deliveryService',          // Поле - поиск по службе доставки
            'value' => '9'     // Значение - Значение сущности, id  ПР = 9
        ],
        [
            'type' => 'eq',      // Тип - Equal
            'field' => 'state',    // Поле - поиск по статусу
            'value' => 'active'    // Значение - Значение сущности
        ],
    ],
];


В строке URL, будет выглядеть запрос вот, так -> Пример: https://panel.orderadmin.ru/api/delivery-services/rates?filter[0][type]=eq&filter[0][field]=deliveryService&filter[0][value]=9&filter[1][type]=eq&filter[1][field]=state&filter[1][value]=active 


*В ответ система вернет вам все активные тарифы Почты России.


Если вам необходимо получить данные сразу по несколько заказам (например, 601247 и 601269): 

Используем тип In, для получения пакетных данных:

$request =  [
        'filter'  =>  [
            [
                    'type'  => 'in' ,       // Тип - In
                    'field'  => 'id' ,      //  Поле - Сущность
                    'values' => [           // Значения - 601247 и 601269
                        '601247',           
                        '601269'
                    ] ,  
            ] ,
        ]
    ] ;



В строке URL, будет выглядеть запрос вот, так -> Пример: https://panel.orderadmin.ru/api/delivery-services/requests?filter[0][type]=in&filter[0][field]=id&filter[0][values][0]=601247&filter[0][values][1]=601269


*В ответ система вернет вам все данные о заявках на доставку с id - 601247 и 601269.



Если вам необходимы данные о транзакциях по внешним Id, то запрос будет выглядеть, вот так:

Пользуемся типом In, для получения пакетных данных:

$request =  [
        'filter'  =>  [
                    'type'  => 'in' ,       // Тип - In
                    'field'  => 'extId',     //  Поле - Сущность
                    'values' =>   [        // Значения - 1964293, 1964292 и 1948335
                         '1964293', 
                        '1964292',
                        '1948335'
                    ] ,
        ] ,
    ];



В строке URL, будет запрос выглядеть вот, так -> Пример: https://panel.orderadmin.ru/api/accounts/transactions?filter[0][type]=in&filter[0][field]=extId&filter[0][values][0]=1964293&filter[0][values][1]=1964292&filter[0][values][2]=1948335


*В ответ система вернет вам все данные по транзакциям с внешними Id, которые вы указали.


Если вам необходимо получить данные о городах, которые обслуживаются службами доставок, например Сдэк, Почта России и ИМЛ( в ОА id этих служб доставок = 1,9 и 25)

Пользуемся типом In, для получения пакетных данных:


$request =  [
        'filter'  =>  [
               [
                    'type'  => 'in' ,                       // Тип - In
                    'field'  => 'deliveryServices',  //  Поле - Сущность
                    'values' =>   [                      // Значения - 1,9,25 (в ОА это id служб.достав.)
                         '1', 
                         '9',
                       '25'
                    ] ,
               ],
       ] ,
    ];



В строке URL, будет запрос выглядеть вот, так -> Пример: https://panel.orderadmin.ru/api/delivery-services/delivery-service-city?filter[0][type]=in&filter[0][field]=deliveryService&filter[0][values][0]=1&filter[0][values][1]=9&filter[0][values][2]=25


*В ответ система вернет вам все города которые обслуживаются службами доставок - Сдэк, Почта России и ИМЛ.


Если вам необходимо получить данные о местоположении с типом "город", запрос будет выглядеть, вот так:

Пользуемся типом In, для получения пакетных данных:

$request =  [
        'filter'  =>  [
                [
                    'type'  => 'in' ,       // Тип - In
                    'field'  => 'state',  //  Поле - Сущность
                    'values' => [ 'город' ]   // Значения - Значение сущности    
                ],              
       ] ,
    ];



В строке URL, будет запрос выглядеть вот, так -> Пример: https://panel.orderadmin.ru/api/locations/localities?filter[0][type]=in&filter[0][field]=state&filter[0][values]=город


*В ответ система вернет вам все местоположения с типом "город".



Объединение Сущностей и Aliasing Запросы


Существует встроенный тип запроса для внутреннего соединения, поэтому для каждого типа фильтра имеется необязательный псевдоним(alias). Псевдоним(alias) по умолчанию это row(строка) и относится к сущности, лежащей в основе ресурса REST. Нет фильтра для добавления других сущностей о возврате данных. То есть, только оригинальный целевой ресурс, который по умолчанию - row(строка), будет возвращать результат независимо от того, какие фильтры или заказы применяются через этот модуль.


Этот пример показывает, как отчет присоединяется к полю через внутреннее соединение, уже определенное в сущности строки, а затем фильтрует для r.id = 2:



$request =  [
        'filter'  =>   [
            [
                    'type'  => 'innerjoin' ,     // Тип - Innerjoin
                    'field'  => 'report',        //  Поле - Сущность
                    'alias' => [ 'r' ]           //    Псевдоним (report => r)(необязательно)          
            ] ,
            [      'type' => 'eq',     // Тип - Equal
                    'alias' => 'r',      //  Псевдоним (report => r)(необязательно)
                    'field' => 'id',    // Поле - Сущности
                    'value' => '2'   // Значение - Имя сущности
            ],
       ] ,
    ];



Вы можете сделать внутреннее объединение таблиц из внутреннего соединения использую родителя Alias:

$request =  [
        'filter'  =>   [
              [
                    'type'  => 'innerjoin' ,     // Тип - Innerjoin
                    'parentAlias'  => 'r',    //  Родитель псевдонима
                    'field' =>  'owner',      //   Поле - сущность  
                    'alias' => 'o'           // Псевдоним (owner => o)
               ],
        ],                          
    ];


Включенные типы фильтров:


Equals(Равный):

$request =  [
        'filter'  =>   [
             [
                    'type'  => 'eq' ,       // Тип - Equal
                    'field' =>  'fieldName',      //   Поле -  Имя сущности  
                    'value' => 'matchValue'     // Значение - Соответствовать сущности
             ],
        ],                          
    ];


Not Equals(Не равны):

$request =  [
        'filter'  =>   [
              [
                    'type'  => 'neq' ,       // Тип - Not equal
                    'field' =>  'fieldName',       //   Поле -  Имя сущности  
                    'value' => 'matchValue'     // Значение - Соответствовать сущности
              ],
        ],                          
    ];


Less than(Меньше, чем):

$request =  [
        'filter'  =>   [
              [
                    'type'  => 'lt' ,       // Тип - Less than
                    'field' =>  'fieldName',      //   Поле -  Имя сущности  
                    'value' => 'matchValue'     // Значение - Соответствовать сущности
              ],
        ],                          
    ];


Less Than or Equals(Меньше, чем или равный):

$request =  [
        'filter'  =>   [
               [
                    'type'  => 'lte' ,       // Тип - Less than or Equals
                    'field' =>  'fieldName',       //   Поле -  Имя сущности  
                    'value' => 'matchValue'     // Значение - Соответствовать сущности
               ],
        ],                          
    ];


Greater Than(Больше, чем):

$request =  [
        'filter'  =>   [
              [
                    'type'  => 'gt' ,       // Тип - Greater than
                    'field' =>  'fieldName',       //   Поле -  Имя сущности  
                    'value' => 'matchValue'     // Значение - Соответствовать сущности
              ],
        ],                          
    ];


Greater Than or Equals(Больше, чем):

$request  =  [
        'filter'  =>   [
                [
                    'type'  => 'gte' ,       // Тип - Greater than or Equals
                    'field' =>  'fieldName',      //   Поле -  Имя сущности  
                    'value' => 'matchValue'     // Значение - Соответствовать сущности
                ],
        ],                          
    ];


Is Null(Равно нулю):

$request  =  [
        'filter'  =>   [
               [
                    'type'  => 'isnull' ,       // Тип - Is Null
                    'field' =>  'fieldName'       //   Поле -  Имя сущности  
               ],
        ],                          
    ];


Is Not Null(Не равно нулю):

$request  =  [
        'filter'  =>   [
               [
                    'type'  => 'isnotnull' ,       // Тип - Is not null
                    'field' =>  'fieldName'       //   Поле -  Имя сущности  
               ],
        ],                          
    ];



Примечание: Даты в In и NotIn фильтрах не обрабатываются как даты. Рекомендуется использовать множественные запросы для равенства вместо фильтров для типов данных даты.

In:

$request  =  [
        'filter'  =>   [
              [
                    'type'  => 'in' ,       // Тип - In
                    'field' =>  'fieldName',      //   Поле - Имя сущности
                    'value' => [ 1, 2, 3 ]      // Значение -  значение сущности
              ],
        ],                          
    ];


NotIn:

$request  =  [
        'filter'  =>   [
               [
                    'type'  => 'notin' ,       // Тип - Not in
                    'field' =>  'fieldName',    //   Поле -  Имя сущности
                    'value' => [ 1, 2, 3 ]    // Значение -  значение сущности
                ],
        ],                          
    ];


Between:

$request  =  [
        'filter'  =>   [
               [
                    'type'  => 'between' ,       // Тип - Between
                    'field' =>  'fieldName',      // Поле - Имя Сущности
                    'from' => 'startValue',    // Значение -  начальное значение
                    'to'    => 'endValue'      // Значение -  конечное значение
               ,
        ],                          
    ];


Like (% используется как символ-джокер):

$request  =  [
        'filter'  =>   [
               [
                    'type'  => 'like' ,       // Тип - Like
                    'field' =>  'fieldName',       //   Поле -  Имя сущности
                    'value' => 'like%search'      // Значение -  значение сущности
               ],
        ],                          
    ];



Is является членом Of:

$request  =  [
        'filter'  =>   [
               [
                    'type'  => 'ismemberof' ,       // Тип - Is member Of
                    'field' =>  'fieldName' ,      //   Поле -  Имя сущности
                    'value' => '1'     // Значение -  значение сущности
                ],
        ],                          
    ];


AndX:

В запросах AndX условия представляют собой массив типов фильтров для любого из описанных здесь. Соединение всегда будет, и поэтому параметр where внутри условий игнорируется. Параметр where в типе фильтра AndX не игнорируется.

$request  =  [
        'filter'  =>   [
            [
                    'type'  => 'andx' ,       // Тип - AndX
                    'conditions' =>  [         // Условия
                          [ 'field' => 'name', 'type' => 'eq', 'value' => 'ArtistOne'],   // Поле/Тип/Значение
                          [ 'field' => 'name', 'type' => 'eq', 'value' => 'ArtistTwo'],   // Поле/Тип/Значение
            ],
                    'where' =>  'and'       //   Соединение
           ] ,
        ],                          
    ];


OrX:

В запросах OrX условия представляют собой массив типов фильтров для любого из описанных здесь. Соединение всегда будет или параметр where внутри условий игнорируется. Параметр where в типе фильтра OrX не игнорируется.

$request  =  [
        'filter'  =>   [
            [
                    'type'  => 'orx' ,       // Тип - OrX
                    'conditions' =>  [      // Условия
                          [ 'field' => 'name', 'type' => 'eq', 'value' => 'ArtistOne'],  // Поле/Тип/Значение
                          [ 'field' => 'name', 'type' => 'eq', 'value' => 'ArtistTwo'],  // Поле/Тип/Значение
            ],
                    'where' =>  'and'       //   Соединение
           ] ,
        ],                          
    ];


Включенный заказ по типу

Field(Поле):

$request  =  [
        'filter'  =>   [
               [
                    'type'  => 'field' ,       // Тип - Поле
                    'field' =>  'fieldName' ,      //   Поле -  Имя сущности
                    'direction' => 'desc'     // Направление - Направление сущности
                ],
        ],                          
    ];



*Вы должны войти в систему(log in), если работаете через браузер. Если делаете через API, то должны использовать Basic-авторизацию. Логин - публичный ключ, пароль - приватный.



Для получения частичных совпадений строк используем тип 'ilike':

$request = [
    'filter' => [ 
         [      
            'type'  => 'ilike',  // Используем тип 'ilike' для получения частичных совпадений строк
            'field' => 'name',   //  Сущность - поиск по имени
            'value' => 'Новико%'  //  Значение сущности и обязательно ставим % для поиска всех комбинации 
         ],      
    ],
];