class SocialLinksForm(forms.Form):
    HELP_URLS = 'Use a full web address (URL) including http:// or https://'

    facebook_url = forms.URLField(
        label='URL for your Facebook company page (optional):',
        help_text=HELP_URLS,
        max_length=255,
        required=False,
        validators=[
            directory_validators.company.case_study_social_link_facebook
        ],
    )
    twitter_url = forms.URLField(
        label='URL for your Twitter company profile (optional):',
        help_text=HELP_URLS,
        max_length=255,
        required=False,
        validators=[
            directory_validators.company.case_study_social_link_twitter
        ],
    )
    linkedin_url = forms.URLField(
        label='URL for your LinkedIn company profile (optional):',
        help_text=HELP_URLS,
        max_length=255,
        required=False,
        validators=[
            directory_validators.company.case_study_social_link_linkedin
        ],
    )
class CompaniesHouseBusinessDetailsForm(forms.Form):
    name = forms.CharField(label='Trading name')
    number = forms.CharField(disabled=True, )
    date_of_creation = forms.DateField(
        label='Incorporated on',
        input_formats=['%d %B %Y'],
        disabled=True,
        required=False,
    )
    address = forms.CharField(
        disabled=True,
        required=False,
    )
    website = forms.URLField(
        label='Business URL (optional)',
        help_text='The website address must start with http:// or https://',
        required=False,
    )
    employees = forms.ChoiceField(
        choices=EMPLOYEES_CHOICES,
        label='How many employees are in your business?',
    )
    sectors = forms.ChoiceField(
        label='What industry is your business in?',
        choices=INDUSTRY_CHOICES,
    )

    def clean_sectors(self):
        return [self.cleaned_data['sectors']]

    def clean(self):
        super().clean()
        self.cleaned_data.pop('clean_number', None)
        self.cleaned_data.pop('date_of_creation', None)
class CaseStudyBasicInfoForm(forms.Form):
    title = forms.CharField(
        label='Title of your case study or project',
        max_length=60,
        validators=[directory_validators.company.no_html],
    )
    short_summary = forms.CharField(
        label='Summary of your case study or project',
        help_text=(
            'Summarise your case study in 200 characters or fewer. This will'
            ' appear on your main business profile page.'),
        max_length=200,
        validators=[
            validators.does_not_contain_email,
            directory_validators.company.no_html,
        ],
        widget=Textarea,
    )
    description = forms.CharField(
        label='Describe your case study or project',
        help_text=('Describe your project or case study in greater detail. '
                   'You have up to 1,000 characters to use.'),
        max_length=1000,
        validators=[
            validators.does_not_contain_email,
            directory_validators.company.no_html,
        ],
        widget=Textarea,
    )
    sector = forms.ChoiceField(
        label='Industry most relevant to your case study or project',
        choices=INDUSTRY_CHOICES)
    website = forms.URLField(
        label='The web address for your case study or project (optional)',
        help_text='Enter a full URL including http:// or https://',
        max_length=255,
        required=False,
    )
    keywords = forms.CharField(
        label=('Enter up to 10 keywords that describe your case '
               'study or project. Keywords should be separated by '
               'commas.'),
        help_text=('These keywords will help potential overseas buyers '
                   'find your case study.'),
        max_length=1000,
        widget=Textarea,
        validators=[
            directory_validators.company.keywords_word_limit,
            directory_validators.company.keywords_special_characters,
            directory_validators.company.no_html,
        ])
class NonCompaniesHouseSearch(forms.Form):

    MESSAGE_INVALID_ADDRESS = 'Address should be at least two lines.'
    COMPANY_TYPES = [
        ('', 'Please select'),
    ] + [(value, label) for value, label in choices.COMPANY_TYPES
         if value != 'COMPANIES_HOUSE']

    company_type = forms.ChoiceField(label='Business category',
                                     choices=COMPANY_TYPES)
    company_name = forms.CharField(label='Business name')
    postal_code = forms.CharField(
        label='Business postcode',
        widget=PostcodeInput,
        required=False,
    )
    address = forms.CharField(
        help_text='Type your business address',
        widget=Textarea(attrs={'rows': 4}),
        required=False,
    )
    sectors = forms.ChoiceField(
        label='What industry is your business in?',
        choices=INDUSTRY_CHOICES,
    )
    website = forms.URLField(
        label='What\'s your business web address (optional)',
        help_text='The website address must start with http:// or https://',
        required=False,
    )

    def clean_sectors(self):
        return [self.cleaned_data['sectors']]

    def clean_address(self):
        value = self.cleaned_data['address'].strip().replace(', ', '\n')
        parts = value.split('\n')

        postal_code = self.cleaned_data.get('postal_code', '')
        if value.count('\n') == 0:
            raise ValidationError(self.MESSAGE_INVALID_ADDRESS)
        if postal_code not in value:
            value = f'{value}\n{postal_code}'
        self.cleaned_data['address_line_1'] = parts[0].strip()
        self.cleaned_data['address_line_2'] = parts[1].strip()
        return value
Exemple #5
0
class TextBoxForm(PrefixIdMixin, forms.Form):
    text_field1 = forms.CharField(label='Q1: Simple text field',
                                  help_text='Some help text')
    url_field = forms.URLField(label='Q2: URL field',
                               help_text='Some help text')
    email_field = forms.EmailField(
        label='Q3: Email field',
        help_text='Some email field help text',
    )
    choice_field = forms.ChoiceField(label='Q4: select field',
                                     help_text='Some help text',
                                     choices=[
                                         ('red', 'Red'),
                                         ('green', 'Green'),
                                         ('blue', 'Blue'),
                                     ])
    text_field2 = forms.CharField(
        label='Q5: Custom css class on container',
        help_text='Some help text',
        container_css_classes='border-purple border-thin padding-30',
    )
