Files
2026-09-07 18:44:32 -03:00

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...'}),
}