def __mark_as_favorite(self): user = PyFormsMiddleware.user() favorite = None try: favorite = Favorite.objects.get(user=user, funding=self.obj) if favorite.active: self._favoritebtn.label = self.ADD_FAVORITE_LABEL self._favoritebtn.css = 'blue' favorite.active = False favorite.save() else: self._favoritebtn.label = self.REMOVE_FAVORITE_LABEL self._favoritebtn.css = 'primary basic' favorite.active = True favorite.save() except Favorite.DoesNotExist: Favorite(user=user, funding=self.obj, active=True).save() self._favoritebtn.label = self.REMOVE_FAVORITE_LABEL self._favoritebtn.css = 'primary basic' sidemenu_app = PyFormsMiddleware.get_instance('sidemenu-app') sidemenu_app.reload()
def populate_list(self): self._list.value = AccessRequest.objects.filter( requested_by=PyFormsMiddleware.user() ) self._accesses.value = ResourceAccess.objects.filter( user=PyFormsMiddleware.user() )
def TITLE(self): user = PyFormsMiddleware.user() n_msgs = Notification.objects.filter(user=user, read_on=None).count() if n_msgs == 0: return """<i class="bell icon"></i>""" else: return """<i class="bell red icon"></i> {0}""".format(n_msgs)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.formset = [ "info:Group your notifications by the frequency you want to received them." ] PERIODS = [(n, c) for c, n in NotificationType.PERIODS] user = PyFormsMiddleware.user() for n in NotificationType.objects.filter( active=True, visible=True).order_by("code"): field_name = "period_{0}".format(n.pk) field = ControlCombo( n.label, items=PERIODS, changed_event=make_lambda_func(self.configure, notification_pk=n.pk), ) try: un = UserNotificationConf.objects.get(notification_type=n, user=user) field.value = un.period except UserNotificationConf.DoesNotExist: field.value = n.period traceback.print_exc() setattr(self, field_name, field) self.formset.append(field_name)
def create_model_formfields(self): super().create_model_formfields() obj = self.model_object user = PyFormsMiddleware.user() person = user.person_user.first() self._costcenter = ControlAutoComplete( 'Cost center', queryset=CostCenter.objects.active().by_person(person), changed_event=self.load_finance_projects, default=obj.expensecode.project.costcenter.pk if obj and obj.expensecode else None) self._financeprj = ControlAutoComplete( 'Finance project', queryset=Project.objects.all(), enabled=False, changed_event=self.load_expense_codes, default=obj.expensecode.project.pk if obj and obj.expensecode else None) if obj and obj.expensecode: self.load_expense_codes() if person is None: self.warning('Sorry you require a person associated to your user.') return
def __revoke_evt(self, popup, button): if button == 'Confirm': access = self.model_object access.revoke(PyFormsMiddleware.user()) self.end_date.value = access.end_date self._revokebtn.hide() popup.close()
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._topics = ControlMultipleSelection('Topics') self._subjects = ControlMultipleSelection('Subjects') self._refresh_btn = ControlButton('<i class="filter icon"></i> Filter', default=self.render_html, label_visible=False) self._mytopics_btn = ControlButton( '<i class="plus icon"></i><i class="certificate icon"></i> Add my topics', default=self.__add_mytopics, css='basic', label_visible=False) self._htmlcontrol = ControlTemplate( 'Timeline', template='timeline/funding-opportunities.html') self.formset = [('_topics', '_subjects'), no_columns('_mytopics_btn', '_refresh_btn'), '_htmlcontrol'] self.__load_topics() self.__load_subjects() self.render_html(False) request = PyFormsMiddleware.get_request() self.fund_id = request.GET.get('fund', None)
def mark_to_update_client(self): self._update_client = True request = PyFormsMiddleware.get_request() if self.parent is not None and \ request is not None and \ hasattr(request,'updated_apps'): request.updated_apps.add_top(self.parent)
def update_object_fields(self, obj): obj = super().update_object_fields(obj) app_uid = self._parmsapp_uid if app_uid: app = PyFormsMiddleware.get_instance(self._parmsapp_uid) obj.field_parms = str(app.get_parameters()) return obj
def __add_mytopics(self): user = PyFormsMiddleware.user() profile = Profile.objects.get(user=user) topics = list(self._topics.value) for topic in profile.topics.all(): topics.append(str(topic.pk)) self._topics.value = topics
def __init__(self, *args, **kwargs): self.user = PyFormsMiddleware.user() super().__init__(*args, **kwargs) self._list.columns_size = ["60%", "10%", "10%", "10%", "10%"] self._list.columns_align = ["left"] * len(self.LIST_DISPLAY) self._list.columns_align[-2] = "right" self._list.columns_align[-1] = "center"
def deserialize(self, properties): #self._label = properties.get('label','') #self._help = properties.get('help','') #self._visible = properties.get('visible',True) if isinstance(self.value, BaseWidget): self.value = PyFormsMiddleware.get_instance(self.value.uid) if self.value is not None: self.value.parent = self.parent else: self.value = None
def __has_permissions(self): """Custom method to check authorizations since PyForms ModelForm only inherits the permissions system for inlines. Once this is fixed, the following methods should be cleaned up. """ user = PyFormsMiddleware.user() return any([ user.is_superuser, settings.PROFILE_HUMAN_RESOURCES in user.groups.all(), ])
def get_readonly(self, default): res = super().get_readonly(default) obj = self.model_object if obj and obj.status in ['rejected', 'approved']: return res + ['status'] if obj and obj.has_approve_permissions(PyFormsMiddleware.user()): return res else: return res + ['status']
def mark_to_update_client(self): """ Mark the control to update in the client side. """ self._update_client = True request = PyFormsMiddleware.get_request() if self.parent is not None and \ request is not None and \ hasattr(request,'updated_apps'): request.updated_apps.add_top(self.parent)
def validate_object(self, obj): obj = super().validate_object(obj) formtype = self.select_form.objects.first() if formtype is not None: if self._custom_form_app_id: custom_form_app = PyFormsMiddleware.get_instance( self._custom_form_app_id) custom_form_app.validate_custom_form(self.model_object) return obj
def update_object_fields(self, obj): """ Update the created by field. :param Reimbursement obj: :return: Return the updated reimbursement object. """ obj = super().update_object_fields(obj) if obj.pk is None: obj.created_by = PyFormsMiddleware.user() return obj
def save_custom_model_form(self): formtype = self.select_form.objects.first() if formtype is None: ctype = ContentType.objects.get_for_model(self.model) FormObject.objects.filter(content_type=ctype, object_id=self.object_pk).delete() else: if self._custom_form_app_id: custom_form_app = PyFormsMiddleware.get_instance( self._custom_form_app_id) custom_form_app.save_custom_form(self.model_object)
def __copybtn_event(self): obj = self.model_object obj.pk = None obj.fundingopportunity_name += ' (copy)' obj.save() for topic in self.model_object.topics.all(): obj.topics.add(topic) app = PyFormsMiddleware.get_instance('opportunities-app') app.populate_list() app.show_edit_form(obj.pk) self.info('Copied')
def __reject_evt(self): req = self.model_object req.comment = self.comment.value req.reject(PyFormsMiddleware.user(), comment=self.comment.value) self._acceptbtn.hide() self._rejectbtn.hide() self._until.hide() self.alert('The access request was rejected!') self.closed_by.show() self.closed_on.show() self.closed_by.value = str(req.closed_by) self.closed_on.value = req.closed_on self.comment.readonly = True
def __accept_evt(self): req = self.model_object req.comment = self.comment.value req.accept(PyFormsMiddleware.user(), until=self._until.value, comment=self.comment.value) self._acceptbtn.hide() self._rejectbtn.hide() self._until.hide() self.success('The access request was accepted successfully.') self.closed_by.show() self.closed_on.show() self.closed_by.value = str(req.closed_by) self.closed_on.value = req.closed_on self.comment.readonly = True
def __init__(self, *args, **kwargs): user = PyFormsMiddleware.user() try: person = Person.objects.get(auth_user=user) except Person.DoesNotExist: person = Person.objects.get(email=user.email) person.auth_user = user person.save() super().__init__(pk=person.pk, *args, **kwargs) membership = GroupMembership.objects.filter(person=person).first() membership_html = ( f'<h3><a>{membership.group}</a> - {membership.position}</h3>' if membership is not None else '') s = (f'<h1>{person.full_name}</h1>' '<address>' f'{membership_html}' '\n' f'<a href="mailto:{person.email}" target="_blank">' f'<i class="envelope icon"></i>{person.email}</a>' '</address>') self._summary = ControlSimpleLabel( default=s, label_visible=False, field_css='fourteen wide', ) if hr_module_installed: self._privateinfo = ControlEmptyWidget( parent=self, name='_privateinfo', default=ProfilePrivateInfoFormWidget( pk=person.get_privateinfo().pk, has_cancel_btn=False, ), ) try: img_url = self.model_object.thumbnail_url( geometry_string='300x300') except AttributeError: img_url = static('square-image.png') self._img = ControlImg('Image', default=img_url, label_visible=False, field_css='three wide')
def model_object(self): """ django.db.models.Model object: Return the current object in edition. """ if self.object_pk is None: return None else: queryset = self.model.objects.all() # check if the model has a query_set function # if so use it to get the data for visualization if hasattr(self.model, 'get_queryset'): request = PyFormsMiddleware.get_request() queryset = self.model.get_queryset(request, queryset) return queryset.get(pk=self.object_pk)
def __get_queryset(self): """ """ queryset = self.model.objects.all() #used to filter the model for inline fields if self.parent_field: queryset = queryset.filter(**{self.parent_field.name: self.parent_pk}) # check if the model has a query_set function # if so use it to get the data for visualization request = PyFormsMiddleware.get_request() if hasattr(self.model, 'get_queryset'): queryset = self.model.get_queryset(request, queryset) return self.get_queryset(request, queryset)
def __item_selection_changed_evt(self): request_form = PyFormsMiddleware.get_instance(self.request_form_id) req = AccessRequest.objects.get(pk=self._list.selected_row_id) if req.is_closed(): if req.is_approved(): self.success_popup('The request was approved!', 'Approved') else: if req.comment: self.alert_popup(req.comment, title='Rejected!') else: self.alert_popup('No further information was provided.', title='Rejected!') request_form.show_create_form() else: request_form.show_edit_form( pk=self._list.selected_row_id )
def get_instance(request, application_id, app_data=None): app = PyFormsMiddleware.get_instance(application_id) if app is None: return None if not app.has_permissions(request.user): raise PermissionDenied( 'The user do not have access to the application') if not app.has_session_permissions(request.user): raise PermissionDenied( 'The user do not have access to the application') if app_data is not None: app.load_serialized_form(app_data) for m in request.updated_apps.applications: m.commit() return app
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) user = PyFormsMiddleware.user() # Filter Auth Groups to the groups the user is a member of. self.group.queryset = self.group.queryset.order_by('name') if not user.is_superuser: self.group.queryset = self.group.queryset & user.groups.all() if self.group.queryset.count() == 1: self.group.value = self.group.queryset.first().pk if self.object_pk is not None: self._duplicate_btn = ControlButton( 'Duplicate', default=self.__duplicate_btn_evt, label_visible=False, css='basic brown')
def __init__(self, obj_pk): self.obj = FundingOpportunity.objects.get(pk=obj_pk) ModelViewFormWidget.__init__(self, title=self.obj.fundingopportunity_name, pk=obj_pk) if self.fundingopportunity_loideadline.value is None: self.fundingopportunity_loideadline.hide() if self.fundingopportunity_fullproposal.value is None: self.fundingopportunity_fullproposal.hide() user = PyFormsMiddleware.user() self._editbtn = ControlButton('<i class="icon edit" ></i> Edit', label_visible=False) self._editbtn.value = 'window.location = "/app/opportunities-app/#/funding.apps.fundingopportunities.EditFundingApp/?fund_pk={0}";'.format( obj_pk) if not user.groups.filter( name__in=[settings.PERMISSION_EDIT_FUNDING]).exists(): self._editbtn.hide() self._favoritebtn = ControlButton('Favorite') self._favoritebtn.label_visible = False self._favoritebtn.value = self.__mark_as_favorite if Favorite.objects.filter(user=user, funding=self.obj, active=True).exists(): self._favoritebtn.label = self.REMOVE_FAVORITE_LABEL self._favoritebtn.css = 'primary basic' else: self._favoritebtn.label = self.ADD_FAVORITE_LABEL self._favoritebtn.css = 'blue' self._urlbtn = ControlButton("<i class='ui icon external'></i> URL") self._urlbtn.label_visible = False self._urlbtn.css = 'basic blue' if self.obj and self.obj.fundingopportunity_link: self._urlbtn.value = "window.open('{0}', '_blank');".format( self.obj.fundingopportunity_link) else: self._urlbtn.hide()
def configure(self, notification_pk=None): if notification_pk is None: return try: n = NotificationType.objects.get(pk=notification_pk) except NotificationType.DoesNotExist: traceback.print_exc() user = PyFormsMiddleware.user() try: un = UserNotificationConf.objects.get(notification_type=n, user=user) except UserNotificationConf.DoesNotExist: un = UserNotificationConf(notification_type=n, user=user) field = getattr(self, "period_{0}".format(n.pk)) un.period = field.value un.save()
def populate_table(self): request = PyFormsMiddleware.get_request() self._directory.value = request.GET.get('p', self._directory.value) #storage = conf.MAESTRO_STORAGE_MANAGER.get(request.user) path = self._directory.value files = [] for index, filename in enumerate(os.listdir(path)): filepath = os.path.join(path, filename) is_dir = os.path.isdir(filepath) filetype = '' filesize = 0 if not is_dir: _, filetype = os.path.splitext(filename) filetype = filetype[1:] filesize = os.path.getsize(filepath) if self._only_folders.value and not is_dir: continue link = '' function = '' if is_dir: #function = 'javascript:add_file2control("{1}", "{0}");'.format(f.fullpath, self._control_id.value) link = """<a target='_blank' href='{0}' ><i class='selected radio icon' ></id></a>""".format( function) if self._only_folders.value: #function = 'javascript:add_file2control("{1}", "{0}");'.format(f.fullpath, self._control_id.value) link = """<a target='_blank' href='{0}' ><i class='selected radio icon' ></id></a>""".format( function) files.append([ "<i class='folder icon' ></id>" if is_dir else "<i class='file outline icon' ></id>", filename, filetype, '' if is_dir else sizeof_fmt(filesize), ]) self._files_table.value = ([['', '..', 'dir']] if path != '/' else []) + sorted(files, key=lambda a: (a[2], a[1]))