Commits

Dairon Medina committed 1b45cb7

Mojorado algoritmo del reporte gastos x proyecto

  • Participants
  • Parent commits 58286e5

Comments (0)

Files changed (1)

File obras/report_forms.py

     categoria = forms.ModelChoiceField(label="Categoría", queryset=models.Categoria.objects.all(), required=False)
     concepto = forms.ModelChoiceField(label="Concepto", queryset=models.Concepto.objects.all(), required=False)
     
-    
-    def _get_gastos(self, obra, categoria):
-        """
-        Devuelve los detalles de gasto para el concepto dado, 
-        filtrando segun el form.
-        """ 
-        desde = self.cleaned_data['desde']
-        hasta = self.cleaned_data['hasta']
-        proveedor = self.cleaned_data['proveedor']
-        
-        gastos = models.DetalleGasto.objects.filter(obra=obra,
-                                                    concepto=categoria,
-                                                    gasto__fecha_op__range=(desde, hasta))
-        if proveedor:
-            gastos = gastos.filter(gasto__proveedor=proveedor)
-            
-        return gastos
-        
-    
-    #FIXME no es muy piola el algoritmo. quizas mejor hacerlo desde 
-    #metodos de los modelos
     def _make_context_dict(self):
         desde = self.cleaned_data['desde']
         hasta = self.cleaned_data['hasta']
 
-        categoria = self.cleaned_data['categoria']
-        concepto = self.cleaned_data['concepto']
-
         cliente = self.cleaned_data['cliente']
         obrad = self.cleaned_data['obra']
         estado = self.cleaned_data['estado']
         pais = self.cleaned_data['pais']
+        proveedor = self.cleaned_data['proveedor']
+
 
         if obrad:
             obras = [obrad]
         else:
-            obras = models.Obra.objects.all()
+            obras = models.Obra.objects.distinct()
 
             if estado:
                 obras = obras.filter(estado_obra=estado)
                 obras = obras.filter(pais=pais)
 
         obras_1 =[]
-        items = []
-        items2 = []
-        obra_data = []
+        obras_data = []
 
         for obra in obras:
-            if obra.tiene_gastos_en_rango(desde, hasta) and obra not in obras_1:
-                tot_obra = obra.total_gastos_in_range(desde, hasta)
+            have_gastos = obra.tiene_gastos_en_rango(desde, hasta)
+            if proveedor:
+                have_gastos = obra.tiene_gastos_en_rango(desde, hasta, proveedor)
+
+            if have_gastos and obra not in obras_1:
                 obras_1.append(obra)
-                obrax = [obra]
-                #obra_data.append((obrax, tot_obra))
-               # print obrax[0].get_categorias(desde, hasta)
-                #print obra_data
-                
-                if categoria:
-                    categorias = [categoria]
-                else:
-                    categorias = obrax[0].get_categorias(desde, hasta)
-
-                obra_data.append((obrax, tot_obra,))
-                for categoria in categorias:
-                    super_parcial = []
-                    superconceptos = categoria.get_superconceptos()
-                    
-                    if concepto in superconceptos:
-                        superconceptos = [concepto]
-                        
-                    for superconcepto in superconceptos:
-                        sub_parcial = []
-                        subconceptos = superconcepto.get_subconceptos()
-                            
-                        if concepto and not concepto.is_superconcepto():
-                            if concepto in subconceptos:
-                                subconceptos = [concepto]
-                            else:
-                                subconceptos = []
-                                    
-                        for subconcepto in subconceptos:
-                            gastos = self._get_gastos(obrax[0], subconcepto)
-                            total = sum([gasto.imp_neto for gasto in gastos])
-                            if total:
-                                sub_parcial.append((subconcepto, gastos, total))
-                        total = sum([parcial[2] for parcial in sub_parcial])
-                        if total:
-                            super_parcial.append((superconcepto, sub_parcial, total))
-                    total = sum([parcial[2] for parcial in super_parcial])
-                    if total:
-                        items.append((categoria, super_parcial, total))
-                #print items
-                items2.append((obra_data, items,))
-                print items2[0][1]
-        total = sum([i[2] for i in items])
-        
-        context = {'items' : items2, 'total' : total, }
+                total_obra = obra.total_gastos_in_range(desde, hasta)
+                if proveedor:
+                    total_obra = obra.total_gastos_in_range(desde, hasta, proveedor)
+                obras_data.append((obra, total_obra))
+
+        #total de todas las obras sumadas
+        total = sum([t[1] for t in obras_data])
+
+        context = {'obras' : obras_data, 'total_general' : total }
         context.update(self.cleaned_data)        
         return context