206 lines
7.7 KiB
Python
206 lines
7.7 KiB
Python
from django.contrib import admin
|
|
|
|
from .models import Movimiento, DetalleMovimiento, CuentaBanco, CuotasCondominio, Condomino, AcumuladoMes, Registro, MovSinIdent, Asiento
|
|
|
|
from .procesos import run_determinacionSaldos_coyoacan, run_detalle_ingresos_egresos, run_estado_cuenta
|
|
|
|
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', '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_coyoacan(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']
|
|
#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"
|
|
#Detalle.allow_tags = True
|
|
|
|
class dontLog:
|
|
def log_deletion(self, **kwargs):
|
|
return
|
|
|
|
@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(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 = '''
|
|
<svg width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<defs>
|
|
<g id="right">
|
|
<path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
|
</g>
|
|
</defs>
|
|
<use xlink:href="#right" x="0" y="0" fill="#447e9b" />
|
|
</svg>
|
|
'''
|
|
#text = format_html('<img src="{}" alt="view">', icon)
|
|
if(request.debe > 0):
|
|
#return _boolean_icon(True)
|
|
return mark_safe('%s' % icon)
|
|
else:
|
|
return ""
|
|
|
|
E.allow_tags = True
|
|
|
|
@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
|