class PriceForm(forms.Form): amount = forms.DecimalField( __("Amount"), validators=[ forms.validators.InputRequired( __("Please specify an price amount")), forms.validators.NumberRange(min=0), ], ) currency = forms.SelectField(__("Currency"), choices=[('INR', 'INR')], default='INR') start_at = forms.DateTimeField( __("Start date & time"), validators=[ forms.validators.DataRequired( __("Please specify a start date & time")) ], naive=False, ) end_at = forms.DateTimeField( __("End date & time"), validators=[ forms.validators.DataRequired( __("Please specify an end date & time")), forms.validators.GreaterThan( 'start_at', __("The price can’t end before it starts")), ], naive=False, )
class CampaignForm(forms.Form): title = forms.StringField( __("Title"), description=__("A reference name for looking up this campaign again"), validators=[ forms.validators.DataRequired(__("A title is required")), forms.validators.StripWhitespace() ]) start_at = forms.DateTimeField(__("Start at"), timezone=lambda: g.user.timezone if g.user else None) end_at = forms.DateTimeField(__("End at"), timezone=lambda: g.user.timezone if g.user else None) public = forms.BooleanField(__("This campaign is live")) position = forms.RadioField(__("Display position"), choices=CAMPAIGN_POSITION.items(), coerce=int) priority = forms.IntegerField( __("Priority"), default=0, description=__( "A larger number is higher priority when multiple campaigns are running on the " "same dates. 0 implies lowest priority")) boards = QuerySelectMultipleField( __("Boards"), widget=ListWidget(), option_widget=CheckboxInput(), query_factory=lambda: Board.query.order_by('title'), get_label='title', validators=[forms.validators.Optional()], description=__(u"Select the boards this campaign is active on")) geonameids = forms.GeonameSelectMultiField( "Locations", description=__( "This campaign will be targetted at users and jobs with matching locations" )) user_required = forms.RadioField(__("User is required"), coerce=getbool, choices=[(None, __("N/A")), (True, __("Yes")), (False, __("No"))]) flags = forms.RadioMatrixField( "Flags", coerce=getbool, fields=Campaign.flag_choices, description=__( "All selected flags must match the logged in user for the campaign to be shown" ), choices=[('None', __("N/A")), ('True', __("True")), ('False', __("False"))]) content = forms.FormField(CampaignContentForm, __("Campaign content")) def validate_geonameids(self, field): field.data = [int(x) for x in field.data if x.isdigit()] def validate_end_at(self, field): if field.data <= self.start_at.data: raise forms.ValidationError( __(u"The campaign can’t end before it starts"))
class DateTimeForm(forms.Form): naive = forms.DateTimeField("Date/time Field", naive=True, timezone='Asia/Kolkata') aware = forms.DateTimeField("Date/time Field", naive=False, timezone='Asia/Kolkata')
class CfpForm(forms.Form): instructions = forms.MarkdownField( __("Proposal guidelines"), validators=[forms.validators.DataRequired()], default='', description=__( "Set guidelines for the type of sessions" "(talks, workshops, other format) your project is accepting, " "your review process and any other info for participants" ), ) cfp_start_at = forms.DateTimeField( __("Proposal submissions open at"), validators=[forms.validators.Optional()], naive=False, ) cfp_end_at = forms.DateTimeField( __("Proposal submissions close at"), validators=[ forms.validators.Optional(), forms.validators.AllowedIf( 'cfp_start_at', message=__("This requires open time for submissions to be specified"), ), forms.validators.GreaterThanEqualTo( 'cfp_start_at', __("Submissions cannot close before they open") ), ], naive=False, )
class DiscountPriceForm(forms.Form): title = forms.StringField( __("Discount price title"), validators=[ forms.validators.DataRequired( __("Please specify a title for the discount price")), forms.validators.Length(max=250), ], filters=[forms.filters.strip()], ) amount = forms.IntegerField( __("Amount"), validators=[ forms.validators.DataRequired(__("Please specify an amount")) ], ) currency = forms.RadioField( __("Currency"), validators=[ forms.validators.DataRequired(__("Please select the currency")) ], choices=list(CURRENCY.items()), default=CURRENCY.INR, ) start_at = forms.DateTimeField( __("Price start date"), validators=[ forms.validators.DataRequired( __("Please specify a start date and time")) ], naive=False, ) end_at = forms.DateTimeField( __("Price end date"), validators=[ forms.validators.DataRequired( __("Please specify an end date and time")), forms.validators.GreaterThan( 'start_at', __("Please specify an end date for the price that is greater than the start date" ), ), ], naive=False, ) item = forms.QuerySelectField( __("Item"), get_label='title', validators=[ forms.validators.DataRequired( __("Please select a item for which the discount is to be applied" )) ], ) def set_queries(self): self.item.query = (Item.query.join(ItemCollection).filter( ItemCollection.organization == self.edit_parent.organization).options(db.load_only('id', 'title')))
class ItemForm(forms.Form): title = forms.StringField(__("Item title"), validators=[forms.validators.DataRequired(__("Please specify a title")), forms.validators.Length(max=250)], filters=[forms.filters.strip()]) description = forms.TextAreaField(__("Description"), filters=[format_description], validators=[forms.validators.DataRequired(__("Please specify a description"))]) restricted_entry = forms.BooleanField(__("Restrict entry?")) seq = forms.IntegerField(__("Sequence"), description=__("The sequence of the ticket on the listing"), validators=[forms.validators.DataRequired(__("Please specify the sequence order"))]) category = QuerySelectField(__("Category"), get_label='title', validators=[forms.validators.DataRequired(__("Please select a category"))]) quantity_total = forms.IntegerField(__("Quantity available"), validators=[forms.validators.DataRequired(__("Please specify the quantity available for sale"))]) assignee_details = forms.TextAreaField(__("Assignee details"), filters=[format_json], validators=[validate_json], default=ASSIGNEE_DETAILS_PLACEHOLDER) event_date = forms.DateField(__("Event date"), description=__("The date on which this item will be invoiced"), validators=[forms.validators.DataRequired(__("Please specify a date for the event"))]) transferable_until = forms.DateTimeField(__("Transferable until"), validators=[forms.validators.Optional()], naive=False) cancellable_until = forms.DateTimeField(__("Cancellable until"), validators=[forms.validators.Optional()], naive=False) place_supply_state_code = forms.SelectField(__("State"), description=__("State of supply"), coerce=int, default=indian_states_dict['KA']['short_code'], validators=[forms.validators.DataRequired(__("Please select a state"))]) place_supply_country_code = forms.SelectField(__("Country"), description=__("Country of supply"), default='IN', validators=[forms.validators.DataRequired(__("Please select a country"))]) def set_queries(self): self.place_supply_state_code.choices = [(0, '')] + [(state['short_code'], state['name']) for state in sorted(indian_states, key=lambda k: k['name'])] self.place_supply_country_code.choices = [('', '')] + localized_country_list() self.category.query = Category.query.join(ItemCollection).filter( Category.item_collection == self.edit_parent).options(db.load_only('id', 'title')) def validate_place_supply_state_code(self, field): if field.data <= 0: # state short codes start from 1, # and 0 means empty value as mentioned above in set_queries raise forms.ValidationError(__("Please select a state")) def validate_transferable_until(self, field): if field.data and field.data.date() > self.event_date.data: raise forms.ValidationError(__("Ticket transfer deadline cannot be after event date"))
class CampaignForm(forms.Form): title = forms.StringField( __("Title"), description=__("A reference name for looking up this campaign again"), validators=[forms.validators.DataRequired(__("A title is required"))], filters=[forms.filters.strip()], ) start_at = forms.DateTimeField(__("Start at"), naive=False) end_at = forms.DateTimeField( __("End at"), validators=[ forms.validators.GreaterThan( 'start_at', __("The campaign can’t end before it starts") ) ], naive=False, ) public = forms.BooleanField(__("This campaign is live")) position = forms.RadioField( __("Display position"), choices=list(CAMPAIGN_POSITION.items()), coerce=int ) priority = forms.IntegerField( __("Priority"), default=0, description=__( "A larger number is higher priority when multiple campaigns are running on the " "same dates. 0 implies lowest priority" ), ) boards = QuerySelectMultipleField( __("Boards"), widget=ListWidget(), option_widget=CheckboxInput(), query_factory=lambda: Board.query.order_by(Board.featured.desc(), Board.title), get_label='title_and_name', validators=[forms.validators.Optional()], description=__("Select the boards this campaign is active on"), ) geonameids = forms.GeonameSelectMultiField( "Locations", description=__( "This campaign will be targetted at users and jobs with matching locations" ), ) user_required = forms.RadioField( __("User is required"), coerce=getbool, choices=[ (None, __("N/A – Don’t target by login status")), (True, __("Yes – Show to logged in users only")), (False, __("No – Show to anonymous users only")), ], ) flags = forms.RadioMatrixField( "Flags", coerce=getbool, fields=Campaign.flag_choices, description=__( "All selected flags must match the logged in user for the campaign to be shown" ), choices=[('None', __("N/A")), ('True', __("True")), ('False', __("False"))], ) content = forms.FormField(CampaignContentForm, __("Campaign content")) def validate_geonameids(self, field): field.data = [int(x) for x in field.data if x.isdigit()]