...

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

Тема в разделе "Примеры сценариев", создана пользователем 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));

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