o
    w+ i{I                     @   s  d 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 ddl	m
Z
 G dd	 d	ejZ	 ddlmZ ddlmZ G d
d dejZG dd dejZ	 G dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdS )z9from django import forms
from .models import UploadedFile    )forms   )Rilievi)AziendaUserProfiler   )User)	mark_safec                       s(   e Zd Zd fdd	ZdddZ  ZS )	CustomSelectWidgetN c                    s&   t  || |p
i | _|pi | _d S )N)super__init__data_translate_choicescss)selfattrschoicesr   	__class__r
   &/var/www/saasdg/saasdg/events/forms.pyr      s   
zCustomSelectWidget.__init__c                 C   s  |d u ri }|  | j|}| jdd}| jdd}g }| jD ]*\}	}
| j|	}|d ur>|d|	 d| d|
 d q |d|	 d|
 d q d}| D ]\}}t|t	r_d	
|}|d	| d
| d7 }qQd| d| d| d| dd
| d}t|S )Nclass idz<option value="z"><span data-translate="z">z</span></option>z	</option> z=""z<select class="z" id="z" name=">z	</select>)build_attrsr   r   getr   r   appenditems
isinstancelistjoinr   )r   namevaluer   rendererfinal_attrsr   iddoptions_htmloption_valueoption_labeldata_trattr_stringkeyvalhtmlr
   r
   r   render   s:   

zCustomSelectWidget.render)Nr
   N)NN)__name__
__module____qualname__r   r/   __classcell__r
   r
   r   r   r	      s    r	   c                       s*   e Zd Z fddZG dd dZ  ZS )RilieviFormInputc                    s   t  j|i | d| jd _d| jd jjd< | jd }| jd }tdddd	d
ddddd|_tdddddddddd|_|jjddd |jjddd g d|_g d|_d S )NInserisci il nome del rilievonome_rilievozdata-translatesurvey_typesurvey_vectorform-selectzsurvey-vectorr   r   Seleziona il vettoreAereoManualeVeicoloAltro)r   ARLHNDVHCLALTR)r   r   zsurvey-typeSeleziona il sensoreGeoradarMagnetometroFotogrammetria)r   GPRMAGFOTOrC   )r   rD   )rH   rE   )rI   rF   )rJ   rG   rC   r?   )r   r;   )r@   r<   )rA   r=   )rB   r>   rL   )	r   r   fieldslabelwidgetr   r	   updater   r   argskwargssurvey_type_fieldsurvey_vector_fieldr   r
   r   r   E   sJ   


zRilieviFormInput.__init__c                   @   s.   e Zd ZeZg dZdejddddiZdS )zRilieviFormInput.Meta)r6   
file_inputr7   r8   r6   form-controlz	file-namer:   r   N)	r0   r1   r2   r   modelrN   r   	TextInputwidgetsr
   r
   r
   r   Meta   s    r]   )r0   r1   r2   r   r]   r3   r
   r
   r   r   r4   D   s    =r4   c                   @      e Zd ZG dd dZdS )RilieviFormOutputc                   @   s,   e Zd ZeZg dZdejddidiZdS )zRilieviFormOutput.Meta)file_outputcreated_at_output	shapefilera   typezdatetime-localrY   N)	r0   r1   r2   r   rZ   rN   r   DateTimeInputr\   r
   r
   r
   r   r]      s
    r]   Nr0   r1   r2   r]   r
   r
   r
   r   r_          r_   c                   @   r^   )AziendaFormc                
   @   s   e Zd ZeZg dZejdddddejdddddejdddddejdddddejdd	d	ddejdd
d
dddZ	dS )zAziendaForm.Meta)nome_aziendapartita_ivamail_referentetelefono_referentepecindirizzo_legale
right me-3zNome aziendar   placeholderzdata-translate-placeholderrY   zPartita IVAzIndirizzo mail referentezContatto telefonico referentezIndirizzo legalePEC)rh   ri   rj   rk   rm   rl   N)
r0   r1   r2   r   rZ   rN   r   r[   
EmailInputr\   r
   r
   r
   r   r]      s    
