
    Cj                    
   d dl 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mZ d dl	m
Z
 d dlmZ  ee                                          j        j        dz  dz  dz  Zg d	Zg d
ZdZdZd(d)dZd*dZd+dZd,d-d#Zd.d%Zd/d'ZdS )0    )annotationsN)Path)Any)load_workbookdata	templateszAuswertung_Evaluation.xls)         	   
                                 )      r               r   r         r          !   r	   r   cmd	list[str]cwdPath | Nonereturnstrc                    t          j        | |ddt           j        t           j                  }|j        dk    r5t          d|j         dd                    |            d|j                   |j        S )	NFT)r%   checktextstdoutstderrr   zCommand failed (z):  
)
subprocessrunPIPESTDOUT
returncodeRuntimeErrorjoinr,   )r#   r%   procs      >/home/gmu/.Hermes/workspace/smileys_webapp/app/excel_writer.py_runr9      sp    >#3e$z_i_pqqqD!`do``#((3--``SWS^``aaa;    srcr   outdirtargetc                   |                     dd           t          ddd|dt          |          t          |           g           || j         d|                    dd	          d
          z  }|                                sGt          |                    | j         d                    }|st          d|  d          |d         S |S )NTparentsexist_oklibreofficez
--headlessz--convert-toz--outdir.:   r   z.*u(   LibreOffice hat keine Ausgabedatei für z erzeugt)	mkdirr9   r(   stemsplitexistssortedglobFileNotFoundError)r;   r<   r=   expectedmatchess        r8   _convert_with_libreofficerP      s    
LLL----~vz3v;;X[\_X`X`	abbb38??fll3&:&:1&=???H?? ___5566 	^#$\s$\$\$\]]]r{Or:   valueslist[list[Any]]list[list[int | None]]c                   | st          d          g }t          | d          D ]\  }}t          |          dk    r"t          d| dt          |                     g }t          |d          D ]\  }}|dv r|                    d            	 t	          |          }n+# t
          $ r}t          d| d| d	|          |d }~ww xY w|dk     s|d
k    rt          d| d| d|           |                    |           |                    |           t          |          t          k    r't          dt           dt          |                     |S )Nu   Keine Werte übergeben.rE   startr   zFragebogen z: erwartet 15 Werte, erhalten )N nullz, Item u   : ungültiger Wert r   u(   : Wert muss 1–5 oder leer sein, nicht u   Template unterstützt maximal u    Fragebögen, erhalten )
ValueError	enumeratelenappendint	ExceptionMAX_PARTICIPANTS)	rQ   
normalizedridxrowout_rowcidxvalueintvalexcs	            r8   normalize_valuesrh   (   s    42333)+JvQ/// # #	cs88r>>Y4YYsSVxxYYZZZ$&$S222 
	# 
	#KD%***t$$$iU i i i !^t!^!^D!^!^UZ!^!^__ehhizzVaZZ !rt!r!rD!r!rjp!r!rsssNN6""""'""""
:)))t:Jttcfgqcrcrttuuus   B""
C
,CC
xls
output_dir
str | Pathtemplate_pathstr | Path | Noneoutput_formatc                :   |                                                     d          }|dvrt          d          t          |           }|rt	          |          nt
          }|                                st          d|           t	          |          }|                    dd           |dt          j
                    j         z  }|                    dd           |j                                         dk    r|d	z  }t          j        ||           n0||j        z  }	t          j        ||	           t!          |	|d
          }t#          |          }
d|
j        vs	d|
j        vrt          d          |
d         }|
d         }t'          t(                    D ]i\  }t+          t,                    D ]O}|                    |t0          |z             }|t3          |          k     r||                  |_        Hd|_        Pjt+          t,                    D ]>}|t3          |          k     r|dz   nd|                    dt0          |z             _        ?t'          t6                    D ]\  }fd|D             fdt+          dd          D             }t+          dd          D ]1}||         r||         nd|                    |d|z             _        2d|                    |d          _        d| d| d|                    |d          _        d| d| d| d| d| d| d| |                    |d           _        t3          |          |d!<   	 d|
j        _        d|
j        _        d"|
j        _        n# t@          $ r Y nw xY w|d#z  }|
!                    |           |d$z  }t!          ||d
          }|d
