Exemple #1
0
    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()
        )
Exemple #3
0
 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
Exemple #6
0
 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()
Exemple #7
0
    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)
Exemple #8
0
 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)
Exemple #9
0
    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
Exemple #10
0
    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
Exemple #11
0
    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"
Exemple #12
0
    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']
Exemple #15
0
 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')
Exemple #20
0
    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
Exemple #21
0
 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
Exemple #22
0
    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')
Exemple #23
0
    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)
Exemple #24
0
    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
            )
Exemple #26
0
    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')
Exemple #28
0
    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()
Exemple #30
0
    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]))