Esempio n. 1
0
 def populate(self):
     """
     Iterate over all report_writer_populator provides to fill/update the report writer map
     """
     for report_writer_populator_func in get_provide_objects("report_writer_populator"):
         report_writer_populator_func(self)
Esempio n. 2
0
 def clean(self):
     cleaned_data = super(ModifiableFormMixin, self).clean()
     for extend_class in get_provide_objects(self.form_modifier_provide_key):
         extend_class().clean_hook(self)
     return cleaned_data
Esempio n. 3
0
 def add_extra_fields(self, form, object=None):
     for extend_class in get_provide_objects(form.form_modifier_provide_key):
         for field_key, field in extend_class().get_extra_fields(object) or []:
             form.fields[field_key] = field
Esempio n. 4
0
def get_importer_choices():
    return [(i.identifier, i.name) for i in get_provide_objects("importers")]
Esempio n. 5
0
def get_importer(identifier):
    for i in get_provide_objects("importers"):
        if i.identifier == identifier:
            return i
    return None
Esempio n. 6
0
 def populate(self):
     for func in get_provide_objects("api_populator"):
         func(router=self)
Esempio n. 7
0
def _get_extension_urlpatterns(provide_category):
    return chain(*get_provide_objects(provide_category))
Esempio n. 8
0
def get_product_context(request, product, language=None, supplier=None):   # noqa (C901)
    """
    Get product context

    Used in `E-Commerce.front.views.product:ProductDetailView`

    :return: A context dict containing everything needed to render product view
    :rtype: dict
    """
    if not language:
        language = get_language()

    shop_product = product.get_shop_instance(request.shop)
    context = {}
    context["product"] = product
    context["category"] = shop_product.primary_category
    context["orderability_errors"] = list(shop_product.get_orderability_errors(
        supplier=supplier, quantity=1, customer=request.customer, ignore_minimum=True))
    context["variation_children"] = []

    selected_variation = None
    variation_sku = request.GET.get("variation")
    if variation_sku:
        try:
            selected_variation = product.variation_children.get(sku=variation_sku)
            context["selected_variation"] = selected_variation
        except Product.DoesNotExist:
            raise Http404

    if product.mode == ProductMode.SIMPLE_VARIATION_PARENT:
        context["variation_children"] = cache_product_things(
            request,
            sorted(
                product.variation_children.language(language).visible(
                    shop=request.shop, customer=request.customer
                ),
                key=lambda p: get_string_sort_order(p.variation_name or p.name)
            )
        )
        context["orderable_variation_children"] = []
        for p in context["variation_children"]:
            try:
                if p.get_shop_instance(request.shop).is_orderable(
                        supplier=supplier, customer=request.customer, quantity=1):
                    context["orderable_variation_children"].append(p)
            except ShopProduct.DoesNotExist:
                pass

    elif product.mode == ProductMode.VARIABLE_VARIATION_PARENT:
        variation_variables = product.variation_variables.all().prefetch_related("values")
        orderable_children, is_orderable = get_orderable_variation_children(
            product, request, variation_variables, supplier
        )
        context["orderable_variation_children"] = orderable_children
        context["variation_orderable"] = is_orderable
        context["variation_variables"] = variation_variables

        if selected_variation:
            for combination in product.get_all_available_combinations():
                if combination['result_product_pk'] == selected_variation.pk:
                    values = [v.pk for v in combination['variable_to_value'].values()]
                    context['selected_variation_values'] = values
                    break
    elif product.is_container():
        children = product.get_all_package_children().translated().order_by("translations__name")
        context["package_children"] = cache_product_things(request, children)

    context["shop_product"] = shop_product
    context["attributes"] = product.attributes.filter(
        attribute__visibility_mode=AttributeVisibility.SHOW_ON_PRODUCT_PAGE)
    context["primary_image"] = shop_product.public_primary_image
    context["images"] = shop_product.public_images
    context["supplier"] = supplier
    context["order_form"] = _get_order_form(request, context, product, language)

    for provide_object in get_provide_objects("product_context_extra"):
        provider = provide_object(request, product, language)
        if provider.provides_extra_context():
            context.update(provider.extra_context)

    return context
Esempio n. 9
0
 def get_validation_errors(self):  # noqa (C901)
     from E-Commerce.apps.provides import get_provide_objects
     for order_source_validator in get_provide_objects("order_source_validator"):
         for error in order_source_validator.get_validation_errors(self):
             yield error
Esempio n. 10
0
 def clean(self):
     cleaned_data = super(ProductListForm, self).clean()
     for extend_class in get_provide_objects(FORM_MODIFIER_PROVIDER_KEY):
         extend_class().clean_hook(self)
     return cleaned_data
Esempio n. 11
0
def _get_order_form(request, context, product, language):
    for obj in get_provide_objects("front_product_order_form"):
        product_order_form = obj(request, context, product, language)
        if product_order_form.is_compatible():
            return mark_safe(product_order_form.render())
    return None
Esempio n. 12
0
def get_name_map(category_key):
    return sorted([
        (force_text(obj.identifier), force_text(obj.name)) for obj
        in get_provide_objects(category_key)
        if obj.identifier
    ], key=lambda t: t[1].lower())
Esempio n. 13
0
def get_provided_layouts():
    return get_provide_objects("xtheme_layout")
Esempio n. 14
0
 def get_form_part_classes(self):
     form_part_classes = (
         list(self.base_form_part_classes) +
         list(get_provide_objects(self.form_part_class_provide_key))
     )
     return form_part_classes
Esempio n. 15
0
 def _build_provided_toolbar_buttons(self):
     for button in get_provide_objects("admin_order_toolbar_button"):
         warnings.warn(
             "admin_order_toolbar_button provider is deprecated, use admin_order_toolbar_action_item instead",
             RemovedFromE-CommerceWarning)
         self.append(button(self.order))
Esempio n. 16
0
 def get_setting(cls, setting_key):
     for provider_cls in get_provide_objects("E-Commerce_settings_provider"):
         provider = provider_cls()
         if provider.offers(setting_key):
             return provider.get_setting_value(setting_key)
     return getattr(settings, setting_key)
Esempio n. 17
0
def extend_main_menu(menu):
    for menu_updater in get_provide_objects("admin_main_menu_updater"):
        menu = menu_updater(menu).update()
    return menu
Esempio n. 18
0
def discover():
    for obj in get_provide_objects("admin_module"):
        register(obj)
Esempio n. 19
0
def get_settings(request):
    admin_settings = {}
    for admin_browser_config_provider in get_provide_objects("admin_browser_config_provider"):
        admin_settings.update(admin_browser_config_provider.get_gettings(request))
    return admin_settings
Esempio n. 20
0
def get_report_classes(request=None, provides_key="reports"):
    items = {}
    for cls in list(get_provide_objects(provides_key)):
        if not (request and not cls.is_available(request)):
            items[cls.get_name()] = cls
    return OrderedDict(sorted(items.items(), key=lambda t: t[1].title))