MVP final
This commit is contained in:
@@ -343,6 +343,59 @@ def export_expenses_csv(request):
|
||||
return response
|
||||
|
||||
|
||||
@login_required
|
||||
@role_required('Administrador', 'Administrador Finanzas')
|
||||
def export_bank_transfer_csv(request):
|
||||
# Get all expenses requested for payment that are linked to a vendor
|
||||
pending_expenses = Expense.objects.filter(
|
||||
approval_status=ApprovalStatusEnum.SOLICITADO_FINANZAS,
|
||||
vendor__isnull=False
|
||||
)
|
||||
|
||||
# Group debts by vendor to perform single bank transfer per supplier
|
||||
debts = pending_expenses.values(
|
||||
'vendor__id', 'vendor__rut', 'vendor__name', 'vendor__bank', 'vendor__account_type', 'vendor__account_number'
|
||||
).annotate(
|
||||
total_clp=Sum('amount_clp'),
|
||||
total_usd=Sum('amount_usd'),
|
||||
expense_count=Count('id')
|
||||
).order_by('vendor__name')
|
||||
|
||||
response = HttpResponse(content_type='text/csv')
|
||||
response['Content-Disposition'] = f'attachment; filename="Nomina_Transferencias_{date.today()}.csv"'
|
||||
|
||||
# Write BOM for Excel Spanish compatibility
|
||||
response.write('\ufeff'.encode('utf-8'))
|
||||
|
||||
writer = csv.writer(response, delimiter=';')
|
||||
writer.writerow([
|
||||
'RUT Proveedor', 'Nombre / Razón Social', 'Banco', 'Tipo Cuenta',
|
||||
'Número Cuenta', 'Monto Transferir (CLP)', 'Monto Transferir (USD)',
|
||||
'Comprobantes Pendientes', 'Glosa / Comentario'
|
||||
])
|
||||
|
||||
for debt in debts:
|
||||
writer.writerow([
|
||||
debt['vendor__rut'],
|
||||
debt['vendor__name'],
|
||||
debt['vendor__bank'] or 'No Registrado',
|
||||
debt['vendor__account_type'] or 'No Registrado',
|
||||
debt['vendor__account_number'] or 'No Registrado',
|
||||
int(debt['total_clp']),
|
||||
round(debt['total_usd'], 2),
|
||||
debt['expense_count'],
|
||||
'Pago Facturas Pendientes EFINTEL ERP'
|
||||
])
|
||||
|
||||
AuditLog.objects.create(
|
||||
user=request.user,
|
||||
action="EXPORT_BANK_TRANSFER",
|
||||
description="Se exportó la nómina bancaria de transferencias a proveedores."
|
||||
)
|
||||
|
||||
return response
|
||||
|
||||
|
||||
@login_required
|
||||
def project_list(request):
|
||||
projects = Project.objects.annotate(
|
||||
|
||||
Reference in New Issue
Block a user