def cuentas_bancarias(request,id_comunidad,id_banco=''): print request.user.has_perm(USUARIO_LIMITADO) if request.user.has_perm(USUARIO_LIMITADO): if get_comunidad(request.user) != int(id_comunidad): return HttpResponseRedirect('/admin') bancos=CuentaBancaria.objects.filter(comunidad_id=id_comunidad) if id_banco == '': if len(bancos) > 0: actual=bancos[0] else: actual=CuentaBancaria(pk=0) else: actual=CuentaBancaria.objects.get(pk=id_banco) if actual.id == 0: asientos_contables=[] else: asientos_contables=AsientoContableDetalle.objects.filter(asiento_contable__comunidad_id=id_comunidad,cuenta_bancaria_id=actual.id) if id_banco != '': actual=CuentaBancaria.objects.get(pk=id_banco) comunidad=Comunidad.objects.get(pk=id_comunidad) return render_to_response('balance/cuentas_bancarias.html', {'comunidad': comunidad,'bancos':bancos, 'actual':actual,'asientos_contables':asientos_contables}, context_instance=RequestContext(request))
def mayor(request,tipo): vector_cuentas = Cuenta.objects.filter(tipo=tipo).order_by('codigo_ordenado') usuario= request.user id_comunidad= get_comunidad(usuario) if request.user.has_perm(USUARIO_LIMITADO): anho = Ejercicio.objects.get(actual=True).anho else: anho = request.session['ejercicio'] if id_comunidad == 0: return HttpResponseRedirect('/admin') #Optimizar la consulta for cuenta in vector_cuentas: if cuenta.numchild == 0: cuenta_id = cuenta.id asientos = AsientoContableDetalle.objects.filter(cuenta=cuenta_id) for asiento in asientos: if asiento.comunidad_id() == id_comunidad and asiento.anho() == anho: cuenta.debe += asiento.debe cuenta.haber += asiento.haber cuenta.cargado = True seguir = True longitud = len(vector_cuentas) while seguir: contador = 0 for cuenta in vector_cuentas: if cuenta.cargado == False: debe = 0 haber = 0 hijos = cuenta.get_children() cargar = True salir = False for hijo in hijos: for cuenta_aux in vector_cuentas: if cuenta_aux.id == hijo.id: if cuenta_aux.cargado: debe += cuenta_aux.debe haber += cuenta_aux.haber else: cargar = False salir = True break if salir: break if cargar: cuenta.debe = debe cuenta.haber = haber cuenta.cargado = True else: contador += 1 if contador == longitud: seguir = False return render_to_response('balance/mayores.html', {'vector_cuentas':vector_cuentas,'id_comunidad':id_comunidad , 'tipo':tipo}, context_instance=RequestContext(request))
def movimiento_list(request,id_detalle): movimientos=CategoriaDetalleMovimiento.objects.filter(categoria_detalle_id=id_detalle) detalle=CategoriaDetalle.objects.get(pk=id_detalle) usuario=request.user if usuario.has_perm(USUARIO_LIMITADO): if get_comunidad(usuario) != detalle.comunidad_id: return HttpResponseRedirect('/admin') return render_to_response('balance/movimiento_list.html', {'movimientos':movimientos,'detalle':detalle}, context_instance=RequestContext(request))
def mayores(request): vector_cuentas = Cuenta.get_tree() usuario = request.user id_comunidad=get_comunidad(usuario) #Optimizar la consulta for cuenta in vector_cuentas: if cuenta.numchild == 0: cuenta_id = cuenta.id asientos = AsientoContableDetalle.objects.filter(cuenta=cuenta_id) for asiento in asientos: if asiento.comunidad_id() == id_comunidad: cuenta.debe += asiento.debe cuenta.haber += asiento.haber cuenta.cargado = True seguir = True longitud = len(vector_cuentas) while seguir: contador = 0 for cuenta in vector_cuentas: if cuenta.cargado == False: debe = 0 haber = 0 hijos = cuenta.get_children() cargar = True salir = False for hijo in hijos: for cuenta_aux in vector_cuentas: if cuenta_aux.id == hijo.id: if cuenta_aux.cargado: debe += cuenta_aux.debe haber += cuenta_aux.haber else: cargar = False salir = True break if salir: break if cargar: cuenta.debe = debe cuenta.haber = haber cuenta.cargado = True else: contador += 1 if contador == longitud: seguir = False return render_to_response('balance/mayores.html', {'vector_cuentas':vector_cuentas}, context_instance=RequestContext(request))
def mayor_detallado_comunidad(request,id,tipo='AC'): tipos = ['AC', 'PA', 'PN', 'IN', 'EG'] if not tipos.__contains__(tipo): tipo = 'AC' if request.user.has_perm(USUARIO_LIMITADO): if int(id)!= get_comunidad(request.user): return HttpResponseRedirect('/admin') else: id_comunidad=asiento.comunidad_id if id == '': id=get_comunidad(request.user) if request.user.has_perm(USUARIO_LIMITADO): ejercicio_anho = Ejercicio.objects.get(actual=True).anho else: ejercicio_anho = request.session['ejercicio'] comunidad=Comunidad.objects.get(pk=id) query = " select distinct c.id,c.cuenta from cuentas_cuenta c " \ " join asientos_contables_asientocontabledetalle ad on ad.cuenta_id = c.id " \ " join asientos_contables_asientocontable a on a.id=ad.asiento_contable_id " \ " where a.comunidad_id=" + str(id) + " and tipo='" + tipo + "' and extract( year from a.fecha) ="+str(ejercicio_anho) cuentas_list = execute_all_query(query) asientos=AsientoContableDetalle.objects.filter(cuenta__tipo=tipo,asiento_contable__fecha__year=ejercicio_anho,asiento_contable__comunidad_id=id).order_by('cuenta') cuentas=[] for id_cuenta,cuenta in cuentas_list: debe=haber=0 for asiento in asientos: if id_cuenta == asiento.cuenta_id: debe+=asiento.debe haber+=asiento.haber cuentas.append([id_cuenta,cuenta,debe-haber,asiento.cuenta.codigo]) url='/mayor_detalle_comunidad/'+str(id)+'/' return render_to_response('balance/mayor_detallado.html', {'asientos': asientos,'url':url,'comunidad':comunidad,'detalle':'detalle', 'cuentas':cuentas, 'tipo': tipo}, context_instance=RequestContext(request))
def inventario_comunidad(request,id_comunidad,id=0): usuario=request.user if usuario.has_perm(USUARIO_LIMITADO): if get_comunidad(usuario) != int(id_comunidad): messages.error(request, 'No Pertenece a la Comunidad a la que desea Acceder!') return HttpResponseRedirect('/admin') categorias=Categoria.objects.all().order_by('nombre') comunidad=Comunidad.objects.get(pk=id_comunidad) if id == 0: id=categorias[0].id categoria_actual=Categoria.objects.get(pk=id) form=MovimientoForm categoria_detalles=CategoriaDetalle.objects.filter(comunidad_id=id_comunidad,categoria_id=id) return render_to_response('balance/inventario_comunidad.html', {'categorias':categorias,'actual':categoria_actual, 'categoria_detalles':categoria_detalles,'form':form,'comunidad':comunidad}, context_instance=RequestContext(request))
def mayor_detallado_pais(request,id,tipo='AC'): tipos = ['AC', 'PA', 'PN', 'IN', 'EG'] if not tipos.__contains__(tipo): tipo = 'AC' if id == '': id = get_comunidad(request.user) if id == 0 : return HttpResponseRedirect('/admin') pais = Comunidad.objects.get(pk=id).pais else: pais = Pais.objects.get(pk=id) if request.user.has_perm(USUARIO_LIMITADO): ejercicio_anho = Ejercicio.objects.get(actual=True).anho else: ejercicio_anho = request.session['ejercicio'] query = " select distinct c.id,c.cuenta from cuentas_cuenta c " \ " join asientos_contables_asientocontabledetalle ad on ad.cuenta_id = c.id " \ " join asientos_contables_asientocontable a on a.id=ad.asiento_contable_id " \ " join comunidades_comunidad co on co.id = a.comunidad_id " \ " where co.pais_id=" + str(id) + " and tipo='" + tipo + "' and extract( year from a.fecha) ="+str(ejercicio_anho) cuentas_list = execute_all_query(query) query_asiento="select ad.* from asientos_contables_asientocontabledetalle ad "\ " join asientos_contables_asientocontable a on a.id=ad.asiento_contable_id "\ " join cuentas_cuenta c on c.id = ad.cuenta_id "\ " join comunidades_comunidad co on co.id = a.comunidad_id "\ " where c.tipo = '"+tipo+"' and co.pais_id = "+str(id)+" and extract( year from a.fecha) ="+str(ejercicio_anho)+" "\ " order by c.codigo" print query_asiento asientos = AsientoContableDetalle.objects.raw(query_asiento) cuentas=[] for id_cuenta,cuenta in cuentas_list: debe=haber=0 for asiento in asientos: if id_cuenta == asiento.cuenta_id: debe+=asiento.debe haber+=asiento.haber cuentas.append([id_cuenta,cuenta,debe-haber,asiento.cuenta.codigo]) url = '/mayor_detalle_pais/' + str(id) + '/' return render_to_response('balance/mayor_detallado.html', {'asientos': asientos,'url':url,'cuentas':cuentas, 'tipo': tipo}, context_instance=RequestContext(request))
def categoria_detalle(request,id_comunidad,id_categoria,id=0): usuario=request.user if get_comunidad(usuario) != int(id_comunidad) and usuario.has_perm(USUARIO_LIMITADO): return HttpResponseRedirect('/admin') categoria=Categoria.objects.get(pk=id_categoria) if id == 0: categoria_detalle=CategoriaDetalle() categoria_detalle.descripcion="" modo="Registrar Descripcion" precio_unitario=PrecioForm() else: categoria_detalle=CategoriaDetalle.objects.get(pk=id) if int(categoria_detalle.categoria_id) != int(id_categoria): return HttpResponseRedirect('/admin') categoria_detalle.precio_unitario=str(categoria_detalle.precio_unitario) modo="Modificar Descripcion" if request.method == 'POST': categoria_detalle.cantidad=int(request.POST.get('cantidad',0)) categoria_detalle.precio_unitario=request.POST.get('precio_unitario',0.00) categoria_detalle.categoria_id=categoria.id categoria_detalle.descripcion = request.POST.get('descripcion','') categoria_detalle.comunidad_id=id_comunidad if id != 0: categoria_detalle.id=id categoria_detalle.save() if id == 0: movimiento=CategoriaDetalleMovimiento() movimiento.movimiento='INI' movimiento.observacion="carga del stock inicial" movimiento.categoria_detalle=categoria_detalle movimiento.cantidad=categoria_detalle.cantidad fecha=request.POST.get('fecha') movimiento.fecha=datetime.datetime.strptime(fecha, "%d/%m/%Y") movimiento.save() return HttpResponseRedirect('/inventario/categoria/'+str(id_comunidad)+'/'+str(categoria.id)) return render_to_response('balance/categoria_detalle.html', {'categoria_detalle':categoria_detalle,'categoria':categoria, 'modo':modo,'id_comunidad':id_comunidad}, context_instance=RequestContext(request))
def movimiento(request,id_detalle,id=0): detalle=CategoriaDetalle.objects.get(pk=id_detalle) usuario=request.user if get_comunidad(usuario) != detalle.comunidad_id and usuario.has_perm(USUARIO_LIMITADO): return HttpResponseRedirect('/admin') if id == 0: movimiento=CategoriaDetalleMovimiento() movimiento.observacion="" modo="Registrar Movimiento" else: movimiento=CategoriaDetalleMovimiento.objects.get(pk=id) modo="Modificar Movimiento" if request.method == 'POST': movimiento.cantidad=int(request.POST.get('cantidad',0)) movimiento.categoria_detalle_id=id_detalle movimiento.observacion=request.POST.get('observacion',0) movimiento.movimiento=request.POST.get('movimiento','INI') fecha=request.POST.get('fecha','') fecha=datetime.datetime.strptime(fecha, "%d/%m/%Y") movimiento.fecha=fecha if id != 0: movimiento.id=id movimiento.save() if movimiento.movimiento == 'ENT': detalle.cantidad+=movimiento.cantidad elif movimiento.movimiento == 'SAL': detalle.cantidad-=movimiento.cantidad else: detalle.cantidad=movimiento.cantidad detalle.save() return HttpResponseRedirect('/inventario/movimiento_list/'+str(detalle.id)) return render_to_response('balance/movimiento.html', {'detalle':detalle,'modo':modo,'tipo_movimientos':TIPO_MOVIMIENTO,'movimiento':movimiento}, context_instance=RequestContext(request))
def listar(request): q=request.GET.get('q','') fecha__gte=request.GET.get('fecha__gte','1900-01-01') fecha__lt=request.GET.get('fecha__lt','2050-01-01') usuario=request.user if not usuario.has_perm(USUARIO_LIMITADO): objeto_total=AsientoContableDetalle.objects.filter(asiento_contable__fecha__contains=q, asiento_contable__fecha__gt=fecha__gte, asiento_contable__fecha__lt=fecha__lt).count() else: id_comunidad=get_comunidad(usuario) objeto_total=AsientoContableDetalle.objects.filter(asiento_contable__fecha__contains=q, asiento_contable__fecha__gt=fecha__gte, asiento_contable__fecha__lt=fecha__lt,asiento_contable__comunidad_id=id_comunidad).count() page=request.GET.get('page',1) lines=[] for i in range(objeto_total): lines.append(u'Line %s' % (i + 1)) nro_lineas=100 paginator = Paginator(lines, nro_lineas) try: page=int(page) except: page=1 if int(page)*nro_lineas>objeto_total or int(page)>0: try: items = paginator.page(page) fin=int(page)*nro_lineas ini =fin-nro_lineas except PageNotAnInteger or EmptyPage: fin=nro_lineas ini=0 items = paginator.page(1) else: fin=nro_lineas ini=0 items = paginator.page(1) if not usuario.has_perm(USUARIO_LIMITADO): asientos=AsientoContableDetalle.objects.filter(asiento_contable__fecha__contains=q, asiento_contable__fecha__gt=fecha__gte, asiento_contable__fecha__lt=fecha__lt)[ini:fin] else: id_comunidad=get_comunidad(usuario) if id_comunidad == 0: pass asientos=AsientoContableDetalle.objects.filter(asiento_contable__fecha__contains=q, asiento_contable__fecha__gt=fecha__gte, asiento_contable__fecha__lt=fecha__lt,asiento_contable__comunidad_id=id_comunidad) hoy = datetime.datetime.today() ayer=hoy+datetime.timedelta(days=-1) ultimos_7dias = hoy + datetime.timedelta(days=-7) manana = hoy + datetime.timedelta(days=1) today=timezone_today() cant_dias=calendar.monthrange(today.year,1)[1] ultimos_30dias_max= str(today.year)+'-'+str(today.month)+'-'+str(today.day) ultimos_30dias_min = str(today.year) + '-' + str(today.month) + '-01' este_anho_max=str(today.year+1) + '-01-01' este_anho_min=str(today.year) + '-01-01' return render_to_response('asientos/nuevo_asientos_list.html', {'asientos':asientos,'hoy':str(hoy.date()),'ultimos_30dias_max':ultimos_30dias_max,'page' : page, 'ayer':str(ayer.date()),'ultimos_30dias_min':ultimos_30dias_min,'este_anho_max':este_anho_max,'este_anho_min':este_anho_min ,'ultimo_7dias':str(ultimos_7dias.date()),'manana':str(manana.date())}, context_instance=RequestContext(request,{ 'lines': items }))
def editar(request,id): asiento=AsientoContable.objects.get(pk=id) asientos_detalles=AsientoContableDetalle.objects.filter(asiento_contable_id=id) if request.user.has_perm(USUARIO_LIMITADO): id_comunidad = get_comunidad(request.user) else: id_comunidad=asiento.comunidad_id bancos = CuentaBancaria.objects.filter(comunidad_id=id_comunidad) if request.method == 'POST': addOther=request.POST.get('_addanother','').encode('utf8') save=request.POST.get('_save','') total_rows=int(request.POST.get('cantidad_rows',0)) fecha=request.POST.get('fecha','') fecha=datetime.datetime.strptime(fecha, "%d/%m/%Y") asiento.fecha = fecha asiento.save() for a in asientos_detalles: a.delete() fields="" for i in range(total_rows): id_cuenta = request.POST.get('asientocontabledetalle_set-' + str(i) + '-cuenta', '') debe = Decimal(request.POST.get('asientocontabledetalle_set-' + str(i) + '-debe', 0.00)) haber = Decimal(request.POST.get('asientocontabledetalle_set-' + str(i) + '-haber', 0.00)) obs = request.POST.get('asientocontabledetalle_set-' + str(i) + '-observacion', '') print 'id_cuenta: '+str(id_cuenta)+' debe: '+str(debe)+' haber: '+str(haber)+' obs: '+str(obs) if id_cuenta != '': id_cuenta=int(id_cuenta) cuenta=Cuenta.objects.get(pk=id_cuenta) asiento_detalle=AsientoContableDetalle() asiento_detalle.cuenta_id=id_cuenta asiento_detalle.debe=debe asiento_detalle.haber=haber asiento_detalle.asiento_contable=asiento asiento_detalle.observacion=obs if cuenta.codigo == '1.2.5.2': banco_id = request.POST.get('asientocontabledetalle_set-' + str(i) + '-banco', 0) asiento_detalle.cuenta_bancaria_id=banco_id asiento_detalle.save() fields+='id:'+str(id_cuenta)+'-'+str(debe)+'-'+str(haber)+"\n" LogEntry.objects.log_action( user_id=request.user.id, content_type_id=ContentType.objects.get_for_model(AsientoContable).pk, object_id=asiento.id, object_repr=unicode(fields), action_flag=CHANGE) return HttpResponseRedirect('/asiento/editar/'+str(id)) if save == 'Grabar': return HttpResponseRedirect('/asiento/listar/') filas=[] for i in range(len(asientos_detalles),50): filas.append(i) asiento.fecha=str(asiento.fecha.strftime('%d/%m/%Y')) if not request.user.has_perm(USUARIO_LIMITADO): return render_to_response('balance/admin_edit_asiento.html',{'filas':filas,'bancos': bancos, 'asiento':asiento, 'asientos_detalles':asientos_detalles}, context_instance=RequestContext(request)) else: return render_to_response('balance/edit_change_form.html', {'asiento':asiento,'filas':filas, 'asientos_detalles':asientos_detalles,'bancos':bancos}, context_instance=RequestContext(request))
def nuevo(request,id_comunidad=''): usuario=request.user if usuario.has_perm(USUARIO_LIMITADO) and id_comunidad=='': id_comunidad = get_comunidad(usuario) if id_comunidad == 0: return HttpResponseRedirect('/admin') else: if id_comunidad == '': return HttpResponseRedirect('/admin') bancos = CuentaBancaria.objects.filter(comunidad_id=id_comunidad) if request.method == 'POST': addOther = request.POST.get('_addanother', '').encode('utf8') save=request.POST.get('_save','') total_rows=int(request.POST.get('cantidad_rows',0)) print 'asdf: '+str(total_rows) fecha=request.POST.get('fecha','') fecha=datetime.datetime.strptime(fecha, "%d/%m/%Y") asiento = AsientoContable() asiento.fecha = fecha asiento.comunidad_id = id_comunidad asiento.save() fields="" for i in range(0,total_rows): id_cuenta = request.POST.get('asientocontabledetalle_set-' + str(i) + '-cuenta', '') debe = Decimal(request.POST.get('asientocontabledetalle_set-' + str(i) + '-debe', '')) haber = Decimal(request.POST.get('asientocontabledetalle_set-' + str(i) + '-haber', '')) obs = request.POST.get('asientocontabledetalle_set-' + str(i) + '-observacion', '') if id_cuenta != '': id_cuenta=int(id_cuenta) cuenta=Cuenta.objects.get(pk=id_cuenta) asiento_detalle=AsientoContableDetalle() asiento_detalle.cuenta_id=id_cuenta asiento_detalle.debe=debe asiento_detalle.haber=haber asiento_detalle.asiento_contable=asiento asiento_detalle.observacion=obs if cuenta.codigo == '1.2.5.2': banco_id = request.POST.get('asientocontabledetalle_set-' + str(i) + '-banco', 0) asiento_detalle.cuenta_bancaria_id=banco_id asiento_detalle.save() fields+='id:'+str(id_cuenta)+'-'+str(debe)+'-'+str(haber)+"\n" LogEntry.objects.log_action( user_id=request.user.id, content_type_id=ContentType.objects.get_for_model(AsientoContable).pk, object_id=asiento.id, object_repr=unicode(fields), action_flag=ADDITION) cuentas=Cuenta.objects.all() filas=[] for i in range(0,50): filas.append(i) if not request.user.has_perm(USUARIO_LIMITADO): return render_to_response('balance/admin_change_form.html', {'add': True, 'filas':filas,'bancos': bancos, 'hoy': str(timezone_today().strftime('%d/%m/%Y'))}, context_instance=RequestContext(request)) else: return render_to_response('balance/nuevo_change_form.html', {'add':True,'filas':filas,'bancos':bancos,'hoy':str(timezone_today().strftime('%d/%m/%Y'))}, context_instance=RequestContext(request))
def presupuesto_comunidad(request,id,tipo): print "id: "+str(id) if tipo != 'IN' and tipo !='EG': tipo='IN' cuentas=Cuenta.objects.filter(tipo=tipo).order_by('codigo_ordenado') usuario=request.user if int(id)==0 and usuario.is_superuser: messages.error(request, 'Debe ingresar una comunidad') return HttpResponseRedirect('/admin') if usuario.has_perm(USUARIO_LIMITADO): if int(id) != int(get_comunidad(usuario)): messages.error(request, 'No Pertenece a la Comunidad a la que desea Acceder!') return HttpResponseRedirect('/admin') if id == 0: comunidad=Comunidad.objects.get(pk=request.user.get_comunidad()) else: comunidad=get_object_or_404(Comunidad,pk=id) ejercicio=Ejercicio.objects.get(actual=True) query="select c.id, c.cuenta, p.mes,sum(p.monto) as monto,c.codigo from presupuestos_presupuesto p"\ " join ejercicios_ejercicio e on e.id=p.ejercicio_id join cuentas_cuenta c on c.id=p.cuenta_id "\ " where e.anho = "+str(ejercicio.anho)+" and p.comunidad_id = "+str(comunidad.id)+" and c.tipo like '"+tipo+"' group by c.id, c.cuenta,c.codigo,p.mes order by c.codigo_ordenado, p.mes" print query presupuestos=execute_all_query(query) presupuestos_list=[] cuentas_list=[] i=0 while i < len(presupuestos): aux = [presupuestos[i][0], presupuestos[i][1]] for j in range(i, i+12): aux.append(str(presupuestos[j][3])) aux.append(presupuestos[i][4]) presupuestos_list.append(aux) i+=12 for c in presupuestos_list: print c for c in cuentas: existe=esta_en_presupuesto_list(c.id, presupuestos_list) if existe != None: existe.append(False) cuentas_list.append(existe) else: aux = [c.id, c.cuenta] for ii in range(1, 13): aux.append('0.00') aux.append(c.codigo) aux.append(True) cuentas_list.append(aux) if request.method == 'POST': for c in presupuestos_list: for k in range(1,13): monto=request.POST.get('cuenta-'+str(c[0])+'-'+str(k)) cambiar = request.POST.get('cambiar-' + str(c[0])+'-'+str(k),'') if cambiar == "true": print 'cambiaar: ' + str(cambiar)+' monto: '+str(monto) print ' monto: '+str(monto)+' cuenta: '+str(c[0])+' comunidad: '+str(comunidad)+' mes:'+str(k)+' ejercicio_id: '+str(ejercicio.id) p=Presupuesto.objects.get(cuenta_id=c[0],mes=k,ejercicio_id=ejercicio.id,comunidad=comunidad) print p.comunidad.comunidad p.monto=Decimal(monto) p.save() print 'guardado' messages.info(request, 'Grabado exitosamente!') save_=request.POST.get('_save','') continue_=request.POST.get('_continue','') return HttpResponseRedirect('/presupuesto_comunidad/'+str(id)+"/"+tipo) return render_to_response('balance/presupuesto.html', {'presupuestos_list':cuentas_list,'tipo':tipo, 'comunidad':comunidad, 'MESES':MESES}, context_instance=RequestContext(request))
def ejecucion_presupuestaria_comunidad(request,tipo): if tipo != 'IN' and tipo != 'EG': tipo = 'IN' id_comunidad=get_comunidad(request.user) if id_comunidad == 0: return HttpResponseRedirect('/admin') comunidad=Comunidad.objects.get(pk=id_comunidad) ejercicio=Ejercicio.objects.get(actual=True) query_ejecutados="select c.id,c.cuenta, (extract(month from fecha) :: int) as mes, "\ " (case when c.tipo like 'IN' then sum(haber)-sum(debe) else sum(debe)-sum(haber) end) as saldo, "\ " c.codigo from asientos_contables_asientocontabledetalle ad "\ " join asientos_contables_asientocontable a on a.id=ad.asiento_contable_id "\ " join cuentas_cuenta c on c.id=ad.cuenta_id join ejercicios_ejercicio e on e.anho=extract(year from a.fecha) "\ " where e.actual is true and c.tipo = '"+str(tipo)+"' and a.comunidad_id = "+str(comunidad.id)+" group by extract(month from a.fecha),c.cuenta,c.id,c.codigo, "\ " c.codigo_ordenado,c.tipo order by c.codigo_ordenado" ejecutados=execute_all_query(query_ejecutados) query_presupuestados = "select c.id, c.cuenta, p.mes,sum(p.monto) as monto,c.codigo from presupuestos_presupuesto p" \ " join ejercicios_ejercicio e on e.id=p.ejercicio_id join cuentas_cuenta c on c.id=p.cuenta_id " \ " where e.anho = " + str(ejercicio.anho) + " and c.tipo like '" + tipo + "' and p.comunidad_id="+str(comunidad.id)+" group by c.id, c.cuenta,c.codigo,p.mes" \ " order by c.codigo_ordenado, mes" presupuestados = execute_all_query(query_presupuestados) presupuestados_list=[] i=0 while i < len(presupuestados): aux = [presupuestados[i][0], presupuestados[i][1]] for j in range(i, i + 12): aux.append(str(presupuestados[j][3])) aux.append(presupuestados[i][4]) presupuestados_list.append(aux) i += 12 i=0 ejecutados_list=[] while i<len(ejecutados): aux=[ejecutados[i][0],ejecutados[i][1]] for j in range(1,13): existe=get_monto_from_ejecutados(ejecutados[i][0],j,ejecutados) aux.append(existe) aux.append(ejecutados[i][4]) ejecutados_list.append(aux) i+=1 total_list=join_lists(presupuestados_list,ejecutados_list) cuentas=Cuenta.objects.filter(tipo=tipo).order_by('codigo_ordenado') cuentas_list = [] for c in cuentas: existe=existe_en_lista(c.id,lista=total_list) if existe == None: aux=[c.id,c.cuenta] for i in range(2,26): aux.append('0.00') aux.append(c.codigo) aux.append(True) aux.append('no') cuentas_list.append(aux) else: existe.append(False) existe.append('si') cuentas_list.append(existe) sumar_padre(cuentas_list) url='/ejecucion_presupuestaria_comunidad/' return render_to_response('balance/ejecucion_presupuestaria.html', {'url':url,' vector_cuentas':cuentas_list,'tipo':tipo, 'meses':MESES,'comunidad':comunidad}, context_instance=RequestContext(request))