
    zKj                      ,   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mZmZm	Z	  ee
      Zdej                  d<   dZedz   Zedz   Zh dZd	 Zd
 Zd Zej)                  d      d        Zej)                  ddg      d        Zej)                  d      d        Zej)                  d      d        Zej)                  ddg      d        Zej)                  ddg      d        Zej)                  d      d        Ze
dk(  rej9                  ddd !       yy)"    N)Flaskrequestrender_templatejsonifyi  MAX_CONTENT_LENGTHz/opt/struktur/case-intakez/data/cases.dbz/uploads>   jpgmovmp4pngheicheifjpegc                  b    t        j                  t              } t         j                  | _        | S )N)sqlite3connectDB_PATHRowrow_factory)dbs     /opt/struktur/case-intake/app.pyget_dbr      s     		!B[[BNI    c                 `    d| v xr) | j                  dd      d   j                         t        v S )N.   )rsplitlowerALLOWED)fns    r   allowedr       s/    "9?3q)!,224??r   c
                    |sdg fS d}
g }|dkD  r|
dz  }
|j                  d       |r|	r|
dz  }
|j                  d       |r|r|
dz  }
|j                  d       |r|
dz  }
|j                  d       |r|
dz  }
|j                  d	       |rt        |      d
kD  r|
dz  }
| dv r|j                  d       t        |
d      |fS )z-Content-Score 0-100. Freigabe=0 gibt Score 0.r      bildmaterialvorher_nachher	messwerte
   emotionale_story   mallorca_bezug2   )schimmelfeuchtekondensationlueftungedukativd   )appendlenmin)falltyportbeschrmvmnwafoto_anzahlfreigabe
has_vorherhas_nachherscoretagss               r   compute_content_scorer@      s     "uEDQN#k$%	bK 	&'

$%#f+"EEJuc?D  r   /c                      t        d      S )Nz
index.html)r    r   r   indexrD   /   s    <((r   z/submitPOST)methodsc                     t        t        j                               d d j                         } t	        t        j
                               }t        j                  }|j                  dd      }|j                  dd      }|j                  dd      j                         d d }|j                  dd      j                         d d	 }|j                  d
d      j                         d d }|j                  dd      j                         d d }|j                  dd      j                         d d	 }	|j                  dd      }
|j                  d      dk(  rdnd}|j                  dd      j                         d d }|j                  dd      j                         d d }|j                  dd      j                         d d }|j                  dd      j                         d d }t               }|j                         }|j                  d| ||||||||	|
|||||||f       d}d}d}t        j                  j                  t         |       }t        j"                  |d       t        j$                  D ]G  }t        j$                  j'                  |      D ]!  }|s|j(                  st+        |j(                        s*|j(                  j-                  dd      d   j/                         }|dv }d|v rdnd |v rd nd!}|dk(  rd}|d k(  rd}|  d"t        j                         j0                  d d#  d| }|j3                  t        j                  j                  ||             |j                  d$t        t        j                               | ||rd%nd&||f       |s|dz  }|j                  d'| f       $ J t5        ||||||	||||
      \  }}|d(k\  rd)n|d*k\  rd+nd,}|j                  d-||t7        j8                  |      || f       |j;                          |j=                          t?        d.| |||||
|/      S )0N   r4   	unbekannt
problemtypr5    r0   beschreibungi,  messwert_vorherr*   messwert_nachherwhatsapp_quelle
prioritaetp2r;   jar   r   sensor_bezugvento_session_idbaustelle_idergebnisi  a3  INSERT INTO cases (case_id,erfasst_am,falltyp,problemtyp,ort,kurzbeschreibung,messwert_vorher,messwert_nachher,whatsapp_quelle,prioritaet,freigabe,sensor_bezug,vento_session_id,baustelle_id,ergebnis,content_status,radar_signal_ids,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"raw","[]",?,?)FT)exist_okr   >   r	   r
   vorhernachher	allgemein_   zdINSERT INTO case_media (media_id,case_id,filename,media_type,label,uploaded_at) VALUES (?,?,?,?,?,?)videofotoz2UPDATE cases SET video_vorhanden=1 WHERE case_id=?<   
verwertbar(   	ergaenzenrawzaUPDATE cases SET foto_anzahl=?, content_score=?, content_tags=?, content_status=? WHERE case_id=?zsuccess.html)case_idr4   rJ   r5   fotosprior>   ) struuiduuid4upperinttimer   formgetstripr   cursorexecuteospathjoin
UPLOAD_DIRmakedirsfilesgetlistfilenamer    r   r   hexsaver@   jsondumpscommitcloser   )cidnowdr4   rJ   r5   r6   r7   r8   r9   rf   r;   sensorvento_id	baustellerV   r   curre   r<   r=   cdirkeyfextisvlblr   r>   r?   statuss                                  r   submitr   3   s   
djjl
BQ

