Exemplo n.º 1
0
    def form_valid_bridge(self, form, field, model, related_field,
                          error_message):
        """
        call from form_valid.
        @form: it is form of form_valid (type: form)
        @field: name of the form field referring to the brigde (type: string)
        @model: form's model (type class)
        @related_field: name of the related_name of the brigde (type: string)
        @error_message: list of message errors (type list)
            two items, example:
            ["The selected entry is already a storage, select another entry!",
            "The selected entry is not available anymore, please, try again!"]
        """
        # get instance of selected external object
        external = form.cleaned_data[field]
        related_object = get_external_model(model).objects.filter(
            pk=external.pk).first()
        if related_object:
            # form valid
            try:
                with transaction.atomic():
                    result = super(GenCreateBridge, self).form_valid(form)
                    if get_external_model(model).objects.filter(
                            **{
                                "pk": external.pk,
                                "{}__isnull".format(related_field): False
                            }).exists():
                        errors = form._errors.setdefault(field, ErrorList())
                        errors.append(error_message[0])
                        raise CodenerixException()
                    else:
                        setattr(related_object, related_field, form.instance)
                        related_object.save()
                        if hasattr(self.object,
                                   'CDNX_refresh_permissions_CDNX'):
                            self.object.CDNX_refresh_permissions_CDNX()
                # Return the object already saved properly
                answer = HttpResponseRedirect(self.get_success_url())
            except CodenerixException:
                answer = super(GenCreateBridge, self).form_invalid(form)
            except IOError as e:
                errors = form._errors.setdefault("codenerix_external_field",
                                                 ErrorList())
                errors.append(e)
                answer = super(GenCreateBridge, self).form_invalid(form)
        else:
            errors = form._errors.setdefault(field, ErrorList())
            errors.append(error_message[1])
            answer = super(GenCreateBridge, self).form_invalid(form)

        # Return
        return answer
Exemplo n.º 2
0
class StorageContactForm(GenModelForm):
    codenerix_external_field = forms.ModelChoiceField(
        label=StorageContact.foreignkey_external()['label'],
        queryset=get_external_model(StorageContact).objects.all())

    class Meta:
        model = StorageContact
        exclude = ['storage']
        autofill = {
            'codenerix_external_field':
            ['select', 3,
             StorageContact.foreignkey_external()['related']],
        }

    def __groups__(self):
        g = [(
            _('Details'),
            12,
            ['codenerix_external_field', 6],
        )]
        return g

    @staticmethod
    def __groups_details__():
        g = [(
            _('Details'),
            12,
            ['external_contact', 6],
        )]
        return g
Exemplo n.º 3
0
class CustomerForm(GenModelForm):
    codenerix_external_field = forms.ModelChoiceField(
        label=Customer.foreignkey_external()['label'],
        queryset=get_external_model(Customer).objects.all())

    class Meta:
        model = Customer
        exclude = [
            'balance',
            'default_customer',
        ]
        autofill = {
            'codenerix_external_field':
            ['select', 3,
             Customer.foreignkey_external()['related']],
        }

    def __groups__(self):
        g = [(
            _('Details'),
            12,
            ['codenerix_external_field', 8],
            ['billing_series', 2],
            ['currency', 2],
            ['credit', 3],
            ['final_balance', 3],
            ['type_tax', 3],
            ['apply_equivalence_surcharge', 3],
        )]
        return g

    @staticmethod
    def __groups_details__():
        g = [(
            _('Details'),
            12,
            ['codenerix_external_field', 6],
            ['credit', 6],
            ['currency', 6],
            ['billing_series', 6],
            ['final_balance', 6],
            ['apply_equivalence_surcharge', 3],
            ['type_tax', 3],
        )]
        return g

    @staticmethod
    def __groups_details_profile__():
        g = [(
            _('Details'),
            12,
            ['billing_series', 6],
            ['credit', 6],
            ['currency', 6],
            ['final_balance', 6],
            ['apply_equivalence_surcharge', 3],
            ['type_tax', 3],
        )]
        return g
