Exemple #1
0
class NewProductForm(ListForm):

    name = TextField(label=l_('Name'), validator=Validator(required=True), css_class='form-control',
                     container_attrs={'class': 'form-group'})
    description = TextArea(label=l_('Description'), validator=Validator(required=True), css_class='form-control',
                           container_attrs={'class': 'form-group'})
    sku = TextField(label=l_('SKU'), validator=Validator(required=True), css_class='form-control',
                    container_attrs={'class': 'form-group'})
    categories_ids = MultipleSelectField(label=l_('Categories'), validator=Validator(required=True),
                                         css_class="form-control", container_attrs={'class': 'form-group'},
                                         options=Deferred(lambda: [(c._id, c.name_with_ancestors)
                                                                   for c in app_globals.shop.category.get_all()]))
    price = TextField(label=l_('Price'), validator=Number(min=0.0, not_empty=True), css_class='form-control',
                      container_attrs={'class': 'form-group'})
    rate = TextField(label=l_('Rate'), validator=IntValidator(min=0, required=True), css_class='form-control',
                     container_attrs={'class': 'form-group'})
    vat = TextField(label=l_('Vat'), validator=Number(min=0.0, not_empty=True), css_class='form-control',
                    container_attrs={'class': 'form-group'})
    qty = TextField(label=l_('Quantity'), validator=IntValidator(min=0, required=True), css_class='form-control',
                    container_attrs={'class': 'form-group'})
    weight = TextField(label=l_('Weight (g)'), validator=Number(min=0.0, not_empty=True),
                       css_class='form-control')
    photos = AjaxManagePhotos(label=l_('Photos'),
                              css_class="ajax_manage_photos",
                              action=json_lurl('/commerce/manage/product/photos/save'),
                              delete_action=json_lurl('/commerce/manage/product/photos/remove'))

    submit = SubmitButton(value=l_('Create'), css_class='btn btn-default')
Exemple #2
0
    class child(FormLayout):
        image_small_id = HiddenField()
        image_big_id = HiddenField()

        name = TextField(label=l_('Name'),
                         css_class='form-control',
                         validator=Required)

        description = TextArea(label=l_('Description'),
                               rows=10,
                               css_class='form-control',
                               validator=Required)

        image_small = FileField(label=pluggable_config.get(
            'image1_label', l_('Small Image')),
                                css_class='form-control',
                                attrs=dict(accept='image/*'))
        image_big = FileField(label=pluggable_config.get(
            'image2_label', l_('Big Image')),
                              css_class='form-control',
                              attrs=dict(accept='image/*'))
        parent_id = SingleSelectField(
            css_class='form-control',
            options=Deferred(lambda: [(c._id, c.name) for c in model.provider.
                                      query(model.Category, filters={})[1]]))
Exemple #3
0
        class defaultCrudRestController(EasyCrudRestController):
            response_type = 'text/html'
            remember_values = ['file']

            _get_current_user = lambda: instance_primary_key(request.identity[
                'user'])

            __form_options__ = {
                '__hide_fields__': ['author'],
                '__omit_fields__': ['uid', '_id', 'updated_at', 'created_at'],
                '__field_widget_args__':
                addopts(author={'value': Deferred(_get_current_user)},
                        file={'required': True})
            }

            __form_edit_options__ = {
                '__field_widget_args__':
                addopts(**{'file': {
                    'required': False
                }})
            }

            __table_options__ = {
                '__omit_fields__': ['_id', 'uid', 'author_id', 'created_at'],
                '__xml_fields__': ['file'],
                'file':
                lambda filler, o: Markup('<a href="%s">%s</a>' %
                                         (o.url, o.url))
            }
