Predefined performance evaluation per user

33 Views Asked by At

I am trying to make an app for the performance evaluation of workers by their boss. For this, there is a database with information on the workers, from which information such as the ID must be extracted, in such a way that to evaluate a worker, personal information must be passed as a parameter in the url of the form and The evaluation is displayed with some complete fields of personal information and 15 questions to answer and stored in a new table to later report on the data. A worker can have many evaluations, for example one monthly. However, I can't get it to work. At first I tried to do it with 2 models, but when it didn't work, I added a third one that would relate to the previous 2. I think the error is in view.py, can someone help me please? Models.py:

from django.db import models

# Create your models here.

nota= (
        ('25','Casi Nunca'),
        ('50','Algunas Veces'),
        ('75','Con Frecuencia'),
        ('100','Siempre'),
    )

recomienda = (
        ('0', 'no'),
        ('100', 'si')
    )


class Trabajador(models.Model):
    nombre = models.TextField(max_length = 50, null=False)
    codigo = models.TextField(max_length = 8, primary_key=True, null=False, unique=True)
    rut = models.TextField(max_length = 10, null=False, unique=True)
    cargo = models.TextField(max_length = 30, null=False)
    cencos = models.IntegerField(null=False)
    jefe = models.TextField(max_length = 50, null=False)
    correo_jefe = models.EmailField(null=False)
    evaluador = models.TextField(max_length = 50, null=False)
    correo_evaluador = models.EmailField(null=False)
    estado = models.IntegerField(null=False)
    asistencia = models.IntegerField(null=False)

    class Meta:
        verbose_name="trabajador"
        verbose_name_plural="trabajadores"

    def __str__(self):
        return self.rut
        

    

forms.py:

from django import forms
from .models import Trabajador, Encuesta, nota, recomienda


      

class EncuestaForm(forms.ModelForm):

    class Meta:
        model = Encuesta
        fields=[
            'pregunta1',
            'pregunta2'
            'pregunta3',
            'pregunta4',
            'pregunta5',
            'pregunta6',
            'pregunta7',
            'pregunta8',
            'pregunta9',
            'pregunta10',
            'pregunta11',
            'pregunta12',
            'pregunta13',
            'pregunta14',
            'pregunta15',
        ]
        

        labels = {
            'pregunta1':"Efectuar adecuadamente y según estándar esperado el mantenimiento y reparación de los equipos de trabajo dispuestos en cada obra.",
            'pregunta2':"Registra óptimamente en las ordenes de trabajo (OT), el trabajo asignado y actividades ejecutadas, haciendo la entrega de esta a su supervisor de maquinaria.",
            'pregunta3':"Posee conocimientos técnicos del equipo y sus sistemas en relación a los manuales técnicos y/o repuestos.",
            'pregunta4':"Posee conocimientos en el correcto usos de las herramientas de trabajo, tanto manuales como electrónicas en relación al trabajo a desarrollar.",
            'pregunta5':"Apropiado conocimiento en las unidades de medida y su equivalencia (Metodologías).",
            'pregunta6':"Informa oportunamente a su supervisor, al momento de encontrar una desviación en relación al trabajo en ejecución y/o área de trabajo, con la finalidad de corregir y cumplir con la programación y/o la prevención de un posible accidente.",
            'pregunta7':"Cumple y promueve acciones seguras en el ejecutar de su trabajo, cumpliendo óptimamente con el procedimiento asignado según la tarea especifica.",
            'pregunta8':"Realiza correctamente su ART, paso a paso e inspección visual de sus área de trabajo con la finalidad de encontrar una condición de riesgo y prever un accidente.",
            'pregunta9':"Pensamiento Analítico: Es la capacidad para entender una situación, disgregándola en pequeñas parte, identificando sus implicaciones paso a paso. También incluye el entendimiento de las secuencias temporales y las relaciones causa-efecto de las acciones.",
            'pregunta10':"Aversión al Riesgo: Capacidad para discriminar situaciones potencialmente peligrosas, de atención, concentración y alerta, por lo que se hace necesaria en aquellos puestos de trabajo que están expuestos a riesgo de accidentes.",
            'pregunta11':"Energía: Capacidad de trabajar arduamente en diferentes situaciones, constantemente cambiantes o con participantes muy diversos. A pesar de que la jornada laboral en la cual se trabaje sea prolongada, las personas con esta capacidad no se ven afectadas en cuanto a su nivel de energías y efectividad.",
            'pregunta12':"Denota responsabilidad y compromiso, en cuanto a sus obligaciones, inicio y/o cambios de turno.",
            'pregunta13':"Logra mantener buen nivel de relación interpersonal con sus equipo de trabajo, y/o los de otras áreas del contrato.",
            'pregunta14':"Logra recibir y ejecutar adecuadamente las instrucciones y/o Re instrucciones entregadas por su jefatura, logrando tener una comportamiento esperado.",
            'pregunta15':"Usted recomendaria que este trabajador continue en nuevos proyectos en la empresa.",
        }

        widgets = {
            'pregunta1':forms.ChoiceField(choices = nota),
            'pregunta2':forms.ChoiceField(choices = nota),
            'pregunta3':forms.ChoiceField(choices = nota),
            'pregunta4':forms.ChoiceField(choices = nota),
            'pregunta5':forms.ChoiceField(choices = nota),
            'pregunta6':forms.ChoiceField(choices = nota),
            'pregunta7':forms.ChoiceField(choices = nota),
            'pregunta8':forms.ChoiceField(choices = nota),
            'pregunta9':forms.ChoiceField(choices = nota),
            'pregunta10':forms.ChoiceField(choices = nota),
            'pregunta11':forms.ChoiceField(choices = nota),
            'pregunta12':forms.ChoiceField(choices = nota),
            'pregunta13':forms.ChoiceField(choices = nota),
            'pregunta14':forms.ChoiceField(choices = nota),
            'pregunta15':forms.ChoiceField(choices = recomienda),
        }

