Browse Source

Meto dos apps en un proyecto

politica
Celestino Rey 1 year ago
parent
commit
4e229a3060
2353 changed files with 434072 additions and 121 deletions
  1. +1
    -1
      Finanzas/K8S/verImg.sh
  2. +8
    -0
      Finanzas/finanzas/apuntes/admin.py
  3. +8
    -23
      Finanzas/finanzas/apuntes/forms.py
  4. +11
    -35
      Finanzas/finanzas/apuntes/migrations/0001_initial.py
  5. +6
    -27
      Finanzas/finanzas/apuntes/models.py
  6. +2
    -0
      Finanzas/finanzas/apuntes/urls.py
  7. +25
    -25
      Finanzas/finanzas/apuntes/views.py
  8. BIN
      Finanzas/finanzas/db.sqlite3
  9. +10
    -2
      Finanzas/finanzas/finanzas/settings.py
  10. +0
    -0
      Finanzas/finanzas/finanzas/templatetags/__init__.py
  11. +0
    -0
      Finanzas/finanzas/finanzas/templatetags/filtros_de_entorno.py
  12. +3
    -1
      Finanzas/finanzas/finanzas/urls.py
  13. +1
    -0
      Finanzas/finanzas/repostajes/.gitignore
  14. +0
    -0
      Finanzas/finanzas/repostajes/__init__.py
  15. +11
    -0
      Finanzas/finanzas/repostajes/admin.py
  16. +6
    -0
      Finanzas/finanzas/repostajes/apps.py
  17. +42
    -0
      Finanzas/finanzas/repostajes/forms.py
  18. +0
    -0
      Finanzas/finanzas/repostajes/managers.py
  19. +36
    -0
      Finanzas/finanzas/repostajes/models.py
  20. +12
    -0
      Finanzas/finanzas/repostajes/static/css/portal.css
  21. +21
    -0
      Finanzas/finanzas/repostajes/static/images/app-logo.svg
  22. BIN
      Finanzas/finanzas/repostajes/static/images/background/background-1.jpg
  23. BIN
      Finanzas/finanzas/repostajes/static/images/background/background-2.jpg
  24. BIN
      Finanzas/finanzas/repostajes/static/images/background/background-3.jpg
  25. BIN
      Finanzas/finanzas/repostajes/static/images/background/background-palmeras.jpg
  26. BIN
      Finanzas/finanzas/repostajes/static/images/doc-thumb-1.jpg
  27. BIN
      Finanzas/finanzas/repostajes/static/images/doc-thumb-2.jpg
  28. BIN
      Finanzas/finanzas/repostajes/static/images/favicon.ico
  29. BIN
      Finanzas/finanzas/repostajes/static/images/favicon.png
  30. +21
    -0
      Finanzas/finanzas/repostajes/static/images/portal-logo.svg
  31. BIN
      Finanzas/finanzas/repostajes/static/images/profiles/profile-1.png
  32. BIN
      Finanzas/finanzas/repostajes/static/images/profiles/profile-2.png
  33. BIN
      Finanzas/finanzas/repostajes/static/images/profiles/profile-3.png
  34. BIN
      Finanzas/finanzas/repostajes/static/images/profiles/profile-4.png
  35. BIN
      Finanzas/finanzas/repostajes/static/images/profiles/profile-5.png
  36. BIN
      Finanzas/finanzas/repostajes/static/images/profiles/profile-6.png
  37. +18
    -0
      Finanzas/finanzas/repostajes/static/images/reymota-logo.svg
  38. BIN
      Finanzas/finanzas/repostajes/static/images/user.png
  39. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-1.jpg
  40. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-2.jpg
  41. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-3.jpg
  42. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-4.jpg
  43. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-5.jpg
  44. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-6.jpg
  45. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-7.jpg
  46. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-8.jpg
  47. BIN
      Finanzas/finanzas/repostajes/static/images/users/user-9.jpg
  48. +96
    -0
      Finanzas/finanzas/repostajes/static/js/app.js
  49. +366
    -0
      Finanzas/finanzas/repostajes/static/js/charts-demo.js
  50. +224
    -0
      Finanzas/finanzas/repostajes/static/js/index-charts.js
  51. +4085
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css
  52. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css.map
  53. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css
  54. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css.map
  55. +4084
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css
  56. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css.map
  57. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css
  58. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css.map
  59. +593
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css
  60. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css.map
  61. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css
  62. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css.map
  63. +590
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css
  64. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css.map
  65. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css
  66. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css.map
  67. +5399
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css
  68. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css.map
  69. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css
  70. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css.map
  71. +5390
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css
  72. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css.map
  73. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css
  74. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css.map
  75. +12071
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.css
  76. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.css.map
  77. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.min.css
  78. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.min.css.map
  79. +12035
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css
  80. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css.map
  81. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css
  82. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css.map
  83. +6306
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js
  84. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js.map
  85. +7
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js
  86. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js.map
  87. +4439
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js
  88. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js.map
  89. +7
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js
  90. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js.map
  91. +4486
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.js
  92. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.js.map
  93. +7
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.min.js
  94. +1
    -0
      Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.min.js.map
  95. +7
    -0
      Finanzas/finanzas/repostajes/static/plugins/chart.js/chart.min.js
  96. +165
    -0
      Finanzas/finanzas/repostajes/static/plugins/fontawesome/LICENSE.txt
  97. +7955
    -0
      Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/all.css
  98. +9
    -0
      Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/all.min.css
  99. +1522
    -0
      Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/brands.css
  100. +6
    -0
      Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/brands.min.css

+ 1
- 1
Finanzas/K8S/verImg.sh View File

@ -1 +1 @@
docker run -it registry.reymota.es/finanzas:1.19 bash
docker run -it registry.reymota.es/apuntes:1.19 bash

+ 8
- 0
Finanzas/finanzas/apuntes/admin.py View File

