U
    j                     @   s   d dl Z d dlmZ d dlZd dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlT d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ G dd deeeeejZdS )    N)deepcopy)Path)DictIterator)*)cmf_plugin_csv)CmfPluginCsvAssetsMixin)CmfPluginCsvLocationsMixin)CmfPluginCsvTasksMixin)CmfPluginCsvTestcasesMixincmf_contextc                   @   s<  e Zd ZU dZe ed< dZedd Z	e
dddZeee dd	d
Zdd Zeeeef dddZeee
dddZdd ZeeedddZdd Zdd Zdd Zdd Zdd  Zd;ed!d"d#Zd<ed$d%d&Zd'd( Zd)d* Z d+d, Z!d-d. Z"d=d/d0Z#d1d2 Z$d3d4 Z%d5d6 Z&d7d8 Z'd9d: Z(dS )>CmfPluginCsvN_loggerr   c                  C   s|  dt j t jjdddgddt j t jjdgddt j t jjdgddt j t jjdgdd	t j t jjdgdd
t j	 t j	jdddgddt j
 t j
jdddgddt j t jjdgddt j t jjdgddt j t jjdddgddt j t jjddgddt j t jjddgddt j t jjddt j t jjdddt j t jjddg} | S )uR   Собственный магазин при выборе импорта из Jirau#   Поля пользователейCmfTaskZCmfTestplanCmfTestcase)captionfieldsiconZavailable_foru!   Поля контрагентовu   Поля задачu,   Оперативная гант-задачаu   Журнал работu!   Поля комментариевu   Поля проектовu"   Поля списков задачu   Поля компонентовu   Поля группu   Поля активовu   Поля локацийu   Поля тесткейсов)r   r   r   u2   Поля тесткейсов тестплановT)r   r   r   Zhiddenu*   Поля выполнения тестов)models	CmfPersonimport_shop_fieldsr   
CmfCompanyr   CmfGanttTaskZCmfTimeTrackerHistoryZCmfTimeTrackerZ
CmfComment
CmfProjectCmfListCmfComponentZCmfPersonGroupCmfAssetCmfLocationr   ZCmfTestplanTestcaseZCmfTestcaseRun)res r    +./modules/settings/models/cmf_plugin_csv.pycalc_models_settings!   sz    
 
 
 
 
 
 
 
 
 
 
 
 

 
  z!CmfPluginCsv.calc_models_settings)returnc              	   C   s   |j }d}d}z | |}t|D ]\}}q"W n tk
rn   d| d| }| j| t|dd d}Y nb tk
r   | jd| d|  d}Y n4 tt	fk
r   | jd| d|  d}Y nX |S )	NFr   uK   Не корректный формат загружаемого файла :T)abort*   Приложен пустой файл CSVu5   Не удаётся прочитать строчку)
full_path_file	_get_file	enumerateUnicodeDecodeErrorr   	exceptionZ	cmf_alertStopIterationIOError
ValueError)self
attachmentZ	file_path
have_errorZnum	file_read_msgr    r    r!   _check_fileF   s&    

zCmfPluginCsv._check_filec              	   c   s   t | j}|jdkrLtt|}|d}| D ]}dd |D V  q4n~|jdkrt	t|}|j
}|jddD ]
}|V  qvnF|jdkrtd	 t|d
"}tj|dddD ]
}|V  qW 5 Q R X d S )N.xlsr   c                 S   s   g | ]
}|j qS r    )value).0itemr    r    r!   
<listcomp>b   s     z*CmfPluginCsv._get_file.<locals>.<listcomp>.xlsxT)Zvalues_only.csvi r;")Z	delimiterZ	quotechar)r   r'   suffixxlrdZopen_workbookstrZsheet_by_indexZget_rowsopenpyxlZload_workbookZactiveZ	iter_rowscsvZfield_size_limitopenreader)r0   Zattachment_file_pathZworkbookZ	worksheetelfiler    r    r!   r(   [   s"    






