from django.contrib import admin from .models import Movimiento, DetalleMovimiento, CuentaBanco, CuotasCondominio, Condomino, AcumuladoMes, Registro, MovSinIdent, Asiento from .procesos import run_determinacionSaldos_aragon37, run_estado_cuenta, run_detalle_ingresos_egresos from django.utils.safestring import mark_safe from io import BytesIO from django.http import HttpResponse # Register your models here. class DetalleMovtoInline(admin.TabularInline): model = DetalleMovimiento fields = ['cuenta_contable', 'monto', 'comentario'] def get_extra(self, request, obj=None, **kwargs): extra = 4 return extra @admin.register(Movimiento) class MovtoAdmin(admin.ModelAdmin): list_display = ('id','fecha_movimiento','descripcion','retiros','depositos','condomino','conciliacion') search_fields = ('descripcion',) date_hierarchy = 'fecha_movimiento' ordering = ('-fecha_movimiento',) save_on_top = True inlines = [DetalleMovtoInline] def retiros(self, request, obj=None, **kwargs): return "{:,}".format(request.retiro) def depositos(self, request, obj=None, **kwargs): return "{:,}".format(request.deposito) def conciliacion(self, request, obj=None, **kwargs): cantidades = DetalleMovimiento.objects.filter(movimiento_id=request.id).values_list('monto', flat=True) total = sum(cantidades) if (total != (request.retiro + request.deposito)): return False else: return True conciliacion.boolean = True @admin.register(CuentaBanco) class CuentaBancoAdmin(admin.ModelAdmin): list_display = ('banco','clabe','apoderado') @admin.register(CuotasCondominio) class CuotasAdmin(admin.ModelAdmin): list_display = ('descripcion', 'mes_inicial', 'mes_final', 'cantidad','cuenta_contable') ordering = ('-mes_inicial',) def cantidad(self, request, obj=None, **kwargs): return "{:,}".format(request.monto) @admin.register(Condomino) class CondominoAdmin(admin.ModelAdmin): list_display = ('depto', 'poseedor', 'adeudo_inicio', 'cuotas', 'depositos', 'adeudo_actual') search_fields = ('depto', 'propietario', 'poseedor') #actions = ['determina_saldos'] actions = ['determina_saldos', 'reporte_individual'] def adeudo_inicio(self, request, obj=None, **kwargs): return "{:,}".format(request.adeudo_inicial) def cuotas(self, request, obj=None, **kwargs): cargos = request.cargos - request.adeudo_inicial return "{:,}".format(cargos) def depositos(self, request, obj=None, **kwargs): pagos = request.abonos return "{:,}".format(pagos) def adeudo_actual(self, request, obj=None, **kwargs): return "{:,}".format(request.saldo) def determina_saldos(self, request, queryset): for obj in queryset: # print(" determina saldos %s " % obj.depto) run_determinacionSaldos_aragon37(obj) #pass self.message_user(request, " Fin del proceso de determinacion de saldos ") def reporte_individual(self, request, queryset): condominos = [] for obj in queryset: item = {} item['id'] = obj.id item['depto'] = obj.depto item['poseedor'] = obj.poseedor item['adeudo'] = obj.saldo condominos.append(item) #print(condominos) filename = 'ciec_output_ec.xlsx' stream = BytesIO() data = run_estado_cuenta(condominos, stream) self.message_user(request, "Fin del proceso, verifique area de descargas ") response = HttpResponse(content_type='application/ms-excel') response['Content-Disposition'] = 'attachment; filename="{}"'.format(filename) response.write(data) return response reporte_individual.short_description = "Descarga estado de cuenta" determina_saldos.short_description = "Determinacion de Saldos" @admin.register(AcumuladoMes) class AcumuladoAdmin(admin.ModelAdmin): list_display = ('cuenta_banco', 'mes', 'fecha_inicial', 'fecha_final', 'Depositado', 'Retirado', 'Saldos') ordering = ('-fecha_inicial', 'cuenta_banco',) actions = ['detalle_ing_egr'] #actions = ['export_as_csv'] #change_list_template = "admin/titulo_acumulados.html" def Depositado(self, request, obj=None, **kwargs): return "{:,}".format(request.depositos) def Retirado(self, request, obj=None, **kwargs): return "{:,}".format(request.retiros) def Saldos(self, request, obj=None, **kwargs): return "{:,}".format(request.saldo) def detalle_ing_egr(self, request, queryset): dates = [] for obj in queryset: dates.append(obj.fecha_inicial) dates.append(obj.fecha_final) filename = 'ciec_output_ie.xlsx' stream = BytesIO() data = run_detalle_ingresos_egresos(min(dates), max(dates), stream) response = HttpResponse(content_type='application/ms-excel') response['Content-Disposition'] = 'attachment; filename="{}"'.format(filename) response.write(data) return(response) detalle_ing_egr.short_description = "Descargar detalle de ingresos y egresos" class dontLog: def log_deletion(self, **kwargs): return #@admin.register(Registro) class RegistroAdmin(dontLog, admin.ModelAdmin): list_display = ('fecha','E','descripcion','Cargos','Depositos','Saldo') change_list_template = "admin/titulo_registros.html" ordering = ('-fecha','-id') def Depositos(self, request, obj=None, **kwargs): return "{:,}".format(request.debe) def Cargos(self, request, obj=None, **kwargs): return "{:,}".format(request.haber) def Saldo(self, request, obj=None, **kwargs): return "{:,}".format(request.saldo) def E(self, request, obj=None, **kwargs): icon = ''' ''' #text = format_html('view', icon) if(request.debe > 0): #return _boolean_icon(True) return mark_safe('%s' % icon) else: return "" E.allow_tags = True @admin.register(Asiento) class AsientoAdmin(dontLog, admin.ModelAdmin): list_display = ('fecha','descripcion','condomino','Cargos','Depositos','Saldo') #change_list_template = "admin/titulo_registros.html" ordering = ('-fecha','-id') def Depositos(self, request, obj=None, **kwargs): return "{:,}".format(request.debe) def Cargos(self, request, obj=None, **kwargs): return "{:,}".format(request.haber) def Saldo(self, request, obj=None, **kwargs): return "{:,}".format(request.saldo) @admin.register(MovSinIdent) class MovSinIdentAdmin(admin.ModelAdmin): list_display = ('cuenta_banco', 'fecha_movimiento', 'descripcion', 'deposito') date_hierarchy = 'fecha_movimiento' save_on_top = True inlines = [DetalleMovtoInline] ordering = ('-fecha_movimiento',) def get_queryset(self, request): query = super(MovSinIdentAdmin, self).get_queryset(request) filtered_query = query.filter(condomino__depto='0000').exclude(retiro__gt=0) return filtered_query