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
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(" "))
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
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
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