Initial commit: EFINTEL ERP Django Port
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User, Group
|
||||
from .models import Expense, Project, Category, SystemSetting, UserProfile, Document, CurrencyEnum, ExpenseTypeEnum
|
||||
|
||||
|
||||
class ExpenseForm(forms.ModelForm):
|
||||
date = forms.DateField(
|
||||
widget=forms.DateInput(attrs={'type': 'date'}),
|
||||
label='Fecha del Gasto'
|
||||
)
|
||||
|
||||
amount_clp = forms.DecimalField(
|
||||
label='Monto Neto (CLP)',
|
||||
required=True,
|
||||
widget=forms.NumberInput(attrs={'placeholder': 'Ej: 1450000'})
|
||||
)
|
||||
|
||||
receipt = forms.FileField(
|
||||
label='Adjuntar Boleta/Factura',
|
||||
required=False,
|
||||
widget=forms.FileInput(attrs={'accept': 'image/*,.pdf'})
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Expense
|
||||
fields = [
|
||||
'project', 'category', 'amount_clp', 'currency', 'date',
|
||||
'description', 'vendor', 'region', 'comuna', 'vehicle_ownership'
|
||||
]
|
||||
widgets = {
|
||||
'description': forms.Textarea(attrs={'rows': 3, 'placeholder': 'Ej: Carga combustible Copec / Pasajes bus terreno'}),
|
||||
}
|
||||
|
||||
|
||||
class ProjectForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Project
|
||||
fields = ['code', 'name', 'type', 'description', 'manager', 'assigned_budget_clp']
|
||||
widgets = {
|
||||
'description': forms.Textarea(attrs={'rows': 3}),
|
||||
}
|
||||
|
||||
|
||||
class SystemSettingForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = SystemSetting
|
||||
fields = ['global_budget', 'usd_exchange_rate']
|
||||
|
||||
|
||||
class ResponsableForm(forms.Form):
|
||||
username = forms.CharField(max_length=150, label="Nombre de Usuario")
|
||||
password = forms.CharField(widget=forms.PasswordInput(), label="Contraseña", required=False)
|
||||
email = forms.EmailField(label="Correo Electrónico", required=False)
|
||||
role = forms.ModelChoiceField(queryset=Group.objects.all(), label="Rol / Grupo")
|
||||
|
||||
# Perfil Fields
|
||||
rut = forms.CharField(max_length=20, label="RUT", required=False)
|
||||
job_title = forms.CharField(max_length=150, label="Cargo", required=False)
|
||||
description = forms.CharField(widget=forms.Textarea(attrs={'rows': 3}), label="Descripción / Bio", required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.instance = kwargs.pop('instance', None)
|
||||
super().__init__(*args, **kwargs)
|
||||
if self.instance:
|
||||
self.fields['username'].initial = self.instance.username
|
||||
self.fields['email'].initial = self.instance.email
|
||||
# Set role
|
||||
groups = self.instance.groups.all()
|
||||
if groups.exists():
|
||||
self.fields['role'].initial = groups.first()
|
||||
# Set profile info
|
||||
try:
|
||||
self.fields['description'].initial = self.instance.profile.description
|
||||
self.fields['rut'].initial = self.instance.profile.rut
|
||||
self.fields['job_title'].initial = self.instance.profile.job_title
|
||||
except Exception:
|
||||
pass
|
||||
# Password is optional for edit
|
||||
self.fields['password'].required = False
|
||||
self.fields['password'].help_text = "Dejar en blanco si no desea cambiarla."
|
||||
|
||||
def clean_username(self):
|
||||
username = self.cleaned_data.get('username')
|
||||
qs = User.objects.filter(username=username)
|
||||
if self.instance:
|
||||
qs = qs.exclude(pk=self.instance.pk)
|
||||
if qs.exists():
|
||||
raise forms.ValidationError("Este nombre de usuario ya está registrado.")
|
||||
return username
|
||||
|
||||
def save(self):
|
||||
username = self.cleaned_data.get('username')
|
||||
password = self.cleaned_data.get('password')
|
||||
email = self.cleaned_data.get('email')
|
||||
role = self.cleaned_data.get('role')
|
||||
description = self.cleaned_data.get('description')
|
||||
rut = self.cleaned_data.get('rut')
|
||||
job_title = self.cleaned_data.get('job_title')
|
||||
|
||||
if self.instance:
|
||||
user = self.instance
|
||||
user.username = username
|
||||
user.email = email
|
||||
if password:
|
||||
user.set_password(password)
|
||||
else:
|
||||
user = User.objects.create_user(username=username, email=email, password=password)
|
||||
|
||||
if role.name == 'Administrador' or role.name == 'Administrador Finanzas':
|
||||
user.is_staff = True
|
||||
user.is_superuser = True
|
||||
else:
|
||||
user.is_staff = False
|
||||
user.is_superuser = False
|
||||
|
||||
user.save()
|
||||
|
||||
user.groups.clear()
|
||||
user.groups.add(role)
|
||||
|
||||
profile, _ = UserProfile.objects.get_or_create(user=user)
|
||||
profile.description = description
|
||||
profile.rut = rut
|
||||
profile.job_title = job_title
|
||||
profile.save()
|
||||
|
||||
return user
|
||||
|
||||
|
||||
class DocumentForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Document
|
||||
fields = ['file', 'title']
|
||||
Reference in New Issue
Block a user