diff --git a/accounts/settings.py b/accounts/settings.py index 9d8cf52..23fe864 100644 --- a/accounts/settings.py +++ b/accounts/settings.py @@ -50,6 +50,7 @@ INSTALLED_APPS = [ 'jalali_date', # local apps + 'apps.core', 'apps.users', 'apps.gooyal_oauth2', ] diff --git a/accounts/urls.py b/accounts/urls.py index 7564840..6024ece 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -32,6 +32,7 @@ urlpatterns = [ path('swagger/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'), path('admin/', admin.site.urls), + path('', include('apps.core.urls')), path('users/', include('apps.users.urls')), path('oauth2/', include('apps.gooyal_oauth2.urls', namespace='gooyal_oauth2')), ] diff --git a/apps/core/__init__.py b/apps/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/core/admin.py b/apps/core/admin.py new file mode 100644 index 0000000..c6fe108 --- /dev/null +++ b/apps/core/admin.py @@ -0,0 +1,2 @@ +from django.contrib import admin + diff --git a/apps/core/apps.py b/apps/core/apps.py new file mode 100644 index 0000000..4143768 --- /dev/null +++ b/apps/core/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CoreConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'apps.core' diff --git a/apps/core/migrations/__init__.py b/apps/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/core/models.py b/apps/core/models.py new file mode 100644 index 0000000..56987d4 --- /dev/null +++ b/apps/core/models.py @@ -0,0 +1,2 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ diff --git a/apps/core/templates/jalali_date/widgets/attrs.html b/apps/core/templates/jalali_date/widgets/attrs.html new file mode 100644 index 0000000..7a5592a --- /dev/null +++ b/apps/core/templates/jalali_date/widgets/attrs.html @@ -0,0 +1 @@ +{% for name, value in widget.attrs.items %}{% if value is not False %} {{ name }}{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %}{% endfor %} \ No newline at end of file diff --git a/apps/core/templates/jalali_date/widgets/date.html b/apps/core/templates/jalali_date/widgets/date.html new file mode 100644 index 0000000..ae9c7d0 --- /dev/null +++ b/apps/core/templates/jalali_date/widgets/date.html @@ -0,0 +1 @@ + diff --git a/apps/core/templatetags/__init__.py b/apps/core/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/core/templatetags/tags.py b/apps/core/templatetags/tags.py new file mode 100644 index 0000000..81921eb --- /dev/null +++ b/apps/core/templatetags/tags.py @@ -0,0 +1,30 @@ +from django import template +import jdatetime +from django.core.paginator import Paginator + +register = template.Library() + + +@register.filter(name="to_jalali") +def to_jalali(value): + if value: + return jdatetime.date.fromgregorian(date=value, locale='fa_IR').strftime("%Y/%m/%d") + else: + return value + +@register.filter(name="amount_split_3digit") +def amount_split_3digit(value): + text = str(value)[::-1] + return ','.join([l[::-1] for l in [text[i:i + 3] for i in range(0, len(text), 3)][::-1]]) + + +@register.simple_tag +def get_proper_elided_page_range(p, number, on_each_side=2, on_ends=2): + paginator = Paginator(p.object_list, p.per_page) + return paginator.get_elided_page_range(number=number, + on_each_side=on_each_side, + on_ends=on_ends) + +@register.filter +def get_item(dictionary, key): + return dictionary.get(key) \ No newline at end of file diff --git a/apps/core/tests.py b/apps/core/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/apps/core/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apps/core/urls.py b/apps/core/urls.py new file mode 100644 index 0000000..7f82b8a --- /dev/null +++ b/apps/core/urls.py @@ -0,0 +1,7 @@ +from django.urls import path, include +from .views import HomeView +app_name = "core" + +urlpatterns = [ + path('', HomeView.as_view(), name='home'), +] diff --git a/apps/core/utils/__init__.py b/apps/core/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/core/utils/jalali_date.py b/apps/core/utils/jalali_date.py new file mode 100644 index 0000000..6c7fd93 --- /dev/null +++ b/apps/core/utils/jalali_date.py @@ -0,0 +1,51 @@ +from django import forms +from django.conf import settings +from django.templatetags.static import static +from django.contrib.admin.widgets import AdminDateWidget +from django.forms.fields import DateField, SplitDateTimeField, TimeField, DateTimeField +from django.utils.encoding import force_str +from datetime import date as datetime_date, datetime as datetime_datetime +from jdatetime import GregorianToJalali, datetime as jalali_datetime +import jdatetime + +class JalaliDateField(DateField): + def __init__(self, *, input_formats=None, **kwargs): + super().__init__(**kwargs) + self.input_formats.insert(0, settings.JALALI_DATE_DEFAULTS['Strftime']['date']) + + def prepare_value(self, value): + if isinstance(value, datetime_date): + date_obj = jdatetime.datetime.fromgregorian(datetime=value) + return date_obj.strftime(settings.JALALI_DATE_DEFAULTS['Strftime']['date']) + + return value + + def strptime(self, value, format): + return jalali_datetime.strptime(force_str(value), format).togregorian().date() + + +class CustomSelectWidget(forms.widgets.Select): + option_template_name = 'widgets/select_option.html' + + +class AdminJalaliDateWidget(AdminDateWidget): + template_name = "jalali_date/widgets/date.html" + + # @property + # def media(self): + # js = settings.JALALI_DATE_DEFAULTS['Static']['js'] + # css = settings.JALALI_DATE_DEFAULTS['Static']['css'] + # return forms.Media(js=[static(path) for path in js], css=css) + + def __init__(self, attrs=None, format=None): + final_attrs = {'class': 'jalali_date-date', 'size': '10'} + if attrs is not None: + final_attrs.update(attrs) + super(AdminJalaliDateWidget, self).__init__(attrs=final_attrs, format=format) + + def render(self, name, value, attrs=None, renderer=None): + """Render the widget as an HTML string.""" + context = self.get_context(name, value, attrs) + return self._render(self.template_name, context, renderer) + + diff --git a/apps/core/views.py b/apps/core/views.py new file mode 100644 index 0000000..a3b2197 --- /dev/null +++ b/apps/core/views.py @@ -0,0 +1,10 @@ +from django.contrib.auth.decorators import login_required +from django.shortcuts import render +from django.utils.decorators import method_decorator +from django.views.generic import TemplateView + +# Create your views here. +# @method_decorator(login_required, name='dispatch') +class HomeView(TemplateView): + template_name = 'core/home.html' + diff --git a/templates/base.html b/templates/base.html index f57d078..ee9189a 100644 --- a/templates/base.html +++ b/templates/base.html @@ -37,9 +37,6 @@