zCmfPluginCsv._get_filec              	   C   s   |j | _|jsd S tjjdgdd|jgdgd}dg d}tjj|dd	d
ddggdgdgd}| |}|rpg S | 	|}| 
 }t|D ]j\}}	|dkr|jd s qn|dkr qt|	D ].\}
}d}t|tjr|d}|dkr|r|jd rt|jd D ]}d|kr0d|kr0 q|d dkrBq|d D ]J}|d |krJ|d }|r| |d s|d | d} qqJq|s|d |d d d d q|d |
 }||d }||d< |r||d< |d |d< qq|d s| jd g S d|d < |gS )!N-cmf_modified_atidz!=json_settings)order_byfilterr   ZCSV)namer   	file_typeINr<   r6   r;   urlparentrM   rL   r   r   	first_row   Fz%Y-%m-%d %H:%M:%Simport_settingsrN   r   titlemodel_fieldfield_qualnameT)rW   file_valrX   r   rZ   r   r&   r   Zentity)loggerr   Zattachmentsr   	CmfImportgetrJ   CmfAttachmentr5   r(   _default_mapping_csvr)   rK   
isinstancedatetimestrftimer   _is_backref_fieldappendr+   )r/   
cmf_importZprev_settingssettingsr0   r1   r2   Zdefault_mappingirowjvalfoundZprev_setZ
prev_fieldrX   Zrow_settingsr    r    r!   calc_import_settingso   sr    




 

z!CmfPluginCsv.calc_import_settingsc                 C   s   i }t j D ]}|||d < q|   D ]N\}}|dd}|dd}tt |}||| d| |jd|jd||< q,|S )ug    Структура сопоставления полей из файла CSV по умолчанию. r   
model_name 
field_name.T)r   ro   rY   r   requiredverbose_name)	r   r   r   Z_get_default_mappingitemsr]   getattrr   rr   )clsZdefault_local_attrs_mappingZshop_frW   Zvalue_modelrm   Z	name_attrmodelr    r    r!   r_      s    
z!CmfPluginCsv._default_mapping_csv)rY   r#   c                 C   sd   |  d^}}t|}|D ]B}t||}t|tjjr> dS t|drN|j	sR q`t|j	}qdS )Nrp   Trv   F)
splitcmfutilZget_model_by_namert   
issubclasscmfr   Z
CmfBackrefhasattrrv   )rY   rm   Zattrsrv   attrfieldr    r    r!   rc      s    

zCmfPluginCsv._is_backref_fieldc                 C   s<  g }ddg g d}d}t jj|ddddd	ggd
gd}|sH| jjd | |}|jd rdt| t	|D ]\}}|dkr qg }	|d 
|	 t	|jD ]l\}
}|d sq|d d dd }|s|dkrd}|dkr|dkr|d 
|d d  |	
||
  qql|d r"|
| |s8d|d< d|d< |S )Nu   СделкиZ	handshake)rW   r   titlesrowsFrO   rP   r<   r6   r;   rI   )rS   rM   rL   u)   Не найден файл импортаrT   rU   r   rX   rY   rp   r   CmfDealT)r   r   r~   r   u   ЗадачиrW   zcalendar-todayr   )r   r^   r]   re   r[   errorr(   rK   nextr)   rd   Zcsv_import_settings_fieldsrw   )r/   re   resultZdealsZis_dealZattachr2   rg   rh   Zdata_rowri   rf   rm   r    r    r!   preview   sD    



zCmfPluginCsv.preview)	row_arrayrf   r#   c                 C   s  t  }t|d d D ]\}}|t|kr.q|| s8q|d sDqn|d d |jkrXq|d d d}t||d }|jdr|jdkrd	|| i||d < qt	|t
jjrt|d
kr|d
 || i||d < nd|| i||d < q|jdkrt|| ||d < q|jdkr4| || ||d < qt|dr\| || |j||d < qt	|t