@ -1,3 +1,11 @@
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
# Register your models here. # Register your models here.
from .models import Apunte, Cuenta, Tipo
admin.site.register(Apunte)
admin.site.register(Cuenta)
admin.site.register(Tipo)

+ 8
- 23
Finanzas/finanzas/apuntes/forms.py View File

@ -1,12 +1,11 @@
from django import forms from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import Cuentas, Apuntes, ReyMotaUser, Tipos
from .models import Cuenta, Apunte, Tipo
class CuentasForm(forms.ModelForm):
class CuentaForm(forms.ModelForm):
class Meta: class Meta:
model = Cuentas
model = Cuenta
fields = ['nombre', 'saldo_inicial', 'tipo'] fields = ['nombre', 'saldo_inicial', 'tipo']
nombre = forms.CharField( nombre = forms.CharField(
@ -14,39 +13,25 @@ class CuentasForm(forms.ModelForm):
saldo_inicial = forms.DecimalField( saldo_inicial = forms.DecimalField(
widget=forms.TextInput(attrs={'class': 'form-control'})) widget=forms.TextInput(attrs={'class': 'form-control'}))
tipo = forms.ModelChoiceField( tipo = forms.ModelChoiceField(
queryset=Tipos.objects.all(),
queryset=Tipo.objects.all(),
widget=forms.TextInput(attrs={'class': 'form-control'})) widget=forms.TextInput(attrs={'class': 'form-control'}))
class ApuntesForm(forms.ModelForm):
class ApunteForm(forms.ModelForm):
class Meta: class Meta:
model = Apuntes
model = Apunte
fields = ['fecha', 'cta_origen', 'cta_destino', 'importe'] fields = ['fecha', 'cta_origen', 'cta_destino', 'importe']
fecha = forms.DateField( fecha = forms.DateField(
widget=forms.DateInput(attrs={'type': 'date', 'class': 'form-control'})) widget=forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}))
cta_origen = forms.ModelChoiceField( cta_origen = forms.ModelChoiceField(
queryset=Cuentas.objects.all(),
queryset=Cuenta.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'})) widget=forms.Select(attrs={'class': 'form-control'}))
cta_destino = forms.ModelChoiceField( cta_destino = forms.ModelChoiceField(
queryset=Cuentas.objects.all(),
queryset=Cuenta.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'})) widget=forms.Select(attrs={'class': 'form-control'}))
importe = forms.DecimalField( importe = forms.DecimalField(
widget=forms.NumberInput(attrs={'class': 'form-control'})) widget=forms.NumberInput(attrs={'class': 'form-control'}))
class ReyMotaUserCreationForm(UserCreationForm):
class Meta:
model = ReyMotaUser
fields = ("email", "nombre", "foto")
labels = {'email': 'Dirección de correo'}
class ReyMotaUserChangeForm(UserChangeForm):
class Meta:
model = ReyMotaUser
fields = ("email", "foto")

+ 11
- 35
Finanzas/finanzas/apuntes/migrations/0001_initial.py View File

@ -1,7 +1,7 @@
# Generated by Django 5.1 on 2024-09-02 14:10
# Generated by Django 4.2 on 2024-09-03 14:50
import django.db.models.deletion
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -9,58 +9,34 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Cuentas',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nombre', models.TextField(max_length=20)),
('saldo_inicial', models.DecimalField(decimal_places=2, max_digits=10)),
('saldo_actual', models.DecimalField(decimal_places=2, max_digits=10)),
],
),
migrations.CreateModel(
name='Tipos',
name='Tipo',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('tipo', models.TextField(max_length=10)), ('tipo', models.TextField(max_length=10)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
name='ReyMotaUser',
name='Cuenta',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
('foto', models.ImageField(blank=True, default='profile_images/default.jpg', upload_to='profile_images')),
('is_staff', models.BooleanField(default=False)),
('is_active', models.BooleanField(default=True)),
('nombre', models.CharField(blank=True, max_length=200, null=True)),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
('nombre', models.TextField(max_length=20)),
('saldo_inicial', models.DecimalField(decimal_places=2, max_digits=10)),
('saldo_actual', models.DecimalField(decimal_places=2, max_digits=10)),
('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apuntes.tipo')),
], ],
options={
'abstract': False,
},
), ),
migrations.CreateModel( migrations.CreateModel(
name='Apuntes',
name='Apunte',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fecha', models.DateField()), ('fecha', models.DateField()),
('importe', models.DecimalField(decimal_places=2, max_digits=10)), ('importe', models.DecimalField(decimal_places=2, max_digits=10)),
('cta_destino', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='destino', to='apuntes.cuentas')),
('cta_origen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='origen', to='apuntes.cuentas')),
('cta_destino', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='destino', to='apuntes.cuenta')),
('cta_origen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='origen', to='apuntes.cuenta')),
], ],
), ),
migrations.AddField(
model_name='cuentas',
name='tipo',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apuntes.tipos'),
),
] ]

+ 6
- 27
Finanzas/finanzas/apuntes/models.py View File

@ -1,37 +1,16 @@
from django.db import models from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.utils.translation import gettext_lazy as _
from .managers import ReyMotaUserManager
# Create your models here.
class ReyMotaUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_("email address"), unique=True)
foto = models.ImageField(upload_to="profile_images", default="profile_images/default.jpg", blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
nombre = models.CharField(max_length=200, blank=True, null=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = ReyMotaUserManager()
def __str__(self):
return self.email
class Tipos(models.Model):
class Tipo(models.Model):
tipo = models.TextField(max_length=10) tipo = models.TextField(max_length=10)
class Cuentas(models.Model):
class Cuenta(models.Model):
nombre = models.TextField(max_length=20) nombre = models.TextField(max_length=20)
saldo_inicial = models.DecimalField(max_digits=10, decimal_places=2) saldo_inicial = models.DecimalField(max_digits=10, decimal_places=2)
saldo_actual = models.DecimalField(max_digits=10, decimal_places=2) saldo_actual = models.DecimalField(max_digits=10, decimal_places=2)
tipo = models.ForeignKey(Tipos, on_delete=models.CASCADE)
tipo = models.ForeignKey(Tipo, on_delete=models.CASCADE)
class Apuntes(models.Model):
class Apunte(models.Model):
fecha = models.DateField() fecha = models.DateField()
cta_origen = models.ForeignKey(Cuentas, on_delete=models.CASCADE, related_name='origen')
cta_destino = models.ForeignKey(Cuentas, on_delete=models.CASCADE, related_name='destino')
cta_origen = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='origen')
cta_destino = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='destino')
importe = models.DecimalField(max_digits=10, decimal_places=2) importe = models.DecimalField(max_digits=10, decimal_places=2)