Exemplo n.º 4
0
class POSOperatorForm(GenModelForm):
    codenerix_external_field = forms.ModelChoiceField(
        label=POSOperator.foreignkey_external()['label'],
        queryset=get_external_model(POSOperator).objects.all())
    pos = forms.ModelMultipleChoiceField(
        queryset=POS.objects.all().order_by('name'),
        label=_('POS it can use'),
        required=False,
        widget=MultiStaticSelect(attrs={
            'manytomany': True,
        }))

    password1 = forms.CharField(label=_("Pin for vending"),
                                min_length=4,
                                widget=forms.PasswordInput,
                                required=False)
    password2 = forms.CharField(label=_("Confirm pin"),
                                min_length=4,
                                widget=forms.PasswordInput,
                                required=False)

    class Meta:
        model = POSOperator
        exclude = []
        autofill = {
            'codenerix_external_field':
            ['select', 3,
             POSOperator.foreignkey_external()['related']],
        }

    def __groups__(self):
        return [(
            _('Details'),
            12,
            ['codenerix_external_field', 6],
            ['pos', 4],
            ['enable', 2],
            ['password1', 6],
            ['password2', 6],
        )]

    @staticmethod
    def __groups_details__():
        return [(
            _('Details'),
            12,
            ['codenerix_external_field', 6],
            ['pos', 4],
            ['enable', 2],
        )]

    def clean(self):
        cleaned_data = super(POSOperatorForm, self).clean()

        if cleaned_data.get('password1') != cleaned_data.get('password2'):
            del cleaned_data['password1']
            del cleaned_data['password2']
            raise forms.ValidationError(_("Passwords do not match"))
class ProviderForm(GenModelForm):
    codenerix_external_field = forms.ModelChoiceField(
        label=Provider.foreignkey_external()['label'],
        queryset=get_external_model(Provider).objects.all())
    categories = forms.ModelMultipleChoiceField(
        queryset=Category.objects.all(),
        label=_('Categories'),
        required=False,
        widget=MultiStaticSelect(attrs={'manytomany': True}))

    class Meta:
        model = Provider
        exclude = []
        autofill = {
            'codenerix_external_field':
            ['select', 3,
             Provider.foreignkey_external()['related']],
        }

    def __groups__(self):
        g = [(
            _('Details'),
            12,
            ['codenerix_external_field', 4],
            ['balance', 4],
            ['billing_series', 4],
            ['currency', 4],
            ['type_tax', 4],
            ['shipping_tax', 4],
            ['finance_surcharge', 4],
            ['credit', 4],
            ['payment_methods', 4],
            ['delivery_time', 4],
            ['categories', 8],
        )]
        return g

    @staticmethod
    def __groups_details__():
        g = [(
            _('Details'),
            12,
            ['codenerix_external_field', 6],
            ['balance', 6],
            ['currency', 6],
            ['billing_series', 6],
            ['type_tax', 6],
            ['shipping_tax', 6],
            ['finance_surcharge', 6],
            ['credit', 6],
            ['payment_methods', 6],
            ['delivery_time', 6],
        )]
        return g
Exemplo n.º 6
0
    def form_valid_bridge(self, form, field, model, related_field,
                          error_message):
        """
        call from form_valid.
        @form: it is form of form_valid (type: form)
        @field: name of the form field referring to the brigde (type: string)
        @model: form's model (type class)
        @related_field: name of the related_name of the brigde (type: string)
        @error_message: list of message errors (type list)
            one item, example:
            ["The selected entry is not available anymore, please, try again!", ]
        """
        # get instance of selected external object
        external = form.cleaned_data[field]
        object_edit = model.objects.get(pk=form.instance.pk)
        if object_edit.external == external:
            answer = super(GenUpdateBridge, self).form_valid(form)
        else:
            related_object = get_external_model(model).objects.filter(
                **{
                    "pk": external.pk,
                    "{}__isnull".format(related_field): False
                }).exclude(**{
                    "{}".format(related_field): form.instance,
                }).first()
            if not related_object:
                # form valid
                try:
                    with transaction.atomic():
                        result = super(GenUpdateBridge, self).form_valid(form)
                        field = object_edit.external
                        setattr(field, related_field, None)
                        field.save()
                        setattr(external, related_field, form.instance)
                        external.save()
                    # Return success url
                    answer = HttpResponseRedirect(self.get_success_url())
                except CodenerixException:
                    answer = super(GenUpdateBridge, self).form_invalid(form)
            else:
                errors = form._errors.setdefault(field, ErrorList())
                errors.append(error_message[0])
                answer = super(GenUpdateBridge, self).form_invalid(form)

        # Return result
        return answer