jjr||  }	dddddh}
dddddh}|	|
krd||d < n$|	|krd||d < nd ||d < q|| ||d < q|S )Nr   r   rX   rr   ro   rp   Zcf_)ZCmfM2MZCmfCascadeChoicerN   rU   ext_idprioritychoicesu   даtrueZyes1+u   нетZfalseno0-TF)dictr)   lenrr   rw   rt   
class_name
startswithZwidgetry   rz   r   Z
CmfRelBaserB   Zcalc_priorityr{   Zcalc_choicesr   ZCmfBoollower)r/   r   rf   rv   r   idxZfield_settingsZfield_partsr}   r7   Ztrue_valuesZfalse_valuesr    r    r!   _map_object  sL    


zCmfPluginCsv._map_objectc                 C   s   | j jjdr*tjj| j jjddS d }| || j jd tj}|rg }dddg}|D ]N}||d}|r\|dkr|d|d	|gdd	|gg n||d	|g  qq\|rtjj|d
}|S )Ntarget_project_idrJ   rV   r   coderN   rn   OR==rM   )re   rK   r7   r]   r   r   r   rd   )r/   rh   project_objproject_filteruniq_fields
uniq_fielduniq_field_valuer    r    r!   _get_project/  s"    
zCmfPluginCsv._get_projectc           
      C   s   d }|  || jjd tj}|rg }dddg}|D ]N}||d}|r2|dkrl|d|d|gdd|gg n||d|g  qq2|rtjj|dd	}	|d
d|gdd|	gg tjj|d}|S )NrV   r   r   rN   rn   r   r   sprint)tree_parentsys_typerS   r   r   )	r   re   rK   r   r   r]   rd   	CmfFolderextend)
r/   rh   r   Z
sprint_objr   r   r   r   r   Zsprint_folderr    r    r!   _get_sprintF  s"    
zCmfPluginCsv._get_sprintc           
      C   s   dt jj d}g }dd td|D }|D ]x}t||rJdd|g}n
dd	|g}d
|dd|ggdd|gg}t jj|d}	|	r||	 q.| jj	d| dddd q.|S )u  
        Получает список компонентов, найденных по идентификатору(код, название)

        Args:
            component_identifiers (str): любой идентификатор(код, название)
            project (CmfProject): проект

        Returns:
            list: список компонентов
        ^z-(\d+)$c                 S   s   g | ]}|  r|  qS r    )strip)r8   
identifierr    r    r!   r:   l  s   z0CmfPluginCsv._get_components.<locals>.<listcomp>z[^,;]+r   =rN   ILIKEr   r   rS   r   u   Компонент 'u   ' не найденzERR-0089r   Zobj_type)
r   r   Zcode_prefixrefindallmatchr]   rd   re   	log_error)
r/   Zcomponent_identifiersr   Zcode_pattern
componentsZidentifiersr   Zidentifier_filterZcomponent_filterZ	componentr    r    r!   _get_components]  s0    


zCmfPluginCsv._get_componentsc                 C   sx   t jjdd|gd}|stt jjdd| gd}t|dkrh| jjd| dt| d	d
dd td|rt|d }|S )Nr   r   r   rN   r   rU   u<   Компаний с одинаковым названием z > uF   , укажите код компании вместо названияzERR-0071r   r   u]   Найдено несколько компаний с одинаковым названиемr   )	r   r   r]   listr   r   re   r   	Exception)r/   r   company	companiesr    r    r!   _get_company  s    zCmfPluginCsv._get_companyc                 C   s   t jj|dddgd}|D ]x}z,||d< ||d< | | jt j| t  W q tk
r } z(t  | jj	d| d| d	d
d W 5 d}~X Y qX qt jj
dd|gdgd}t||_|jr|jdd t  dS )u   
        Создает/обновляет компоненты проекта

        Args:
            components (list): список сырых данных компонентов
            project (CmfProject): проект
        r   Ttree_node_is_branch)r   r   Zinclude_systemr   rS   r   uG   Не удалось создать/обновить компонент . zERR-0088r   r   Nr   z--rM   r   Zsave_import)r   r   r]   process_any_table_fieldsre   r   