+ 2
- 0
Finanzas/finanzas/apuntes/urls.py View File

@ -2,6 +2,8 @@ from django.urls import path
from . import views from . import views
app_name= 'apuntes'
urlpatterns = [ urlpatterns = [
path('cuentas/', views.lista_cuentas, name='lista_cuentas'), path('cuentas/', views.lista_cuentas, name='lista_cuentas'),
path('cuentas/nuevo/', views.nueva_cuenta, name='nueva_cuenta'), path('cuentas/nuevo/', views.nueva_cuenta, name='nueva_cuenta'),


+ 25
- 25
Finanzas/finanzas/apuntes/views.py View File

@ -3,13 +3,13 @@ from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect from django.shortcuts import render, get_object_or_404, redirect
# Create your views here. # Create your views here.
from .models import Cuentas, Apuntes
from .forms import CuentasForm, ApuntesForm
from .models import Cuenta, Apunte
from .forms import CuentaForm, ApunteForm
@login_required @login_required
def principal(request): def principal(request):
cuentas = Cuentas.objects.all()
apuntes = Apuntes.objects.all()
cuentas = Cuenta.objects.all()
apuntes = Apunte.objects.all()
return render(request, 'apuntes/index.html', {'cuentas': cuentas, 'apuntes': apuntes}) return render(request, 'apuntes/index.html', {'cuentas': cuentas, 'apuntes': apuntes})
@ -17,15 +17,15 @@ def principal(request):
# Vistas para los cuentas # Vistas para los cuentas
@login_required @login_required
def lista_cuentas(request): def lista_cuentas(request):
cuentas = Cuentas.objects.all()
cuentas = Cuenta.objects.all()
return render(request, 'apuntes/lista_cuentas.html', {'cuentas': cuentas}) return render(request, 'apuntes/lista_cuentas.html', {'cuentas': cuentas})
@login_required @login_required
def detalle_cuenta(request, cuenta_id): def detalle_cuenta(request, cuenta_id):
cuenta = get_object_or_404(Cuentas, pk=cuenta_id)
cuenta = get_object_or_404(Cuenta, pk=cuenta_id)
apuntes = Apuntes.objects.filter(cuenta=cuenta_id)
apuntes = Apunte.objects.filter(cuenta=cuenta_id)
return render(request, 'apuntes/detalle_cuenta.html', {'cuenta': cuenta, 'apuntes': apuntes}) return render(request, 'apuntes/detalle_cuenta.html', {'cuenta': cuenta, 'apuntes': apuntes})
@ -33,31 +33,31 @@ def detalle_cuenta(request, cuenta_id):
@login_required @login_required
def nueva_cuenta(request): def nueva_cuenta(request):
if request.method == 'POST': if request.method == 'POST':
form = CuentasForm(request.POST, request.FILES)
form = CuentaForm(request.POST, request.FILES)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return redirect('lista_cuentas') return redirect('lista_cuentas')
else: else:
form = CuentasForm()
form = CuentaForm()
return render(request, 'apuntes/form_cuenta.html', {'form': form}) return render(request, 'apuntes/form_cuenta.html', {'form': form})
@login_required @login_required
def editar_cuenta(request, cuenta_id): def editar_cuenta(request, cuenta_id):
cuenta = get_object_or_404(Cuentas, pk=cuenta_id)
cuenta = get_object_or_404(Cuenta, pk=cuenta_id)
if request.method == 'POST': if request.method == 'POST':
form = CuentasForm(request.POST, request.FILES, instance=cuenta)
form = CuentaForm(request.POST, request.FILES, instance=cuenta)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return redirect('lista_cuentas') return redirect('lista_cuentas')
else: else:
form = CuentasForm(instance=cuenta)
form = CuentaForm(instance=cuenta)
return render(request, 'apuntes/form_cuenta.html', {'form': form}) return render(request, 'apuntes/form_cuenta.html', {'form': form})
@login_required @login_required
def eliminar_cuenta(request, cuenta_id): def eliminar_cuenta(request, cuenta_id):
cuenta = get_object_or_404(Cuentas, pk=cuenta_id)
cuenta = get_object_or_404(Cuenta, pk=cuenta_id)
cuenta.delete() cuenta.delete()
return redirect('lista_cuentas') return redirect('lista_cuentas')
@ -65,24 +65,24 @@ def eliminar_cuenta(request, cuenta_id):
# Vistas para los apuntes # Vistas para los apuntes
@login_required @login_required
def lista_apuntes(request): def lista_apuntes(request):
apuntes = Apuntes.objects.all()
apuntes = Apunte.objects.all()
return render(request, 'apuntes/lista_apuntes.html', {'apuntes': apuntes}) return render(request, 'apuntes/lista_apuntes.html', {'apuntes': apuntes})
@login_required @login_required
def detalle_apunte(request, apunte_id): def detalle_apunte(request, apunte_id):
apunte = get_object_or_404(Apuntes, pk=apunte_id)
apunte = get_object_or_404(Apunte, pk=apunte_id)
return render(request, 'apuntes/detalle_apunte.html', {'apunte': apunte}) return render(request, 'apuntes/detalle_apunte.html', {'apunte': apunte})
@login_required @login_required
def nuevo_apunte(request): def nuevo_apunte(request):
cuentas = Cuentas.objects.all() # vamos a ver si hay vehículos dados de alta
cuentas = Cuenta.objects.all() # vamos a ver si hay vehículos dados de alta
if cuentas: if cuentas:
if request.method == 'POST': if request.method == 'POST':
form = ApuntesForm(request.POST, request.FILES)
form = ApunteForm(request.POST, request.FILES)
if form.is_valid(): if form.is_valid():
instancia = form.save(commit=False) instancia = form.save(commit=False)
@ -101,10 +101,10 @@ def nuevo_apunte(request):
instancia.precioxlitro = 0 instancia.precioxlitro = 0
# lee todos los apuntes del vehículo # lee todos los apuntes del vehículo
# apuntes = Apuntes.query.filter_by(cuenta_id=cuenta_id).all()
# apuntes = Apunte.query.filter_by(cuenta_id=cuenta_id).all()
if Apuntes.objects.filter(cuenta_id=instancia.cuenta):
apuntes = Apuntes.objects.filter(cuenta_id=instancia.cuenta).order_by('-fecha')[0]
if Apunte.objects.filter(cuenta_id=instancia.cuenta):
apuntes = Apunte.objects.filter(cuenta_id=instancia.cuenta).order_by('-fecha')[0]
instancia.kmsrecorridos = instancia.kms - apuntes.kms instancia.kmsrecorridos = instancia.kms - apuntes.kms
@ -118,7 +118,7 @@ def nuevo_apunte(request):
return redirect('lista_apuntes') return redirect('lista_apuntes')
else: else:
form = ApuntesForm()
form = ApunteForm()
return render(request, 'apuntes/form_apunte.html', {'form': form}) return render(request, 'apuntes/form_apunte.html', {'form': form})
else: else:
return render(request, 'apuntes/index.html') return render(request, 'apuntes/index.html')
@ -126,20 +126,20 @@ def nuevo_apunte(request):
@login_required @login_required
def editar_apunte(request, apunte_id): def editar_apunte(request, apunte_id):
apunte = get_object_or_404(Apuntes, pk=apunte_id)
apunte = get_object_or_404(Apunte, pk=apunte_id)
if request.method == 'POST': if request.method == 'POST':
form = ApuntesForm(request.POST, request.FILES, instance=apunte)
form = ApunteForm(request.POST, request.FILES, instance=apunte)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return redirect('lista_apuntes') return redirect('lista_apuntes')
else: else:
form = ApuntesForm(instance=apunte)
form = ApunteForm(instance=apunte)
return render(request, 'apuntes/form_apunte.html', {'form': form}) return render(request, 'apuntes/form_apunte.html', {'form': form})
@login_required @login_required
def eliminar_apunte(request, apunte_id): def eliminar_apunte(request, apunte_id):
apunte = Apuntes.objects.get(pk=apunte_id)
apunte = Apunte.objects.get(pk=apunte_id)
apunte.delete() apunte.delete()
return redirect('lista_apuntes') return redirect('lista_apuntes')

BIN
Finanzas/finanzas/db.sqlite3 View File


+ 10
- 2
Finanzas/finanzas/finanzas/settings.py View File

@ -12,6 +12,7 @@ https://docs.djangoproject.com/en/5.1/ref/settings/
from pathlib import Path from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
@ -39,6 +40,8 @@ INSTALLED_APPS = [
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'apuntes', 'apuntes',
'repostajes',
'reymotausers',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
@ -56,7 +59,7 @@ ROOT_URLCONF = 'finanzas.urls'
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'DIRS': [ BASE_DIR / 'templates' ],
'APP_DIRS': True, 'APP_DIRS': True,
'OPTIONS': { 'OPTIONS': {
'context_processors': [ 'context_processors': [
@ -65,10 +68,15 @@ TEMPLATES = [
'django.contrib.auth.context_processors.auth', 'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages', 'django.contrib.messages.context_processors.messages',
], ],
'libraries': {
'filtros_de_entorno': 'finanzas.templatetags.filtros_de_entorno',
}
}, },
}, },
] ]
print("Directorio de templates: ", TEMPLATES[0]['DIRS'])
WSGI_APPLICATION = 'finanzas.wsgi.application' WSGI_APPLICATION = 'finanzas.wsgi.application'
@ -132,7 +140,7 @@ LOGIN_URL = '/accounts/login/'
LOGIN_REDIRECT_URL = 'principal' LOGIN_REDIRECT_URL = 'principal'
LOGOUT_REDIRECT_URL = 'principal' LOGOUT_REDIRECT_URL = 'principal'
AUTH_USER_MODEL = "apuntes.ReyMotaUser"
AUTH_USER_MODEL = "reymotausers.ReyMotaUser"
MEDIA_ROOT = BASE_DIR / "mediafiles" MEDIA_ROOT = BASE_DIR / "mediafiles"
MEDIA_URL = '/media/' MEDIA_URL = '/media/'


