559Labs/django-dtg-store-manager

View on GitHub
src/business/wizards/bzProductCreate.py

Summary

Maintainability
A
0 mins
Test Coverage
from __future__ import unicode_literals
from django import forms
from crispy_forms.helper import *
from crispy_forms.layout import *
from crispy_forms.bootstrap import *
from django.contrib.auth import get_user_model
from business.models import *
from business.forms import *
from crispy_unforms.layout import *
from formtools.wizard.views import SessionWizardView

from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponse
from django.shortcuts import redirect


class bzProductFormWizard_step1(businessCommonForm):
    """
    bzProductFormWizard. Step 1.
    Collects the name, code (SKU base), design and Vendor Product from the user.
    """
    form_layout = Layout(
        Div(
            HTML("""<h4>Step 1</h4>
                <p>Lorem.</p>"""),
            css_class="col-md-4"
        ),
        Div(
            Fieldset("",
                     "code",
                     "name"),
            css_class="col-md-3"
        ),
        Div(
            Fieldset("", "bzDesign", "pfProduct"),
            css_class="col-md-4"
        ),
    )

    class Meta:
        model = bzProduct
        fields = ['code', 'name', 'bzDesign', 'pfProduct', ]


class bzProductFormWizard_step2(businessCommonForm):
    """
    bzProductFormWizard. Step 1.
    Assign colors and sizes
    """
    form_layout = Layout(
        Div(
            HTML("""<h4>Step 2: Variant Matrix</h4>
                <p>You are creating a {{ wizard.form.pfProduct }}. Now, choose the combination of colors and sizes that you'd like to offer for this product.</p>"""),
            css_class="col-md-4"
        ),
        Div(
            Field('colors', css_class='chosen',),
            css_class="col-md-4"
        ),
        Div(
            Field('sizes', css_class='chosen',),
            css_class="col-md-4"
        ),
    )

    class Meta:
        model = bzProduct
        fields = ['colors', 'sizes']


class bzProductFormWizard_step3(businessCommonForm):
    """
    bzProductFormWizard. Step 3.
    Confirms bzRenderings & Publish
    """
    form_layout = Layout(
        HTML("Step 3")
    )

    class Meta:
        model = bzProduct
        fields = []


class bzProductFormWizard(SessionWizardView):
    form_list = [
        bzProductFormWizard_step1,
        bzProductFormWizard_step2,
        bzProductFormWizard_step3
    ]
    template_name = "business/object_form.html"

    def get_context_data(self, **kwargs):
        context = super(bzProductFormWizard,
                        self).get_context_data(**kwargs)
        context['mode'] = "create"
        context['active_app'] = "product"
        context['active_apptitle'] = "Product Catalog"
        context['object_name'] = "Product"
        context['object_icon'] = "sunglasses"
        context['action_list_label'] = "Back to List"
        context['wizardstepcount'] = range(1, self.steps.count + 1)
        context['action_list'] = reverse_lazy('business:app_product_home')
        # if self.steps.step1 == 1:
        #     self.fields['sizes'] =
        #                 self.fields['employee'].queryset = Employee.objects.filter(project_id=self.instance.project_id)
        #
        if self.steps.count > self.steps.step1:
            context['action_list_save_label'] = "Next"

        return context

    def get_form_initial(self, step):
        initial = {}
        if step == '1':  # (Step 2 - zero based)
            # pfCP = self.storage.request['0-pfProduct']
            data = self.storage.get_step_data('0')
            pfCP = data.get('0-pfProduct', "")
            if pfCP:
                obj = pfCatalogProduct.objects.get(id=pfCP)
            initial['colors'] = pfCatalogProduct.get_avail_colors(obj)
            initial['sizes'] = pfCatalogProduct.get_avail_sizes(obj)
        return self.initial_dict.get(step, initial)

    def process_step(self, form):
        if self.steps.step1 == 1:
            pass
            # if(form['pfProduct']):
            #     print("YEP")
            # print(type(form))
            # print(pfCatalogProduct.get_avail_sizes(form['pfProduct']))

        elif self.steps.step1 == 2:
            pass
        elif self.steps.step1 == 3:
            pass

        return self.get_form_step_data(form)

    def done(self, form_list, form_dict, **kwargs):
        # data = [form.cleaned_data for form in form_list],
        try:
            instance = bzProduct()
            for form in form_list:
                for field, value in form.cleaned_data.items():
                    setattr(instance, field, value)
            instance.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Created new product: {}.'.format(instance))
        except Exception as e:
            messages.add_message(
                request, messages.ERROR, 'An error occurred when trying to create a new product. {}'.format(e))

        return redirect('business:app_product_home')