...

Получаем всю орг.структуру.

Тема в разделе "Скрипты и разработка", создана пользователем sabir, 12 май 2023.

  1. sabir

    sabir Участник

    Иногда для решения определенных задач необходимо получить оргструктуру целиком.

    Примером такой необходимости могут быть построение отчетов или распределение задач.


    Код:
    
    
    declare const consoleany;

    // Структура финального JSON
    type Json_org = {
            
    name:string,
            
    departmentstring,
            
    groupstring,
            
    positionstring,
            
    employeeany,
            
    id:any,
            
    _children:Json_org[]
    }

    // Объект для наполнения
    let arr_json_orgJson_org [] = [];


    // Рекурсия, собираем данные по каждому элементу орг.стр
    async function rec (stranyarr_jorgJson_org []): Promise<void> {

        for(
    let for_arr_jorg of arr_jorg){
           
            for(
    let i 0str.lengthi++){

                if(
    str[i] != null){

                    if(
    str[i]["parent"] == for_arr_jorg["id"]){

                        
    let str_id str[i]["__id"];

                        
    let new_record = {} as Json_org;

                        if(
    str[i]["type"] == "DEPARTMENT"){

                            
    new_record.department "Отдел";
                            
    new_record.id str[i]["__id"];
                            
    new_record.name str[i]["name"];
                            
    new_record._children = [];

                            
    for_arr_jorg._children.push(new_record);

                        }
                       
                        if(
    str[i]["type"] == "GROUP"){

                            
    new_record.group "Группа";
                            
    new_record.id str[i]["__id"];
                            
    new_record.name str[i]["name"];
                            
    new_record._children = [];

                            
    for_arr_jorg._children.push(new_record);

                        }
                       
                        if(
    str[i]["type"] == "POSITION"){

                            
    new_record.position "Должность";


                            
    // Ищем сотрудника назначенного на должность.
                            //const deps = await System.organisationStructure.search().where((i,g) => g.and(i.__id.eq(str_id), i.__deletedAt.eq(null))).all();
               
                            //const position = await System.users.search().where((f,g) => g.and(f.osIds.has(deps[0]), f.__deletedAt.eq(null))).first();


                            
    new_record.id str[i]["__id"];
                            
    new_record.name str[i]["name"];
                            
    new_record._children = [];

                            
    for_arr_jorg._children.push(new_record);

                        }
                        
    //Необязательно.
                        
    delete str[i]
                    }

                }

            }

            if(
    for_arr_jorg._children.length && for_arr_jorg._children != undefined){

               
    await rec(str,for_arr_jorg._children);             

            }

        }   
    }


    // Получаем данные для передачи в рекурсивную функцию.
    async function test (): Promise<void>  {

        const 
    res await fetch('https://URL.elma365.ru/api/query/system/orgstruct/items?size=10000&active=true', {
                    
    method'GET'
                
    });

        const 
    product await res.json();

        for(
    let for_product of product["result"]){

            if(!
    for_product["parent"]){

                
    let new_record = {} as Json_org;
               
                if(
    for_product["type"] == "DEPARTMENT"){

                    
    new_record.department "Отдел";

                }else if(
    for_product["type"] == "GROUP"){

                    
    new_record.group "Группа";

                }else if(
    for_product["type"] == "POSITION"){

                    
    new_record.position "Должность";

                }

                
    new_record.id for_product["__id"];
                
    new_record.name for_product["name"];
                
    new_record._children = [];

                
    arr_json_org.push(new_record);

            }

        }


        
    await rec(product["result"], arr_json_org);
        
    console.log(JSON.stringify(arr_json_org));

    }
    Скрипт тестировался на стороне клиента