Finanzas/finanzas/apuntes/templatetags/__init__.py → Finanzas/finanzas/finanzas/templatetags/__init__.py View File


Finanzas/finanzas/apuntes/templatetags/filtros_de_entorno.py → Finanzas/finanzas/finanzas/templatetags/filtros_de_entorno.py View File


+ 3
- 1
Finanzas/finanzas/finanzas/urls.py View File

@ -24,7 +24,9 @@ urlpatterns = [
path('obreros/', admin.site.urls), path('obreros/', admin.site.urls),
path('apuntes/', include('apuntes.urls')), path('apuntes/', include('apuntes.urls')),
path('repostajes/', include('repostajes.urls')),
path("accounts/", include("accounts.urls")), # new path("accounts/", include("accounts.urls")), # new
path("accounts/", include("django.contrib.auth.urls")), path("accounts/", include("django.contrib.auth.urls")),


+ 1
- 0
Finanzas/finanzas/repostajes/.gitignore View File

@ -0,0 +1 @@
migrations/

+ 0
- 0
Finanzas/finanzas/repostajes/__init__.py View File


+ 11
- 0
Finanzas/finanzas/repostajes/admin.py View File

@ -0,0 +1,11 @@
from django.contrib import admin
# Register your models here.
from .models import Vehiculo, Repostaje
admin.site.register(Vehiculo)
admin.site.register(Repostaje)

+ 6
- 0
Finanzas/finanzas/repostajes/apps.py View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class RepostajesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'repostajes'

+ 42
- 0
Finanzas/finanzas/repostajes/forms.py View File

@ -0,0 +1,42 @@
from django import forms
from .models import Vehiculo, Repostaje
class VehiculoForm(forms.ModelForm):
class Meta:
model = Vehiculo
fields = ['marca', 'modelo', 'matricula', 'foto']
marca = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
modelo = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
matricula = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
class RepostajeForm(forms.ModelForm):
class Meta:
model = Repostaje
fields = ['fecha', 'vehiculo', 'kms', 'litros', 'importe']
exclude = ['descuento', 'precioxlitro']
fecha = forms.DateField(
widget=forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}))
vehiculo = forms.ModelChoiceField(
queryset=Vehiculo.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'}))
kms = forms.DecimalField(
widget=forms.TextInput(attrs={'class': 'form-control'}))
litros = forms.DecimalField(
widget=forms.NumberInput(attrs={'class': 'form-control'}))
importe = forms.DecimalField(
widget=forms.NumberInput(attrs={'class': 'form-control'}))
aplica_descuento = forms.BooleanField(initial=False, required=False)

Finanzas/finanzas/apuntes/managers.py → Finanzas/finanzas/repostajes/managers.py View File


+ 36
- 0
Finanzas/finanzas/repostajes/models.py View File

@ -0,0 +1,36 @@
from django.db import models
import datetime
from django.core.validators import MaxValueValidator, MinValueValidator
from django.utils.translation import gettext_lazy as _
def current_year():
return datetime.date.today().year
def max_value_current_year(value):
return MaxValueValidator(current_year())(value)
class Vehiculo(models.Model):
marca = models.CharField(max_length=200)
modelo = models.CharField(max_length=200)
matricula = models.CharField(max_length=200)
foto = models.ImageField(upload_to='vehiculos/', blank=True, null=True) # Nuevo campo
def __str__(self):
return self.marca
class Repostaje(models.Model):
vehiculo = models.ForeignKey(Vehiculo, on_delete=models.CASCADE)
fecha = models.DateField()
kms = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True)
litros = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
descuento = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
importe = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
precioxlitro = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
kmsrecorridos = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True)
consumo = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
def __str__(self):
return self.fecha

