departments

This commit is contained in:
Татьяна Фарбер 2026-04-04 11:11:04 +04:00
parent 826d161eae
commit ca54af0f13
3 changed files with 226 additions and 0 deletions

View File

@ -1877,3 +1877,57 @@ timeman.start(fields)
```lua ```lua
timeman.stop(fields) timeman.stop(fields)
``` ```
# Отделы
```lua
local departments = require("bitrix.departments")
```
#### Создать подразделение `departments.add`
[departments.add](https://apidocs.bitrix24.ru/api-reference/departments/departments-add.html)
```lua
departments.add(fields)
```
#### Изменить подразделение `departments.update`
[departments.update](https://apidocs.bitrix24.ru/api-reference/departments/departments-update.html)
```lua
departments.update(id, fields)
```
#### Получить подразделение по ID `departments.get`
[departments.get](https://apidocs.bitrix24.ru/api-reference/departments/departments-get.html)
```lua
departments.get(id)
```
#### Получить список подразделений `departments.getlist`
[departments.getlist](https://apidocs.bitrix24.ru/api-reference/departments/departments-getlist.html)
```lua
departments.getlist(order, filter, select, start)
```
#### Получить справочник полей подразделения `departments.fields`
[departments.fields](https://apidocs.bitrix24.ru/api-reference/departments/departments-fields.html)
```lua
departments.fields()
```
#### Удалить подразделение `departments.delete`
[departments.delete](https://apidocs.bitrix24.ru/api-reference/departments/departments-delete.html)
```lua
departments.delete(id)
```

54
bitrix/department.lua Normal file
View File

@ -0,0 +1,54 @@
local _M = require('bitrix.api')
local array = require('utils.array')
_M.departments = {}
--[[
Департаменты (departments.*)
--]]
-- https://apidocs.bitrix24.ru/api-reference/departments/departments-add.html
function _M.departments.add(fields)
return _M.post('department.add', { ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/departments/departments-update.html
function _M.departments.update(id, fields)
return _M.post('department.update', { ['ID'] = id, ['fields'] = fields })
end
-- https://apidocs.bitrix24.ru/api-reference/departments/departments-get.html
function _M.departments.get(id)
return _M.post('department.get', { ['ID'] = id })
end
-- https://apidocs.bitrix24.ru/api-reference/departments/departments-getlist.html
function _M.departments.getlist(order, filter, select, start)
select = select or {'*'}
return _M.fetchAllPages(function(startPos)
return _M.post('department.getlist', {
['order'] = order,
['filter'] = filter,
['select'] = select,
['start'] = startPos
}, true)
end, start)
end
-- https://apidocs.bitrix24.ru/api-reference/departments/departments-fields.html
function _M.departments.fields()
return _M.post('department.fields', {})
end
-- https://apidocs.bitrix24.ru/api-reference/departments/departments-delete.html
function _M.departments.delete(id)
return _M.post('department.delete', { ['ID'] = id })
end
return _M

118
test_department.lua Normal file
View File

@ -0,0 +1,118 @@
local json = require('cjson')
local log = require('utils.log')
local departments = require('bitrix.departments')
-- Настройка логирования
log.outfile = 'logs/tests_departments_live_'..os.date('%Y-%m-%d_%H-%M-%S')..'.log'
log.level = 'trace'
log.info("===== СТАРТ ТЕСТИРОВАНИЯ (РЕЖИМ LIVE) =====")
--=== ТЕСТЫ ===--
local function test_departments_fields()
log.info('--- Тест: Получение справочника полей (fields) ---')
local result, error_response = departments.departments.fields()
if result then
log.info('Тест полей: УСПЕШНО.')
log.debug('Пример поля: NAME - ' .. result.NAME)
else
log.error('Тест полей: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
local function test_departments_add()
log.info('--- Тест: Создание подразделения (add) ---')
-- Создадим тестовый отдел с уникальным именем
local dept_name = "Test Dept - " .. os.date("%H-%M-%S")
local fields = {
NAME = dept_name,
SORT = 100,
PARENT_ID = 1 -- Родительский отдел (обычно 1 - компания)
}
local result, error_response = departments.departments.add(fields)
if result and result.ID then
log.info(string.format('Тест создания: УСПЕШНО. ID нового отдела: %d', result.ID))
return result.ID -- Возвращаем ID для тестов обновления и удаления
else
log.error('Тест создания: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
return nil
end
end
local function test_departments_getlist(dept_name)
-- Этот тест запускается после создания отдела, чтобы найти его в списке
if not dept_name then return end
log.info('--- Тест: Получение списка подразделений (getlist) ---')
-- Используем фильтр по имени, чтобы найти наш только что созданный отдел
local filter = {
NAME = dept_name
}
local result_list, error_response = departments.departments.getlist({'NAME'}, filter, {'ID', 'NAME'}, 0)
if result_list and #result_list > 0 then
log.info(string.format('Тест getlist: УСПЕШНО. Найдено отделов по фильтру: %d', #result_list))
-- Проверим, что имя первого найденного отдела совпадает с искомым
if result_list[1].NAME == dept_name then
log.debug('Проверка имени: УСПЕШНО. Найден отдел: ' .. result_list[1].NAME)
else
log.warning('Найден отдел, но имя не совпадает с искомым.')
end
else
log.error('Тест getlist: ПРОВАЛЕНО. Отдел не найден в списке.')
if error_response then log.error(error_response) end
end
end
local function test_departments_update(new_dept_id)
if not new_dept_id then return end
log.info('--- Тест: Обновление подразделения (update) ---')
local fields = {
NAME = "Updated Test Dept - " .. os.date("%H-%M-%S") -- Меняем имя
}
local result, error_response = departments.departments.update(new_dept_id, fields)
if result and result.result then
log.info('Тест обновления: УСПЕШНО.')
else
log.error('Тест обновления: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
end
local function test_departments_delete(new_dept_id)
if not new_dept_id then return end
log.info('--- Тест: Удаление подразделения (delete) ---')
local result, error_response = departments.departments.delete(new_dept_id)
if result and result.result then
log.info('Тест удаления: УСПЕШНО.')
else
log.error('Тест удаления: ПРОВАЛЕНО.')
if error_response then log.error(error_response) end
end
--=== ЗАПУСК ТЕСТОВ ===--
test_departments_fields()
local dept_name_for_list = "Test Dept - " .. os.date("%H-%M-%S") -- Сохраняем имя для теста getlist
local new_dept_id = test_departments_add()
test_departments_getlist(dept_name_for_list) -- <-- ЗДЕСЬ ВЫЗОВ getlist
test_departments_update(new_dept_id)
test_departments_delete(new_dept_id)
log.info("===== ЗАВЕРШЕНИЕ ТЕСТИРОВАНИЯ =====")