def get_query_mayor(id_comunidad,codigo_menor,codigo_mayor): aux_menor=Cuenta(codigo=codigo_menor) aux_mayor=Cuenta(codigo=codigo_mayor) QUERY_MAYOR="with T AS (select c.id,c.cuenta, sum(ad.debe) as debe , sum(ad.haber) as haber, "\ "sum(ad.debe)-sum(ad.haber) as saldo,c.codigo,c.codigo_ordenado "\ "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 comu on comu.id = a.comunidad_id "\ "join ejercicios_ejercicio e on e.anho = extract(year from a.fecha) "\ "where comu.id = "+str(id_comunidad)+" and e.actual is True group by c.id, c.cuenta, c.tipo , "\ " c.codigo_ordenado,c.codigo order by c.codigo_ordenado) "\ "select c.codigo,c.cuenta, "\ "(case when c.tipo like 'AC' then 'ACTIVO' "\ "when c.tipo like 'PA' then 'PASIVO' "\ "when c.tipo like 'IN' then 'INGRESO'"\ "when c.tipo like 'EG' then 'EGRESO' "\ "else c.tipo end ) as tipo,"\ "(case when T.debe is null then 0 else T.debe end) as debe, "\ "(case when T.haber is null then 0 else T.haber end) as haber, "\ "(case when T.saldo is null then 0 else T.saldo end) as saldo,"\ "(case when c.numchild > 0 then False else True end) as hijo from cuentas_cuenta c "\ "full join T on T.id = c.id "\ " where c.codigo_ordenado >= "+str(aux_menor.codigo_conversion())+" and "\ " c.codigo_ordenado <= "+str(aux_mayor.codigo_conversion())+" "\ "order by c.codigo_ordenado " return QUERY_MAYOR
def mayor_detalle(request,id_comunidad,desde,hasta): comunidad=Comunidad.objects.get(pk=id_comunidad) # Create the HttpResponse object with the appropriate PDF headers. response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="Libro Mayor Detallado - '+comunidad.comunidad+'.pdf"' buffer = BytesIO() report = MyPrint(buffer, 'A4') if request.user.has_perm(USUARIO_LIMITADO): ejercicio_anho = Ejercicio.objects.get(actual=True).anho else: ejercicio_anho = request.session['ejercicio'] aux_menor=Cuenta(codigo=desde) aux_mayor=Cuenta(codigo=hasta) query = " select distinct c.id,c.cuenta,c.codigo,c.codigo_ordenado 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 ejercicios_ejercicio e on e.anho = extract(year from a.fecha) "\ " where a.comunidad_id=" + str(id_comunidad) +" and extract( year from a.fecha) ="+str(ejercicio_anho)+" "\ " and c.codigo_ordenado >= "+str(aux_menor.codigo_conversion())+" and "\ " c.codigo_ordenado <= "+str(aux_mayor.codigo_conversion())+" "\ " order by c.codigo_ordenado" cuentas_list = execute_all_query(query) asientos=AsientoContableDetalle.objects.filter(asiento_contable__fecha__year=ejercicio_anho,asiento_contable__comunidad_id=id_comunidad).order_by('cuenta__codigo_ordenado') cuentas=[] for id_cuenta,cuenta,codigo,aux 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,codigo]) for cuenta in cuentas: print cuenta pdf = report.print_mayor_detalle(cuentas,comunidad.comunidad,asientos) response.write(pdf) return response
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))