cmf_commitr   Zcmf_rollbackr   sgetboolr   
is_changedsave)r/   r   r   Zcomponent_foldercomponent_dataexcZhas_componentr    r    r!   _process_components  s>    

z CmfPluginCsv._process_components)r   c                 C   s   |D ]}d|d< | j jd|  | | j tj|\}}|j  |rt|j	j
dkrtjjdd|j
gddd	ggd
}|j| |  qd S )NTZservicedesk_allowu1   Пытаемся создать компанию project.servicedesk:defaultzparent.coder   zproject_role.coder   zsdesk-client:defaultr   )re   r[   infor   r   r   dpcommitrB   
logic_typer   ZCmfProjectRoleAssignr]   membersrd   r   )r/   r   r   r   Zcompany_objis_newZrole_assignr    r    r!   _process_companies  s    

zCmfPluginCsv._process_companies)personsc           	      C   s   |D ]}d }| dr2|d  d}| ||d< | jjd|  | | jtj|\}}|j	  |rt
|jjdkr|jjst
|j}| j|t }|r|jr|jjtjs||jj qd S )Nr   r   u9   Пытаемся создать пользователя r   )r]   r   re   r[   r   r   r   r   r   r   rB   r   r   Z
user_localr7   rJ   person_emails
setdefaultsetemailendswithZconfigZ
ORG_DOMAINadd)	r/   r   r   ZpersonZ
project_idZcompany_ext_idZ
person_objZperson_is_newZproject_person_emailsr    r    r!   _process_persons  s*    


zCmfPluginCsv._process_personsc                 C   s  dddddddddddddddddddd	dd
ddd
dddddddddddddddddddddddddddddd}|dkrdnd}| j jd||   || d|| d  }||}|rVtjjd!d"|d! gdgd#}|jr0||jkr>d$| |j |_nd$| d$|_|jrR|j	d%d& |S tjjdd'd(| d)gd*}|r||S | j jd+| d, tjjd!d"|gdgd#}|stjjd d-|gdgd#}|r|jr||jkrd$| |j |_nd$| d$|_|jr|j	d%d& |S | j jd. |d/kr:d}n|d0krJd}n|d1krXd}tjjd!d"|gd*}	t
d$| d$|||	d2}
| | j tj|
\}}t  |S )3N   Подзадачаztask.sub:defaultrN   r   Z	UserStoryztask.userstory:defaultz
Task Agileztask.agile:default   Задачаztask.base:defaultBugztask.bug:defaultEpicztask.epic:defaultu&   Проект. Классическийzproject.base:defaultu   Проект. Agilezproject.agile:defaultu   Проект. Service Deskr   Devicezasset.device:defaultSoftwarezasset.software:defaultVMzasset.vm:default)zSub-taskZSubtaskr   ZStoryu   ИсторияZTaskr   r   u   Багu   Эпикr   u   КлассическийZAgilezService DeskZServiceDeskr   r   r   CmfAssetCatr   Zdefault_logic_typeu   Логический тип r   rN   r   r   r   ::Tr   LIKE%::::%r   uF   Ищем логический тип по коду или имени ''r   uF   Не нашли, создаем новый логический типr   r   )r   r   )r   rN   Zcmf_model_nametemplate)re   r[   r   r]   r   r   ZCmfLogicTyper   r   r   r   r   commit_with_event)r/   objrm   	name2codeZlogic_type_fieldr   Zlogic_type_dictr   Ztemplate_coder   Zlogic_type_paramsr   r    r    r!   _process_logic_type  s    



