Ejemplo n.º 1
0
    def autorita_ok(cls, piano, tipologia, contatto=True):
        _res = False
        _has_tipologia = False

        if piano.soggetto_proponente and \
        piano.autorita_competente_vas.all().count() > 0 and \
        piano.autorita_istituzionali.all().count() >= 0 and \
        piano.altri_destinatari.all().count() >= 0 and \
        piano.soggetti_sca.all().count() >= 0:
            for _c in piano.soggetti_sca.all():
                _tipologia = _c.tipologia if contatto else \
                    Contatto.attore(_c.user, tipologia=TIPOLOGIA_ATTORE[tipologia])
                if _tipologia.upper() == tipologia.upper():
                    _has_tipologia = True
                    break

            if not _has_tipologia:
                for _c in piano.autorita_istituzionali.all():
                    _tipologia = _c.tipologia if contatto else \
                        Contatto.attore(_c.user, tipologia=TIPOLOGIA_ATTORE[tipologia])
                    if _tipologia.upper() == tipologia.upper():
                        _has_tipologia = True
                        break

            if not _has_tipologia:
                for _c in piano.altri_destinatari.all():
                    _tipologia = _c.tipologia if contatto else \
                        Contatto.attore(_c.user, tipologia=TIPOLOGIA_ATTORE[tipologia])
                    if _tipologia.upper() == tipologia.upper():
                        _has_tipologia = True
                        break

            _res = _has_tipologia
        return _res
Ejemplo n.º 2
0
 def resolve_attore(self, info, **args):
     organization = info.context.session.get('organization', None)
     token = info.context.session.get('token', None)
     _attore = None
     if token:
         _attore = Contatto.attore(self, token=token)
     elif organization:
         _attore = Contatto.attore(self, organization=organization)
     return _attore
Ejemplo n.º 3
0
    def __call__(self, request):
        if not request.user.is_authenticated or \
        not request.user.is_active or \
        request.user.is_anonymous:
            self.redirect_to_login(request)
        else:
            token = request.session[
                'token'] if 'token' in request.session else None
            if token:
                try:
                    _t = Token.objects.get(key=token)
                    if _t.is_expired():
                        if not request.user.is_superuser:
                            return self.redirect_to_login(request)
                except BaseException:
                    traceback.print_exc()

            organization = request.session[
                'organization'] if 'organization' in request.session else None
            if not organization:
                if not request.user.is_superuser:
                    return self.redirect_to_login(request)
            else:
                try:
                    Organization.objects.get(code=organization)
                except BaseException:
                    traceback.print_exc()
                    if not request.user.is_superuser:
                        return self.redirect_to_login(request)

            attore = request.session[
                'attore'] if 'attore' in request.session else None
            if not attore:
                try:
                    if token:
                        attore = Contatto.attore(request.user, token=token)
                    elif organization:
                        attore = Contatto.attore(request.user,
                                                 organization=organization)
                    request.session['attore'] = attore
                except BaseException:
                    traceback.print_exc()

                if not attore:
                    if not request.user.is_superuser:
                        return self.redirect_to_login(request)
        # ------------------------
        response = self.get_response(request)
        # ------------------------

        # Code to be executed for each request/response after
        # the view is called.

        return response
Ejemplo n.º 4
0
def is_actor_for_token(token, actor):
    _attore = None
    if token and \
    (isinstance(token, str) or isinstance(token, Token)):
        token = Token.objects.get(key=token)
        _attore = Contatto.attore(token.user, token=token.key)

    if _attore is None:
        return False
    else:
        return (_attore.lower() == actor.lower())
Ejemplo n.º 5
0
def is_actor_for_organization(user_info, actor):
    _user = user_info[0]
    _organization = user_info[1]
    _attore = None
    if _user and \
    _organization and isinstance(_organization, Organization):
        _attore = Contatto.attore(_user, organization=_organization.code)

    if _attore is None:
        return False
    else:
        return (_attore == actor)