+ 12
- 0
Finanzas/finanzas/repostajes/static/css/portal.css
File diff suppressed because it is too large
View File


+ 21
- 0
Finanzas/finanzas/repostajes/static/images/app-logo.svg View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="215px" height="215px" viewBox="0 0 215 215" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->
<title>portal-logo</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M51.165,8.742 C54.505,12.619 56.876,17.365 57.892,22.588 C60.148,17.225 65.452,13.46 71.636,13.46 C79.867,13.46 86.541,20.134 86.541,28.365 C86.541,36.597 79.867,43.269 71.636,43.269 C63.404,43.269 56.728,36.597 56.728,28.365 C56.728,12.7 44.03,0 28.365,0 C12.7,0 0,12.7 0,28.365 C0,44.031 12.7,56.731 28.365,56.731 C36.419,56.731 43.695,53.393 48.858,48.003 C45.501,44.117 43.128,39.383 42.108,34.14 C39.852,39.504 34.548,43.269 28.365,43.269 C20.133,43.269 13.46,36.597 13.46,28.365 C13.46,20.134 20.133,13.46 28.365,13.46 C36.966,13.46 43.27,20.577 43.27,28.365 C43.27,44.031 55.97,56.731 71.636,56.731 C87.3,56.731 100,44.031 100,28.365 C100,12.7 87.3,0 71.636,0 C63.589,0 56.327,3.358 51.165,8.742 Z" id="path-1"></path>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="portal-logo">
<circle id="Oval" fill="#51B37F" fill-rule="nonzero" cx="107.5" cy="107.5" r="107.5"></circle>
<g id="logo" transform="translate(58.000000, 79.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-2"></g>
<polygon id="Fill-1" fill="#FFFFFE" mask="url(#mask-2)" points="-5 61.73 105 61.73 105 -5 -5 -5"></polygon>
</g>
</g>
</g>
</svg>

BIN
Finanzas/finanzas/repostajes/static/images/background/background-1.jpg View File

Before After
Width: 1000  |  Height: 1139  |  Size: 150 KiB

BIN
Finanzas/finanzas/repostajes/static/images/background/background-2.jpg View File

Before After
Width: 1200  |  Height: 781  |  Size: 232 KiB

BIN
Finanzas/finanzas/repostajes/static/images/background/background-3.jpg View File

Before After
Width: 1200  |  Height: 789  |  Size: 256 KiB

BIN
Finanzas/finanzas/repostajes/static/images/background/background-palmeras.jpg View File

Before After
Width: 1000  |  Height: 1139  |  Size: 360 KiB

BIN
Finanzas/finanzas/repostajes/static/images/doc-thumb-1.jpg View File

Before After
Width: 600  |  Height: 432  |  Size: 75 KiB

BIN
Finanzas/finanzas/repostajes/static/images/doc-thumb-2.jpg View File

Before After
Width: 600  |  Height: 472  |  Size: 75 KiB

BIN
Finanzas/finanzas/repostajes/static/images/favicon.ico View File

Before After

BIN
Finanzas/finanzas/repostajes/static/images/favicon.png View File

Before After
Width: 32  |  Height: 32  |  Size: 1.7 KiB