z CmfPluginCsv._process_logic_typec                 C   s  ddddddddddd	dd
ddddddddddddddd	}| j jd|d   |d d|d d}||}|rtjjdd|d gdgd}|jr||jkrd| |j |_nd| d|_|jr|jdd |S tjjddd | d!gd"}|r|S | j jd#| d$ tjjdd|	 gdgd}|sltjjdd%|	 gdgd}|r|jr||jkrd| |j |_nd| d|_|jr|jdd |S | j jd& t
d| d|	 d'}| | j tj|\}}t  |S )(u"    Виды деятельности   БизнесZbusinessr      ПродажиZsales   МаркетингZ	marketing   ПроизводствоZ
production   ПоддержкаZhelpdesk   БухгалтерияZfinance!   ИТ инфраструктураZservicedesk%   Хозяйственная частьZ	household   Разработка ПОZsoftdev)	r   r   r   r   r   r   r   r   r   u    Вид деятельности activityr   rN   r   r   r   r   Tr   r   r   r   r   uJ   Ищем вид деятельности по коду или имени 'r   r   uJ   Не нашли, создаем новый вид деятельности)r   rN   )re   r[   r   r]   r   ZCmfActivityr   r   r   r   r   r   r   )r/   r   r   r   Zactivity_dictr   Zactivity_paramsr   r    r    r!   _process_activity:  sZ    

zCmfPluginCsv._process_activityc                 C   sx   d }|rt| drt|d  }|j dddd| dgdd|gdd|ggd	}|st| jjd
|j d| dd|jd |S )Nr   r   r   %r   r   rN   r   r   u   Не найден z "r?   zERR-0087r   )r]   r   re   r   r   )r/   rv   Zobj_datar   r   r    r    r!   _get_objectr  s"    	zCmfPluginCsv._get_objectc                 C   sV   |sdS | d}|sdS t| }tjj ddd|gdd|gdd|gdd|ggd	S )
uh   Общий метод поиска пользователя по ext_id, login, email или имени.Nr   r   r   Zloginr   r   rN   r   )r]   rB   r   r   r   )r/   person_datar   r    r    r!   _get_person  s    
zCmfPluginCsv._get_personc                 C   s   d}t dd tj| _| j r$q| \}}|d krH|||f qz(| jj	d| d|  | 
| W q tk
r } z<| jj  |d7 }| jjd| d| d	| d
dd W 5 d }~X Y qX qW 5 Q R X || d S )Nr   F)Zinit_views_and_dsu   Импорт строки u    из rU   u<   Не удалось импортировать строку z: r   zERR-0041r   r   )r   ZAPPZREDIS_DBZredis_dbre   	is_cancelr]   putr[   r   Z_process_rowr   r   Zrollbackr   )r/   	row_queuerow_queue_errors
total_rowserrorsZrow_numZrow_datar   r    r    r!   _process_row_worker  s*    
$z CmfPluginCsv._process_row_workerc                 C   s(  ddl m} d}t  t  tjj|dgd}|| _tj	j|ddddd	ggd
gdgd| _
tdd | | j
D }tjdd}t }	g }
t| jD ]N}tj| jd|d  ||	|dd}|
| |  | jjd|  q| jjd }g }d}t| | j
D ]\}}| j r0 q|jd rJ|dkrJq||krx|dkrx| ||rx|d7 }q||k rq||kr| ||s q| ||||||\}}q|r||d |f |d |
D ]}|  q|	 s||	 7 }qW 5 Q R X W 5 Q R X |S )Nr   r   r   )rJ   r   rO   rP   r<   r6   r;   rI   rQ   rR   c                 S   s   g | ]}d qS rU   r    r8   r3   r    r    r!   r:     s     z2CmfPluginCsv.process_rows_fork.<locals>.<listcomp>i  )maxsizez_process_row_worker rU   )r   r   r   )targetrN   kwargsu.   Параллельный обработчик rV   rT   )NN) cmf.appr   rx   Zdisable_aclZdisable_notifyr   r\   r]   re   r^   import_filer   r(   queueZQueuerangeZthreading_max_forks	threadingThreadr   rd   startr[   r   rK   r)   r   Z_is_group_tailZ_process_grouped_rowsr   joinempty)r/   Zcmf_import_idstart_index	end_indexr   r   re   r   r   r   threadsrg   threadrV   r   Zi_headrh   r    r    r!   process_rows_fork  sj    	




