67 lines
4.7 KiB
Python
67 lines
4.7 KiB
Python
from django import forms
|
|
from .models import SpecialistCandidate, EvaluationRubric7D
|
|
from decimal import Decimal
|
|
|
|
class SpecialistCandidateForm(forms.ModelForm):
|
|
hourly_rate_clp = forms.DecimalField(
|
|
label="Tarifa por Hora (CLP)",
|
|
required=False,
|
|
widget=forms.NumberInput(attrs={'class': 'form-control', 'step': '1000'})
|
|
)
|
|
monthly_salary_target_clp = forms.DecimalField(
|
|
label="Pretensión de Renta Mensual (CLP)",
|
|
required=False,
|
|
widget=forms.NumberInput(attrs={'class': 'form-control', 'step': '10000'})
|
|
)
|
|
|
|
class Meta:
|
|
model = SpecialistCandidate
|
|
fields = [
|
|
'rut', 'first_name', 'last_name', 'email', 'phone', 'city',
|
|
'category_code', 'specialty_title', 'seniority', 'trl_level',
|
|
'portfolio_url', 'github_url', 'linkedin_url',
|
|
'hourly_rate_clp', 'monthly_salary_target_clp', 'availability',
|
|
'status', 'summary'
|
|
]
|
|
widgets = {
|
|
'rut': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Ej: 15.678.910-2', 'pattern': r'^\d{1,2}\.\d{3}\.\d{3}-[\dkK]$', 'title': 'Formato válido: XX.XXX.XXX-X', 'required': True}),
|
|
'first_name': forms.TextInput(attrs={'class': 'form-control', 'required': True}),
|
|
'last_name': forms.TextInput(attrs={'class': 'form-control', 'required': True}),
|
|
'email': forms.EmailInput(attrs={'class': 'form-control', 'required': True}),
|
|
'phone': forms.TextInput(attrs={'class': 'form-control', 'pattern': r'^\+?[0-9]{8,15}$', 'title': 'Número de teléfono válido (ej: +56912345678)'}),
|
|
'city': forms.HiddenInput(),
|
|
'category_code': forms.Select(attrs={'class': 'form-control', 'required': True}),
|
|
'specialty_title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Ej: Ingeniero en Control & Gemelos Digitales', 'required': True}),
|
|
'seniority': forms.Select(attrs={'class': 'form-control', 'required': True}),
|
|
'trl_level': forms.Select(attrs={'class': 'form-control', 'required': True}),
|
|
'portfolio_url': forms.URLInput(attrs={'class': 'form-control', 'placeholder': 'https://...'}),
|
|
'github_url': forms.URLInput(attrs={'class': 'form-control', 'placeholder': 'https://github.com/...'}),
|
|
'linkedin_url': forms.URLInput(attrs={'class': 'form-control', 'placeholder': 'https://linkedin.com/in/...'}),
|
|
'availability': forms.Select(attrs={'class': 'form-control', 'required': True}),
|
|
'status': forms.Select(attrs={'class': 'form-control', 'required': True}),
|
|
'summary': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Perfil técnico, certificaciones y experiencia en proyectos I+D+i...'}),
|
|
}
|
|
|
|
|
|
class EvaluationRubric7DForm(forms.ModelForm):
|
|
class Meta:
|
|
model = EvaluationRubric7D
|
|
fields = [
|
|
'candidate', 'evaluation_date',
|
|
'dim_case_study', 'dim_portfolio', 'dim_tech_specific', 'dim_cardinal_skills',
|
|
'dim_experience', 'dim_principles_safety', 'dim_innovation_rndi',
|
|
'feedback'
|
|
]
|
|
widgets = {
|
|
'candidate': forms.Select(attrs={'class': 'form-control', 'id': 'id_candidate', 'required': True}),
|
|
'evaluation_date': forms.DateInput(attrs={'type': 'date', 'class': 'form-control', 'required': True}),
|
|
'dim_case_study': forms.NumberInput(attrs={'class': 'form-control rubro-slider-input', 'min': '0', 'max': '100', 'step': '1', 'id': 'dim_1', 'required': True}),
|
|
'dim_portfolio': forms.NumberInput(attrs={'class': 'form-control rubro-slider-input', 'min': '0', 'max': '100', 'step': '1', 'id': 'dim_2', 'required': True}),
|
|
'dim_tech_specific': forms.NumberInput(attrs={'class': 'form-control rubro-slider-input', 'min': '0', 'max': '100', 'step': '1', 'id': 'dim_3', 'required': True}),
|
|
'dim_cardinal_skills': forms.NumberInput(attrs={'class': 'form-control rubro-slider-input', 'min': '0', 'max': '100', 'step': '1', 'id': 'dim_4', 'required': True}),
|
|
'dim_experience': forms.NumberInput(attrs={'class': 'form-control rubro-slider-input', 'min': '0', 'max': '100', 'step': '1', 'id': 'dim_5', 'required': True}),
|
|
'dim_principles_safety': forms.NumberInput(attrs={'class': 'form-control rubro-slider-input', 'min': '0', 'max': '100', 'step': '1', 'id': 'dim_6', 'required': True}),
|
|
'dim_innovation_rndi': forms.NumberInput(attrs={'class': 'form-control rubro-slider-input', 'min': '0', 'max': '100', 'step': '1', 'id': 'dim_7', 'required': True}),
|
|
'feedback': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Comentarios detallados de la evaluación...'}),
|
|
}
|