+ 21
- 0
Finanzas/finanzas/repostajes/static/images/portal-logo.svg View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="215px" height="215px" viewBox="0 0 215 215" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.6 (67491) - http://www.bohemiancoding.com/sketch -->
<title>portal-logo</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M51.165,8.742 C54.505,12.619 56.876,17.365 57.892,22.588 C60.148,17.225 65.452,13.46 71.636,13.46 C79.867,13.46 86.541,20.134 86.541,28.365 C86.541,36.597 79.867,43.269 71.636,43.269 C63.404,43.269 56.728,36.597 56.728,28.365 C56.728,12.7 44.03,0 28.365,0 C12.7,0 0,12.7 0,28.365 C0,44.031 12.7,56.731 28.365,56.731 C36.419,56.731 43.695,53.393 48.858,48.003 C45.501,44.117 43.128,39.383 42.108,34.14 C39.852,39.504 34.548,43.269 28.365,43.269 C20.133,43.269 13.46,36.597 13.46,28.365 C13.46,20.134 20.133,13.46 28.365,13.46 C36.966,13.46 43.27,20.577 43.27,28.365 C43.27,44.031 55.97,56.731 71.636,56.731 C87.3,56.731 100,44.031 100,28.365 C100,12.7 87.3,0 71.636,0 C63.589,0 56.327,3.358 51.165,8.742 Z" id="path-1"></path>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="portal-logo">
<circle id="Oval" fill="#09B6CA" fill-rule="nonzero" cx="107.5" cy="107.5" r="107.5"></circle>
<g id="logo" transform="translate(58.000000, 79.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-2"></g>
<polygon id="Fill-1" fill="#FFFFFE" mask="url(#mask-2)" points="-5 61.73 105 61.73 105 -5 -5 -5"></polygon>
</g>
</g>
</g>
</svg>

BIN
Finanzas/finanzas/repostajes/static/images/profiles/profile-1.png View File

Before After
Width: 120  |  Height: 120  |  Size: 34 KiB

BIN
Finanzas/finanzas/repostajes/static/images/profiles/profile-2.png View File

Before After
Width: 120  |  Height: 120  |  Size: 35 KiB

BIN
Finanzas/finanzas/repostajes/static/images/profiles/profile-3.png View File

Before After
Width: 120  |  Height: 120  |  Size: 37 KiB

BIN
Finanzas/finanzas/repostajes/static/images/profiles/profile-4.png View File

Before After
Width: 120  |  Height: 120  |  Size: 22 KiB

BIN
Finanzas/finanzas/repostajes/static/images/profiles/profile-5.png View File

Before After
Width: 120  |  Height: 120  |  Size: 36 KiB

BIN
Finanzas/finanzas/repostajes/static/images/profiles/profile-6.png View File

Before After
Width: 120  |  Height: 120  |  Size: 29 KiB

+ 18
- 0
Finanzas/finanzas/repostajes/static/images/reymota-logo.svg View File

@ -0,0 +1,18 @@
<svg width="400" height="400" xmlns="http://www.w3.org/2000/svg">
<!-- Fondo -->
<rect width="400" height="400" fill="#ffffff" />
<!-- Corona -->
<g transform="translate(100, 100) scale(2)">
<polygon points="50,150 75,50 100,150" fill="#FFD700" />
<polygon points="0,150 50,0 100,150" fill="#FFD700" />
<polygon points="100,150 125,50 150,150" fill="#FFD700" />
</g>
<!-- Letra R -->
<!--
<text x="100" y="360" font-family="Arial, sans-serif" font-size="400" fill="#000000" font-weight="bold">R</text>
-->
<text x="100" y="360" font-family="Open Sans" font-size="400" fill="#000000" font-weight="bold">R</text>
</svg>

BIN
Finanzas/finanzas/repostajes/static/images/user.png View File

Before After
Width: 120  |  Height: 120  |  Size: 38 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-1.jpg View File

Before After
Width: 200  |  Height: 200  |  Size: 48 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-2.jpg View File

Before After
Width: 350  |  Height: 350  |  Size: 28 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-3.jpg View File

Before After
Width: 200  |  Height: 200  |  Size: 40 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-4.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 7.2 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-5.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 22 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-6.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 9.1 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-7.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 22 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-8.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 12 KiB

BIN
Finanzas/finanzas/repostajes/static/images/users/user-9.jpg View File

Before After
Width: 240  |  Height: 240  |  Size: 32 KiB

+ 96
- 0
Finanzas/finanzas/repostajes/static/js/app.js View File

@ -0,0 +1,96 @@
'use strict';
/* ===== Enable Bootstrap Popover (on element ====== */
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
/* ==== Enable Bootstrap Alert ====== */
//var alertList = document.querySelectorAll('.alert')
//alertList.forEach(function (alert) {
// new bootstrap.Alert(alert)
//});
const alertList = document.querySelectorAll('.alert')
const alerts = [...alertList].map(element => new bootstrap.Alert(element))
/* ===== Responsive Sidepanel ====== */
const sidePanelToggler = document.getElementById('sidepanel-toggler');
const sidePanel = document.getElementById('app-sidepanel');
const sidePanelDrop = document.getElementById('sidepanel-drop');
const sidePanelClose = document.getElementById('sidepanel-close');
window.addEventListener('load', function(){
responsiveSidePanel();
});
window.addEventListener('resize', function(){
responsiveSidePanel();
});
function responsiveSidePanel() {
let w = window.innerWidth;
if(w >= 1200) {
// if larger
//console.log('larger');
sidePanel.classList.remove('sidepanel-hidden');
sidePanel.classList.add('sidepanel-visible');
} else {
// if smaller
//console.log('smaller');
sidePanel.classList.remove('sidepanel-visible');
sidePanel.classList.add('sidepanel-hidden');
}
};
sidePanelToggler.addEventListener('click', () => {
if (sidePanel.classList.contains('sidepanel-visible')) {
console.log('visible');
sidePanel.classList.remove('sidepanel-visible');
sidePanel.classList.add('sidepanel-hidden');
} else {
console.log('hidden');
sidePanel.classList.remove('sidepanel-hidden');
sidePanel.classList.add('sidepanel-visible');
}
});
sidePanelClose.addEventListener('click', (e) => {
e.preventDefault();
sidePanelToggler.click();
});
sidePanelDrop.addEventListener('click', (e) => {
sidePanelToggler.click();
});
/* ====== Mobile search ======= */
const searchMobileTrigger = document.querySelector('.search-mobile-trigger');
const searchBox = document.querySelector('.app-search-box');
searchMobileTrigger.addEventListener('click', () => {
searchBox.classList.toggle('is-visible');
let searchMobileTriggerIcon = document.querySelector('.search-mobile-trigger-icon');
if(searchMobileTriggerIcon.classList.contains('fa-magnifying-glass')) {
searchMobileTriggerIcon.classList.remove('fa-magnifying-glass');
searchMobileTriggerIcon.classList.add('fa-xmark');
} else {
searchMobileTriggerIcon.classList.remove('fa-xmark');
searchMobileTriggerIcon.classList.add('fa-magnifying-glass');
}
});

