from django import forms from django.utils.translation import get_language from django.urls import reverse, reverse_lazy class AddClassMixin: """ Mixin for adding classes to a model. """ def add_class_to_fields(self): """ Adds the class to the fields of the model. :return: class names form-control or form-select """ for field_name, field in self.fields.items(): if isinstance(field.widget, forms.Select): existing_classes = field.widget.attrs.get('class', '') field.widget.attrs['class'] = f"{existing_classes} form-select form-select-sm".strip() else: existing_classes = field.widget.attrs.get('class', '') field.widget.attrs['class'] = f"{existing_classes} form-control form-control-sm".strip() class LocalizedNameMixin: """ Mixin to provide a reusable get_localized_name method. """ def get_local_name(self): """ Returns the localized name based on the current language. """ if get_language() == 'ar': return getattr(self, 'arabic_name', None) return getattr(self, 'name', None) # class AddDealerInstanceMixin: # def form_valid(self, form): # if form.is_valid(): # form.instance.dealer = self.request.user.dealer.get_root_dealer # form.save() # return super().form_valid(form) # else: # return form.errors class BaseDateNavigationUrlMixIn: BASE_DATE_URL_KWARGS = ( 'entity_slug', 'unit_slug', 'ledger_pk', 'account_pk', 'coa_slug' ) def get_context_data(self, **kwargs): context = super(BaseDateNavigationUrlMixIn, self).get_context_data(**kwargs) self.get_base_date_nav_url(context) return context def get_base_date_nav_url(self, context, **kwargs): view_name = context['view'].request.resolver_match.url_name view_name_base = '-'.join(view_name.split('-')[:2]) context['date_navigation_url'] = reverse( view_name_base, kwargs={ k: v for k, v in self.kwargs.items() if k in self.BASE_DATE_URL_KWARGS })