class Meta: model = Production exclude = () widgets = {'so': autocomplete.ModelSelect2(url='openso-autocomplete')}
class Meta: model = Profile fields = ['image', 'organization', 'position', 'degree', 'biography', 'link', 'ORCID'] widgets = { 'organization': autocomplete.ModelSelect2(url='organization-autocomplete') }
class PartnershipFilterForm(forms.Form): # UCL ucl_entity = EntityChoiceField( label=_('faculty_entity_filter'), queryset=EntityProxy.objects.ucl_entities(), empty_label=_('ucl_entity'), required=False, widget=autocomplete.ModelSelect2( url='partnerships:autocomplete:ucl_entity_filter', attrs={ 'data-width': '100%', 'data-reset': '#id_years_entity,#id_university_offer', }, ), ) ucl_entity_with_child = forms.BooleanField( label=_('Include subordinate entities'), required=False, ) education_level = forms.ModelChoiceField( label=_('education_level_filter'), queryset=PartnershipYearEducationLevel.objects.filter( partnerships_years__isnull=False).distinct(), widget=autocomplete.ModelSelect2( attrs={ 'data-width': '100%', 'class': 'resetting', 'data-reset': '#id_university_offer', }), required=False, ) years_entity = forms.ModelChoiceField( label=_('entity_filter'), queryset=EntityProxy.objects.year_entities(), required=False, widget=autocomplete.ModelSelect2( url='partnerships:autocomplete:years_entity_filter', forward=['ucl_entity'], attrs={ 'data-width': '100%', 'class': 'resetting', 'data-reset': '#id_university_offer', }, ), ) university_offer = forms.ModelChoiceField( label=_('university_offers_filter'), queryset=( EducationGroupYear.objects.select_related('academic_year').filter( partnerships__isnull=False).distinct()), required=False, widget=autocomplete.ModelSelect2( url='partnerships:autocomplete:university_offers_filter', forward=['ucl_entity', 'education_level', 'years_entity'], attrs={'data-width': '100%'}, ), ) # Partner partner_entity = forms.ModelChoiceField( label=_('partner_entity'), queryset=EntityProxy.objects.partners_having_partnership(), empty_label=_('partner_entity'), widget=autocomplete.ModelSelect2( attrs={'data-width': '100%'}, url='partnerships:autocomplete:partner_entity_partnerships_filter', ), required=False, ) partner_type = forms.ChoiceField( label=_('partner_type'), choices=((None, '---------'), ) + ORGANIZATION_TYPE, required=False, ) erasmus_code = forms.CharField( label=_('erasmus_code'), widget=forms.TextInput(attrs={'placeholder': _('erasmus_code')}), required=False, ) use_egracons = forms.NullBooleanField( label=_('use_egracons'), widget=CustomNullBooleanSelect(), required=False, ) city = forms.ChoiceField( label=_('city'), choices=((None, _('city')), ), widget=autocomplete.Select2(attrs={'data-width': '100%'}), required=False, ) country = forms.ModelChoiceField( label=_('country'), queryset=Country.objects.order_by('name').distinct(), empty_label=_('country'), widget=autocomplete.ModelSelect2(attrs={'data-width': '100%'}), required=False, ) continent = forms.ModelChoiceField( label=_('continent'), queryset=Continent.objects.order_by('name').distinct(), empty_label=_('continent'), required=False, ) partner_tags = forms.ModelMultipleChoiceField( label=_('partner_tags'), queryset=PartnerTag.objects.of_partners_having_partnerships(), widget=autocomplete.ModelSelect2Multiple(attrs={'data-width': '100%'}), required=False, ) # Partnerships education_field = forms.ModelChoiceField( label=_('education_field'), queryset=DomainIsced.objects.filter( partnershipyear__isnull=False).distinct(), widget=autocomplete.ModelSelect2(attrs={'data-width': '100%'}), required=False, ) is_sms = forms.NullBooleanField( label=_('is_sms'), widget=CustomNullBooleanSelect(), required=False, ) is_smp = forms.NullBooleanField( label=_('is_smp'), widget=CustomNullBooleanSelect(), required=False, ) is_sta = forms.NullBooleanField( label=_('is_sta'), widget=CustomNullBooleanSelect(), required=False, ) is_stt = forms.NullBooleanField( label=_('is_stt'), widget=CustomNullBooleanSelect(), required=False, ) is_smst = forms.NullBooleanField( label=_('is_smst'), widget=CustomNullBooleanSelect(), required=False, ) partnership_type = forms.ChoiceField( label=_('partnership_type'), choices=((None, '---------'), ) + PartnershipType.choices(), required=False, ) subtype = forms.ModelChoiceField( label=_('partnership_subtype'), queryset=PartnershipSubtype.objects.filter( years__isnull=False).distinct(), widget=autocomplete.ModelSelect2( url='partnerships:autocomplete:subtype', forward=['partnership_type'], ), required=False, ) funding_type = forms.ModelChoiceField( label=_('funding_type'), queryset=FundingType.objects.filter(years__isnull=False).distinct(), widget=autocomplete.ModelSelect2( url='partnerships:autocomplete:funding_type', forward=['funding_program'], ), required=False, ) funding_program = forms.ModelChoiceField( label=_('funding_program'), queryset=FundingProgram.objects.filter( fundingtype__years__isnull=False, ).distinct(), widget=autocomplete.ModelSelect2( url='partnerships:autocomplete:funding_program', forward=['funding_source'], ), required=False, ) funding_source = forms.ModelChoiceField( label=_('funding_source'), queryset=FundingSource.objects.filter( fundingprogram__fundingtype__years__isnull=False, ).distinct(), required=False, ) supervisor = forms.ModelChoiceField( label=_('partnership_supervisor'), queryset=Person.objects.filter( Q(partnerships_supervisor__isnull=False) | Q(management_entities__isnull=False)).order_by( 'last_name').distinct(), widget=autocomplete.ModelSelect2(attrs={'data-width': '100%'}), required=False, ) tags = forms.ModelMultipleChoiceField( label=_('tags'), queryset=PartnershipTag.objects.all(), widget=autocomplete.ModelSelect2Multiple(attrs={'data-width': '100%'}), required=False, ) partnership_in = forms.ModelChoiceField( label=_('partnership_in'), help_text=_('parnership_in_help_text'), queryset=AcademicYear.objects.all(), required=False, ) partnership_ending_in = forms.ModelChoiceField( label=_('partnership_ending_in'), help_text=_('parnership_ending_in_help_text'), queryset=AcademicYear.objects.all(), required=False, ) partnership_valid_in = forms.ModelChoiceField( label=_('partnership_valid_in'), queryset=AcademicYear.objects.all(), required=False, ) partnership_not_valid_in = forms.ModelChoiceField( label=_('partnership_not_valid_in'), queryset=AcademicYear.objects.all(), required=False, ) partnership_with_no_agreements_in = forms.ModelChoiceField( label=_('partnership_with_no_agreements_in'), help_text=_('partnership_with_no_agreements_in_help_text'), queryset=AcademicYear.objects.all(), required=False, ) partnership_date_type = forms.ChoiceField( label=_('Partnerships'), choices=((None, '---------'), ) + DateFilterType.choices(), required=False, ) partnership_date_from = forms.DateField( label=_('during (all or part of) the period from'), required=False, widget=DatePickerInput( format=DATE_FORMAT, attrs={ 'class': 'datepicker', 'autocomplete': 'off' }, ), input_formats=[DATE_FORMAT], initial=now, ) partnership_date_to = forms.DateField( label=_('to'), required=False, widget=DatePickerInput( format=DATE_FORMAT, attrs={ 'class': 'datepicker', 'autocomplete': 'off' }, ), input_formats=[DATE_FORMAT], initial=now, ) comment = forms.CharField( label=_('comment'), required=False, ) ordering = forms.CharField(widget=forms.HiddenInput, required=False) is_public = forms.NullBooleanField( label=_('partnership_is_public'), widget=CustomNullBooleanSelect(), required=False, ) def __init__(self, *args, **kwargs): user = kwargs.pop('user') super().__init__(*args, **kwargs) # Cities cities = ( EntityVersionAddress.objects.filter( # We need to go around the relation for sub-entities entity_version__entity__organization__entity__partner_of__isnull =False, city__isnull=False, ).values_list('city', flat=True).order_by('city').distinct('city')) self.fields['city'].choices = ((None, _('city')), ) + tuple( (city, city) for city in cities) allowed = [ scope for scope in PartnershipType if partnership_type_allowed_for_user_scope(user, scope) ] # If we have only one scope, pre-filter with this scope if len(allowed) == 1: self.fields['partnership_type'].initial = allowed[0].name elif len(allowed) > 1 and PartnershipType.MOBILITY in allowed: self.fields[ 'partnership_type'].initial = PartnershipType.MOBILITY.name # Everyone has access to every type, except faculty managers if len(allowed) == 1 and not is_linked_to_adri_entity(user): # They have only access to mobility (their only type) self.fields['partnership_type'].disabled = True self.fields['partnership_type'].widget = forms.HiddenInput() # Init ucl_entity for faculty manager if is_faculty_manager(user): university = PartnershipEntityManager.get_person_related_entities( user.person)[0] self.fields['ucl_entity'].initial = university self.fields['ucl_entity_with_child'].initial = True def clean_ordering(self): # Django filters expects a list ordering = self.cleaned_data.get('ordering') if ordering: return [ordering] def clean(self): data = super().clean() special = data.get('partnership_date_type') date_from = data.get('partnership_date_from') date_to = data.get('partnership_date_to') if special and not date_from: self.add_error('partnership_date_from', _("required")) if date_from and date_to and date_from > date_to: self.add_error( 'partnership_date_to', _("End date must be after start date"), ) return data
class UserProfileForm(forms.Form): firstname = forms.CharField( min_length=2, widget=forms.TextInput(attrs={'placeholder': _('Firstname'), 'class': 'form-control'}) ) lastname = forms.CharField( min_length=2, widget=forms.TextInput(attrs={'placeholder': _('Lastname'), 'class': 'form-control'}) ) address_1 = forms.CharField( min_length=2, widget=forms.TextInput(attrs={'placeholder': _('address 1'), 'class': 'form-control'}) ) address_2 = forms.CharField( required=False, widget=forms.TextInput( attrs={'placeholder': _('address 2'), 'class': 'form-control'}) ) address_city = forms.ModelChoiceField( label=_('Address city:'), queryset=Loc.objects.all(), widget=autocomplete.ModelSelect2(url='autocomplete_locs', attrs={'class': 'form-control'}) ) phonenumber = forms.RegexField('^(\+4|)?(07[0-8]{1}[0-9]{1}|02[0-9]{2}|03[0-9]{2}){1}?(\s|\.|\-)?([0-9]{3}(\s|\.|\-|)){2}$', widget=forms.TextInput(attrs={'placeholder': _('phone number'), 'class': 'form-control'}) ) subscription_sms_alerts = forms.BooleanField(required=False, label='subscribe to sms alerts') subscription_newsletter = forms.BooleanField(required=False, label='subscribe to newsletter') subscription_surveys = forms.BooleanField(required=False, label='subscribe to surveys') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.layout = Layout(Row( Column('firstname', css_class='col-md-6'), Column('lastname', css_class='col-md-6'), css_class='form-group' ), Row( Column('address_1', css_class='col-md-6'), Column('address_2', css_class='col-md-6'), css_class='form-group' ), Row( Column('address_city', css_class='col-md-6'), Column('phonenumber', css_class='col-md-6'), css_class='form-group' ), Row( Column('subscription_sms_alerts', css_class='col-md-12'), css_class='form-group' ), Row( Column('subscription_newsletter', css_class='col-md-12'), css_class='form-group' ), Row( Column('subscription_surveys', css_class='col-md-12'), css_class='form-group' ), Submit('submit', _('Save')))
class Meta: model = APIv2App fields = ('__all__') widgets = { 'owner': autocomplete.ModelSelect2(url='api-v2-autocomplete') }
class DetalleDeReceta2Form(forms.ModelForm): class Meta: model = DetalleDeReceta2 fields = ('__all__') widgets = { #"subreceta":autocomplete.ModelSelect2(url='receta-autocomplete'), "cantidad": forms.TextInput( attrs={ 'style': 'text-align:right', 'size': '12', 'class': 'auto', 'data-a-sep': '.', 'data-a-dec': ',' }), } # para eliminar los popup edit y add subreceta = forms.ModelChoiceField( queryset=Receta.objects.all(), widget=autocomplete.ModelSelect2(url='receta-autocomplete'), required=True, label="RECETA") unidad_de_medida = forms.CharField( widget=forms.TextInput(attrs={'size': '9'}), required=False, label="UNIDAD DE MEDIDA") precio_unitario = forms.CharField(widget=forms.TextInput( attrs={ 'style': 'text-align:right', 'size': '12', 'class': 'auto', 'data-a-sep': '.', 'data-a-dec': ',' }), required=False, label="PRECIO UNITARIO") subtotal = forms.CharField(widget=forms.TextInput( attrs={ 'style': 'text-align:right', 'size': '12', 'class': 'auto', 'data-a-sep': '.', 'data-a-dec': ',' }), required=False, label="SUBTOTAL") def __init__(self, *args, **kwargs): super(DetalleDeReceta2Form, self).__init__(*args, **kwargs) instance = getattr(self, 'instance', None) if instance and instance.pk: self.initial[ 'unidad_de_medida'] = instance.subreceta.unidad_de_medida.abreviatura self.initial['precio_unitario'] = instance.get_precio_unitario() self.initial['subtotal'] = instance.get_subtotal() self.fields['unidad_de_medida'].widget.attrs['readonly'] = True self.fields['precio_unitario'].widget.attrs['readonly'] = True self.fields['subtotal'].widget.attrs['readonly'] = True
class Meta: model = Author fields = ('__all__') widgets = { 'curator': autocomplete.ModelSelect2(url='user-autocomplete') }
class Meta: model = ProjectParticipant widgets = { 'person': autocomplete.ModelSelect2(url='person-autocomplete'), } exclude = ('project', )
class InstitutionForm(M2MFieldFormMixin, UserKwargModelFormMixin, FormHorizontalMixin, forms.ModelForm): # TODO: Split region,voivodeship,county into forms.MultiWidget voivodeship = forms.ModelChoiceField( label=_("Voivodeship"), required=True, queryset=JST.objects.voivodeship().all(), widget=autocomplete.ModelSelect2(url='teryt:voivodeship-autocomplete') ) county = forms.ModelChoiceField( label=_("County"), required=True, queryset=JST.objects.county().all(), widget=autocomplete.ModelSelect2(url='teryt:county-autocomplete', forward=['voivodeship'], ) ) monitorings = forms.ModelMultipleChoiceField(queryset=Monitoring.objects.all(), label=_("Monitorings"), required=False, widget=autocomplete.ModelSelect2Multiple(url='monitorings:autocomplete')) def __init__(self, *args, **kwargs): if kwargs.get('instance', None): instance = kwargs.get('instance') kwargs['initial'] = kwargs.get('initial', {}) if instance.region.parent: kwargs['initial']['county'] = instance.region.parent.pk if instance.region.parent.parent: kwargs['initial']['voivodeship'] = instance.region.parent.parent.pk super(InstitutionForm, self).__init__(*args, **kwargs) self.instance.user = self.user button_label = _('Update') if self.instance.pk else _("Save") self.helper.form_class = 'form-horizontal' self.helper.layout = Layout( Fieldset( _('Identification'), 'name', 'regon', 'krs', ), Fieldset( _('Location'), 'voivodeship', 'county', 'region', ), Fieldset( _('Monitorings'), 'monitorings', ), ButtonHolder( Submit('submit', button_label, css_class='button white') ) ) if self.instance.pk: self.fields['monitorings'].initial = self.instance.monitorings.all() def save(self, *args, **kwargs): super(InstitutionForm, self).save(*args, **kwargs) self.save_m2m_field('monitorings', 'institution', 'monitoring') return self.instance class Meta: model = Institution fields = ['name', 'regon', 'krs', 'region'] widgets = { 'region': autocomplete.ModelSelect2(url='teryt:community-autocomplete', forward=['county']), }
class Meta: fields = ('__all__') widgets = { 'room_type': autocomplete.ModelSelect2(url='roomtype-autocomplete'), }
class Meta: fields = ('__all__') widgets = { 'a_location_from': autocomplete.ModelSelect2(url='location-autocomplete'), 'a_location_to': autocomplete.ModelSelect2(url='location-autocomplete'), }
class SchoolCodesCreateForm(forms.Form): school = forms.ModelChoiceField( label=_('School'), queryset=School.objects.all(), widget=autocomplete.ModelSelect2(url='school_autocomplete'))
class PostAdminForm(forms.ModelForm): desc=forms.CharField(widget=forms.Textarea,label='摘要',required=True) category=forms.ModelChoiceField( queryset=Category.objects.all(), widget=autocomplete.ModelSelect2(url='category_autocomplete'), label='分类', ) tag=forms.ModelMultipleChoiceField( queryset=Tag.objects.all(), widget=autocomplete.ModelSelect2Multiple(url='tag_autocomplete'), label='标签', ) """ # content添加富文本编辑器,不能添加图片 content=forms.CharField( widget=CKEditorWidget(), label='正文', required=True, ) """ # content添加富文本编辑器,可以添加图片 # 修改content使Markdown和CKeditor共存,所以注释掉 # content=forms.CharField( # widget=CKEditorUploadingWidget(), # label='正文', # required=True, # ) # 以下全部是配置Markdown和CKeditor共存的内容,建议直接使用一种方法CKeditor,即上方配置 content_ck=forms.CharField( widget=CKEditorUploadingWidget(), label='正文', required=False, ) content_md=forms.CharField( widget=forms.Textarea(), label='正文', required=False, ) content=forms.CharField( widget=forms.HiddenInput(), required=False, ) class Meta: model=Post fields=( 'category','tag','title','desc','status', 'is_md','content','content_ck','content_md' ) # 使Markdown和CKeditor共存 def __init__(self,instance=None,initial=None,**kwargs): initial=initial or {} if instance: if instance.is_md: initial['content_md']=instance.content else: initial['content_ck']=instance.content super(PostAdminForm, self).__init__(instance=instance,initial=initial,**kwargs) def clean(self): is_md=self.cleaned_data['is_md'] if is_md: content_field_name='content_md' else: content_field_name='content_ck' content=self.cleaned_data[content_field_name] if not content: self.add_error(content_field_name,'必填项!') return self.cleaned_data['content']=content return super(PostAdminForm, self).clean() class Media: js=('js/post_editor.js',)
class AdviceFilter(CrispyFilterMixin, django_filters.FilterSet): subject = django_filters.CharFilter(label=_("Subject"), lookup_expr="icontains") advicer = UserChoiceFilter(label=_("Advicer")) created_by = UserChoiceFilter(label=_("Created by")) created_on = django_filters.DateRangeFilter(label=_("Created on")) community = AreaFilter( label=_("Community"), widget=autocomplete.ModelSelect2(url="teryt:community-autocomplete"), ) class Meta: model = Advice fields = [ "advicer", "created_by", "created_on", "area", "issues", "person_kind", "institution_kind", "helped", "subject", ] order_by = ( ("created_on", _("Creation date")), ("modified_on", _("Modification date")), ("id", _("ID")), ("advicer", _("Advicer")), ("person_kind", _("Person kind")), ("institution_kind", _("Institution kind")), ) @property def form(self): self._form = super(CrispyFilterMixin, self).form self._form.helper = FormHelper(self._form) self._form.helper.form_method = "get" self._form.helper.form_class = "form-inline" self._form.helper.include_media = False self._form.helper.layout = Layout( Fieldset( _("Statistic data"), Div( Div("area", css_class="col-sm-12 col-md-4"), Div("issues", css_class="col-sm-12 col-md-4"), Div("person_kind", css_class="col-sm-12 col-md-4"), css_class="row", ), Div( Div("institution_kind", css_class="col-sm-12 col-md-3"), Div("helped", css_class="col-sm-12 col-md-3"), Div("community", css_class="col-sm-12 col-md-3"), css_class="row", ), ), Fieldset(_("Details"), "advicer", "created_by", "created_on", "subject"), ) self._form.helper.add_input(Submit("filter", _("Filter"))) return self._form
def __init__(self, *args, **kwargs): if kwargs.get('instance'): kwargs['initial'] = { 'occupation': ast.literal_eval(kwargs.get('instance').occupation or '[]'), 'degree': ast.literal_eval(kwargs.get('instance').degree or '[]'), 'participation': ast.literal_eval(kwargs.get('instance').participation or '[]'), 'expenses': ast.literal_eval(kwargs.get('instance').expenses or '[]'), 'opt_outs': ast.literal_eval(kwargs.get('instance').opt_outs or '[]'), 'acknowledgements': ast.literal_eval( kwargs.get('instance').acknowledgements or '[]'), } super().__init__(*args, **kwargs) self.fields['gender'] = OptionalChoiceField( label='Gender^', choices=GENDER_CHOICES, ) self.fields['skills'] = OptionalMultiChoiceField( choices=SKILLS_CHOICES, label='Do you have any of the following skills?^', help_text='Check all that apply.', ) self.fields['how_did_you_find_out'] = OptionalMultiChoiceField( choices=HOW_DID_YOU_FIND_OUT_CHOICES, label='How did you find out about OpenCon 2016?^', help_text='Check all that apply.', ) self.fields['airport'] = forms.ModelChoiceField( queryset=Airport.objects.all(), widget=autocomplete.ModelSelect2( url='application:airport-autocomplete'), label= 'Closest international airport to the city you indicated in the previous question.', help_text= 'This question helps us understand how for you would need to travel. Begin by ' 'typing the name of the city and suggestions will show up. Click the correct one. ' 'You can also search by the three-letter IATA code (for example “LHR” for London). ' 'If your airport does not show up, please type “Other Airport” and specify your ' 'airport in the comments box below. Please enter an airport regardless of how close ' 'you are located to Washington, DC, and note that U.S. regional/national airports ' 'are permitted.', ) self.fields['institution'] = forms.ModelChoiceField( queryset=Institution.objects.all(), widget=autocomplete.ModelSelect2( url='application:institution-autocomplete'), label='Primary Institution / Employer / Affiliation', help_text= 'Begin by typing the full name (no abbreviations) of the primary institution or ' 'organization where you work or go to school. A list of suggestions will show up ' 'as you type. If the correct name appears, click to select. If it does not appear, ' 'finish typing the full name and click the option to “Create” the name. You may need ' 'to scroll down to find this option.', ) self.fields['organization'] = forms.ModelChoiceField( queryset=Organization.objects.all(), widget=autocomplete.ModelSelect2( url='application:organization-autocomplete'), label= 'Other Primary Affiliation / Organization / Project (Optional)', help_text= 'If you have another primary affiliation or project, you may list it here. Similar to the ' 'question above, begin by typing the full name. If the correct name shows up automatically, ' 'click to select. If not, then finish typing and click “Create.” If you have multiple other ' 'affiliations, list only the most important one here. You may list any additional ' 'affiliations in the Comments Box at the end of the application.', required=False, )
class StuffForm(BSModalModelForm): category = forms.ModelChoiceField( widget=autocomplete.ModelSelect2( url='inventory:category_autocomplete'), label="Catégorie d'appareil", required=False, queryset=Category.objects.all(), ) device = forms.ModelChoiceField(widget=autocomplete.ModelSelect2( url='inventory:device_autocomplete', forward=['category']), label="Type d'appareil", queryset=Device.objects.all(), required=False) create_device = forms.BooleanField( label="Je ne trouve pas mon type d'appareil dans la liste ci dessus", required=False, ) brand = forms.ModelChoiceField( widget=autocomplete.ModelSelect2(url='inventory:brand_autocomplete'), label="Marque", required=False, queryset=Brand.objects.all()) model = forms.CharField( label="Designation/modèle", help_text="Si vous n'êtes pas sûr, ne remplissez pas ce champ", required=False) picture = forms.ImageField(required=False, label="Photo") create_folder = forms.BooleanField( label="Je souhaite ajouter un dossier de réparation", required=False) repair_date = forms.DateField( initial=dt.today(), label="date", widget=forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"), required=False, ) ongoing = forms.BooleanField( label="Dossier en cours", required=False, initial=True, ) observation = forms.ModelChoiceField( widget=autocomplete.ModelSelect2( url='inventory:observation_autocomplete'), help_text="Quel est (ou était) le problème ?", required=False, queryset=Observation.objects.all()) reasoning = forms.ModelChoiceField( widget=autocomplete.ModelSelect2( url='inventory:reasoning_autocomplete'), help_text="Quel en est (ou serait) la cause ?", label="Raisonnement", required=False, queryset=Reasoning.objects.all()) action = forms.ModelChoiceField( widget=autocomplete.ModelSelect2(url='inventory:action_autocomplete'), help_text="Qu'avez-vous fait ?", required=False, queryset=Action.objects.all()) status = forms.ModelChoiceField( widget=autocomplete.ModelSelect2(url='inventory:status_autocomplete'), help_text="Quel est le résultat de l'action ?", required=False, queryset=Status.objects.all()) def init_folder(self, data): self.folder = {} self.intervention = {} self.intervention['repair_date'] = data['repair_date'] if getattr(self, "event", False): self.intervention['event'] = self.event self.intervention['observation'] = data['observation'] if not getattr(self, "visitor_user", False): self.intervention['reasoning'] = data['reasoning'] self.intervention['action'] = data['action'] self.intervention['status'] = data['status'] self.folder['open_date'] = data['repair_date'] if data['ongoing']: self.folder['ongoing'] = True else: self.folder['ongoing'] = False else: self.folder['open_date'] = dt.today() self.folder['ongoing'] = True if not self.folder['open_date']: self.add_error(f'La date ne peut pas être vide') if not self.intervention['observation']: self.add_error(f'Veuillez rentrer au moins une observation.') self.create_folder = data['create_folder'] def clean_device(self): if not self.request.is_ajax(): device = self.cleaned_data['device'] if not device: device = {} device["category"] = self.cleaned_data['category'] device["brand"] = self.cleaned_data['brand'] device["model"] = self.cleaned_data['model'] if not device["category"]: self.add_error("category", "Ce champ ne peut pas être vide") device = Device.objects.create(**device) self.cleaned_data['device'] = device return self.cleaned_data['device'] def clean(self): if getattr(self, "user", False): self.cleaned_data["member_owner"] = self.user if getattr(self, "organization", False): self.cleaned_data["organization_owner"] = self.organization if self.cleaned_data["create_folder"]: self.init_folder(self.cleaned_data) def save(self, commit=True): instance = super(StuffForm, self).save(commit=commit) if self.cleaned_data["create_folder"]: self.folder['stuff'] = instance folder = RepairFolder.objects.create(**self.folder) self.intervention['folder'] = folder intervention = Intervention.objects.create(**self.intervention) def __init__(self, organization=None, user=None, visitor_user=None, event=None, *args, **kwargs): super().__init__(*args, **kwargs) if event: self.event = event if organization: self.organization = organization self.fields['place'] = forms.ModelChoiceField( widget=autocomplete.ModelSelect2(url='place_autocomplete'), label="Localisation", queryset=Place.objects.all(), help_text="Où se trouve l'objet ?", required=False) self.fields['is_visible'] = forms.BooleanField( label="Cet objet est-il visible du public ?", initial=False, help_text="par exemple s'il est en vente", required=False) if visitor_user: self.user = visitor_user self.visitor_user = visitor_user del self.fields['action'] del self.fields['is_visible'] del self.fields['reasoning'] del self.fields['status'] del self.fields['place'] if user: self.user = user del self.fields['is_visible'] del self.fields['place'] class Meta: model = Stuff fields = ( "category", "create_folder", "create_device", "brand", "model", "picture", "state", "organization_owner", "member_owner", "information", "ongoing", "observation", "action", "reasoning", "status", "place", "repair_date", "device", "is_visible", )
class Meta: model = PySaleOrderDetail fields = [ 'sale_order', 'product', 'description', 'quantity', # 'measure_unit', # 'product_tax', 'amount_untaxed', 'discount', # 'amount_total', ] labels = { 'product': 'Producto', 'description': 'Descripción', 'quantity': 'Cantidad', # 'measure_unit': 'Unidad', # 'product_tax': 'Impuesto', 'amount_untaxed': 'Precio', 'discount': 'Descuento', # 'amount_total': 'Sub total', } widgets = { 'sale_order': HiddenInput(), 'product': autocomplete.ModelSelect2( url='sale:product-autocomplete', forward=('sale_order', ), attrs={ 'class': 'form-control', 'data-placeholder': 'Seleccione un producto ...', 'style': 'width: 100%', }, ), 'description': TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Descripción del producto ...', 'style': 'width: 100%', }, ), 'quantity': NumberInput(attrs={ 'class': 'form-control', 'data-placeholder': 'Cantidad del producto ...', 'style': 'width: 100%', }, ), # 'measure_unit': autocomplete.ModelSelect2( # url='measure-unit-autocomplete', # attrs={ # 'class': 'form-control', # 'data-placeholder': 'Seleccione un unidad ...', # 'style': 'width: 100%', # }, # ), # 'product_tax': autocomplete.ModelSelect2( # url='product-tax-autocomplete', # attrs={ # 'class': 'form-control', # 'data-placeholder': 'Seleccione un Impuesto ...', # 'style': 'width: 100%', # }, # ), 'amount_untaxed': NumberInput(attrs={ 'class': 'form-control', 'data-placeholder': 'Precio del producto ...', 'style': 'width: 100%', }, ), 'discount': NumberInput(attrs={ 'class': 'form-control', 'data-placeholder': 'Descuento ...', 'style': 'width: 100%', }, ), # 'amount_total': NumberInput( # attrs={ # 'class': 'form-control', # 'data-placeholder': 'Sub total ...', # 'style': 'width: 100%', # }, # ), }
class StuffUpdateForm(BSModalModelForm): category = forms.ModelChoiceField( widget=autocomplete.ModelSelect2( url='inventory:category_autocomplete'), label="Catégorie d'appareil", required=False, queryset=Category.objects.all(), ) device = forms.ModelChoiceField(widget=autocomplete.ModelSelect2( url='inventory:device_autocomplete', forward=['category']), label="Type d'appareil", queryset=Device.objects.all(), required=False) create_device = forms.BooleanField( label="Je ne trouve pas mon type d'appareil dans la liste ci dessus", required=False, ) brand = forms.ModelChoiceField( widget=autocomplete.ModelSelect2(url='inventory:brand_autocomplete'), label="Marque", required=False, queryset=Brand.objects.all()) model = forms.CharField( label="Designation/modèle", help_text="Si vous n'êtes pas sûr, ne remplissez pas ce champ", required=False) picture = forms.ImageField(required=False, label="Photo") def clean_device(self): if not self.request.is_ajax(): device = self.cleaned_data['device'] if not device: device = {} device["category"] = self.cleaned_data['category'] device["brand"] = self.cleaned_data['brand'] device["model"] = self.cleaned_data['model'] if not device["category"]: self.add_error("category", "Ce champ ne peut pas être vide") device = Device.objects.create(**device) self.cleaned_data['device'] = device return self.cleaned_data['device'] def save(self, commit=True): instance = super().save(commit=commit) return instance def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) class Meta: model = Stuff fields = ( "category", "create_device", "brand", "model", "picture", "information", "device", )
class QuieroSerFiscalForm(forms.Form): MENSAJE_ERROR_CODIGO_REF = 'Codigo de referido debe ser de 4 letras y/o números.' MENSAJE_ERROR_TELEFONO_INVALIDO = 'Teléfono no es válido. Chequeá código de área y teléfono.' MENSAJE_ERROR_DNI_REPETIDO = 'Ya se encuentra un usuario registrado con ese DNI.' MENSAJE_ERROR_PASSWORD_NO_IGUALES = "Las contraseñas no coinciden." MENSAJE_ERROR_EMAIL_REPETIDO = 'Ya existe ese correo. Intentá recuperando la contraseña' CARACTERES_REF_CODIGO = 4 CANTIDAD_DIGITOS_NUMERACION_ARGENTINA = 10 MAX_DIGITOS_TELEFONO_LOCAL = 8 MIN_DIGITOS_TELEFONO_LOCAL = 5 MAX_DIGITOS_COD_AREA = 5 MIN_DIGITOS_COD_AREA = 2 email = forms.EmailField(required=True) email_confirmacion = forms.EmailField(required=True, label="Confirmar email") apellido = forms.CharField(required=True, label="Apellido", max_length=50) nombres = forms.CharField(required=True, label="Nombres", max_length=100) dni = ARDNIField(required=True, label="DNI", help_text='Ingresá tu Nº de documento sin puntos.') telefono_area = forms.CharField( label='Código de área (sin 0 adelante).', help_text= 'Por ejemplo: 11 para CABA, 221 para La Plata, 351 para Córdoba, etc.', required=True, validators=[ MaxLengthValidator(MAX_DIGITOS_COD_AREA), MinLengthValidator(MIN_DIGITOS_COD_AREA), ]) telefono_local = forms.CharField( label='Teléfono', help_text='Ingresá tu teléfono sin el 15, ni guiones ni espacios.', required=True, validators=[ MaxLengthValidator(MAX_DIGITOS_TELEFONO_LOCAL), MinLengthValidator(MIN_DIGITOS_TELEFONO_LOCAL), ]) distrito = forms.ModelChoiceField( required=True, label='Provincia', queryset=Distrito.objects.all().order_by('numero'), widget=autocomplete.ModelSelect2(url='autocomplete-distrito-simple', ), ) seccion = forms.ModelChoiceField( queryset=Seccion.objects.all(), required=False, widget=autocomplete.ModelSelect2(url='autocomplete-seccion-simple', forward=['distrito']), ) referente_nombres = forms.CharField( required=False, label="Nombre del referente", max_length=100, help_text="Si no tenés, dejalo en blanco.") referente_apellido = forms.CharField( required=False, label="Apellido del referente", max_length=50, help_text="Si no tenés, dejalo en blanco.") referido_por_codigo = forms.CharField( required=False, label="Código de referencia", help_text="Si no sabes qué es, dejalo en blanco.") password = forms.CharField( label='Elegí una contraseña', help_text='No uses la de tu email o redes sociales', widget=forms.PasswordInput, strip=False, ) password_confirmacion = forms.CharField( label='Repetir la contraseña', strip=False, widget=forms.PasswordInput, ) layout = Layout( Fieldset('Datos personales', Row('nombres', 'apellido', 'dni'), Row('email', 'email_confirmacion'), Row('password', 'password_confirmacion'), Row('distrito', 'seccion')), Fieldset('Teléfono celular', Row('telefono_area', 'telefono_local')), Fieldset( 'Referencia', Row('referente_nombres', 'referente_apellido', 'referido_por_codigo'))) def clean(self): cleaned_data = super().clean() self.validar_correo(cleaned_data) self.validar_telefono(cleaned_data.get('telefono_area'), cleaned_data.get('telefono_local')) def clean_telefono_area(self): telefono_area = self.cleaned_data.get('telefono_area') if telefono_area: # por las dudas, sacamos los 0 a la izquierda del código de área telefono_area = telefono_area.lstrip('0') return telefono_area def validar_correo(self, cleaned_data): email = cleaned_data.get('email') email2 = cleaned_data.get('email_confirmacion') if email and email2 and email != email2: self.add_error('email', 'Los emails no coinciden') self.add_error('email_confirmacion', 'Los emails no coinciden') if User.objects.filter(email=email).exists(): self.add_error('email', self.MENSAJE_ERROR_EMAIL_REPETIDO) def validar_telefono(self, telefono_area, telefono_local): if telefono_area and telefono_local: cantidad_digitos_telefono = len(telefono_area) + len( telefono_local) if cantidad_digitos_telefono != self.CANTIDAD_DIGITOS_NUMERACION_ARGENTINA: error = ( "Revisá el código de área y teléfono." f"Entre ambos deben ser {self.CANTIDAD_DIGITOS_NUMERACION_ARGENTINA} números" ) self.add_error('telefono_area', error) self.add_error('telefono_local', error) telefono = telefono_area + telefono_local valor = phonenumbers.parse(telefono, 'AR') if not phonenumbers.is_valid_number(valor): self.add_error('telefono_local', self.MENSAJE_ERROR_TELEFONO_INVALIDO) self.add_error('telefono_area', self.MENSAJE_ERROR_TELEFONO_INVALIDO) def clean_referente_apellido(self): return self.cleaned_data.get('referente_apellido', '').strip() or None def clean_referente_nombres(self): return self.cleaned_data.get('referente_nombres', '').strip() or None def clean_password(self): password = self.cleaned_data.get('password') if password: password_validation.validate_password(password) return password def clean_password_confirmacion(self): password = self.cleaned_data.get('password') password_confirmacion = self.cleaned_data.get('password_confirmacion') if password and password_confirmacion: if password != password_confirmacion: raise forms.ValidationError( self.MENSAJE_ERROR_PASSWORD_NO_IGUALES) return password_confirmacion def clean_dni(self): dni = self.cleaned_data.get('dni') if Fiscal.objects.filter(dni=dni).exists(): raise ValidationError(self.MENSAJE_ERROR_DNI_REPETIDO) return dni def clean_referido_por_codigo(self): referido_por_codigo = self.cleaned_data.get('referido_por_codigo', None) if referido_por_codigo: if len(referido_por_codigo) != self.CARACTERES_REF_CODIGO: raise ValidationError(self.MENSAJE_ERROR_CODIGO_REF) referido_por_codigo = referido_por_codigo.upper() return referido_por_codigo
class FolderForm(BSModalModelForm): BROKEN = "B" WORKING = "W" DISASSEMBLED = "D" FIXING = "F" FIXED = "O" THROWN = "T" PARTIAL = "P" STATES = [ (BROKEN, "En panne"), (WORKING, "Fonctionnel"), (DISASSEMBLED, "Désassemblé"), (FIXING, "En réparation"), (FIXED, "Réparé"), (THROWN, "Evaporé"), (PARTIAL, "Partiel"), ] stuff_state = forms.ChoiceField(choices=STATES, label="Etat") change_stuff_state = forms.BooleanField( label="Ce dossier change l'état général de l'objet", required=False, initial=False, ) ongoing = forms.BooleanField( label="Dossier en cours", required=False, initial=True, ) observation = forms.ModelChoiceField( widget=autocomplete.ModelSelect2( url='inventory:observation_autocomplete'), help_text="Quel est (ou était) le problème ?", required=False, queryset=Observation.objects.all()) reasoning = forms.ModelChoiceField( widget=autocomplete.ModelSelect2( url='inventory:reasoning_autocomplete'), help_text="Quel en est (ou serait) la cause ?", label="Raisonnement", required=False, queryset=Reasoning.objects.all()) action = forms.ModelChoiceField( widget=autocomplete.ModelSelect2(url='inventory:action_autocomplete'), help_text="Qu'avez-vous fait ?", required=False, queryset=Action.objects.all()) status = forms.ModelChoiceField( widget=autocomplete.ModelSelect2(url='inventory:status_autocomplete'), help_text="Quel est le résultat de l'action ?", required=False, queryset=Status.objects.all()) def init_folder(self, data): self.folder = {} self.intervention = {} self.folder['open_date'] = data['open_date'] if data['ongoing']: self.folder['ongoing'] = True else: self.folder['ongoing'] = False self.intervention['repair_date'] = data['open_date'] if data['observation']: self.intervention['observation'] = data['observation'] if data['reasoning']: self.intervention['reasoning'] = data['reasoning'] if data['action']: self.intervention['action'] = data['action'] if data['status']: self.intervention['status'] = data['status'] if not self.folder['open_date']: self.add_error(f'La date ne peut pas être vide') if not self.intervention['observation']: self.add_error(f'Veuillez rentrer au moins une observation.') def clean(self): self.init_folder(self.cleaned_data) def save(self, commit=True): instance = super().save(commit=commit) self.folder['stuff'] = self.stuff folder = RepairFolder.objects.create(**self.folder) self.intervention['folder'] = folder intervention = Intervention.objects.create(**self.intervention) if self.cleaned_data["change_stuff_state"]: state = self.cleaned_data["stuff_state"] if state: self.stuff.__dict__.update(state=state) self.stuff.save() else: self.add_error( f"Si vous souhaitez modifier l'état de l'objet, renseignez un état" ) return instance def __init__(self, stuff=None, *args, **kwargs): super().__init__(*args, **kwargs) if stuff: self.stuff = stuff self.fields['open_date'] = forms.DateField( initial=dt.today(), widget=forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"), label="date", required=False, ) self.fields['ongoing'] = forms.BooleanField( label="Dossier en cours", initial=True, required=False, ) class Meta: model = RepairFolder fields = [ "open_date", "ongoing", "observation", "reasoning", "action", "status", "stuff_state", "change_stuff_state" ]
class Meta: model = Ingredient fields = ('__all__') widgets = { 'ingeredient': autocomplete.ModelSelect2(url='ing_temp_comp') }
class Meta: model = Device fields = '__all__' widgets = { 'model': autocomplete.ModelSelect2(url='device_model_autocomplete') }
class Meta: model = Carrera fields = [ 'localidad_edit', 'nombre_edit', 'descripcion_edit', 'titulo_edit', 'tipo_carrera_edit', 'ieu_acreditadora_edit', 'mercado_ocupacional_edit', 'area_conocimiento_edit', 'sub_area_conocimiento_edit', 'cine_f_campo_amplio_edit', 'cine_f_campo_especifico_edit', 'cine_f_campo_detallado_edit', 'duracion_edit', 'modalidad_edit', 'prioritaria_edit', 'cod_activacion', 'publicar' ] labels = { 'localidad_edit': ('Localidad'), 'nombre_edit': ('Nombre'), 'descripcion_edit': ('Descripción'), 'titulo_edit': ('Título'), 'tipo_carrera_edit':('Tipo de Carrera'), 'ieu_acreditadora_edit': ('Institución Acreditadora'), 'mercado_ocupacional_edit': ('Mercado Ocupacional'), 'area_conocimiento_edit': ('Área de Conocimiento'), 'sub_area_conocimiento_edit': ('Sub Área de Conocimiento'), 'cine_f_campo_amplio_edit': ('Campo Amplio'), 'cine_f_campo_especifico_edit': ('Campo Especifico'), 'cine_f_campo_detallado_edit': ('Campo Detallado'), 'duracion_edit': ('Duración'), 'modalidad_edit': ('Modalidad'), } widgets = { 'localidad_edit':autocomplete.ModelSelect2( url='oeuacademic:localidades', attrs={ 'class':'form-control select2', 'data-placeholder':'Selecciona la Localidad' }, ), 'nombre_edit':forms.TextInput( attrs={ 'class':'form-control', 'placeholder':'Escribe el nombre de la Carrera' }, ), 'descripcion_edit':forms.Textarea( attrs={ 'class':'form-control', 'placeholder':'Haz una descripción de la Carrera', 'rows':2}, ), 'titulo_edit':forms.NumberInput( attrs={ 'class':'form-control', 'placeholder':'Título'},), 'tipo_carrera_edit':forms.Select( attrs={ 'class':'form-control', 'placeholder':'Seleccione Una Opción'},), 'ieu_acreditadora_edit':autocomplete.ModelSelect2( url='oeuacademic:acreditadora', attrs={ 'class':'form-control select2', 'data-placeholder':'Institución Acreditadora' }, ), 'mercado_ocupacional_edit':forms.Textarea( attrs={ 'class':'form-control', 'placeholder':'Escribe el mercado ocupacional de la carrera', 'rows':2}, ), 'area_conocimiento_edit':autocomplete.ModelSelect2( url='oeuacademic:area-conocimiento', attrs={ 'class':'form-control select2', 'data-placeholder':'Área de Conocimiento' }, ), 'sub_area_conocimiento_edit':autocomplete.ModelSelect2( url='oeuacademic:sub-area-conocimiento', forward=['area_conocimiento_edit'], attrs={ 'class':'form-control select2', 'data-placeholder':'Sub Área de Conocimiento' }, ), 'cine_f_campo_amplio_edit':autocomplete.ModelSelect2( url='oeuacademic:cine-f-campo-amplio', attrs={ 'class':'form-control select2', 'data-placeholder':'Seleccione Una Opción' }, ), 'cine_f_campo_especifico_edit':autocomplete.ModelSelect2( url='oeuacademic:cine-f-campo-especifico', forward=['cine_f_campo_amplio_edit'], attrs={ 'class':'form-control select2', 'data-placeholder':'Seleccione Una Opción' }, ), 'cine_f_campo_detallado_edit':autocomplete.ModelSelect2( url='oeuacademic:cine-f-campo-detallado', forward=['cine_f_campo_especifico_edit'], attrs={ 'class':'form-control select2', 'data-placeholder':'Seleccione Una Opción' }, ), 'duracion_edit':forms.NumberInput( attrs={ 'class':'form-control', 'placeholder':'Duración de la Carrera'},), 'modalidad_edit':forms.Select(attrs={'class':'form-control'},), 'prioritaria_edit':forms.RadioSelect(), }
class Meta: model = StartupMember fields = ['user', 'access_level', 'role'] widgets = {'user': autocomplete.ModelSelect2(url='user-autocomplete')}
class ArticleRelatedPageAdminForm(forms.ModelForm): page = forms.ModelChoiceField( queryset=Page.objects.drafts(), widget=autocomplete.ModelSelect2(url='articles:page-autocomplete'))
class AdvertisementCreationForm(forms.ModelForm): # error_message = forms.UserCreationForm.error_messages.update( # {"duplicate_username": _("This username has already been taken.")} # ) category = forms.ModelChoiceField( queryset=Category.objects.all(), widget=autocomplete.ModelSelect2(url='advertisements:categoryAutoComplete')) subcategory = forms.ModelChoiceField( queryset=Subcategory.objects.all(), widget=autocomplete.ModelSelect2( url='advertisements:subcategoryAutoComplete', forward=('category',))) agreement = forms.BooleanField( required=True, label="I have read and agree to the Terms and Conditions and Privacy Policy") def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.layout = Layout( Row( Column('description', css_class='col-md-6'), Column('product_page_link', css_class='col-md-6'), css_class='row' ), Row( Column('is_global', css_class='col-md-3 form-check-box'), Column('locations', css_class='col-md-9'), css_class='row' ), Row( Column('category', css_class='col-md-6'), Column('subcategory', css_class='col-md-6'), css_class='row' ), Row( Column('tags', css_class='col-md-12'), css_class='row' ), Row( Column('video', css_class='col-md-6'), Column('thumbnail', css_class='col-md-6'), css_class='row' ), Row( Column('validity', css_class='col-md-6'), Column('cost', css_class='col-md-6'), css_class='row' ), 'agreement', Submit('submit', 'Submit', css_class='make_payment_button') ) class Meta: model = Advertisement exclude = ('status', 'user') widgets = { 'tags': autocomplete.TaggitSelect2( 'advertisements:tagAutoComplete' ), 'locations': autocomplete.ModelSelect2Multiple( url='advertisements:locationAutoComplete' ) }
class Meta: widgets = { 'group': autocomplete.ModelSelect2(url='groups:group-autocomplete'), }
class MergeForm(forms.Form): merge_target = forms.ModelChoiceField( queryset=Task.objects.all(), widget=autocomplete.ModelSelect2(url=reverse( "todo:task_autocomplete", kwargs={"task_id": task_id})), )
class Meta: model = Cliente fields = ('__all__') widgets = { "vendedor": autocomplete.ModelSelect2(url='funcionario-autocomplete'), }
class Meta: model = Fmodel exclude = () widgets = { 'code': autocomplete.ModelSelect2(url='product-autocomplete') }