Exemple #1
0
    def create(cls, name, description, user, data={}):
        profile = user.profile
        if not (profile.is_contributor or profile.is_administrator):
            raise PermissionError("%s is not a contributor" % user)
        if profile.restricted:
            raise PermissionError("Restricted account can not create a group.")
        if not user.is_active:
            raise PermissionError(u"%s's account is inactive" % user)
        if not name:
            raise ValueError("name must not be empty")
        try:
            validate_reference(name)
        except:
            raise ValueError("Name contains a '/' or a '..'")

        obj = models.GroupInfo(name=name, description=description)
        obj.creator = user
        obj.owner = user
        if data:
            for key, value in data.iteritems():
                if key not in ["name", "description"]:
                    setattr(obj, key, value)
        obj.save()
        infos = {"name" : name, "description" : description}
        infos.update(data)
        details = ",".join("%s : %s" % (k, v) for k, v in infos.items())
        res = cls(obj, user)
        user.groups.add(obj)
        res._save_histo("Create", details)
        update_index.delay("plmapp", "groupinfo", obj.pk)
        return res
Exemple #2
0
 def clean_reference(self):
     data = self.cleaned_data["reference"]
     try:
         validate_reference(data)
     except ValueError as e:
         raise ValidationError(unicode(e))
     return re.sub("\s+", " ", data.strip(" "))
Exemple #3
0
 def clean_reference(self):
     data = self.cleaned_data["reference"]
     try:
         validate_reference(data)
     except ValueError as e:
         raise ValidationError(unicode(e))
     return re.sub("\s+", " ", data.strip(" "))
Exemple #4
0
    def create(cls,
               reference,
               type,
               revision,
               user,
               data={},
               block_mails=False,
               no_index=False):
        u"""
        This method builds a new :class:`.PLMObject` of
        type *class_* and return a :class:`PLMObjectController` associated to
        the created object.

        Raises :exc:`ValueError` if *reference*, *type* or *revision* are
        empty. Raises :exc:`ValueError` if *type* is not valid.

        :param reference: reference of the objet
        :param type: type of the object
        :param revision: revision of the object
        :param user: user who creates/owns the object
        :param data: a dict<key, value> with informations to add to the plmobject
        :rtype: :class:`PLMObjectController`
        """

        profile = user.profile
        if not (profile.is_contributor or profile.is_administrator):
            raise PermissionError("%s is not a contributor" % user)
        if not user.is_active:
            raise PermissionError(u"%s's account is inactive" % user)
        if profile.restricted:
            raise PermissionError(
                "Restricted account can not create a part or document.")
        if not reference or not type or not revision:
            raise ValueError(
                "Empty value not permitted for reference/type/revision")
        validate_reference(reference)
        validate_revision(revision)
        try:
            class_ = models.get_all_plmobjects()[type]
        except KeyError:
            raise ValueError("Incorrect type")
        # create an object
        reference_number = parse_reference_number(reference, class_)
        obj = class_(reference=reference,
                     type=type,
                     revision=revision,
                     owner=user,
                     creator=user,
                     reference_number=reference_number)
        if no_index:
            obj.no_index = True
        if data:
            for key, value in data.iteritems():
                if key not in [
                        "reference", "type", "revision", "auto", "pfiles"
                ]:
                    setattr(obj, key, value)
        obj.state = models.get_default_state(obj.lifecycle)
        obj.save()
        res = cls(obj, user)
        if block_mails:
            res.block_mails()
        # record creation in history
        infos = {"type": type, "reference": reference, "revision": revision}
        infos.update(data)
        details = u" / ".join(u"%s : %s" % (k, v) for k, v in infos.items()
                              if k not in ("auto", "pfiles", "type",
                                           "reference", "revision", "name"))
        res._save_histo("created", details)

        # add links (bulk create)
        ctime = obj.ctime
        links = [
            models.PLMObjectUserLink(plmobject=obj,
                                     user=user,
                                     role="owner",
                                     ctime=ctime)
        ]
        try:
            l = models.DelegationLink.current_objects.select_related(
                "delegator").get(delegatee=user, role=models.ROLE_SPONSOR)
            sponsor = l.delegator
            if sponsor.username == settings.COMPANY:
                sponsor = user
            elif not res.check_in_group(sponsor, False):
                sponsor = user
        except models.DelegationLink.DoesNotExist:
            sponsor = user
        # the user can promote to the next state
        links.append(
            models.PLMObjectUserLink(plmobject=obj,
                                     user=user,
                                     role=level_to_sign_str(0),
                                     ctime=ctime))
        # from the next state, only the sponsor can promote this object
        for i in range(1, obj.lifecycle.nb_states - 1):
            links.append(
                models.PLMObjectUserLink(plmobject=obj,
                                         user=sponsor,
                                         role=level_to_sign_str(i),
                                         ctime=ctime))
        models.PLMObjectUserLink.objects.bulk_create(links)

        res._update_state_history()
        return res