$zCmfPluginCsv.process_rows_forkc                 C   s   dd l }|jdddd| jjj d| jj d| d| d		gd
d
tddtddd}| jd|j d| d|  | j  |S )Nr   z/usr/bin/python3z	manage.pyshellz%plugin = models.CmfPluginCsv.get(id="z'");retcode = plugin.process_rows_fork("z", z, z);Tz"/var/log/eva-import-subprocess.logza+z&/var/log/eva-import-subprocess.err.log)Z	close_fdsZstart_new_sessionstdoutstderru,   Запустили подпроцесс PID u)    для обработки строк с u    по )	
subprocessPopenre   ZpluginrJ   rE   logpidZ
log_detail)r/   r  r  r  procr    r    r!   _execute_rows  s      & 
zCmfPluginCsv._execute_rowsc                 C   s8  t dd | | jD }|dkr4| jjd d S d}|| }|dk rLd}t|| j}|| }|| }| jjd| d| d	 t	 }g }d}t
|D ]J}	||	|k rdnd }
||
 d }||kr| ||}|| |d }q|D ]"}|  |jr|  j|j7  _qt	 | }| jjd
|dd d S )Nc                 S   s   g | ]}d qS r   r    r  r    r    r!   r:     s     z.CmfPluginCsv._process_rows.<locals>.<listcomp>r   u=   Файл пуст, обработка не требуется2   rU   u    Запуск обработки u    строк в u    процессахuA   Обработка строк файла выполнена за z.3fu    сек.)r   r(   r  re   r[   r   minmax_processestime	monotonicr  r  rd   Zcommunicate
returncode_has_errors)r/   r   Zmin_rows_per_processZnum_processesZ
chunk_sizeZ	remaindert1Z	processesr  rg   Zcurrent_chunk_sizer  r  t2r    r    r!   _process_rows  s8    

zCmfPluginCsv._process_rowsc           (      C   s  | j jd }| j jjdd}| j jjd}t| | jD ]\}}| j  rX q| j jd rn|dkrnq>| ||t	j
}| ||t	j}| ||t	j}|s|rt	jj|d}	|	jdd	}|rd
ddg}
|
D ]0}||d}|r| j|i }||d<  qq|dg }| ||t	j}|r<||kr<|| ||d< |dg }| ||t	j}|rz||krz|| ||d< |dg }| ||t	j}|r||d
}|r|r|| j jjs| j j d|d
  }||d
< |s|d}|dr|d |d< |d}|r|ds|d= |d
}|sL|d }| j|g }|rl|| n,|  jd7  _| j jd|d  dddd || j|< | ||t	j}|rJ|rd}|dr|d d
 }|dr|d d
 }|dD ]}|||d}|}d |ks&d!|krd}d |kr8d"}td#|\}}|d$rzt|d%d" }|| d& d' |d(< n|d)rt|d%d" }|| d& |d(< nR|d*rt|d%d" }|| |d(< n(|d+rt|d%d" }|| |d,< |d-r|d%d. }d|d/< |d0r2|d%d. }|d1rR|d%d. }d|d/< |d2rj|d%d. }||d3< |r| j j d|d3  |d3< || jkr| j| q|d3rJ|d3 d
 }|dD ]J}|||d}|r | j j d|d3  |d3< || jkr| j| qn,|  jd7  _| j jd|d  d4d5dd |d6|d7|d8d9} | |kr|||  ||d< | || j jd t	j}!|!rB|!d:rB|!d: }"|!d:= |dsBtd;|"}#d< |#}"d< |#d%d" }$|d