+ 366
- 0
Finanzas/finanzas/repostajes/static/js/charts-demo.js View File

@ -0,0 +1,366 @@
'use strict';
/* Chart.js docs: https://www.chartjs.org/ */
window.chartColors = {
green: '#75c181', // rgba(117,193,129, 1)
blue: '#5b99ea', // rgba(91,153,234, 1)
gray: '#a9b5c9',
text: '#252930',
border: '#e7e9ed'
};
/* Random number generator for demo purpose */
var randomDataPoint = function(){ return Math.round(Math.random()*100)};
//Area line Chart Demo
var lineChartConfig = {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
datasets: [{
label: 'Dataset',
backgroundColor: "rgba(117,193,129,0.2)",
borderColor: "rgba(117,193,129, 0.8)",
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
],
}]
},
options: {
responsive: true,
legend: {
display: true,
position: 'bottom',
align: 'end',
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
callbacks: {
label: function(tooltipItem, data) {
return tooltipItem.value + '%';
}
},
},
hover: {
mode: 'nearest',
intersect: true
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
}
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
},
ticks: {
beginAtZero: true,
userCallback: function(value, index, values) {
return value.toLocaleString() + '%';
}
},
}]
}
}
};
//Bar Chart Demo
var barChartConfig = {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],
datasets: [{
label: 'Dataset 1',
backgroundColor: "rgba(117,193,129,0.8)",
hoverBackgroundColor: "rgba(117,193,129,1)",
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
]
},
{
label: 'Dataset 2',
backgroundColor: "rgba(91,153,234,0.8)",
hoverBackgroundColor: "rgba(91,153,234,1)",
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
]
}
]
},
options: {
responsive: true,
legend: {
position: 'bottom',
align: 'end',
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
callbacks: {
label: function(tooltipItem, data) {
return tooltipItem.value + '%';
}
},
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.borders,
},
ticks: {
beginAtZero: true,
userCallback: function(value, index, values) {
return value + '%';
}
},
}]
}
}
}
// Pie Chart Demo
var pieChartConfig = {
type: 'pie',
data: {
datasets: [{
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
],
backgroundColor: [
window.chartColors.green,
window.chartColors.blue,
window.chartColors.gray,
],
label: 'Dataset 1'
}],
labels: [
'Green',
'Blue',
'Gray',
]
},
options: {
responsive: true,
legend: {
display: true,
position: 'bottom',
align: 'center',
},
tooltips: {
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
/* Display % in tooltip - https://stackoverflow.com/questions/37257034/chart-js-2-0-doughnut-tooltip-percentages */
callbacks: {
label: function(tooltipItem, data) {
//get the concerned dataset
var dataset = data.datasets[tooltipItem.datasetIndex];
//calculate the total of this data set
var total = dataset.data.reduce(function(previousValue, currentValue, currentIndex, array) {
return previousValue + currentValue;
});
//get the current items value
var currentValue = dataset.data[tooltipItem.index];
//calculate the precentage based on the total and current item, also this does a rough rounding to give a whole number
var percentage = Math.floor(((currentValue/total) * 100)+0.5);
return percentage + "%";
},
},
},
}
};
// Doughnut Chart Demo
var doughnutChartConfig = {
type: 'doughnut',
data: {
datasets: [{
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
],
backgroundColor: [
window.chartColors.green,
window.chartColors.blue,
window.chartColors.gray,
],
label: 'Dataset 1'
}],
labels: [
'Green',
'Blue',
'Gray',
]
},
options: {
responsive: true,
legend: {
display: true,
position: 'bottom',
align: 'center',
},
tooltips: {
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
animation: {
animateScale: true,
animateRotate: true
},
/* Display % in tooltip - https://stackoverflow.com/questions/37257034/chart-js-2-0-doughnut-tooltip-percentages */
callbacks: {
label: function(tooltipItem, data) {
//get the concerned dataset
var dataset = data.datasets[tooltipItem.datasetIndex];
//calculate the total of this data set
var total = dataset.data.reduce(function(previousValue, currentValue, currentIndex, array) {
return previousValue + currentValue;
});
//get the current items value
var currentValue = dataset.data[tooltipItem.index];
//calculate the precentage based on the total and current item, also this does a rough rounding to give a whole number
var percentage = Math.floor(((currentValue/total) * 100)+0.5);
return percentage + "%";
},
},
},
}
};
// Generate charts on load
window.addEventListener('load', function(){
var lineChart = document.getElementById('chart-line').getContext('2d');
window.myLine = new Chart(lineChart, lineChartConfig);
var barChart = document.getElementById('chart-bar').getContext('2d');
window.myBar = new Chart(barChart, barChartConfig);
var pieChart = document.getElementById('chart-pie').getContext('2d');
window.myPie = new Chart(pieChart, pieChartConfig);
var doughnutChart = document.getElementById('chart-doughnut').getContext('2d');
window.myDoughnut = new Chart(doughnutChart, doughnutChartConfig);
});