Exemple #5
0
    def create(cls, reference, user, data={}, block_mails=False,
            no_index=False):
        u"""
        This method builds a new :class:`.ECR` of
        type *class_* and return a :class:`ECRController` associated to
        the created object.

        :param reference: reference of the objet
        :param user: user who creates/owns the object
        :param data: a dict<key, value> with informations to add to the ECR
        :rtype: :class:`ECRController`
        """


        if not user.is_active:
            raise PermissionError(u"%s's account is inactive" % user)
        # even a restricted account can create an ECR
        if not reference:
            raise ValueError("Empty value not permitted for reference")
        validate_reference(reference)
        # create an object
        try:
            reference_number = int(re.search(r"^ECR_(\d+)$", reference).group(1))
            if reference_number > 2**31 - 1:
                reference_number = 0
        except:
            reference_number = 0
        obj = ECR(reference=reference, owner=user, creator=user,
                reference_number=reference_number)
        if no_index:
            obj.no_index = True
        if data:
            for key, value in data.iteritems():
                if key != "reference":
                    setattr(obj, key, value)
        obj.state = models.get_default_state(obj.lifecycle)
        obj.save()
        res = cls(obj, user)
        if block_mails:
            res.block_mails()
        # record creation in history
        infos = {"reference" : reference}
        infos.update(data)
        details = u",".join(u"%s : %s" % (k, v) for k, v in infos.items())
        res._save_histo("Create", details)
        # add links
        ECRUserLink.objects.create(ecr=obj, user=user, role="owner")
        try:
            l = models.DelegationLink.current_objects.get(delegatee=user,
                    role=models.ROLE_SPONSOR)
            sponsor = l.delegator
            if sponsor.username == settings.COMPANY:
                sponsor = user
        except models.DelegationLink.DoesNotExist:
            sponsor = user
        # the user can promote to the next state
        ECRUserLink.objects.create(ecr=obj, user=user, role=level_to_sign_str(0))
        # from the next state, only the sponsor can promote this object
        for i in range(1, obj.lifecycle.nb_states - 1):
            ECRUserLink.objects.create(ecr=obj, user=sponsor, role=level_to_sign_str(i))

        #res._update_state_history()
        return res
Exemple #6
0
    def create(cls, reference, type, revision, user, data={}, block_mails=False,
            no_index=False):
        u"""
        This method builds a new :class:`.PLMObject` of
        type *class_* and return a :class:`PLMObjectController` associated to
        the created object.

        Raises :exc:`ValueError` if *reference*, *type* or *revision* are
        empty. Raises :exc:`ValueError` if *type* is not valid.

        :param reference: reference of the objet
        :param type: type of the object
        :param revision: revision of the object
        :param user: user who creates/owns the object
        :param data: a dict<key, value> with informations to add to the plmobject
        :rtype: :class:`PLMObjectController`
        """

        profile = user.profile
        if not (profile.is_contributor or profile.is_administrator):
            raise PermissionError("%s is not a contributor" % user)
        if not user.is_active:
            raise PermissionError(u"%s's account is inactive" % user)
        if profile.restricted:
            raise PermissionError("Restricted account can not create a part or document.")
        if not reference or not type or not revision:
            raise ValueError("Empty value not permitted for reference/type/revision")
        validate_reference(reference)
        validate_revision(revision)
        try:
            class_ = models.get_all_plmobjects()[type]
        except KeyError:
            raise ValueError("Incorrect type")
        # create an object
        reference_number = parse_reference_number(reference, class_)
        obj = class_(reference=reference, type=type, revision=revision,
                     owner=user, creator=user, reference_number=reference_number)
        if no_index:
            obj.no_index = True
        if data:
            for key, value in data.iteritems():
                if key not in ["reference", "type", "revision", "auto", "pfiles"]:
                    setattr(obj, key, value)
        obj.state = models.get_default_state(obj.lifecycle)
        obj.save()
        res = cls(obj, user)
        if block_mails:
            res.block_mails()
        # record creation in history
        infos = {"type" : type, "reference" : reference, "revision" : revision}
        infos.update(data)
        details = u" / ".join(u"%s : %s" % (k, v) for k, v in infos.items()
                if k not in ("auto", "pfiles", "type", "reference", "revision", "name"))
        res._save_histo("created", details)

        # add links (bulk create)
        ctime = obj.ctime
        links = [models.PLMObjectUserLink(plmobject=obj, user=user, role="owner", ctime=ctime)]
        try:
            l = models.DelegationLink.current_objects.select_related("delegator").get(delegatee=user,
                    role=models.ROLE_SPONSOR)
            sponsor = l.delegator
            if sponsor.username == settings.COMPANY:
                sponsor = user
            elif not res.check_in_group(sponsor, False):
                sponsor = user
        except models.DelegationLink.DoesNotExist:
            sponsor = user
        # the user can promote to the next state
        links.append(models.PLMObjectUserLink(plmobject=obj, user=user,
            role=level_to_sign_str(0), ctime=ctime))
        # from the next state, only the sponsor can promote this object
        for i in range(1, obj.lifecycle.nb_states - 1):
            links.append(models.PLMObjectUserLink(plmobject=obj, user=sponsor,
                role=level_to_sign_str(i), ctime=ctime))
        models.PLMObjectUserLink.objects.bulk_create(links)

        res._update_state_history()
        return res