trabajador_form.html:

{% extends 'evaluacion/base.html' %}

{% block content %}
<hr>
<h1><strong>Trabajador: {{trabajador.nombre}}</strong></h1><br>
<h2 class="section-heading-lower"><strong>Código:</strong> {{trabajador.codigo}}</h2>
<h2 class="section-heading-upper"><strong>Rut:</strong> {{trabajador.rut}}</h2>
<h2 class="section-heading-upper"><strong>Cargo:</strong> {{trabajador.cargo}}</h2>
<h2 class="section-heading-upper"><strong>Centro de Costo:</strong> {{trabajador.cencos}}</h2>
<h2 class="section-heading-upper"><strong>Porcentaje de Asistencia:</strong> {{trabajador.asistencia}}%</h2>
<hr>
<script>

    function draw() {
        var canvas = document.getElementById('prueba');
        if (canvas.getContext) {
            var ctx = canvas.getContext('2d'); } }

</script>

<style>
    canvas { border: 1px solid black; }
</style>

<script> 
//Cuadro de diálogo de confirmación en JavaScript
    function confirmarReset()
    {
    return confirm("¿Está seguro que desea eliminar todos los registros?");
    }
</script>

    <hr>
    <form action="trabajador_list.html" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{form.as_p}}
        
        <button type="submit">Guardar</button>
        <button type="reset" onclick="return confirmarReset()">Reiniciar</button>
    </form>
    
    
{% endblock %}

views.py:

class evaluacion_view(ListView):
    model = Encuesta
    template_name = 'trabajador/trabajador_list.html'

class evaluacion_create(CreateView):
    model = Encuesta
    template_name = 'trabajador/trabajador_list.html'
    form_class = EncuestaForm
    second_form_class = NameForm
    success_url = 'http://localhost:8000/trabajador/trabajador_edit/1/'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        if 'form' not in context:
            context['form'] = self.form_class()
        if 'form2' not in context:
            context['form2'] = self.second_form_class()
        return context

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        form2 = self.second_form_class(request.POST)
        if form.is_valid() and form2.is_valid():
            evaluacion = form.save(commit=False)
            trabajador = form2.save()
            evaluacion.trabajador = trabajador
            evaluacion.save()
            return HttpResponseRedirect(self.get_success_url())
        else:
            return self.render_to_response(self.get_context_data(form=form, form2=form2))

class evaluacion_update(UpdateView):
    model = Encuesta
    second_model = Trabajador
    form_class = EncuestaForm
    second_form_class = NameForm
    template_name = 'trabajador/trabajador_form.html'
    success_url = 'http://localhost:8000/trabajador/trabajador_edit/1/'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        pk = self.kwargs.get('pk', 0)
        evaluacion = self.model.objects.get(id=pk)
        trabajador = self.second_model.objects.get(id=evaluacion.trabajador)  # Update this line
        if 'form' not in context:
            context['form'] = self.form_class()
        if 'form2' not in context:
            context['form2'] = self.second_form_class(instance=trabajador)
        context['id'] = pk
        return context

    def post(self, request, *args, **kwargs):
        id_encuesta = kwargs['pk']
        evaluacion = self.model.objects.get(id=id_encuesta)
        trabajador = self.second_model.objects.get(id=evaluacion.rut)  # Update this line
        form = self.form_class(request.POST, instance=evaluacion)
        form2 = self.second_form_class(request.POST, instance)

urls.py

from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from trabajador.views import evaluacion_view, evaluacion_create, evaluacion_update
from trabajador import views



urlpatterns = [

    path("trabajador_list/", evaluacion_view.as_view(), name="trabajador_list"),
    path("trabajador_create/", evaluacion_create.as_view(), name="trabajador_create"),
    path("trabajador_edit/<str:pk>/", evaluacion_update.as_view(), name="trabajador_edit"),

]
0

There are 0 best solutions below