%
%
'C
diik
CAeeI{+G|[1J
%%r

 
 
"4C
(CUU>2&,,.t4F	
 "	%	+	+	-cr	2B	
!2	&	,	,	.s	3B	
 "	%	+	+	-ds	3B55t$DEE*%-q1HUU>2&,,.t4Fuu',224Tc:Hnb)//1$37IuuZ$**,Tc2H	B
))+CKK	@
 
c7JVRRx	9hS	:; EJK77<<
C(DKKt$}} ^&&s+ 	^AQZZGAJJ$7jj''Q/288:^+"*c/hYRUEU	[f(?J)#4[uAdjjl..r231SE:rww||D"-.+&RCVSRUVX QJEKK TWZV\]!	^^& (fb"b(-x[RKE4"b[\erk{uFKKk	tzz$'57 IIKHHJ>3&0c $E3 3r   z/casesc                      t               } | j                         }|j                  d       |j                         }| j	                          t        d|      S )NzSELECT case_id,falltyp,problemtyp,ort,prioritaet,freigabe,foto_anzahl,content_status,content_score,erfasst_am FROM cases ORDER BY erfasst_am DESC LIMIT 50z
cases.html)cases)r   rp   rq   fetchallr   r   )r   r   r   s      r   
list_casesr   u   sH    	B
))+CKK	78 LLNEHHJ<u55r   z
/api/casesc                  F   t         j                  j                  d      } t         j                  j                  dt              }t	               }|j                         }d}g }g }| r"|j                  d       |j                  |        |"|j                  d       |j                  |       |r|ddj                  |      z   z  }|d	z  }|j                  ||       |j                         D cg c]  }t        |       }}|j                          t        |      S c c}w )
Nr   	min_score)typezSELECT * FROM caseszcontent_status = ?zcontent_score >= ?z WHERE z AND z# ORDER BY erfasst_am DESC LIMIT 200)r   argsrn   rk   r   rp   r1   rt   rq   r   dictr   r   )	status_filterr   r   r   queryparams
conditionsrrowss	            r   	api_casesr      s    LL$$X.M  3 7I	B
))+C!EFJ./m$./i W\\*555	22EKKv \\^,DG,D,HHJ4= -s   /Dz/api/cases/<case_id>GETc                    t               }|j                         }|j                  d| f       |j                         }|s|j	                          t        ddi      dfS t        |      }|j                  d| f       |j                         D cg c]  }t        |       c}|d<   |j	                          t        |      S c c}w )N#SELECT * FROM cases WHERE case_id=?error	not found  z(SELECT * FROM case_media WHERE case_id=?media)r   rp   rq   fetchoner   r   r   r   )rd   r   r   rowresultms         r   api_case_detailr      s    	B
))+CKK5zB
,,.C

-.33#YFKK:WJG(+71tAw7F7OHHJ6? 8s   Cz/api/cases/<case_id>/scorec                    t               }|j                         }|j                  d| f       |j                         }|s|j	                          t        ddi      dfS t        |      }|j                  d| f       |j                         D cg c]  }|d   	 }}d|v }d|v }t        |d	   |d
   |d   |d   |d   |d   |d   |d   ||
      \  }	}
|	dk\  rdn|	dk\  rdnd}t        t        j                               }|j                  d|	t        j                  |
      ||| f       |j                          |j	                          t        | |	|
|d      S c c}w )u>   Score neu berechnen — z.B. nach nachtraeglichem Foto-Upload.r   r   r   r   zBSELECT label FROM case_media WHERE case_id=? AND media_type='foto'labelrX   rY   r4   r5   kurzbeschreibungrM   rN   rO   r:   r;   r_   r`   ra   rb   rc   z`UPDATE cases SET content_score=?, content_tags=?, content_status=?, updated_at=? WHERE case_id=?)rd   content_scorecontent_tagscontent_status)r   rp   rq   r   r   r   r   r   r@   rk   rl   r|   r}   r~   )rd   r   r   r   r   r   labelsr<   r=   r>   r?   r   r   s                r   api_recalculate_scorer      sk    
B
))+CKK5zB
,,.C

-.33S	AKKTW^V`a"%,,.1Qaj1F1V#Jv%K'	)ah"4 5	
a 23Q7H5I	-!J-[BKE4 #b[\erk{uF
diik
CKKj	

4 &#w79 IIKHHJwPThnopp 2s   Ez
/api/statsc                     t               } | j                         }|j                  d       |j                         d   }|j                  d       |j                         d   }|j                  d       |j                         d   }|j                  d       |j                         d   }|j                  d       |j                         d   }| j	                          t        |||||d      S )NzSELECT COUNT(*) FROM casesr   zCSELECT COUNT(*) FROM cases WHERE content_score >= 60 AND freigabe=1zBSELECT COUNT(*) FROM cases WHERE content_score < 40 AND freigabe=1z=SELECT COUNT(*) FROM cases WHERE foto_anzahl=0 AND freigabe=1z0SELECT COUNT(*) FROM cases WHERE prioritaet='p1')totalr`   rc   ohne_bilderprioritaet_1)r   rp   rq   r   r   r   )r   r   r   r`   rc   r   p1s          r   	api_statsr      s    	B
))+CKK,-LLN1EKKUV"JKKTU
,,.
CKKOP,,.#KKKBC		BHHJ "  r   __main__z	127.0.0.1i!  F)hostportdebug)rr   rh   rl   r   r|   flaskr   r   r   r   __name__appconfigBASEr   ru   r   r   r    r@   routerD   r   r   r   r   r   r   runrC   r   r   <module>r      s]   $ $ $ : :Ho#3

  "
!
!J

8
@!8 3) ) 9vh'?3 (?3B 8	6 	6 < , !E73 4 '&:q ;q6 < , zGG4uG5 r   