r]   Nre   r
   r
   r
   r   rg      rf   rg   c                   @   sF   e Zd ZejejddddddZG dd dZdd	 Zd
d Z	dS )UserFormrn   Passwordro   rY   )rP   c                   @   sf   e Zd ZeZg dZejdddddejdddddejdddddejdddddd	Z	d
S )zUserForm.Meta)username
first_name	last_nameemailpasswordrn   zNome utentero   rY   NomeCognomezEmail utente)ru   rv   rw   rx   N)
r0   r1   r2   r   rZ   rN   r   r[   rr   r\   r
   r
   r
   r   r]      s    
r]   c                 C   *   | j d }tjj|d rtd|S )Nru   )ru   u   Questo username è già in uso.cleaned_datar   objectsfilterexistsr   ValidationError)r   ru   r
   r
   r   clean_username      

zUserForm.clean_usernamec                 C   r|   )Nrx   )rx   u   Questa email è già in uso.r}   )r   rx   r
   r
   r   clean_email   r   zUserForm.clean_emailN)
r0   r1   r2   r   	CharFieldPasswordInputry   r]   r   r   r
   r
   r
   r   rs      s
    
rs   c                   @   s>   e Zd Zejej dejddidddZ	G dd dZ
d	S )
UserProfileFormTr   rn   rY   r   )querysetrequiredrP   rO   c                   @   s   e Zd ZeZdgZdS )zUserProfileForm.MetaaziendaN)r0   r1   r2   r   rZ   rN   r
   r
   r
   r   r]      s    
r]   N)r0   r1   r2   r   ModelChoiceFieldr   r   allSelectr   r]   r
   r
   r
   r   r      s    r   c                       s6   e Zd ZdZ fddZdd ZG dd dZ  ZS )AdminRilieviFormInputzBForm per l'admin per inserire un rilievo completo con tutti i datic                    sV  | dd | _t j|i | d| jd _| jd jjdddd | jd }| jd	 }|jjd
dd |jjd
dd g d|_	g d|_	| jd jjd
dd | jd jjdddd d| jd _
| jd jjdddd d| jd _
| jd jjddddd d| jd _
| jd jjdd dd!d d| jd _
| jd" jjdd#dd$d d| jd" _
| jd% jjdd&d'd(d)d* d| jd% _
| jd+ jjdd,dd-d d| jd+ _
| jd. jjdd/dd0d d| jd. _
| jd1 jjdd2dd3d d| jd1 _
| jd4 jjdd5d6d d| jd4 _
d S )7Nazienda_selezionatazNome del rilievor6   rX   zadmin-nome-rilievor5   )r   r   rp   r7   r8   r9   zadmin-survey-typer:   zadmin-survey-vectorrK   rM   prioritazadmin-prioritarW   zadmin-file-inputz.zip)r   r   acceptTr`   zadmin-file-outputFm2zadmin-m2anyz
es. 1500.5)r   r   steprp   
dimensionezadmin-dimensionezes. 2.5metri_sottoservizizadmin-metri-sottoservizizes. 45.2numero_anomaliezadmin-numero-anomalie10zes. 15)r   r   r   minrp   t_elabzadmin-t-elabzes. 120
latitudinezadmin-latitudinezes. 45.4642longitudinezadmin-longitudinez
es. 9.1900rb   zadmin-shapefilez.geojson)popr   r   r   rN   rO   rP   r   rQ   r   r   rR   r   r
   r   r      s   



	zAdminRilieviFormInput.__init__c                 C   s   | j d}|s
|S d}t| dr| jr| jj}n%d| jv r>ddlm} z|jj| jd d}|j}W n
 |j	y=   Y nw |rft
jj||d}| jrW| jjrW|j| jjd	}| rdtd
| d|S 	 |S )z6Valida che il nome del rilievo sia univoco per aziendar6   Nr   admin_azienda_selezionatar   )r   )rh   )nome_rilievo__iexact
azienda_id)pkzUn rilievo con il nome "u9   " esiste già per questa azienda. Scegli un nome diverso.)r~   r   hasattrr   r   datamodelsr   r   DoesNotExistr   r   instancer   excluder   r   r   )r   r6   r   r   r   existingr
   r
   r   clean_nome_rilievoM  s8   



	z(AdminRilieviFormInput.clean_nome_rilievoc                   @   s   e Zd ZeZg dZdS )zAdminRilieviFormInput.Meta)r6   rW   r`   r7   r8   r   r   r   r   r   r   r   r   rb   N)r0   r1   r2   r   rZ   rN   r
   r
   r
   r   r]   v  s    r]   )r0   r1   r2   __doc__r   r   r]   r3   r
   r
   r   r   r      s     )r   c                       F   e Zd ZdZejej dddej	ddiddZ
 fd	d