| j!|"< |$| j!krB| j!|$ }|| jkr,g | j|< | j| |d
 |d=g }%|rh||%krh|%| |%|d=< |d>g }&|r||&kr|&| |&|d>< | "|| n<|r|| j#kr| j#| |r|| j$kr| j$| | ||t	j%}'|'r| &|' | '| q>d%S )?u   
        Из строк файла собирает данные проектов, спринтов, БП, компаний и пользователей для последующего импорта
        rV   ext_id_per_importFr   rT   r   r   r   )typer   r   rN   rn   dataZsprintsr   Z	workflowsr$   Zepicparent_taskrU   u   Строка u   : Невозможно создать связь с Epic или родительской задачей. Укажите код или ИД задачи в файлеzERR-0080r   r   zsystem.finish:startrelation_typein_linkr>   )r'  r+  out_linkr   r   z[+-]u   дN<      Zconstrain_lagu   чu   мr   Zconstrain_lag_pctu   ОНr'  u   ООu   НОu   ННr,  uy   : Невозможно создать связи задач. Укажите код или ИД задачи в файлеzERR-0081workflowstatusr   )r1  r2  r   outline_numberz[,./+-]rp   r   r   )(re   rK   r7   r]   r)   r(   r  r   r   r   r   r   r   dumpsprojectsr   r   rd   r   r   r   rJ   subtasksr"  r   ZCmfRelationOptionrw   r   r   int	relationsr   r  subtasks_outlineZ_prepare_import_data_hookr   r   r   Z_prepare_location_dataZ_prepare_asset_data)(r/   rV   r&  r   rg   rh   Zcompany_datar   Zproject_dataZtarget_projectr   r   r   r   Zproject_sprintsZsprint_dataZproject_componentsr   Zproject_workflowsZtaskZtask_ext_idr)  Zparent_ext_idr6  Zrelation_datar*  Zrelated_tasksZrelated_taskZrelationZ	task_linkZminusZlagr1  Zganttr3  Zoutline_listZparent_outlineZproject_companiesZproject_personsZlocation_datar    r    r!   _prepare_import_dataF  sB   

















z!CmfPluginCsv._prepare_import_datac                 C   s  || _ | j  | _g | _g | _i | _g | _i | _i | _i | _	g | _
t | _i | _i | _tjj|dddddggdgdgd| _|   | | j | | j | | j | | j | | j |   t  |   | jD ]}| | | | q|   |   | jD ]}t tj!j"|gd	 q| j j#j$d
dr| j% D ]h\}}|sVqD| j j&'dt(| d|  |rt tj)j*|t+|gd	 nt tj)j,t+|gd	 qD| j-r| j .d| j-  | j- S )NrO   rP   r<   r6   r;   rI   rQ   rR   )argsZsend_invitesTu,   Отправляем приглашения u    пользователям: u#   Ошибок обнаружено: )/re   Zget_max_processesr  r   r   r5  Zproject_objsr   r6  r9  r8  r   Zgantt_project_idsZ	locationsZasset_schemesr   r^   r]   r  r:  r   r   Z_process_projectsZ_process_locationsZ_process_asset_schemesZ_global_objsr   r%  Z_hack_replace_creation_dateZ_hack_create_fake_taskZ_process_subtasksZ_process_relationsZschedule_deferred_jobr   Z_outline_force_recalcrK   r7   rs   r[   r   r   r   Zregister_sdesk_clientr   Zregister_personsr"  r  )r/   re   r   Zgantt_project_idr   r   r    r    r!   process_import  sh    	




zCmfPluginCsv.process_import)N)N)NNr   ))__name__
__module____qualname__r   ZloggingZgetLoggerClass__annotations__r"  staticmethodr"   r   r5   r   r   r(   rl   classmethodr   rB   r_   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r:  r<  r    r    r    r!   r      s@   

$H%,-+I8
L, Jr   )rD   copyr   ra   pathlibr   typingr   r   r	  r  r  rC   rA   r   Zcmf.includeZmodules.settings.fieldsr   Z4modules.settings.models.cmf_plugin_csv_mixins.assetsr   Z7modules.settings.models.cmf_plugin_csv_mixins.locationsr	   Z3modules.settings.models.cmf_plugin_csv_mixins.tasksr
   Z7modules.settings.models.cmf_plugin_csv_mixins.testcasesr   r  r   r   r    r    r    r!   <module>   s0   