Ejemplo n.º 6
0
    def mutate_and_get_payload(cls, root, info, **input):
        try:
            _data = input.get('contatto')
            # Ente (M)
            if 'ente' in _data:
                _ente = _data.pop('ente')
                _ente = Organization.objects.get(usermembership__member=info.context.user, code=_ente['code'])
                _data['ente'] = _ente

            if rules.test_rule('strt_users.is_RUP_of', info.context.user, _data['ente']):
                # Tipologia (M)
                if 'tipologia' in _data:
                    _tipologia = _data.pop('tipologia')
                    if _tipologia and _tipologia in TIPOLOGIA_CONTATTO:
                        _data['tipologia'] = _tipologia
                _contatto = Contatto()
                nuovo_contatto = update_create_instance(_contatto, _data)
                return cls(nuovo_contatto=nuovo_contatto)
            else:
                return GraphQLError(_("Forbidden"), code=403)
        except BaseException as e:
            tb = traceback.format_exc()
            logger.error(tb)
            return GraphQLError(e, code=500)
Ejemplo n.º 7
0
 def resolve_attore(self, info, **args):
     organization = info.context.session.get('organization', None)
     token = info.context.session.get('token', None)
     return Contatto.attore(self, organization, token)
Ejemplo n.º 8
0
 def resolve_contact_type(self, info, **args):
     return Contatto.tipologia_contatto(self)
Ejemplo n.º 9
0
    def mutate_and_get_payload(cls, root, info, **input):
        try:
            _data = input.get('contatto')
            # Ente (M)
            if 'ente' in _data:
                _ente = _data.pop('ente')
                if is_RUP(info.context.user):
                    _ente = Organization.objects.get(code=_ente['code'])
                else:
                    _ente = Organization.objects.get(usermembership__member=info.context.user, code=_ente['code'])
                _data['ente'] = _ente

            if info.context.user and not info.context.user.is_anonymous:

                # Tipologia (M)
                if 'tipologia' in _data:
                    _tipologia = _data.pop('tipologia')
                    if _tipologia and _tipologia in TIPOLOGIA_CONTATTO:
                        _data['tipologia'] = _tipologia
                _contatto = Contatto()
                nuovo_contatto = update_create_instance(_contatto, _data)

                if nuovo_contatto.user is None:
                    # ####
                    # Creating a Temporary User to be associate to this 'Contatto'
                    # ###
                    first_name = nuovo_contatto.nome.split(' ')[0] if len(nuovo_contatto.nome.split(' ')) > 0 \
                        else nuovo_contatto.nome
                    last_name = nuovo_contatto.nome.split(' ')[1] if len(nuovo_contatto.nome.split(' ')) > 1 \
                        else nuovo_contatto.nome
                    fiscal_code = codicefiscale.encode(
                        surname=last_name,
                        name=first_name,
                        sex='M',
                        birthdate=datetime.datetime.now(timezone.get_current_timezone()).strftime('%m/%d/%Y'),
                        birthplace=nuovo_contatto.ente.name if nuovo_contatto.ente.type.code == 'C'
                            else settings.DEFAULT_MUNICIPALITY
                    )

                    nuovo_contatto.user, created = AppUser.objects.get_or_create(
                        fiscal_code=fiscal_code,
                        defaults={
                            'first_name': nuovo_contatto.nome,
                            'last_name': None,
                            'email': nuovo_contatto.email,
                            'is_staff': False,
                            'is_active': True
                        }
                    )

                    _new_role_type = MembershipType.objects.get(
                        code=settings.TEMP_USER_CODE,
                        organization_type=nuovo_contatto.ente.type
                    )
                    _new_role_name = '%s-%s-membership' % (fiscal_code, nuovo_contatto.ente.code)
                    _new_role, created = UserMembership.objects.get_or_create(
                        name=_new_role_name,
                        defaults={
                            'member': nuovo_contatto.user,
                            'organization': nuovo_contatto.ente,
                            'type': _new_role_type
                        }
                    )

                    _new_role.save()
                    nuovo_contatto.save()
                return cls(nuovo_contatto=nuovo_contatto)
            else:
                return GraphQLError(_("Forbidden"), code=403)
        except BaseException as e:
            tb = traceback.format_exc()
            logger.error(tb)
            return GraphQLError(e, code=500)