Z  ZS )DeactivateUserFormzHForm per disattivare (soft delete) un utente senza rimuoverne i rilievi.TzUtente da disattivareSeleziona un utenter   r9   rY   r   r   rO   empty_labelrP   c                    s   | dd }t j|i | tj }|r(tjj|ddddddd}ntjjdddd	dddd}|| j	d
 _
d S )Nr   FTuserprofile__aziendais_superuser	is_activeuserprofilerv   rw   ru   r   userprofile__azienda__isnullr   utenter   r   r   r   r   noner   select_relatedorder_byrN   r   r   rS   rT   r   r   r   r
   r   r     "   


zDeactivateUserForm.__init__r0   r1   r2   r   r   r   r   r   r   r   r   r   r3   r
   r
   r   r   r         r   c                       r   )ReactivateUserFormz:Form per riattivare un utente precedentemente disattivato.TzUtente da riattivarer   r   r9   rY   r   c                    s   | dd }t j|i | tj }|r(tjj|ddddddd}ntjjdddddddd}|| j	d	 _
d S )
Nr   Fr   r   rv   rw   ru   r   r   r   r   r   r
   r   r     r   zReactivateUserForm.__init__r   r
   r
   r   r   r     r   r   c                       sx   e Zd ZdZejej dddej	ddiddZ
ejej dd	d
ej	ddiddZ fddZ fddZ  ZS )ReassignRilieviFormz>Form per riassegnare tutti i rilievi da un utente ad un altro.TzUtente sorgentezSeleziona utente sorgenter   r9   rY   r   zNuovo utentezSeleziona utente destinazionec                    sr   | dd }t j|i | tj }|r'tjj|ddddddd}|| j	d	 _
|jd
d| j	d _
d S )Nr   F)r   r   r   r   rv   rw   ru   user_sorgenteT)r   user_destinazioner   )r   rS   rT   r   base_querysetr   r
   r   r     s   
zReassignRilieviForm.__init__c                    sp   t   }|d}|d}|r6|r6||kr| dd |S t|jdd }t|jdd }||kr6td|S )Nr   r   z)Seleziona un utente diverso dal sorgente.r   z2Gli utenti devono appartenere alla stessa azienda.)r   cleanr   	add_errorgetattrr   r   r   )r   r~   r   r   src_aziendadest_aziendar   r
   r   r     s   



zReassignRilieviForm.clean)r0   r1   r2   r   r   r   r   r   r   r   r   r   r   r   r3   r
   r
   r   r   r     s$    r   N)r   djangor   r   r   r   r   django.contrib.auth.modelsr   django.utils.safestringr   r   r	   	ModelFormr4   r_   rg   rs   r   r   Formr   r   r   r
   r
   r
   r   <module>   s,    +H @!!