+ 224
- 0
Finanzas/finanzas/repostajes/static/js/index-charts.js View File

@ -0,0 +1,224 @@
'use strict';
/* Chart.js docs: https://www.chartjs.org/ */
window.chartColors = {
green: '#75c181',
gray: '#a9b5c9',
text: '#252930',
border: '#e7e9ed'
};
/* Random number generator for demo purpose */
var randomDataPoint = function(){ return Math.round(Math.random()*10000)};
//Chart.js Line Chart Example
var lineChartConfig = {
type: 'line',
data: {
labels: ['Day 1', 'Day 2', 'Day 3', 'Day 4', 'Day 5', 'Day 6', 'Day 7'],
datasets: [{
label: 'Current week',
fill: false,
backgroundColor: window.chartColors.green,
borderColor: window.chartColors.green,
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
],
}, {
label: 'Previous week',
borderDash: [3, 5],
backgroundColor: window.chartColors.gray,
borderColor: window.chartColors.gray,
data: [
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint(),
randomDataPoint()
],
fill: false,
}]
},
options: {
responsive: true,
aspectRatio: 1.5,
legend: {
display: true,
position: 'bottom',
align: 'end',
},
title: {
display: true,
text: 'Chart.js Line Chart Example',
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
callbacks: {
//Ref: https://stackoverflow.com/questions/38800226/chart-js-add-commas-to-tooltip-and-y-axis
label: function(tooltipItem, data) {
if (parseInt(tooltipItem.value) >= 1000) {
return "$" + tooltipItem.value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
} else {
return '$' + tooltipItem.value;
}
}
},
},
hover: {
mode: 'nearest',
intersect: true
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
}
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
scaleLabel: {
display: false,
},
ticks: {
beginAtZero: true,
userCallback: function(value, index, values) {
return '$' + value.toLocaleString(); //Ref: https://stackoverflow.com/questions/38800226/chart-js-add-commas-to-tooltip-and-y-axis
}
},
}]
}
}
};
// Chart.js Bar Chart Example
var barChartConfig = {
type: 'bar',
data: {
labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
datasets: [{
label: 'Orders',
backgroundColor: window.chartColors.green,
borderColor: window.chartColors.green,
borderWidth: 1,
maxBarThickness: 16,
data: [
23,
45,
76,
75,
62,
37,
83
]
}]
},
options: {
responsive: true,
aspectRatio: 1.5,
legend: {
position: 'bottom',
align: 'end',
},
title: {
display: true,
text: 'Chart.js Bar Chart Example'
},
tooltips: {
mode: 'index',
intersect: false,
titleMarginBottom: 10,
bodySpacing: 10,
xPadding: 16,
yPadding: 16,
borderColor: window.chartColors.border,
borderWidth: 1,
backgroundColor: '#fff',
bodyFontColor: window.chartColors.text,
titleFontColor: window.chartColors.text,
},
scales: {
xAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.border,
},
}],
yAxes: [{
display: true,
gridLines: {
drawBorder: false,
color: window.chartColors.borders,
},
}]
}
}
}
// Generate charts on load
window.addEventListener('load', function(){
var lineChart = document.getElementById('canvas-linechart').getContext('2d');
window.myLine = new Chart(lineChart, lineChartConfig);
var barChart = document.getElementById('canvas-barchart').getContext('2d');
window.myBar = new Chart(barChart, barChartConfig);
});

+ 4085
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.min.css.map
File diff suppressed because it is too large
View File


+ 4084
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-grid.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 593
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css View File

@ -0,0 +1,593 @@
/*!
* Bootstrap Reboot v5.3.0 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.min.css.map
File diff suppressed because it is too large
View File


+ 590
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css View File

@ -0,0 +1,590 @@
/*!
* Bootstrap Reboot v5.3.0 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */

+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-reboot.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 5399
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.min.css.map
File diff suppressed because it is too large
View File


+ 5390
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap-utilities.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 12071
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.min.css.map
File diff suppressed because it is too large
View File


+ 12035
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.css.map
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/css/bootstrap.rtl.min.css.map
File diff suppressed because it is too large
View File


+ 6306
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.bundle.min.js.map
File diff suppressed because it is too large
View File


+ 4439
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.esm.min.js.map
File diff suppressed because it is too large
View File


+ 4486
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.js
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
Finanzas/finanzas/repostajes/static/plugins/bootstrap/js/bootstrap.min.js.map
File diff suppressed because it is too large
View File


+ 7
- 0
Finanzas/finanzas/repostajes/static/plugins/chart.js/chart.min.js
File diff suppressed because it is too large
View File


+ 165
- 0
Finanzas/finanzas/repostajes/static/plugins/fontawesome/LICENSE.txt View File

@ -0,0 +1,165 @@
Fonticons, Inc. (https://fontawesome.com)
--------------------------------------------------------------------------------
Font Awesome Free License
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
--------------------------------------------------------------------------------
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
The Font Awesome Free download is licensed under a Creative Commons
Attribution 4.0 International License and applies to all icons packaged
as SVG and JS file types.
--------------------------------------------------------------------------------
# Fonts: SIL OFL 1.1 License
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com)
with Reserved Font Name: "Font Awesome".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting — in part or in whole — any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
--------------------------------------------------------------------------------
# Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
Copyright 2023 Fonticons, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
# Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
files normally.
We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
--------------------------------------------------------------------------------
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**

+ 7955
- 0
Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/all.css
File diff suppressed because it is too large
View File


+ 9
- 0
Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/all.min.css
File diff suppressed because it is too large
View File


+ 1522
- 0
Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/brands.css
File diff suppressed because it is too large
View File


+ 6
- 0
Finanzas/finanzas/repostajes/static/plugins/fontawesome/css/brands.min.css
File diff suppressed because it is too large
View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save