Exemple #4
0
class NewCategoryForm(ListForm):
    name = TextField(label=l_('Name'), validator=Validator(required=True), css_class='form-control',
                     container_attrs={'class': 'form-group'})
    parent_id = SingleSelectField(label=l_('Parent'),
                                  css_class="form-control", container_attrs={'class': 'form-group'},
                                  options=Deferred(lambda: [(c._id, c.name[tg.config.lang])
                                                            for c in app_globals.shop.category.get_all()]))
    submit = SubmitButton(value=l_('Create'), css_class='btn btn-default')
Exemple #5
0
 class NewCalendarForm(TableForm):
     name = TextField(label=l_("Calendar Name"), validator=Required)
     events_type = SingleSelectField(
         label=l_('Events Type'),
         prompt_text=None,
         validator=Required,
         options=Deferred(
             lambda:
             [e.name for e in config['_calendarevents']['event_types']]))
Exemple #6
0
    class child(KajikiBootstrapFormLayout):
        permission_name = TextField(label=l_('Name'),
                                    css_class='form-control',
                                    validator=UnicodeString(not_empty=True))

        description = TextArea(label=l_('Description'),
                               rows=10,
                               css_class='form-control',
                               validator=UnicodeString(not_empty=True))

        groups = MultipleSelectField(label=l_('Groups'),
                                     css_class="form-control",
                                     options=Deferred(h.query_groups))
Exemple #7
0
    def _do_get_field_widget_args(self, field_name, field):
        # toscawidgets does not like ids that have '.' in them.  This does not
        # work for databases with schemas.
        norm_field_name = field_name.replace('$', '-').replace('.', '_')
        args = {}

        #this is sort of a hack around TW evaluating _some_ params that are classes.
        entity = field
        if inspect.isclass(field):
            entity = ClassViewer(field)

        if hasattr(Widget, 'req'):
            args.update({
                'id': 'sx_' + norm_field_name,
                'key': norm_field_name
            })
        else:  #pragma: no cover
            args.update({'id': norm_field_name, 'name': norm_field_name})

        args.update({
            'identity': self.__entity__.__name__ + '_' + norm_field_name,
            'entity': entity,
            'provider': self.__provider__,
            'label': name2label(field_name),
            'label_text': name2label(field_name)
        })
        field_default_value = self.__provider__.get_field_default(entity)
        if field_default_value[0]:
            if hasattr(Widget, 'req'):
                if callable(field_default_value[1]):
                    args['value'] = Deferred(field_default_value[1])
                else:
                    args['value'] = field_default_value[1]
            else:  #pragma: no cover
                args['default'] = field_default_value[1]

        if field_name in self.__field_attrs__:
            args['attrs'] = self.__field_attrs__[field_name]

        if hasattr(Widget, 'req'):
            # SubFields are only supported on TW2
            args.update(self.__provider__._build_subfields(self, field))

        provider_widget_args = self.__provider__.get_field_provider_specific_widget_args(
            self, field, field_name)
        if provider_widget_args:
            args.update(provider_widget_args)

        if field_name in self.__field_widget_args__:
            args.update(self.__field_widget_args__[field_name])
        return args
Exemple #8
0
    def _do_get_field_widget_args(self, field_name, field):
        # toscawidgets does not like ids that have '.' in them.  This does not
        # work for databases with schemas.
        field_name = field_name.replace('.', '_')
        args = {}

        #this is sort of a hack around TW evaluating _some_ params that are classes.
        entity = field
        if inspect.isclass(field):
            entity = ClassViewer(field)

        if hasattr(Widget, 'req'):
            args.update({'id': 'sx_' + field_name, 'key': field_name})
        else:  #pragma: no cover
            args.update({'id': field_name})

        args.update({
            'name': field_name,
            'identity': self.__entity__.__name__ + '_' + field_name,
            'entity': entity,
            'provider': self.__provider__,
            'label': name2label(field_name),
            'label_text': name2label(field_name)
        })
        field_default_value = self.__provider__.get_field_default(entity)
        if field_default_value[0]:
            if hasattr(Widget, 'req'):
                if callable(field_default_value[1]):
                    args['value'] = Deferred(field_default_value[1])
                else:
                    args['value'] = field_default_value[1]
            else:  #pragma: no cover
                args['default'] = field_default_value[1]

        #enum support works completely differently.
        #if isinstance(entity, Column) and isinstance(entity.type, Enum):
        #    args['options'] = entity.type.enums

        if field_name in self.__field_attrs__:
            args['attrs'] = self.__field_attrs__[field_name]

        provider_widget_args = self.__provider__.get_field_provider_specific_widget_args(
            self.__entity__, field, field_name)
        if provider_widget_args:
            args.update(provider_widget_args)

        if field_name in self.__field_widget_args__:
            args.update(self.__field_widget_args__[field_name])
        return args
