class StudentSignUpForm(CustomUserCreationForm): university = autocomplete.Select2ListCreateChoiceField( choice_list=uni_list(), required=False, widget=autocomplete.ListSelect2(url='accounts:uni-autocomplete') #, #initial = self.user.university ) major = autocomplete.Select2ListCreateChoiceField( choice_list=major_list, required=False, widget=autocomplete.ListSelect2(url='accounts:major-autocomplete') #, # initial = self.user.major ) grad_date = forms.DateField(widget=MonthYearWidget) class Meta(CustomUserCreationForm.Meta): model = CustomUser @transaction.atomic def save(self): user = super().save(commit=False) user.is_student = True user.save() student = Student.objects.create( user=user, major=self.cleaned_data['major'], university=self.cleaned_data['university'], grad_date=self.cleaned_data['grad_date']) return user
class StudentProfileForm(forms.ModelForm): class Meta: model = CustomUser fields = [ 'email', 'first_name', 'last_name', 'university', 'major', 'grad_date', 'career_interest' ] first_name = forms.CharField( label='your first name') #, default = self.user.first_name) last_name = forms.CharField( label='your last name') #, default = self.user.last_name) university = autocomplete.Select2ListCreateChoiceField( choice_list=uni_list(), required=False, widget=autocomplete.ListSelect2(url='accounts:uni-autocomplete') #, #initial = self.user.university ) major = autocomplete.Select2ListCreateChoiceField( choice_list=major_list(), required=False, widget=autocomplete.ListSelect2(url='accounts:major-autocomplete') #, # initial = self.user.major ) grad_date = forms.DateField( widget=MonthYearWidget) #, default = self.user.grad_date) career_interest = autocomplete.Select2ListCreateChoiceField( choice_list=career_list(), required=False, widget=autocomplete.ListSelect2(url='accounts:career-autocomplete'))
def __init__(self, *args, **kwargs): attrs = { 'data-placeholder': 'Type to get suggestions', 'data-minimum-input-length': 3, 'data-html': True, } super(NetworkVizFilterForm, self).__init__(*args, **kwargs) self.fields['select_relation'] = forms.ChoiceField( label='Relation type', choices=list( ('-'.join(x.name.split()), x.name) for x in ContentType.objects.filter(app_label='relations')), help_text= "Include only relations related to this annotation project \ (See the include general relations checkbox)") self.fields['select_relation'].initial = ('person-place', 'person place') self.fields[ 'search_source'] = autocomplete.Select2ListCreateChoiceField( label='Search source', widget=autocomplete.ListSelect2(url=reverse( 'entities:generic_network_entities_autocomplete', kwargs={'entity': 'person'}), attrs=attrs)) self.fields[ 'search_target'] = autocomplete.Select2ListCreateChoiceField( label='Search target', widget=autocomplete.ListSelect2(url=reverse( 'entities:generic_network_entities_autocomplete', kwargs={'entity': 'place'}), attrs=attrs)) self.fields['select_kind'] = autocomplete.Select2ListCreateChoiceField( label='Select kind', widget=autocomplete.ListSelect2(url=reverse( 'vocabularies:generic_vocabularies_autocomplete', kwargs={ 'vocab': 'personplacerelation', 'direct': 'normal' }), attrs=attrs)) # self.fields['annotation_proj'] = forms.ChoiceField( # label='Annotation Project', # choices=BLANK_CHOICE_DASH + list((x.pk, x.name) for x in AnnotationProject.objects.all()), # required=False, # help_text="Include only relations related to this annotation project \ # (See the include general relations checkbox)") self.helper = FormHelper() self.helper.form_class = 'FilterNodesForm' self.helper.form_action = 'NetJson-list' self.helper.add_input(Submit('Submit', 'Add nodes')) self.order_fields( ('select_relation', 'ann_include_all', 'annotation_proj', 'search_source', 'select_kind', 'search_target'))
def __init__(self, entity, *args, **kwargs): attrs = { 'data-placeholder': 'Type to get suggestions', 'data-minimum-input-length': 3, 'data-html': True, 'style': 'width: auto' } ent_merge_pk = kwargs.pop('ent_merge_pk', False) super(GenericEntitiesStanbolForm, self).__init__(*args, **kwargs) self.entity = entity self.helper = FormHelper() form_kwargs = {'entity': entity} url = reverse('apis:apis_entities:generic_entities_autocomplete', args=[entity.title(), 'remove']) label = 'Create {} from reference resources'.format(entity.title()) button_label = 'Create' if ent_merge_pk: form_kwargs['ent_merge_pk'] = ent_merge_pk url = reverse('apis:apis_entities:generic_entities_autocomplete', args=[entity.title()]) label = 'Search for {0} in reference resources or db'.format( entity.title()) button_label = 'Merge' self.helper.form_action = reverse( 'apis:apis_entities:generic_entities_stanbol_create', kwargs=form_kwargs) self.helper.add_input(Submit('submit', button_label)) self.fields['entity'] = autocomplete.Select2ListCreateChoiceField( label=label, widget=ListSelect2(url=url, attrs=attrs), validators=[URLValidator])
class ExpenseItemAdminForm(ModelForm): payTo = ModelChoiceField( queryset=TransactionParty.objects.all(), label=_('Pay to'), required=True, widget=autocomplete.ModelSelect2( url='transactionParty-list-autocomplete', attrs={ # This will set the input placeholder attribute: 'data-placeholder': _('Enter a name or location'), # This will set the yourlabs.Autocomplete.minimumCharacters # options, the naming conversion is handled by jQuery 'data-minimum-input-length': 2, 'data-max-results': 8, 'class': 'modern-style', })) paymentMethod = autocomplete.Select2ListCreateChoiceField( choice_list=get_method_list, required=False, widget=autocomplete.ListSelect2(url='paymentMethod-list-autocomplete')) class Meta: model = ExpenseItem exclude = [] widgets = {'category': ExpenseCategoryWidget}
class MovieForm(forms.ModelForm): title = autocomplete.Select2ListCreateChoiceField( widget=autocomplete.ListSelect2(url='movie:movie_title_autocomplete')) class Meta: model = Movie fields = ('__all__')
class CreateBoothForm(forms.ModelForm): class Meta: model = Career_Booth fields = ('interview_duration', 'rest_duration', 'date', 'time_start', 'time_end', 'university', 'booth_name') years_to_display = range(datetime.datetime.now().year, datetime.datetime.now().year + 2) date = forms.DateField( widget=SelectDateWidget(years=years_to_display), required=True, initial=datetime.datetime.now(), ) time_start = forms.TimeField( widget=SelectTimeWidget(), required=True, initial=datetime.time(9, 00), ) time_end = forms.TimeField( widget=SelectTimeWidget(), required=True, initial=datetime.time(12, 00), ) university = autocomplete.Select2ListCreateChoiceField( choice_list=uni_list(), required=True, widget=autocomplete.ListSelect2(url='accounts:uni-autocomplete') #initial = self.user.university ) booth_name = forms.CharField( required=False, label='Booth Name', max_length=100, help_text='Optional. The name is only used on your calendar.')
class PersonaAutoForm(forms.ModelForm): nombre_de_la_persona = autocomplete.Select2ListCreateChoiceField( choice_list=get_choice_list, required=False, widget=autocomplete.ListSelect2(url='persona_name_lookup'), ) class Meta: fields = ['nombre_de_la_persona'] model = Persona
class OrganizacionAutoForm(forms.ModelForm): nombre_de_la_organización = autocomplete.Select2ListCreateChoiceField( choice_list=get_choice_list_organizacion, required=False, widget=autocomplete.ListSelect2(url='organizacion_name_lookup'), ) class Meta: fields = ['nombre_de_la_organización'] model = Organización
class LugarAutoForm(forms.ModelForm): nombre_del_lugar = autocomplete.Select2ListCreateChoiceField( choice_list=get_choice_list_lugar, required=False, widget=autocomplete.ListSelect2(url='lugar_name_lookup'), ) class Meta: fields = ['nombre_del_lugar'] model = Lugar
def test_validate(self): choice_list = ['windows', 'linux'] field = autocomplete.Select2ListCreateChoiceField( choice_list=choice_list) # validate() should allow choice outside of choices... field.validate('osx') # but not empty. with self.assertRaises(ValidationError): field.validate('')
class EmployeeForm(forms.ModelForm): def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) super(EmployeeForm, self).__init__(*args, **kwargs) name = autocomplete.Select2ListCreateChoiceField( choice_list=getADNames, widget=autocomplete.ListSelect2(url='name-autocomplete')) manager = forms.ModelChoiceField( queryset=Employee.objects.all(), widget=autocomplete.ModelSelect2(url='employee-autocomplete'), required=False) country = CustomModelChoiceField( required=False, queryset=Group.objects.filter(name__startswith='Country')) departments = DepartmentsField(required=False, queryset=Department.objects.all()) def clean(self): cleaned_data = super(EmployeeForm, self).clean() country = cleaned_data["country"] departments = cleaned_data['departments'] director_of_departments = cleaned_data["director_of_department"] for director_of_department in director_of_departments: directors = Employee.objects.filter( director_of_department=director_of_department).filter( country=country).exclude(pk=self.instance.pk) if directors: raise forms.ValidationError(''.join([ 'Director of ' + director_of_department.name + ' already exists for this country.' ])) if any(director_of_department not in departments for director_of_department in director_of_departments ) and director_of_departments is not None: raise forms.ValidationError( 'Employee cannot be director of department they are not in.') print(country) print(self.request.user.groups.all()) if not self.request.user.is_superuser and country not in self.request.user.groups.filter( name__startswith='Country'): raise forms.ValidationError("Invalid country choice.") class Meta: model = Employee exclude = ('is_new', )
class GenericRepeatedExpenseAdminForm(ModelForm): paymentMethod = autocomplete.Select2ListCreateChoiceField( choice_list=get_method_list, required=False, widget=autocomplete.ListSelect2(url='paymentMethod-list-autocomplete')) def __init__(self, *args, **kwargs): super(GenericRepeatedExpenseAdminForm, self).__init__(*args, **kwargs) updatedChoices = RepeatedExpenseRule.RateRuleChoices.choices index = [x[0] for x in updatedChoices].index('D') updatedChoices = updatedChoices[:index] + ( ('D', _('Per day')), ) + updatedChoices[index + 1:] self.fields.get('applyRateRule').choices = updatedChoices
class DatasetForm(forms.ModelForm): # Change the code field of Dataset to be rendered as autocomplete field code = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.ListSelect2(url='vizmanager:dataset-autocomplete', attrs={ 'data-placeholder': _('Click to load a dataset...'), 'data-minimum-input-length': 4 })) def build_dimension_choices(self): dimensions = [] for dim_name, dim_dict in self.instance.get_dimensions().items(): for attr_name, attr_dict in dim_dict.get('attributes').items(): dimensions.append(attr_dict.get('ref')) if not dimensions: dimensions = [strings.DEFAULT_DIMENSIONS_STRING] return zip(dimensions, dimensions) def build_measure_choices(self): measures = self.instance.get_measures() if not measures: measures = [strings.DEFAULT_MEASURES_STRING] return zip(measures, measures) def __init__(self, *args, **kwargs): super(DatasetForm, self).__init__(*args, **kwargs) # initialize the DatasetForm's 'code' if the form is not empty ds = kwargs.get('instance') if ds is not None: attrs = self.fields.get('code').widget.attrs attrs['data-placeholder'] = ds.code # create dynamic choices field for the available dimensions self.fields['initial_dimension'] = forms.ChoiceField( choices=self.build_dimension_choices()) # create dynamic choices field for the available measures self.fields['initial_measure'] = forms.ChoiceField( choices=self.build_measure_choices())
class FleetAddMemberForm(forms.Form): fleet = forms.IntegerField(widget=forms.HiddenInput(), disabled=True, required=False) discord_username = autocomplete.Select2ListCreateChoiceField( choice_list=get_discord_names, required=False, widget=autocomplete.ListSelect2(url="discord-username-autocomplete"), ) character = forms.ModelChoiceField( required=False, queryset=Character.objects.all(), initial=0, widget=autocomplete.ModelSelect2(url="character-autocomplete", forward=["discord_username", "fleet"]), ) class Meta: exclude = ("discord_username", )
def __init__(self, entity, *args, **kwargs): attrs = { 'data-placeholder': 'Type to get suggestions', 'data-minimum-input-length': 3, 'data-html': True, 'style': 'width: auto' } super(GenericEntitiesStanbolForm, self).__init__(*args, **kwargs) self.entity = entity self.helper = FormHelper() self.helper.form_action = reverse( 'entities:generic_entities_stanbol_create', kwargs={'entity': entity}) self.helper.add_input(Submit('submit', 'Create')) self.fields['entity'] = autocomplete.Select2ListCreateChoiceField( label='Create {} from reference resources'.format(entity.title()), widget=autocomplete.ListSelect2( url='/entities/autocomplete/{}/remove'.format(entity), attrs=attrs), validators=[URLValidator])
def __init__(self, *args, **kwargs): super(SundayHighlighterForm, self).__init__(*args, **kwargs) attrs = { 'data-placeholder': 'Type to get suggestions', 'data-minimum-input-length': 3, 'data-html': True, 'style': 'width: 100%' } self.fields['sunday_rep'] = autocomplete.Select2ListCreateChoiceField( label='Relation type', widget=ListSelect2( #url='/vocabularies/autocomplete/{}{}relation/normal'.format(lst_src_target[0].lower(), lst_src_target[1].lower()), url=reverse( 'apis:apis_vocabularies:generic_vocabularies_autocomplete', args=['sundayrepresentations', 'normal']), attrs=attrs)) if self.instance: a = self.instance ent = a.entity_link self.fields['sunday_rep'].initial = (ent.pk, ent.name)
class OrganizationForm(forms.ModelForm): """ Initialize the DatasetForm code if the form is not empty """ def __init__(self, *args, **kwargs): super(OrganizationForm, self).__init__(*args, **kwargs) ds = kwargs.get('instance') if ds is not None: attrs = self.fields.get('url').widget.attrs attrs['data-placeholder'] = ds.url """ Changes the code field of Dataset to be rendered as autocomplete field """ url = autocomplete.Select2ListCreateChoiceField( required=True, widget=autocomplete.ListSelect2( url='vizmanager:organization-autocomplete', attrs={ 'data-placeholder': _('Click to load an Organization...'), 'data-minimum-input-length': 1 }))
class ExpenseReportingForm(EventAutocompleteForm, forms.ModelForm): payTo = forms.ModelChoiceField( queryset=TransactionParty.objects.all(), label=_('Pay to'), required=True, widget=autocomplete.ModelSelect2( url='transactionParty-list-autocomplete', attrs={ # This will set the input placeholder attribute: 'data-placeholder': _('Enter a name or location'), # This will set the yourlabs.Autocomplete.minimumCharacters # options, the naming conversion is handled by jQuery 'data-minimum-input-length': 2, 'data-max-results': 8, 'class': 'modern-style', })) payBy = forms.ChoiceField(widget=forms.RadioSelect, choices=PAYBY_CHOICES, label=_('Report this expense as:'), initial=2) paymentMethod = autocomplete.Select2ListCreateChoiceField( choice_list=get_method_list, required=False, widget=autocomplete.ListSelect2(url='paymentMethod-list-autocomplete'), label=_('Payment method'), ) def __init__(self, *args, **kwargs): user = kwargs.pop('user', None) user_id = getattr(user, 'id', None) if user_id: kwargs.update( initial={ 'payTo': TransactionParty.objects.get_or_create( user=user, defaults={'name': user.get_full_name()}) [0].id, }) super(ExpenseReportingForm, self).__init__(*args, **kwargs) self.helper = FormHelper() # The hidden input of accrual date must be passed as a naive datetime. # Django will take care of converting it to local time accrualDate_field = Field( 'accrualDate', type="hidden", value=timezone.make_naive(timezone.now()) if timezone.is_aware(timezone.now()) else timezone.now()) if user and user.has_perm('financial.mark_expenses_paid'): payment_section = Div( Div(HTML( '<a data-toggle="collapse" href="#collapsepayment">%s</a> (%s)' % (_('Mark as Approved/Paid'), _('click to expand'))), css_class='card-header'), Div( 'approved', 'paid', Div( Field('paymentDate', css_class='datepicker'), HTML( '<div style="margin: auto 1em;"><button id="payment-event-start" class="btn btn-outline-secondary">%s</button></div>' % _('Event Start Date')), css_class='form-row', ), 'paymentMethod', HTML( '<p style="margin-top: 30px;"><strong>%s</strong> %s</p>' % (_('Note:'), _('For accounting purposes, please do not mark expenses as paid unless they have already been paid to the recipient.' ))), css_class='card-body collapse', id='collapsepayment', ), css_class='card my-4') else: payment_section = None # Add category button should only appear for users who are allowed to add categories if user.has_perm('financial.add_expensecategory'): related_url = reverse('admin:financial_expensecategory_add' ) + '?_to_field=id&_popup=1' added_html = [ '<a href="%s" class="btn btn-outline-secondary related-widget-wrapper-link add-related" id="add_id_category"> ' % related_url, '<img src="%sadmin/img/icon-addlink.svg" width="10" height="10" alt="%s"/></a>' % (getattr(settings, 'STATIC_URL', '/static/'), _('Add Another')) ] category_field = Div(Div('category', css_class='col-sm-11'), Div(HTML('\n'.join(added_html)), css_class='col-sm-1', style='margin-top: 25px;'), css_class='related-widget-wrapper row') else: category_field = Div('category') self.fields['event'].label = _('Event (optional)') self.fields['event'].required = False self.helper.layout = Layout( Field('submissionUser', type="hidden", value=user_id), 'payTo', 'payBy', category_field, 'description', 'hours', 'total', 'event', 'reimbursement', accrualDate_field, payment_section, 'attachment', Submit('submit', _('Submit')), ) def clean(self): # Custom cleaning ensures that user, hours, and total # are not reported where not necessary. super(ExpenseReportingForm, self).clean() payBy = self.cleaned_data.get('payBy') hours = self.cleaned_data.get('hours') total = self.cleaned_data.get('total') paid = self.cleaned_data.get('paid') paymentDate = self.cleaned_data.get('paymentDate') event = self.cleaned_data.get('event') # Automatically marks expenses that are paid # upon submission as accruing at the date of payment. if paid and paymentDate: self.cleaned_data['accrualDate'] = paymentDate else: self.cleaned_data.pop('paymentDate', None) # If an event has been specified, then that takes precedence for setting # the accrual date of the expense. if event and getattr(event, 'startTime', None): self.cleaned_data['accrualDate'] = event.startTime if payBy == '1' and total: self.cleaned_data.pop('total', None) if payBy == '2' and hours: self.cleaned_data.pop('hours', None) return self.cleaned_data class Meta: model = ExpenseItem fields = [ 'submissionUser', 'payTo', 'category', 'description', 'hours', 'total', 'reimbursement', 'attachment', 'approved', 'paid', 'paymentDate', 'paymentMethod', 'accrualDate', 'event' ] widgets = { 'category': ExpenseCategoryWidget, } class Media: js = ('admin/js/admin/RelatedObjectLookups.js', 'jquery-ui/jquery-ui.min.js', 'js/expense_reporting.js') css = { 'all': ('jquery-ui/jquery-ui.min.css', ), }
class TForm(forms.ModelForm): test = autocomplete.Select2ListCreateChoiceField( choice_list=get_choice_list, required=False, widget=autocomplete.ListSelect2(url='select2_list'))
class RevenueReportingForm(forms.ModelForm): associateWith = forms.ChoiceField( widget=forms.RadioSelect, choices=REVENUE_ASSOCIATION_CHOICES, label=_('This revenue is associated with:'), initial=1) currentlyHeldBy = forms.ModelChoiceField( queryset=User.objects.filter( Q(is_staff=True) | Q(staffmember__isnull=False)), label=_('Cash currently in possession of'), required=False, widget=autocomplete.ModelSelect2( url='autocompleteUser', attrs={ # This will set the input placeholder attribute: 'data-placeholder': _('Enter a user name'), # This will set the yourlabs.Autocomplete.minimumCharacters # options, the naming conversion is handled by jQuery 'data-minimum-input-length': 2, 'data-max-results': 4, 'class': 'modern-style', })) paymentMethod = autocomplete.Select2ListCreateChoiceField( choice_list=get_method_list, required=False, widget=autocomplete.ListSelect2(url='paymentMethod-list-autocomplete')) def __init__(self, *args, **kwargs): self.helper = FormHelper() self.helper.add_input(Submit('submit', _('Submit'))) user = kwargs.pop('user', None) if hasattr(user, 'id'): kwargs.update(initial={'submissionUser': user.id}) super(RevenueReportingForm, self).__init__(*args, **kwargs) self.fields['submissionUser'].widget = forms.HiddenInput() self.fields['invoiceNumber'].widget = forms.HiddenInput() self.fields["invoiceItem"] = InvoiceItemChoiceField( queryset=InvoiceItem.objects.none(), required=False) # re-order fields to put the associateWith RadioSelect first. newFields = OrderedDict() newFields['associateWith'] = self.fields['associateWith'] for key, field in self.fields.items(): if key not in ['associateWith']: newFields[key] = field self.fields = newFields def clean_description(self): ''' Avoid empty descriptions ''' return self.cleaned_data['description'] or _('Form Submitted Revenue') def clean_invoiceNumber(self): ''' Create a unique invoice number ''' return 'SUBMITTED_%s_%s' % (self.cleaned_data['submissionUser'].id, timezone.now().strftime('%Y%m%d%H%M%S')) def clean(self): # Custom cleaning ensures that revenues are not attributed # to both a series and to an event. super(RevenueReportingForm, self).clean() associateWith = self.cleaned_data.get('associateWith') event = self.cleaned_data.get('event') if associateWith in ['1', '3'] and event: self.cleaned_data.pop('event', None) self.cleaned_data.pop('invoiceItem', None) return self.cleaned_data class Meta: model = RevenueItem fields = [ 'submissionUser', 'invoiceNumber', 'category', 'description', 'event', 'invoiceItem', 'receivedFromName', 'paymentMethod', 'currentlyHeldBy', 'total', 'attachment' ] class Media: js = ('js/revenue_reporting.js', )
class RevenueReportingForm(EventAutocompleteForm, forms.ModelForm): ''' This form is used in the revenue reporting view for quick generation of RevenueItems. ''' receivedFrom = forms.ModelChoiceField( queryset=TransactionParty.objects.all(), label=_('Received from'), required=False, widget=autocomplete.ModelSelect2( url='transactionParty-list-autocomplete', attrs={ # This will set the input placeholder attribute: 'data-placeholder': _('Enter a name or location'), # This will set the yourlabs.Autocomplete.minimumCharacters # options, the naming conversion is handled by jQuery 'data-minimum-input-length': 2, 'data-max-results': 8, 'class': 'modern-style', })) currentlyHeldBy = forms.ModelChoiceField( queryset=User.objects.filter( Q(is_staff=True) | Q(staffmember__isnull=False)), label=_('Cash currently in possession of'), required=False, widget=autocomplete.ModelSelect2( url='autocompleteUser', attrs={ # This will set the input placeholder attribute: 'data-placeholder': _('Enter a user name'), # This will set the yourlabs.Autocomplete.minimumCharacters # options, the naming conversion is handled by jQuery 'data-minimum-input-length': 2, 'data-max-results': 4, 'class': 'modern-style', })) paymentMethod = autocomplete.Select2ListCreateChoiceField( choice_list=get_method_list, required=False, widget=autocomplete.ListSelect2(url='paymentMethod-list-autocomplete'), label=_('Payment method'), ) def __init__(self, *args, **kwargs): user = kwargs.pop('user', None) if hasattr(user, 'id'): kwargs.update(initial={'submissionUser': user.id}) super(RevenueReportingForm, self).__init__(*args, **kwargs) self.helper = FormHelper() detail_section = Div(Div(HTML( '<a data-toggle="collapse" href="#collapsedetails">%s</a> (%s)' % (_('Adjustments/Fees'), _('click to expand'))), css_class='card-header'), Div( 'total', 'adjustments', 'fees', css_class='card-body collapse', id='collapsedetails', ), css_class='card my-4') event_section = Div(Div(HTML( '<a data-toggle="collapse" href="#collapseevent">%s</a> (%s)' % (_('Event/Invoice item (optional)'), _('click to expand'))), css_class='card-header'), Div( 'event', 'invoiceItem', css_class='card-body collapse', id='collapseevent', ), css_class='card my-4') if user and user.has_perm('financial.mark_revenues_received'): receipt_section = Div( Div(HTML( '<a data-toggle="collapse" href="#collapsereceipt">%s</a> (%s)' % (_('Mark as Received'), _('click to expand'))), css_class='card-header'), Div( 'received', Div( Field('receivedDate', css_class='datepicker'), HTML( '<div style="margin: auto 1em;"><button id="received-event-start" class="btn btn-outline-secondary">%s</button></div>' % _('Event Start Date')), css_class='form-row', ), 'currentlyHeldBy', # The hidden input of accrual date must be passed as a naive datetime. # Django will take care of converting it to local time HTML( '<p style="margin-top: 30px;"><strong>%s</strong> %s</p>' % (_('Note:'), _('For accounting purposes, please do not mark revenues ' + 'as received until the money is in our possession.') )), css_class='card-body collapse', id='collapsereceipt', ), css_class='card my-4') else: receipt_section = None self.fields["invoiceItem"] = InvoiceItemChoiceField( queryset=InvoiceItem.objects.none(), required=False) self.fields['event'].required = False # Handled by the model's save() method self.fields['total'].required = False self.fields['fees'].required = False self.fields['adjustments'].required = False self.helper.layout = Layout( Field('submissionUser', type="hidden", value=getattr(user, 'id')), Field('invoiceNumber', type="hidden"), 'category', 'description', 'receivedFrom', 'paymentMethod', 'grossTotal', detail_section, event_section, receipt_section, 'attachment', Submit('submit', _('Submit')), ) def clean_description(self): ''' Avoid empty descriptions ''' return self.cleaned_data['description'] or _('Form Submitted Revenue') def clean_invoiceNumber(self): ''' Create a unique invoice number ''' return 'SUBMITTED_%s_%s' % (getattr( self.cleaned_data['submissionUser'], 'id', 'None'), timezone.now().strftime('%Y%m%d%H%M%S')) class Meta: model = RevenueItem fields = [ 'submissionUser', 'invoiceNumber', 'category', 'description', 'event', 'invoiceItem', 'receivedFrom', 'paymentMethod', 'currentlyHeldBy', 'grossTotal', 'total', 'adjustments', 'fees', 'attachment', 'received', 'receivedDate' ] class Media: js = ( 'js/revenue_reporting.js', 'jquery-ui/jquery-ui.min.js', ) css = { 'all': ('jquery-ui/jquery-ui.min.css', ), }
def __init__(self, siteID=None, highlighter=False, *args, **kwargs): """ Generic Form for relations. :param siteID: ID of the entity the form is used on :param entity_type: Entity type of the entity the form is used on :param relation_form: Type of relation form. :param instance: instance of relation. :param highlighter: whether the form is used in the highlighter :type siteID: int :type entity_type: object or int :type relation_form: object or int :type instance: object :type highlighter: bool """ attrs = { 'data-placeholder': 'Type to get suggestions', 'data-minimum-input-length': 3, 'data-html': True, 'style': 'width: 100%' } css_notes = 'LS' self.highlighter = highlighter entity_type = kwargs.pop('entity_type') if type(entity_type) != str: entity_type = entity_type.__name__ self.relation_form = kwargs.pop('relation_form') if type(self.relation_form) == str: self.relation_form = ContentType.objects.get( app_label='relations', model=self.relation_form.lower()).model_class() self.request = kwargs.pop('request', False) super(GenericRelationForm, self).__init__(*args, **kwargs) instance = getattr(self, 'instance', None) self.fields['relation_type'] = forms.CharField(label='Relation type', required=True) self.helper = FormHelper() self.helper.form_class = '{}Form'.format(str(self.relation_form)) self.helper.form_tag = False lst_src_target = re.findall('[A-Z][^A-Z]*', self.relation_form.__name__) if lst_src_target[0] == lst_src_target[1]: if instance and instance.id: if getattr(instance, 'related_{}A_id'.format( lst_src_target[0].lower())) == int(siteID): self.rel_accessor = (lst_src_target[1], True, 'related_{}B'.format( lst_src_target[1].lower()), 'related_{}A'.format( lst_src_target[0].lower())) else: self.rel_accessor = (lst_src_target[1], False, 'related_{}A'.format( lst_src_target[1].lower()), 'related_{}B'.format( lst_src_target[0].lower())) else: self.rel_accessor = (lst_src_target[1], True, 'related_{}B'.format( lst_src_target[1].lower()), 'related_{}A'.format( lst_src_target[0].lower())) self.fields[ 'relation_type'] = autocomplete.Select2ListCreateChoiceField( label='Relation type', widget=autocomplete.ListSelect2( url='/vocabularies/autocomplete/{}{}relation/normal'. format(lst_src_target[0].lower(), lst_src_target[1].lower()), attrs=attrs)) self.fields['target'] = autocomplete.Select2ListCreateChoiceField( label=lst_src_target[1], widget=autocomplete.ListSelect2( url='/entities/autocomplete/{}'.format( lst_src_target[1].lower()), attrs=attrs), validators=[URLValidator]) elif entity_type.lower() == lst_src_target[0].lower(): self.rel_accessor = (lst_src_target[1], True, 'related_{}'.format( lst_src_target[1].lower()), 'related_{}'.format( lst_src_target[0].lower())) self.fields[ 'relation_type'] = autocomplete.Select2ListCreateChoiceField( label='Relation type', widget=autocomplete.ListSelect2( url='/vocabularies/autocomplete/{}{}relation/normal'. format(lst_src_target[0].lower(), lst_src_target[1].lower()), attrs=attrs)) self.fields['target'] = autocomplete.Select2ListCreateChoiceField( label=lst_src_target[1], widget=autocomplete.ListSelect2( url='/entities/autocomplete/{}'.format( lst_src_target[1].lower()), attrs=attrs), validators=[URLValidator]) elif entity_type.lower() == lst_src_target[1].lower(): self.rel_accessor = (lst_src_target[0], False, 'related_{}'.format( lst_src_target[0].lower()), 'related_{}'.format( lst_src_target[1].lower())) self.fields[ 'relation_type'] = autocomplete.Select2ListCreateChoiceField( label='Relation type', widget=autocomplete.ListSelect2( url='/vocabularies/autocomplete/{}{}relation/reverse'. format(lst_src_target[0].lower(), lst_src_target[1].lower()), attrs=attrs)) self.fields['target'] = autocomplete.Select2ListCreateChoiceField( label=lst_src_target[0], widget=autocomplete.ListSelect2( url='/entities/autocomplete/{}'.format( lst_src_target[0].lower()), attrs=attrs), validators=[URLValidator]) else: print('no hit rel_accessor') if instance and instance.id: self.fields['target'].choices = [ (str( Uri.objects.filter( entity=getattr(instance, self.rel_accessor[2]))[0]), str(getattr(instance, self.rel_accessor[2]))) ] self.fields['target'].initial = (str( Uri.objects.filter( entity=getattr(instance, self.rel_accessor[2]))[0]), str( getattr( instance, self.rel_accessor[2]))) if self.rel_accessor[1]: self.fields['relation_type'].choices = [ (instance.relation_type.id, instance.relation_type.label) ] self.fields['relation_type'].initial = ( instance.relation_type.id, instance.relation_type.label) else: self.fields['relation_type'].choices = [ (instance.relation_type.id, instance.relation_type.label_reverse) ] self.fields['relation_type'].initial = ( instance.relation_type.id, instance.relation_type.label_reverse) if highlighter: css_notes = 'HL' self.helper.include_media = False self.helper.layout = Layout( 'relation_type', 'target', 'start_date_written', 'end_date_written', Accordion( AccordionGroup('Notes and References', 'notes', 'references', active=False, css_id="{}_{}_notes_refs".format( self.relation_form.__name__, css_notes)))) if highlighter: self.fields['HL_start'] = forms.IntegerField( widget=forms.HiddenInput) self.fields['HL_end'] = forms.IntegerField( widget=forms.HiddenInput) self.fields['HL_text_id'] = forms.CharField( widget=forms.HiddenInput) self.helper.layout.extend(['HL_start', 'HL_end', 'HL_text_id'])
class ExpenseReportingForm(forms.ModelForm): payTo = forms.ChoiceField(widget=forms.RadioSelect, choices=RECIPIENT_CHOICES, label=_('This expense to be paid to:'), initial=1) payBy = forms.ChoiceField(widget=forms.RadioSelect, choices=PAYBY_CHOICES, label=_('Report this expense as:'), initial=1) paymentMethod = autocomplete.Select2ListCreateChoiceField( choice_list=get_method_list, required=False, widget=autocomplete.ListSelect2(url='paymentMethod-list-autocomplete'), label=_('Payment method'), ) def __init__(self, *args, **kwargs): user = kwargs.pop('user', None) user_id = getattr(user, 'id') super(ExpenseReportingForm, self).__init__(*args, **kwargs) self.helper = FormHelper() if user.has_perm('financial.mark_expenses_paid'): payment_section = Div( Div(HTML( '<a data-toggle="collapse" href="#collapsepayment">%s</a> (%s)' % (_('Mark as Approved/Paid'), _('click to expand'))), css_class='card-header'), Div( 'approved', 'paid', Div( Field('paymentDate', css_class='datepicker', wrapper_class='col-md-3'), Field('paymentMethod', wrapper_class='col-md-6'), css_class='form-row', ), # The hidden input of accrual date must be passed as a naive datetime. # Django will take care of converting it to local time Field( 'accrualDate', type="hidden", value=timezone.make_naive(timezone.now()) if timezone.is_aware(timezone.now()) else timezone.now()), HTML( '<p style="margin-top: 30px;"><strong>%s</strong> %s</p>' % (_('Note:'), _('For accounting purposes, please do not mark expenses as paid unless they have already been paid to the recipient.' ))), css_class='card-body collapse', id='collapsepayment', ), css_class='card my-4') else: payment_section = None # Add category button should only appear for users who are allowed to add categories if user.has_perm('financial.add_expensecategory'): related_url = reverse('admin:financial_expensecategory_add' ) + '?_to_field=id&_popup=1' added_html = [ '<a href="%s" class="btn btn-outline-secondary related-widget-wrapper-link add-related" id="add_id_category"> ' % related_url, '<img src="%sadmin/img/icon-addlink.svg" width="10" height="10" alt="%s"/></a>' % (getattr(settings, 'STATIC_URL', '/static/'), _('Add Another')) ] category_field = Div(Div('category', css_class='col-sm-11'), Div(HTML('\n'.join(added_html)), css_class='col-sm-1', style='margin-top: 25px;'), css_class='related-widget-wrapper row') else: category_field = Div('category') self.helper.layout = Layout( Field('submissionUser', type="hidden", value=user_id), Field('payToUser', type="hidden", value=user_id), 'payTo', 'payBy', 'payToLocation', 'payToName', category_field, 'description', 'hours', 'total', 'reimbursement', payment_section, 'attachment', Submit('submit', _('Submit')), ) def clean(self): # Custom cleaning ensures that user, hours, and total # are not reported where not necessary. super(ExpenseReportingForm, self).clean() payTo = self.cleaned_data.get('payTo') payToUser = self.cleaned_data.get('payToUser') payToLocation = self.cleaned_data.get('payToLocation') payToName = self.cleaned_data.get('payToName') payBy = self.cleaned_data.get('payBy') hours = self.cleaned_data.get('hours') total = self.cleaned_data.get('total') paid = self.cleaned_data.get('paid') paymentDate = self.cleaned_data.get('paymentDate') # Automatically marks expenses that are paid # upon submission as accruing at the date of payment. if paid and paymentDate: self.cleaned_data['accrualDate'] = paymentDate else: self.cleaned_data.pop('paymentDate', None) if payTo != '1' and payToUser: self.cleaned_data.pop('payToUser', None) if payTo != '2' and payToLocation: self.cleaned_data.pop('payToLocation', None) if payTo != '3' and payToName: self.cleaned_data.pop('payToName', None) if payBy == '1' and total: self.cleaned_data.pop('total', None) if payBy == '2' and hours: self.cleaned_data.pop('hours', None) return self.cleaned_data class Meta: model = ExpenseItem fields = [ 'submissionUser', 'payToUser', 'payToLocation', 'payToName', 'category', 'description', 'hours', 'total', 'reimbursement', 'attachment', 'approved', 'paid', 'paymentDate', 'paymentMethod', 'accrualDate' ] widgets = { 'category': ExpenseCategoryWidget, } class Media: js = ('admin/js/admin/RelatedObjectLookups.js', 'jquery-ui/jquery-ui.min.js', 'js/expense_reporting.js') css = { 'all': ('jquery-ui/jquery-ui.min.css', ), }
class ExpressionStudyCreateForm(forms.ModelForm): ome = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/ome-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) experimental_design = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/experimental-design-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) topics = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/topic-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) tissues = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/tissue-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) age = SimpleArrayField(forms.CharField(), required=False) sex = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/sex-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) dev_stage = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/dev-stage-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) antibody = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/antibody-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) mutant = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/mutant-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) cell_sorted = autocomplete.Select2ListCreateChoiceField( required=False, widget=autocomplete.TagSelect2(url='/studies/cell-sorted-autocomplete', attrs={"data-tags":"true", "data-html":True}) ) keywords = SimpleArrayField(forms.CharField(), required=False) class Meta: model = ExpressionStudy fields = ["article", "pmid", "samples_count", "read_groups", "edit_groups"] def __init__(self, *args, **kwargs): self.user = kwargs.pop('user') super(ExpressionStudyCreateForm, self).__init__(*args, **kwargs) self.fields['read_groups'].help_text = "Groups with viewing permission on project and subentities. Will be ignored if the visibility is set to public. Use 'ctrl' to select multiple/unselect." self.fields['edit_groups'].help_text = "Groups with editing permission on project and subentities. Use 'ctrl' to select multiple/unselect." # TODO : Give link to group creation interface? groups = self.user.groups.all() self.fields['read_groups'].queryset = groups self.fields['edit_groups'].queryset = groups self.fields.keyOrder = [ 'article', 'pmid', 'samples_count', 'species' 'ome', 'technology', 'experimental_design', 'topics', 'tissues', 'age', 'sex', 'dev_stage', 'antibody' 'mutant', 'cell_sorted', 'edit_groups', 'read_groups'] self.helper = FormHelper(self) self.helper.form_method = 'POST' self.helper.add_input(Submit('save', 'Save'))
class ExpenseReportingForm(forms.ModelForm): payTo = forms.ChoiceField(widget=forms.RadioSelect, choices=RECIPIENT_CHOICES, label=_('This expense to be paid to:'), initial=1) payBy = forms.ChoiceField(widget=forms.RadioSelect, choices=PAYBY_CHOICES, label=_('Report this expense as:'), initial=1) paymentMethod = autocomplete.Select2ListCreateChoiceField( choice_list=get_method_list, required=False, widget=autocomplete.ListSelect2(url='paymentMethod-list-autocomplete')) def __init__(self, *args, **kwargs): user = kwargs.pop('user', None) user_id = getattr(user, 'id') super(ExpenseReportingForm, self).__init__(*args, **kwargs) self.helper = FormHelper() if user.has_perm('financial.mark_expenses_paid'): payment_section = Div( Div(HTML( '<div class="panel-title"><a data-toggle="collapse" href="#collapsepayment">%s</a> (%s)</div>' % (_('Mark as Approved/Paid'), _('click to expand'))), css_class='panel-heading'), Div( 'approved', 'paid', Div(Field('paymentDate', css_class='datepicker'), 'paymentMethod', css_class='form-inline'), Field('accrualDate', type="hidden", value=timezone.now()), HTML( '<p style="margin-top: 30px;"><strong>%s</strong> %s</p>' % (_('Note:'), _('For accounting purposes, please do not mark expenses as paid unless they have already been paid to the recipient.' ))), css_class='panel-body collapse', id='collapsepayment', ), css_class='panel panel-default') else: payment_section = None self.helper.layout = Layout( Field('submissionUser', type="hidden", value=user_id), Field('payToUser', type="hidden", value=user_id), 'payTo', 'payBy', 'payToLocation', 'payToName', 'category', 'description', 'hours', 'total', 'reimbursement', payment_section, 'attachment', Submit('submit', _('Submit')), ) def clean(self): # Custom cleaning ensures that user, hours, and total # are not reported where not necessary. super(ExpenseReportingForm, self).clean() payTo = self.cleaned_data.get('payTo') payToUser = self.cleaned_data.get('payToUser') payToLocation = self.cleaned_data.get('payToLocation') payToName = self.cleaned_data.get('payToName') payBy = self.cleaned_data.get('payBy') hours = self.cleaned_data.get('hours') total = self.cleaned_data.get('total') paid = self.cleaned_data.get('paid') paymentDate = self.cleaned_data.get('paymentDate') # Automatically marks expenses that are paid # upon submission as accruing at the date of payment. if paid: self.cleaned_data['accrualDate'] = paymentDate else: self.cleaned_data.pop('paymentDate', None) if payTo != '1' and payToUser: self.cleaned_data.pop('payToUser', None) if payTo != '2' and payToLocation: self.cleaned_data.pop('payToLocation', None) if payTo != '3' and payToName: self.cleaned_data.pop('payToName', None) if payBy == '1' and total: self.cleaned_data.pop('total', None) if payBy == '2' and hours: self.cleaned_data.pop('hours', None) return self.cleaned_data class Meta: model = ExpenseItem fields = [ 'submissionUser', 'payToUser', 'payToLocation', 'payToName', 'category', 'description', 'hours', 'total', 'reimbursement', 'attachment', 'approved', 'paid', 'paymentDate', 'paymentMethod', 'accrualDate' ] widgets = { 'category': ExpenseCategoryWidget, } class Media: js = ( 'js/expense_reporting.js', 'jquery-ui/jquery-ui.min.js', ) css = { 'all': ('jquery-ui/jquery-ui.min.css', ), }
class InventoryitemForm(forms.ModelForm): class Meta: model = Inventoryitem fields = ('__all__') item_indate = forms.DateField(label='Date entered DB', initial=datetime.date.today) item_pickup = forms.ModelChoiceField( label='Pickup #', queryset=Pickup.objects.all(), widget=autocomplete.ModelSelect2(url='pickup-autocomplete')) # item_category = autocomplete.Select2ListCreateChoiceField(choice_list=None, widget=autocomplete.ListSelect2(url='category-autocomplete')) item_category = forms.ModelChoiceField( label='Item Category', queryset=Category.objects.only('category'), to_field_name='category', widget=autocomplete.ListSelect2(url='category-autocomplete')) item_segment = autocomplete.Select2ListCreateChoiceField( choice_list=Segment.objects.all(), widget=autocomplete.ListSelect2(url='segment-autocomplete', forward=['item_category']), ) item_type = autocomplete.Select2ListCreateChoiceField( choice_list=Type.objects.all(), widget=autocomplete.ListSelect2( url='type-autocomplete', forward=['item_category', 'item_segment']), required=False, ) item_quantity = forms.IntegerField(initial=1, required=False) item_brand = autocomplete.Select2ListCreateChoiceField( choice_list=Brand.objects.all(), widget=autocomplete.ListSelect2(url='brand-autocomplete'), required=False, ) item_size = autocomplete.Select2ListCreateChoiceField( choice_list=Size.objects.all(), widget=autocomplete.ListSelect2( url='size-autocomplete', forward=['item_category', 'item_segment']), required=False, ) item_color = forms.CharField(required=False, disabled=True) colors = forms.ModelMultipleChoiceField( queryset=Color.objects.all(), widget=autocomplete.ModelSelect2Multiple(url='color-autocomplete'), required=False) # colors = forms.ModelMultipleChoiceField(queryset=Color.objects.all(), required=False) def get_firstassessment_choice_list(): return ['Sale', 'Donation', 'Recycling'] item_firstassessment = autocomplete.Select2ListChoiceField( choice_list=get_firstassessment_choice_list, widget=autocomplete.ListSelect2(url='firstassessment-autocomplete')) item_donationvalue = forms.DecimalField(min_value=0, decimal_places=2, required=False) def get_condition_choice_list(): return [ 'New in a box', 'New w/o tags', 'New w tags', 'Like new', 'Gently used', 'Used', 'w defect' ] item_condition = autocomplete.Select2ListChoiceField( choice_list=get_condition_choice_list, widget=autocomplete.ListSelect2(url='condition-autocomplete'), required=False) # cut = forms.ModelMultipleChoiceField( # queryset= Cut.objects.all(), # widget=forms.CheckboxSelectMultiple(), # ) # item_cut = autocomplete.Select2ListCreateChoiceField(choice_list=Cut.objects.all(), widget=autocomplete.ListSelect2(url='cut-autocomplete', forward=['itemtype']), required=False,) item_cut = forms.CharField(required=False, disabled=True) cuts = forms.ModelMultipleChoiceField( queryset=Cut.objects.all(), widget=autocomplete.ModelSelect2Multiple(url='cut-autocomplete', forward=['itemtype']), required=False) item_style = forms.CharField(required=False, disabled=True) additional_info = forms.CharField( label='Additional information if necessary. Useful for unique items.', required=False, widget=forms.Textarea) # item_fabric = autocomplete.Select2ListCreateChoiceField(choice_list=Fabric.objects.all(), widget=autocomplete.ListSelect2(url='fabric-autocomplete'), required=False, disabled=True) item_fabric = forms.CharField(required=False, disabled=True) item_usecase = forms.CharField(required=False, disabled=True) usecases = forms.ModelMultipleChoiceField( queryset=Usecase.objects.all(), widget=autocomplete.ModelSelect2Multiple(url='usecase-autocomplete'), required=False) item_postprice = forms.DecimalField( decimal_places=2, required=False, ) item_origprice = forms.DecimalField( decimal_places=2, required=False, ) def get_status_choice_list(): return [ 'Ready4donation', 'Ready4sale', 'Ready4recycling', 'Donated', 'Up4sale', 'Ready2ship', 'Shipped', 'Recycled', 'Treatment', 'Returned', 'Lost', 'Sent2realreal', 'Soldonrealreal', 'Soldonbuffxchange', 'Sent2consignment', 'Sent2revolve' ] item_status = autocomplete.Select2ListCreateChoiceField( choice_list=get_status_choice_list, widget=autocomplete.ListSelect2(url='status-autocomplete')) def get_customer_status_choice_list(): return [ 'Ready for donation', 'Ready for sale', 'Ready for recycling', 'Donated', 'Up for sale', 'Ready to ship', 'Shipped', 'Recycled', 'Treatment' ] customerfacingstatus = autocomplete.Select2ListCreateChoiceField( label='Customer Facing Status', choice_list=get_customer_status_choice_list, widget=autocomplete.ListSelect2(url='customerstatus-autocomplete')) item_statuschangedate = forms.DateField(label='Status Changed', initial=datetime.date.today) item_location = forms.CharField(required=False, ) def get_mktplace_choice_list(): return ['Up', 'Down', 'Sold', 'Returned'] ebay = autocomplete.Select2ListChoiceField( choice_list=get_mktplace_choice_list, widget=autocomplete.ListSelect2(url='mktplace-autocomplete'), required=False, ) poshmark = autocomplete.Select2ListChoiceField( choice_list=get_mktplace_choice_list, widget=autocomplete.ListSelect2(url='mktplace-autocomplete'), required=False, ) vinted = autocomplete.Select2ListChoiceField( choice_list=get_mktplace_choice_list, widget=autocomplete.ListSelect2(url='mktplace-autocomplete'), required=False, ) tradesy = autocomplete.Select2ListChoiceField( choice_list=get_mktplace_choice_list, widget=autocomplete.ListSelect2(url='mktplace-autocomplete'), required=False, ) craigslist = autocomplete.Select2ListChoiceField( choice_list=get_mktplace_choice_list, widget=autocomplete.ListSelect2(url='mktplace-autocomplete'), required=False, ) letgo = autocomplete.Select2ListChoiceField( choice_list=get_mktplace_choice_list, widget=autocomplete.ListSelect2(url='mktplace-autocomplete'), required=False, ) offerup = autocomplete.Select2ListChoiceField( choice_list=get_mktplace_choice_list, widget=autocomplete.ListSelect2(url='mktplace-autocomplete'), required=False, ) offline = forms.ChoiceField( choices=[('', None), (1, 'Sold')], required=False, ) def clean(self): cleaned_data = self.cleaned_data item_category = cleaned_data.get("item_category") db_value = Category.objects.get(category=item_category).category # if db_value=='Clothes' or db_value=='Shoes' or db_value=='Accessories': # # Keep the database consistent. The user may have # # submitted a shipping_destination even if shipping # # was not selected # #self.cleaned_data['item_brand'] = '' # if not cleaned_data['item_brand'] or not cleaned_data['item_size'] or not cleaned_data['item_color']: # raise forms.ValidationError("'item_brand', 'item_size', and 'item_color' are required.") # else: # cleaned_data['item_brand'] = '' # cleaned_data['item_size'] = '' # cleaned_data['item_color'] = '' if not cleaned_data['item_type']: if db_value == 'Clothes' or db_value == 'Shoes' or db_value == 'Accessories' or db_value == 'Electronics' or db_value == 'Toys' or db_value == 'Home' or db_value == 'SportsGear' or db_value == 'Cosmetics': raise forms.ValidationError("'item_type' is required.") # if not cleaned_data['item_brand']: # if db_value=='Clothes' or db_value=='Shoes' or db_value=='Accessories' or db_value=='Electronics' or db_value=='Toys' or db_value=='Home' or db_value=='SportsGear' or db_value=='Cosmetics': # raise forms.ValidationError("'item_brand' is required.") if not cleaned_data['item_size']: if db_value == 'Clothes' or db_value == 'Shoes': raise forms.ValidationError("'item_size' is required.") # item_color=cleaned_data.get('item_color') # item_color1=cleaned_data['item_color'] # color = Color.objects.get(color=item_color1).color #if not cleaned_data['colors']: # if db_value=='Clothes' or db_value=='Shoes': # raise forms.ValidationError("'item_color' is required.") #item_id = cleaned_data.get('id') #item_status = cleaned_data.get('item_status') #item_status_val = Inventoryitem.objects.get(id=item_id).item_status #poshmark = cleaned_data.get('poshmark') #ebay =cleaned_data.get('ebay') #vinted =cleaned_data.get('vinted') #tradesy =cleaned_data.get('tradesy') #craigslist =cleaned_data.get('craigslist') #offerup =cleaned_data.get('offerup') #letgo =cleaned_data.get('letgo') # if item_status_val=='Shipped': # if (poshmark=='up' or ebay=='up' or vinted=='up' or tradesy=='up' or craigslist=='up' or offerup=='up' or letgo=='up') : # raise ValidationError("cant change status for shipping when 'Up' on one of the platforms") return self.cleaned_data def __init__(self, *args, **kwargs): # self.id = kwargs.pop('id') super(InventoryitemForm, self).__init__(auto_id=True, *args, **kwargs)