k    r|d#z  }t          j        ||           n.t!          ||d%z  d%          }|d&z  }t          j        ||           |S )'zNFill the bfz XLS template with wide 15-item values and return the output file.rC   >   ri   xlsxz)output_format muss 'xls' oder 'xlsx' seinzTemplate nicht gefunden: Tr?   work_z.xlsxztemplate.xlsxrp   zKurs Auswertung einzelnSEMINARzKTemplate muss die Sheets 'Kurs Auswertung einzeln' und 'SEMINAR' enthalten.)rb   columnNrE   c                0    g | ]}|         
|         S N ).0rb   item_idxs     r8   
<listcomp>z!fill_template.<locals>.<listcomp>o   s&    RRR#H8QH8Q8Q8Qr:   c                <    i | ]}|                     |          S rv   )count)rw   kvalss     r8   
<dictcomp>z!fill_template.<locals>.<dictcomp>p   s%    888q!TZZ]]888r:         r   z=SUM(Cz:H)r   z*1,Dz*2,Ez*3,Fz*4,Gz*5,Hz*6)/Ir   I3autoz&Auswertung_Evaluation_mit_smileys.xlsxrecalcri   z%Auswertung_Evaluation_mit_smileys.xls)"lowerstriprY   rh   r   DEFAULT_TEMPLATErJ   rM   rG   uuiduuid4hexsuffixshutilcopy2namerP   r   
sheetnamesrZ   
INPUT_ROWSranger_   cell	START_COLr[   re   SUMMARY_ROWScalculationfullCalcOnLoadforceFullCalccalcModer^   save)rQ   rj   rl   rn   values_normtemplateoutbasejob_tmpxlsx_templatecopiedwbwssemrownumparticipant_idxr   sem_rowcountsr|   edited
recalc_dirrecalc_xlsxfinalxls_filerx   r}   s                           @@r8   fill_templater   A   s   !''))//44MO++DEEE"6**K&3ItM"""9IH?? H FH F FGGG:GMM$M...2
 0222GMM$M... '))/1X}----8=(Xv&&&1&'6JJ	}	%	%B 55"-9W9Wfggg	%	&B
Y-C%j11 " "&$%566 	" 	"O77vi/.I7JJD[!1!111(9(C

!

	" !!122 G GZilop{l|l|Z|Z|?UVCVCV  CGAi/9::@@ '|44 S S'RRRRRRR8888E!QKK888q! 	Y 	YAEKAY8Xq		TXCHHQH//5504WQ''-0N0N0NG0N0N0NWQ''- 2S'  2S  2Sw  2S  2ST[  2S  2Sah  2S  2Snu  2S  2S  |C  2S  2S  JQ  2S  2SWR((..K  CI(,%'+$"(    ??FGGFOOO 8#J+FJGGKBB[%((((,['E/5QQAAXu%%%Ls   '$N 
NNout_pathc           	        dd l }t          |           }t          |          }|                    ddd          5 }|                    |d          }|                    dgd	 t          d
d          D             z              t          |d
          D ](\  }}|                    |gd |D             z              )	 d d d            n# 1 swxY w Y   |S )Nr   wz	utf-8-sigrW   )encodingnewline;)	delimiterfragebogen_idc                    g | ]}d |d	S )i02drv   )rw   r   s     r8   ry   z!values_to_csv.<locals>.<listcomp>   s     ,O,O,OQ[[[[,O,O,Or:   rE   r   rU   c                    g | ]}|dn|	S )NrW   rv   )rw   vs     r8   ry   z!values_to_csv.<locals>.<listcomp>   s     $I$I$I19RR!$I$I$Ir:   )csvrh   r   openwriterwriterowr   rZ   )	rQ   r   r   r   outfr   idxrb   s	            r8   values_to_csvr      s=   JJJ"6**K
x..C	#R	8	8 KAA--),O,O%2,,,O,O,OOPPP!+Q777 	K 	KHCOOSE$I$IS$I$I$IIJJJJ	KK K K K K K K K K K K K K K K
 Js   BCCCr+   c                    t          j        |           }t          |t                    rd|v r|d         }t          |t                    st          d          t          |          S )NrQ   z1values muss eine Liste von Fragebogen-Zeilen sein)jsonloads
isinstancedictlistrY   rh   )r+   payloads     r8   parse_values_jsonr      sg    jG'4   $X%8%8(#gt$$ NLMMMG$$$r:   ru   )r#   r$   r%   r&   r'   r(   )r;   r   r<   r   r=   r(   r'   r   )rQ   rR   r'   rS   )Nri   )
rQ   rR   rj   rk   rl   rm   rn   r(   r'   r   )rQ   rR   r   rk   r'   r   )r+   r(   r'   rS   )
__future__r   r   r   r0   tempfiler   pathlibr   typingr   openpyxlr   __file__resolveparentr   r   r   r   r_   r9   rP   rh   r   r   r   rv   r:   r8   <module>r      s`   " " " " " "                     " " " " " "4>>))++29FB[PSnn EEE
HHH	     	 	 	 	   2M M M M M`
 
 
 
% % % % % %r:   