Exemple #9
0
        class defaultCrudRestController(EasyCrudRestController):
            response_type = 'text/html'
            crud_resources = [
                CSSSource(location='headbottom',
                          src='''
        .crud-sidebar .active {
            font-weight: bold;
            border-left: 3px solid #eee;
        }

        @media (max-width: 991px) {
            .pull-sm-right {
                float: right;
            }
        }

        @media (min-width: 992px) {
            .pull-md-right {
                float: right;
            }
        }
        ''')
            ]

            # Helpers to retrieve form data
            _get_current_user = lambda: instance_primary_key(request.identity[
                'user'])
            _get_templates = lambda: config['_flatpages']['templates']
            if config.get('use_sqlalchemy', False):
                _get_permissions = lambda: [
                    ('public', 'Public'), ('not_anonymous', 'Only Registered Users')] + \
                    DBSession.query(app_model.Permission.permission_name,
                                    app_model.Permission.description).all()
            else:
                _get_permissions = lambda: [
                    ('public', 'Public'), ('not_anonymous', 'Only Registered Users')] + \
                    [(p.permission_name, p.description)
                     for p in app_model.Permission.query.find().all()]

            __form_options__ = {
                '__hide_fields__': ['author', 'updated_at'],
                '__omit_fields__': ['uid', '_id', 'created_at'],
                '__field_order__':
                ['slug', 'title', 'template', 'required_permission'],
                '__field_widget_types__':
                addopts(
                    **{
                        'template': SingleSelectField,
                        'slug': TextField,
                        'title': TextField,
                        'required_permission': SingleSelectField,
                        'content': MarkitUpArea
                    }),
                '__field_widget_args__':
                addopts(
                    **{
                        'author': {
                            'value': Deferred(_get_current_user)
                        },
                        'required_permission': {
                            'prompt_text': None,
                            'options': Deferred(_get_permissions)
                        },
                        'content': {
                            'rows': 20
                        },
                        'template': {
                            'prompt_text': None,
                            'options': Deferred(_get_templates)
                        },
                    })
            }

            __table_options__ = {
                '__omit_fields__': [
                    '_id', 'uid', 'author_id', 'created_at', 'template',
                    'content'
                ],
                '__xml_fields__': ['slug'],
                'slug':
                lambda filler, o: Markup('<a href="%s">%s</a>' %
                                         (o.url, o.slug)),
                '__actions__':
                lambda self, obj: request.controller_state.controller.
                _build_actions(obj)
            }

            def _build_actions(self, obj):
                baseactions = super(self.table_filler.__class__,
                                    self.table_filler).__actions__(obj)
                if config['_flatpages']['format'] == 'rst':
                    extraactions = Markup('''
        <a href="%s/download" class="btn btn-default">
            <span class="glyphicon glyphicon-download-alt"></span>
        </a>''' % instance_primary_key(obj))
                else:
                    extraactions = ''
                return extraactions + baseactions

            @expose(content_type='application/pdf')
            def download(self, pageid):
                p = model.FlatPage.by_id(pageid) or abort(404)
                out = BytesIO()

                rst2pdf = RstToPdf()
                rst2pdf.createPdf(p.content, output=out)

                out.seek(0)
                return out.read()