diff --git a/Dockerfile b/Dockerfile index ac0d8ee..3767421 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,9 +23,10 @@ COPY . /app/ # Exponer el puerto EXPOSE 8000 -# Crear un usuario no-root por seguridad -RUN adduser --disabled-password --no-create-home djangouser +# Crear un usuario no-root por seguridad (con home directory para Gunicorn) +RUN adduser --disabled-password djangouser RUN chown -R djangouser:djangouser /app +RUN mkdir -p /app/media /app/static && chown -R djangouser:djangouser /app/media /app/static USER djangouser # Comando por defecto para iniciar Gunicorn con Uvicorn workers (Producción) diff --git a/procurement/forms.py b/procurement/forms.py index 20120d2..81ce149 100644 --- a/procurement/forms.py +++ b/procurement/forms.py @@ -108,8 +108,8 @@ class ThreeWayMatchForm(forms.ModelForm): widgets = { 'purchase_order': forms.Select(attrs={'class': 'form-control', 'id': 'id_po_select', 'required': 'required'}), 'goods_receipt': forms.Select(attrs={'class': 'form-control', 'required': 'required'}), - 'dte_invoice_number': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Ej: 45290', 'required': 'required', 'pattern': '^[0-9A-Za-z\-]+$'}), - 'dte_invoice_rut': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Ej: 76.543.210-K', 'required': 'required', 'pattern': '^\d{1,2}\.\d{3}\.\d{3}-[\dkK]$'}), + 'dte_invoice_number': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Ej: 45290', 'required': 'required', 'pattern': r'^[0-9A-Za-z\-]+$'}), + 'dte_invoice_rut': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Ej: 76.543.210-K', 'required': 'required', 'pattern': r'^\d{1,2}\.\d{3}\.\d{3}-[\dkK]$'}), 'dte_net_amount': forms.NumberInput(attrs={'class': 'form-control', 'step': '1', 'id': 'id_dte_net', 'required': 'required', 'min': '0'}), 'dte_tax_amount': forms.NumberInput(attrs={'class': 'form-control', 'step': '1', 'id': 'id_dte_tax', 'required': 'required', 'min': '0'}), 'dte_total_amount': forms.NumberInput(attrs={'class': 'form-control', 'step': '1', 'id': 'id_dte_total', 'required': 'required', 'min': '0'}),