def check_profile(self, *args, **kwargs): role = company_member_role(self.vacancy.company.contract_address, self.request.user.contract_address) if role: messages.error(self.request, MESSAGES['company_member']) return HttpResponseRedirect(self.get_redirect_url(*args, **kwargs)) return self.subscribe(*args, **kwargs)
def dispatch(self, request, *args, **kwargs): pipeline = get_object_or_404(Pipeline, pk=request.POST.get('pipeline', None)) user_role = company_member_role( pipeline.vacancy.company.contract_address, request.user.contract_address) assert user_role == 'owner', "User can\'t create action for this pipeline" return super().dispatch(request, *args, **kwargs)
def __init__(self, *args, **kwargs): member = kwargs.pop('member') super().__init__(*args, **kwargs) qs = member.companies owner_in = [] for company in qs: if company_member_role(company.contract_address, member.contract_address) == 'owner': owner_in.append(company.id) self.fields['company'].queryset = member.companies.filter( id__in=owner_in) self.fields['office'].queryset = Office.objects.filter( company__in=self.fields['company'].queryset)
def change_member_role(company_address, member_id, sender_id, role): try: sender = Member.objects.get(pk=sender_id) member = Member.objects.get(pk=member_id) except Member.DoesNotExist: logger.warning('Member not found and will not be added to company.') else: mi = MemberInterface(sender.contract_address) c_role = company_member_role(company_address, member.contract_address) if role == c_role: logger.info('Member already {} in company {}'.format( role, company_address)) return False if c_role == 'owner': try: mi.del_owner_member(company_address, member.contract_address) except Exception as e: logger.warning('Cant delete owner member role: {} {}'.format( member_id, e)) elif c_role == 'collaborator': try: mi.del_collaborator_member(company_address, member.contract_address) except Exception as e: logger.warning( 'Cant delete collaborator member role: {} {}'.format( member_id, e)) method = getattr(mi, 'new_company_{}'.format(role)) try: txn_hash = method(company_address, member.contract_address) except Exception as e: logger.warning('Cant add {} member role: {} {}'.format( role, member_id, e)) else: save_txn.delay(txn_hash.hex(), 'ChangeCompanyMember', sender_id, member_id) save_txn_to_history.delay( sender_id, txn_hash.hex(), 'Change {} as company {}'.format(member.full_name, role)) return True
def member_company_role(member, company): if not member.contract_address: return None return company_member_role(company.contract_address, member.contract_address)
def collaborators(self): members = self.members return members.filter(pk__in=[member.id for member in members if company_member_role(self.contract_address, member.contract_address) != 'member'])
def owners(self): collaborators = self.collaborators return collaborators.filter(pk__in=[member.id for member in collaborators if company_member_role(self.contract_address, member.contract_address) == 'owner'])