class NonCompaniesHouseBusinessDetailsForm(forms.Form):
    name = forms.CharField(label='Trading name')
    address_line_1 = forms.CharField(required=False, )
    address_line_2 = forms.CharField(required=False, )
    locality = forms.CharField(required=False, )
    postal_code = forms.CharField(required=False, )

    website_address = forms.URLField(
        label='Business URL (optional)',
        help_text='The website address must start with http:// or https://',
        required=False,
    )
    employees = forms.ChoiceField(
        choices=EMPLOYEES_CHOICES,
        label='How many employees are in your business?',
    )
    sectors = forms.ChoiceField(
        label='Which industry is your business in?',
        choices=INDUSTRY_CHOICES,
    )

    def clean_sectors(self):
        return [self.cleaned_data['sectors']]
class NonCompaniesHouseSearch(CleanAddressMixin, forms.Form):

    MESSAGE_INVALID_ADDRESS = 'Address should be at least two lines.'
    COMPANY_TYPES = [('', 'Please select'), ] + [
        (value, label) for value, label in choices.COMPANY_TYPES if value != 'COMPANIES_HOUSE'
    ]

    company_type = forms.ChoiceField(
        label='Business category',
        choices=COMPANY_TYPES
    )
    company_name = forms.CharField(
        label='Business name'
    )
    postal_code = forms.CharField(
        label='Business postcode',
        widget=PostcodeInput(attrs={'id': 'id_postal_code'}),  # template js relies on this ID
        required=False,
    )
    address = forms.CharField(
        help_text='Type your business address',
        widget=Textarea(attrs={'rows': 6, 'id': 'id_address'}),  # template js relies on this ID
        required=False,
    )
    sectors = forms.ChoiceField(
        label='Which industry is your business in?',
        choices=INDUSTRY_CHOICES,
    )
    website = forms.URLField(
        label='What\'s your business web address (optional)',
        help_text='The website address must start with http:// or https://',
        required=False,
    )

    def clean_sectors(self):
        return [self.cleaned_data['sectors']]
class WebsiteForm(forms.Form):
    website = forms.URLField(
        label='Business URL',
        help_text='Enter a full URL including http:// or https://',
        max_length=255,
    )
class CompaniesHouseBusinessDetails(forms.Form):
    company_name = forms.CharField(label='Registered company name', )
    company_number = forms.CharField(
        disabled=True,
        required=False,
        container_css_classes='border-active-blue read-only-input-container')
    sic = forms.CharField(
        label='Nature of business',
        disabled=True,
        required=False,
        container_css_classes='border-active-blue read-only-input-container')
    date_of_creation = forms.DateField(
        label='Incorporated on',
        input_formats=['%d %B %Y'],
        disabled=True,
        required=False,
        container_css_classes='border-active-blue read-only-input-container')
    postal_code = forms.CharField(
        disabled=True,
        required=False,
        container_css_classes='hidden-input-container',
    )
    address = forms.CharField(
        disabled=True,
        required=False,
        container_css_classes='border-active-blue read-only-input-container',
        widget=Textarea(attrs={'rows': 3}),
    )
    sectors = forms.ChoiceField(
        label='What industry is your company in?',
        choices=INDUSTRY_CHOICES,
    )
    website = forms.URLField(
        label='What\'s your business web address (optional)',
        help_text='The website address must start with http:// or https://',
        required=False,
    )

    def __init__(self,
                 initial,
                 company_data=None,
                 is_enrolled=False,
                 *args,
                 **kwargs):
        super().__init__(initial=initial, *args, **kwargs)
        if company_data:
            self.set_form_initial(company_data)
        if is_enrolled:
            self.delete_already_enrolled_fields()
        # force the form to use the initial value rather than the value
        # the user submitted in previous sessions
        # on GET the data structure is a MultiValueDict. on POST the data
        # structure is a QueryDict
        if self.data and not isinstance(self.data, QueryDict):
            self.initial_to_data('company_name')
            if not self.data.get('postal_code'):
                self.initial_to_data('postal_code')

    def delete_already_enrolled_fields(self):
        del self.fields['sectors']
        del self.fields['website']

    def set_form_initial(self, company_profile):
        company = helpers.CompanyParser(company_profile)
        self.initial['company_name'] = company.name
        self.initial['company_number'] = company.number
        self.initial['sic'] = company.nature_of_business
        self.initial['date_of_creation'] = company.date_of_creation
        self.initial['address'] = company.address
        self.initial['postal_code'] = company.postcode

    def initial_to_data(self, field_name):
        self.data.setlist(self.add_prefix(field_name),
                          [self.initial[field_name]])

    def clean_date_of_creation(self):
        return self.cleaned_data['date_of_creation'].isoformat()

    def clean_address(self):
        address_parts = self.cleaned_data['address'].split(',')
        for i, address_part in enumerate(address_parts, start=1):
            field_name = f'address_line_{i}'
            self.cleaned_data[field_name] = address_part.strip()
        return self.cleaned_data['address']

    def clean_sectors(self):
        return [self.cleaned_data['sectors']]