def inventario_general(request): usuario=request.user if usuario.has_perm(USUARIO_LIMITADO): return HttpResponseRedirect('/admin') query="select c.id,c.nombre,(sum(cd.cantidad)::int) as cantidad ,"\ " round(sum(cd.precio_unitario/cot.monto),2) as total from inventario_categoria c"\ " join inventario_categoriadetalle cd on cd.categoria_id = c.id "\ " join comunidades_comunidad com on com.id=cd.comunidad_id "\ " join cotizaciones_cotizacion cot on cot.pais_id=com.pais_id "\ " group by c.id, c.nombre " categorias=execute_all_query(query) return render_to_response('balance/inventario_general.html', {'categorias':categorias,}, 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 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 mayor_detallado_consolidado(request,tipo='AC'): if request.user.has_perm(USUARIO_LIMITADO): return HttpResponseRedirect('/admin') tipos = ['AC', 'PA', 'PN', 'IN', 'EG'] if not tipos.__contains__(tipo): tipo = 'AC' if request.user.has_perm(USUARIO_LIMITADO): ejercicio_anho = Ejercicio.objects.get(actual=True).anho else: ejercicio_anho = request.session['ejercicio'] query_asiento="select distinct * from (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 cotizaciones_cotizacion cot on cot.fecha=a.fecha where c.tipo = '"+str(tipo)+"'" \ " and extract( year from a.fecha) = "+str(ejercicio_anho)+" order by c.codigo) as T" asientos = AsientoContableDetalle.objects.raw(query_asiento) query_cuentas = " 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 tipo='" + tipo + "' and extract( year from a.fecha) =" + str(ejercicio_anho) cuentas_list=execute_all_query(query_cuentas) cuentas = [] for id_cuenta, cuenta in cuentas_list: debe = haber = 0 for asiento in asientos: if id_cuenta == asiento.cuenta_id: debe += asiento.debe_en_dolares() haber += asiento.haber_en_dolares() cuentas.append([id_cuenta, cuenta, debe - haber, asiento.cuenta.codigo]) #print query_cuentas #print cuentas url = '/mayor_detalle_consolidado/' return render_to_response('balance/mayor_detallado.html', {'asientos': asientos, 'url': url, 'cuentas': cuentas, 'tipo': tipo,'consolidado':'true'}, context_instance=RequestContext(request))
def mayor(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 - '+comunidad.comunidad+'.pdf"' buffer = BytesIO() report = MyPrint(buffer, 'A4') mayor=execute_all_query(get_query_mayor(id_comunidad, desde,hasta)) lista=[] for m in mayor: aux=[m[0],m[1],m[2],m[3],m[4],m[5],m[6]] lista.append(aux) cuentas=procesar(lista) pdf = report.print_mayor(cuentas,comunidad.comunidad) response.write(pdf) return response
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 cerrar_ejercicio(request): if Ejercicio.objects.filter(actual=True).exists(): ejercicio=Ejercicio.objects.get(actual=True) else: ejercicio=Ejercicio() if request.method == 'POST': ejercicio.actual=False ejercicio.save() crear_ejercicio=request.POST.get('crear_ejercicio','No') print crear_ejercicio if crear_ejercicio == 'Si': nuevo_ejercicio = Ejercicio() nuevo_ejercicio.actual = True nuevo_ejercicio.anho = ejercicio.anho + 1 nuevo_ejercicio.save() cuentas = Cuenta.objects.filter(numchild=0).filter(Q(tipo='IN') | Q(tipo='EG')).order_by('codigo_ordenado') comunidades = Comunidad.objects.all() for comunidad in comunidades: for cuenta in cuentas: print cuenta for i in range(1, 13): presupuesto = Presupuesto() presupuesto.ejercicio = nuevo_ejercicio presupuesto.cuenta = cuenta presupuesto.mes = i presupuesto.monto = 0 presupuesto.comunidad = comunidad presupuesto.save() crear_asiento=request.POST.get('crear_asiento','No') if crear_asiento == 'Si': query_comunidad="select distinct co.id from asientos_contables_asientocontabledetalle ad "\ " join asientos_contables_asientocontable a on a.id=ad.asiento_contable_id "\ " join comunidades_comunidad co on co.id=a.comunidad_id "\ " join cuentas_cuenta c on c.id=ad.cuenta_id "\ " where extract(year from a.fecha)="+str(ejercicio.anho)+" and ad.debe-ad.haber != 0" comunidades=execute_all_query(query_comunidad) query="select co.id, c.id,sum(ad.debe)-sum(ad.haber) as saldo "\ " from asientos_contables_asientocontabledetalle ad "\ " join asientos_contables_asientocontable a on a.id=ad.asiento_contable_id "\ " join comunidades_comunidad co on co.id=a.comunidad_id "\ " join cuentas_cuenta c on c.id=ad.cuenta_id "\ " where extract(year from a.fecha)="+str(ejercicio.anho)+" and ad.debe-ad.haber != 0"\ " group by co.id,c.id, c.cuenta order by co.id" asientos_detalles=execute_all_query(query) for com in comunidades: asiento_apertura=AsientoContable() asiento_apertura.fecha=timezone_today() asiento_apertura.comunidad_id=com[0] asiento_apertura.observacion="Asiento de apertura correspodiente al ejercicio actual" asiento_apertura.save() for ad in asientos_detalles: if ad[2] == com[0]: asiento_detalle_apertura=AsientoContableDetalle() asiento_detalle_apertura.cuenta_id=ad[1] if ad[2]>0: asiento_detalle_apertura.debe=ad[2] else: asiento_detalle_apertura.haber = ad[2]*-1 asiento_detalle_apertura.asiento_contable=asiento_apertura asiento_detalle_apertura.observacion="Asiento de apertura" asiento_detalle_apertura.save() return HttpResponseRedirect('/admin') return render_to_response('balance/cerrar_ejercicio.html', {'ejercicio':ejercicio}, 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))