
    `j:                    @   d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZmZmZ d dlmZ d dlm Z   ejB                  e"      Z#ddZ$ G d de      Z% G d de%      Z& G d de%      Z' G d de%      Z(y)    )annotationsN)PermissionDenied)Http404)OpenApiExampleOpenApiParameterOpenApiResponseextend_schema)serializersstatus)IsAuthenticated)Response)APIView)C59XmlExportRequestSerializerC59ZipExportRequestSerializerGuestXmlExportRequestSerializer)generate_c59_xml_downloadgenerate_c59_zip_downloadgenerate_guest_xml_download)XmlPayloadValidationError)	Structurec                    t         j                  j                  |      j                         }|t	        d      |j
                  | j                  k(  xs* |j                  j                  |       j                         }|st        d      |S )N)idzStructure not found.)userz)You do not have access to this structure.)
r   objectsfilterfirstr   user_idr   structure_usersexistsr   )r   structure_id	structure
has_accesss       &/backend/istat/xml_export/api/views.py"_get_accessible_structure_or_raiser$      s    !!((L(9??AI,-- 	TWW$ 	@$$+++6==?  JKK    c                  (    e Zd ZU egZdZded<   d Zy)XmlExportAPIViewBaseNz#type[serializers.Serializer] | Nonerequest_serializer_classc                    | j                   }|t        d       ||j                        }|j                  d       |j                  S )Nz+request_serializer_class must be configured)dataT)raise_exception)r(   RuntimeErrorquery_paramsis_validvalidated_data)selfrequestserializer_class
serializers       r#   _validate_queryz$XmlExportAPIViewBase._validate_query1   sM    88#LMM%7+?+?@
D1(((r%   )__name__
__module____qualname__r   permission_classesr(   __annotations__r4    r%   r#   r'   r'   -   s    )*DHAH)r%   r'   c                  *   e Zd ZeZ edgd edeej                  dd       ede	ej                  dd       ed	e	ej                  dd
      g e
dddddd      g ed       ed       ed       ed       ed      d      d        Zy)GuestXmlExportAPIView	ISTAT XMLz"Download guest movement XML exportr    TStructure ID to export.nametypelocationrequireddescription
start_datez Start date in YYYY-MM-DD format.end_datezEnd date in YYYY-MM-DD format.zGuest XML export   
2026-05-01z
2026-05-03r    rE   rF   r    queryvalueparameter_onlyzDownloadable guest XML responserD   !Validation or business-rule errorPermission deniedStructure not foundUnexpected server error   i  i  i  i  tagssummary
parametersexamples	responsesc                8   	 | j                  |      }t        |j                  |d          t        di |}t        j1                  d|j                  j                  |d   |d   j3                         |d   j3                         ddd	
       |S # t        j
                  $ r/}t        |j                  t        j                        cY d }~S d }~wt        $ r}t        j                  d|j                  j                  |j                  j                  d      |j                  j                  d      |j                  j                  d      ddd	
       t        dt!        |      it        j                        cY d }~S d }~wt"        $ r0}t        dt!        |      it        j$                        cY d }~S d }~wt&        $ r0}t        dt!        |      it        j(                        cY d }~S d }~wt*        $ r t        j-                  d|j                  j                  |j                  j                  d      |j                  j                  d      |j                  j                  d      ddd	
       t        ddit        j.                        cY S w xY w)Nr    r   r    r   zGuest XML export API failedrE   rF   	guest_xmlfailurer   r    rE   rF   export_typer   extradetailz'Guest XML export API unexpected failureAn unexpected error occurred.zGuest XML export API succeededsuccessr:   )r4   r$   r   r   r
   ValidationErrorr   re   r   HTTP_400_BAD_REQUESTr   loggerwarningr   r-   getstrr   HTTP_403_FORBIDDENr   HTTP_404_NOT_FOUND	Exception	exceptionHTTP_500_INTERNAL_SERVER_ERRORinfo	isoformatr0   r1   paramsresponseexcs        r#   rl   zGuestXmlExportAPIView.get=   s8   \)	))'2F.\\#N3 3<V<HJ 	,"<<?? &~ 6$\2<<>":.88:*# 	 
	
 _ ** 	LCJJv/J/JKK( 	VNN-&||$+$8$8$<$<^$L")"6"6":":<"H ' 4 4 8 8 D#.'  
 Xs3x09T9TUU 	TXs3x09R9RSS 	TXs3x09R9RSS 	9&||$+$8$8$<$<^$L")"6"6":":<"H ' 4 4 8 8 D#.'  
 :;<< 	[   6B J$$CJJB"F<JJ%F93J9J%G0*J0B&JJN)r5   r6   r7   r   r(   r	   r   intQUERYrm   r   r   rl   r:   r%   r#   r<   r<   :   s    >]4#)//5 !)//> )//<
0 "$%". ,
  9

 !-NO -PQ -@A -BC -FG
K,Z7[,Z7r%   r<   c                  V   e Zd ZeZ edgd edeej                  dd       ede	ej                  dd       ed	e
ej                  d
d       ede	ej                  d
d      g edddddd      g ed       ed       ed       ed       ed      d      d        Zy)C59XmlExportAPIViewr=   zDownload C59 XML exportr    Tr>   r?   report_datez!Report date in YYYY-MM-DD format.validate_xsdFz:Whether to validate the generated XML against the C59 XSD.xsd_pathz=Optional explicit filesystem path to the C59 XSD schema file.zC59 XML exportrG   rH   )r    r~   r   rJ   rL   zDownloadable C59 XML responserO   rP   rQ   rR   rS   rT   rV   c                   	 | j                  |      }t        |j                  |d          t        di |}t        j1                  d|j                  j                  |d   |d   j3                         |d   ddd	
       |S # t        j
                  $ r/}t        |j                  t        j                        cY d }~S d }~wt        $ r}t        j                  d|j                  j                  |j                  j                  d      |j                  j                  d      |j                  j                  d      ddd	
       t        dt!        |      it        j                        cY d }~S d }~wt"        $ r0}t        dt!        |      it        j$                        cY d }~S d }~wt&        $ r0}t        dt!        |      it        j(                        cY d }~S d }~wt*        $ r t        j-                  d|j                  j                  |j                  j                  d      |j                  j                  d      |j                  j                  d      ddd	
       t        ddit        j.                        cY S w xY w)Nr    r]   r^   zC59 XML export API failedr~   r   c59_xmlr`   )r   r    r~   r   rb   r   rc   re   z%C59 XML export API unexpected failurerf   zC59 XML export API succeededrg   r:   )r4   r$   r   r   r
   rh   r   re   r   ri   r   rj   rk   r   r-   rl   rm   r   rn   r   ro   rp   rq   rr   rs   rt   ru   s        r#   rl   zC59XmlExportAPIView.get   s/   j)	))'2F.\\#N3 1:6:HJ 	*"<<?? &~ 6%m4>>@ &~ 6(# 	 
	
 _ ** 	LCJJv/J/JKK( 	VNN+&||$+$8$8$<$<^$L#*#7#7#;#;M#J$+$8$8$<$<^$L#,'  
 Xs3x09T9TUU 	TXs3x09R9RSS 	TXs3x09R9RSS 	7&||$+$8$8$<$<^$L#*#7#7#;#;M#J$+$8$8$<$<^$L#,'  
 :;<< 	s[   6B J$C :J JB"E4.J4J %F+%J+J7%G"J"B&J
JN)r5   r6   r7   r   r(   r	   r   rz   r{   rm   boolr   r   rl   r:   r%   r#   r}   r}      s   <])#)//5 ")//? #)//X )//[-
>  $%#/$(
  9

 !-LM -PQ -@A -BC -FG
Y3h7i3h7r%   r}   c                  .   e Zd ZdZeZ edgd edeej                  dd       ede
ej                  dd	       ed
e
ej                  dd      g edddddd      g ed       ed       ed       ed       ed      d      d        Zy)C59ZipExportAPIViewzDDownload a ZIP archive containing one C59 XML file per calendar day.r=   z)Download C59 ZIP export (one XML per day)r    Tr>   r?   rE   z:First day of the reporting period (YYYY-MM-DD, inclusive).rF   z9Last day of the reporting period (YYYY-MM-DD, inclusive).u   C59 ZIP export — June 2026rG   z
2026-06-01z
2026-06-30rI   rJ   rL   zbZIP archive (application/zip) containing one C59 XML file per calendar day in the requested range.rO   rP   rQ   rR   rS   rT   rV   c                8   	 | j                  |      }t        |j                  |d          t        di |}t        j1                  d|j                  j                  |d   |d   j3                         |d   j3                         ddd	
       |S # t        j
                  $ r/}t        |j                  t        j                        cY d }~S d }~wt        $ r}t        j                  d|j                  j                  |j                  j                  d      |j                  j                  d      |j                  j                  d      ddd	
       t        dt!        |      it        j                        cY d }~S d }~wt"        $ r0}t        dt!        |      it        j$                        cY d }~S d }~wt&        $ r0}t        dt!        |      it        j(                        cY d }~S d }~wt*        $ r t        j-                  d|j                  j                  |j                  j                  d      |j                  j                  d      |j                  j                  d      ddd	
       t        ddit        j.                        cY S w xY w)Nr    r]   r^   zC59 ZIP export API failedrE   rF   c59_zipr`   ra   rc   re   z%C59 ZIP export API unexpected failurerf   zC59 ZIP export API succeededrg   r:   )r4   r$   r   r   r
   rh   r   re   r   ri   r   rj   rk   r   r-   rl   rm   r   rn   r   ro   rp   rq   rr   rs   rt   ru   s        r#   rl   zC59ZipExportAPIView.get  s8   f)	))'2F.\\#N3 1:6:HJ 	*"<<?? &~ 6$\2<<>":.88:(# 	 
	
 _ ** 	LCJJv/J/JKK( 	VNN+&||$+$8$8$<$<^$L")"6"6":":<"H ' 4 4 8 8 D#,'  
 Xs3x09T9TUU 	TXs3x09R9RSS 	TXs3x09R9RSS 	7&||$+$8$8$<$<^$L")"6"6":":<"H ' 4 4 8 8 D#,'  
 :;<< 	ry   N)r5   r6   r7   __doc__r   r(   r	   r   rz   r{   rm   r   r   rl   r:   r%   r#   r   r     s    N<];#)//5 !)//X )//W
0 .$%". ,
  9

 !? !-PQ -@A -BC -FG
K1d7e1d7r%   r   )r    rz   returnr   ))
__future__r   loggingdjango.core.exceptionsr   django.httpr   drf_spectacular.utilsr   r   r   r	   rest_frameworkr
   r   rest_framework.permissionsr   rest_framework.responser   rest_framework.viewsr    istat.xml_export.api.serializersr   r   r   *istat.xml_export.application.export_facader   r   r   istat.xml_export.exceptionsr   structures.modelsr   	getLoggerr5   rj   r$   r'   r<   r}   r   r:   r%   r#   <module>r      s    "  3  b b . 6 , ( 
 
 B ' 
		8	$
)7 
)g0 gTn. nbn. nr%   