def handle(self, *args, **options): result = { "id": 45639, "source_uid": 147, "source_name": "Kiran Shrestha", "source_img": "/media/logo/default_user.png", "get_source_url": "/users/profile/147/", "get_event_name": "staged form Ring Beam", "get_event_url": "/forms/forms/31523", "get_extraobj_name": "TestHouse", "get_extraobj_url": "/fieldsight/site-dashboard/4119/", "get_absolute_url": "/events/notification/45639/", "extra_json": '', "type": 16, "title": "new Site level Submission", "date": "2018-07-17T11:13:41.440880Z", "extra_message": '', "recipient": '', "seen_by": [] }, # ChannelGroup("notify-{}".format(1)).send({"text": json.dumps(result)}) ChannelGroup("user-notify-{}".format(1)).send( {"text": json.dumps(result)}) ChannelGroup("org-notify-{}".format(1)).send( {"text": json.dumps(result)}) ChannelGroup("project-notify-{}".format(1)).send( {"text": json.dumps(result)}) self.stdout.write('Successfully created Notification')
def perform_create(self, serializer): fxf = serializer.save() fxf.is_deployed = True if not fxf.project: fxf.from_project = False fxf.save() org = None if fxf.project: org = fxf.project.organization for site in fxf.project.sites.filter(is_active=True): child, created = FieldSightXF.objects.get_or_create( is_staged=False, is_scheduled=False, xf=fxf.xf, site=site, fsform=fxf) child.is_deployed = True child.save() if not fxf.is_survey: noti = fxf.logs.create( source=self.request.user, type=18, title="General", organization=org, project=fxf.project, content_object=fxf, extra_object=fxf.project, description='{0} assigned new General form {1} to {2} '. format(self.request.user.get_full_name(), fxf.xf.title, fxf.project.name)) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() # ChannelGroup("site-{}".format(fxf.site.id)).send({"text": json.dumps(result)}) ChannelGroup("project-{}".format(fxf.project.id)).send( {"text": json.dumps(result)}) else: org = fxf.site.project.organization noti = fxf.logs.create( source=self.request.user, type=19, title="General", organization=org, project=fxf.site.project, site=fxf.site, content_object=fxf, extra_object=fxf.site, description='{0} assigned new General form {1} to {2} '. format(self.request.user.get_full_name(), fxf.xf.title, fxf.site.name)) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() ChannelGroup("site-{}".format(fxf.site.id)).send( {"text": json.dumps(result)}) ChannelGroup("project-{}".format(fxf.site.project.id)).send( {"text": json.dumps(result)})
def create(cls, bid, ask, price): # print("??????????????? contract creating 0") buyer = bid.player seller = ask.player contract = cls(bid=bid, ask=ask, price=price, value=0, quantity=1, cost=0) Ask.active_statements.filter(player=seller).update(active=False) Bid.active_statements.filter(player=buyer).update(active=False) # print("??????????????? contract creating 1") seller.num_share -= 1 buyer.num_share += 1 buyer.endowment -= price seller.endowment += price # print("??????????????? contract creating 2") contract_parties = [buyer, seller] contract.save() # print("??????????????? contract creating 3") for p in contract_parties: # p.set_payoff() p.active = p.is_active() p.save() p_group = ChannelGroup(p.get_personal_channel_name()) p_group.send({ 'text': json.dumps({ 'repo': p.get_repo_html(), 'contracts': p.get_contracts_html(), 'form': p.get_form_html(), 'ask_form': p.get_ask_form_html(), 'bid_form': p.get_bid_form_html(), 'best_ask_form': p.get_best_ask_form_html(), 'profit': p.profit_block_html(), 'presence': p.presence_check(), }) }) group = buyer.group group_channel = ChannelGroup(group.get_channel_group_name()) group_channel.send( {'text': json.dumps({'presence': group.presence_check()})}) for p in group.get_players(): group_channel = ChannelGroup(p.get_personal_channel_name()) group_channel.send({ 'text': json.dumps({ 'asks': p.get_asks_html(), 'bids': p.get_bids_html() }) }) return contract
def handle_notification(sender, instance, **kwargs): from onadata.apps.eventlog.serializers.LogSerializer import NotificationSerializer data = NotificationSerializer(instance).data # import ipdb # ipdb.set_trace() if instance.project: ChannelGroup("project-notify-{}".format(instance.project.id)).send( {"text": json.dumps(data)}) if instance.organization: ChannelGroup("org-notify-{}".format(instance.organization.id)).send( {"text": json.dumps(data)}) ChannelGroup("user-notify-{}".format(1)).send({"text": json.dumps(data)})
def create(cls, item, bid, ask, price): buyer = bid.player seller = ask.player cost = item.slot.cost new_slot = buyer.get_free_slot() item.slot = new_slot value = new_slot.value contract = cls(item=item, bid=bid, ask=ask, price=price, cost=cost, value=value) item.save() Ask.active_statements.filter(player=seller).update(active=False) Bid.active_statements.filter(player=buyer).update(active=False) buyer.endowment -= contract.price contract_parties = [buyer, seller] contract.save() for p in contract_parties: p.set_payoff() p.active = p.is_active() p.save() p_group = ChannelGroup(p.get_personal_channel_name()) p_group.send({ 'text': json.dumps({ 'repo': p.get_repo_html(), 'contracts': p.get_contracts_html(), 'form': p.get_form_html(), 'profit': p.profit_block_html(), 'presence': p.presence_check(), }) }) group = buyer.group group_channel = ChannelGroup(group.get_channel_group_name()) group_channel.send( {'text': json.dumps({'presence': group.presence_check()})}) for p in group.get_players(): group_channel = ChannelGroup(p.get_personal_channel_name()) group_channel.send({ 'text': json.dumps({ 'asks': p.get_asks_html(), 'bids': p.get_bids_html() }) }) return contract
def treatment_wait(message): ChannelGroup("treatment-waiting").discard(message.reply_channel) ChannelGroup("treatment-waiting").add(message.reply_channel) message.reply_channel.send({"text": json.dumps({"action": "waiting"})}) waiting_treatments = Treatment.objects.filter(user__isnull=True, is_closed=False).order_by('created_at', 'id') if len(waiting_treatments) > 0: _treatment_begin(message, waiting_treatments[0]) else: try: current_treatment = Treatment.objects.get(user=message.user, is_closed=False) _treatment_begin(message, current_treatment) except: pass
def perform_create(self, serializer): with transaction.atomic(): site = serializer.save() site.is_active = True site.save() group = Group.objects.get(name="Site Supervisor") UserRole.objects.get_or_create(user=self.request.user, site_id=site.id, project__id=site.project.id, group=group) noti = site.logs.create( source=self.request.user, type=11, title="new Site", organization=site.project.organization, project=site.project, site=site, content_object=site, extra_object=site.project, description='{0} created a new site named {1} in {2}'.format( self.request.user.get_full_name(), site, site.project.name)) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() ChannelGroup("project-{}".format(site.project.id)).send( {"text": json.dumps(result)}) return site
def __init__(self, owner): channel = ChannelGroup(owner.get_personal_channel_name()) channel.send({ 'text': json.dumps({'warning': 'You can not trade with yourself.'}) }) super().__init__('No trading with yourself')
def _treatment_begin(message, treatment): lock_id = "consumers.treatment-begin" acquire_lock = lambda: cache.add(lock_id, "true", LOCK_EXPIRE) release_lock = lambda: cache.delete(lock_id) if acquire_lock(): try: if treatment is not None and (treatment.is_closed or (treatment.user is not None and treatment.user != message.user)): raise ClientError("TREATMENT_ACCESS_DENIED") try: current_treatment = Treatment.objects.get(user=message.user,is_closed=False) except: current_treatment = None if current_treatment: treatment = current_treatment else: treatment.user = message.user treatment.treatment_at = datetime.now() treatment.save() treatment.websocket_group.add(message.reply_channel) ChannelGroup("treatment-waiting").discard(message.reply_channel) message.channel_session['treatments'] = list(set(message.channel_session['treatments']).union([treatment.id])) message.reply_channel.send({"text": json.dumps({"action": "treating", "treatment": treatment.id})}) _send_treatment_messages(message.reply_channel, treatment) finally: release_lock()
def form_valid(self, form): self.object = form.save() noti = self.object.logs.create( source=self.request.user, type=6, title="new Role", organization=self.object.role.organization, description="new role {0} updated by {1}".format( self.object.name, self.request.user.username)) result = {} result['description'] = 'new role {0} update by {1}'.format( self.object.name, self.request.user.username) result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format(self.object.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send({"text": json.dumps(result)}) return HttpResponseRedirect(self.get_success_url())
def ws_disconnect(message): ChannelGroup("treatment-waiting").discard(message.reply_channel) for treatment_id in message.channel_session.get("treatments", []): try: treatment = Treatment.objects.get(id=treatment_id) treatment.websocket_group.discard(message.reply_channel) except Treatment.DoesNotExist: pass
def __init__(self, owner): channel = ChannelGroup(owner.get_personal_channel_name()) channel.send({ 'text': json.dumps({ 'warning': 'You do not have not enough items to make this ask.' }) }) super().__init__('Not enough items to sell')
def __init__(self, owner): channel = ChannelGroup(owner.get_personal_channel_name()) channel.send({ 'text': json.dumps({ 'warning': 'You need to make better bid.' ' Please increase your price.' }) }) super().__init__(' Please increase your price')
def __init__(self, owner): channel = ChannelGroup(owner.get_personal_channel_name()) channel.send({ 'text': json.dumps({ 'warning': 'You do not have enough funds to make this bid.' ' Please change the amount.' }) }) super().__init__('Not enough money to create a new bid of this amount')
def post_save(cls, sender, instance, created, *args, **kwargs): employer, worker = instance.employer, instance.worker group = instance.group contract_parties = [employer, worker] if instance.worker: for p in contract_parties: p.matched = True p.save() p_group = ChannelGroup(p.get_personal_channel_name()) p_group.send({'text': json.dumps({ 'day_over': True, })}) group_channel = ChannelGroup(group.get_channel_group_name()) group_message = {} if not group.is_active(): group_message['day_over'] = True group_message['open_offers'] = group.get_active_offers_html() group_message['general_info'] = group.get_general_info_html() group_channel.send({'text': json.dumps(group_message)})
def delete(self, *args, **kwargs): self.object = self.get_object() noti = self.object.logs.create( source=self.request.user, type=6, title="new Site", organization=self.object.project.organization, description="new role {0} deleted by {1}".format( self.object.name, self.request.user.username)) result = {} result['description'] = 'new role {0} deleted by {1}'.format( self.object.name, self.request.user.username) result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format( self.object.project.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send({"text": json.dumps(result)}) return HttpResponseRedirect(self.get_success_url())
def perform_create(self, serializer): project = serializer.save() # project.save() noti = project.logs.create(source=self.request.user, type=10, title="new Project", organization=project.organization, content_object=project, description='{0} created new project named {1}'.format( self.request.user.get_full_name(), project.name)) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format(project.organization.id)).send({"text": json.dumps(result)}) return project
def form_valid(self, form): user = self.request.user user.first_name = form.cleaned_data['first_name'] user.last_name = form.cleaned_data['last_name'] user.save() profile = UserProfile.objects.get(user=user) profile.address = form.cleaned_data['address'] profile.gender = form.cleaned_data['gender'] profile.phone = form.cleaned_data['phone'] profile.skype = form.cleaned_data['skype'] profile.primary_number = form.cleaned_data['primary_number'] profile.secondary_number = form.cleaned_data['secondary_number'] profile.office_number = form.cleaned_data['office_number'] profile.viber = form.cleaned_data['viber'] profile.whatsapp = form.cleaned_data['whatsapp'] profile.wechat = form.cleaned_data['wechat'] profile.line = form.cleaned_data['line'] profile.tango = form.cleaned_data['tango'] profile.hike = form.cleaned_data['hike'] profile.qq = form.cleaned_data['qq'] profile.google_talk = form.cleaned_data['google_talk'] profile.profile_picture = form.cleaned_data['profile_picture'] profile.save() noti = profile.logs.create( source=self.request.user, type=0, title="User", organization=profile.organization, description="user {0} updated by {1}".format( user.username, self.request.user.username)) result = {} result['description'] = 'user {0} updated by {1}'.format( user.username, self.request.user.username) result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format(profile.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send({"text": json.dumps(result)}) return HttpResponseRedirect(self.success_url)
def create(self, request, *args, **kwargs): if self.request.user.is_anonymous(): self.permission_denied(self.request) fsxfid = kwargs.get('pk',None) siteid = kwargs.get('site_id',None) if fsxfid is None or siteid is None: return self.error_response("Site Id Or Form ID Not Given", False, request) try: fsxfid = int(fsxfid) fxf = get_object_or_404(FieldSightXF, pk=kwargs.get('pk')) fs_proj_xf = fxf.fsform.pk if fxf.fsform else None proj_id = fxf.fsform.project.pk if fxf.fsform else fxf.site.project.pk xform = fxf.xf # site_id = fxf.site.pk if fxf.site else None except: return self.error_response("Site Id Or Form ID Not Vaild", False, request) if request.method.upper() == 'HEAD': return Response(status=status.HTTP_204_NO_CONTENT, headers=self.get_openrosa_headers(request), template_name=self.template_name) error, instance = create_instance_from_xml(request, fsxfid, siteid, fs_proj_xf, proj_id, xform) noti = instance.fieldsight_instance.logs.create(source=self.request.user, type=16, title="new Submission", organization=instance.fieldsight_instance.site.project.organization, project=instance.fieldsight_instance.site.project, site=instance.fieldsight_instance.site, extra_object=instance.fieldsight_instance.site, content_object=instance.fieldsight_instance, description='{0} submitted a response for {1} {2} in {3}'.format( self.request.user.get_full_name(), instance.fieldsight_instance.site_fxf.form_type(), instance.fieldsight_instance.site_fxf.xf.title, instance.fieldsight_instance.site.name, )) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() # ChannelGroup("notify-{}".format(self.object.project.organization.id)).send({"text": json.dumps(result)}) # ChannelGroup("project-{}".format(self.object.project.id)).send({"text": json.dumps(result)}) ChannelGroup("site-{}".format(instance.fieldsight_instance.site.id)).send({"text": json.dumps(result)}) # modify create instance if error or not instance: return self.error_response(error, False, request) context = self.get_serializer_context() serializer = FieldSightSubmissionSerializer(instance, context=context) return Response(serializer.data, headers=self.get_openrosa_headers(request), status=status.HTTP_201_CREATED, template_name=self.template_name)
def create(self, validated_data): id = self.context['request'].data.get('id', False) api_request = self.context['request'] with transaction.atomic(): sub_stages_datas = self.context['request'].data.get('parent') if not id: stage = Stage.objects.create(**validated_data) for order, ss in enumerate(sub_stages_datas): ss.pop('id') stage_forms_dict = ss.pop('stage_forms') xf_id = stage_forms_dict['xf']['id'] ss.update({'stage':stage, 'order':order+1}) default_submission_status = stage_forms_dict['default_submission_status'] sub_stage_obj = Stage.objects.create(**ss) fxf = FieldSightXF(xf_id=xf_id, site=stage.site, project=stage.project, is_staged=True, stage=sub_stage_obj, default_submission_status=default_submission_status) fxf.save() if stage.project: noti = fxf.logs.create(source=api_request.user, type=18, title="Stage", organization=fxf.project.organization, project = fxf.project, content_object = fxf, extra_object = fxf.project, description='{0} assigned new Stage form {1} to {2} '.format( api_request.user.get_full_name(), fxf.xf.title, fxf.project.name )) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() # ChannelGroup("site-{}".format(fxf.site.id)).send({"text": json.dumps(result)}) ChannelGroup("project-{}".format(fxf.project.id)).send({"text": json.dumps(result)}) else: fxf.from_project = False fxf.save() noti = fxf.logs.create(source=api_request.user, type=19, title="Stage", organization=fxf.site.project.organization, project=fxf.site.project, site=fxf.site, content_object=fxf, extra_object=fxf.site, description='{0} assigned new Stage form {1} to {2} '.format( api_request.user.get_full_name(), fxf.xf.title, fxf.site.name )) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() ChannelGroup("site-{}".format(fxf.site.id)).send({"text": json.dumps(result)}) ChannelGroup("project-{}".format(fxf.site.project.id)).send({"text": json.dumps(result)}) else: # Stage.objects.filter(pk=id).update(**validated_data) stage = Stage.objects.get(pk=id) for attr, value in validated_data.items(): setattr(stage, attr, value) stage.save() for order, sub_stage_data in enumerate(sub_stages_datas): old_substage = sub_stage_data.get('id', False) if old_substage: sub_id = sub_stage_data.pop('id') fxf = sub_stage_data.pop('stage_forms') sub_stage_data.update({'stage':stage,'order':order+1}) sub_stage = Stage.objects.get(pk=sub_id) for attr, value in sub_stage_data.items(): setattr(sub_stage, attr, value) sub_stage.save() old_fsxf = sub_stage.stage_forms old_xf = old_fsxf.xf xf = fxf.get('xf') default_submission_status = fxf.get('default_submission_status') xf_id = xf.get('id') if old_xf.id != xf_id: # xform changed history and mew fsf old_fsxf.is_deployed = False old_fsxf.is_deleted = True old_fsxf.stage=None old_fsxf.save() #create new fieldsight form if stage.project: FieldSightXF.objects.create(xf_id=xf_id, site=stage.site, project=stage.project, is_staged=True, stage=sub_stage, default_submission_status=default_submission_status) else: FieldSightXF.objects.create(xf_id=xf_id, site=stage.site, project=stage.project, is_staged=True, stage=sub_stage,from_project=False, default_submission_status=default_submission_status) # org = stage.project.organization if stage.project else stage.site.project.organization # desc = "deleted form of stage {} substage {} by {}".format(stage.name, sub_stage.name, # self.context['request'].user.username) # noti = old_fsxf.logs.create(source=self.context['request'].user, type=1, title="form Deleted", # organization=org, description=desc) # result = {} # result['description'] = desc # result['url'] = noti.get_absolute_url() # ChannelGroup("notify-{}".format(org.id)).send({"text": json.dumps(result)}) # ChannelGroup("notify-0").send({"text": json.dumps(result)}) # notify mobile and web # if form change update fxf object's xf else: fxf = sub_stage_data.pop('stage_forms') xf = fxf.get('xf') default_submission_status = fxf.get('default_submission_status') xf_id = xf.get('id') # fxf_id = fxf.get('id') sub_stage_data.pop('id') sub_stage_data.update({'stage':stage, 'order':order+1}) sub_stage_obj = Stage.objects.create(**sub_stage_data) if stage.project: FieldSightXF.objects.create(xf_id=xf_id,site=stage.site, project=stage.project, is_staged=True, stage=sub_stage_obj, default_submission_status=default_submission_status) else: FieldSightXF.objects.create(xf_id=xf_id, site=stage.site, project=stage.project, is_staged=True, stage=sub_stage_obj,from_project=False, default_submission_status=default_submission_status) return stage
def custom_create(self, *args, **kwargs): data = self.request.data # print "=======================================================" # print data # print data.get('users') level = self.kwargs.get('level') # try: with transaction.atomic(): group = Group.objects.get(name=data.get('group')) for user in data.get('users'): if level == "0": site = Site.objects.get(pk=self.kwargs.get('pk')) role, created = UserRole.objects.get_or_create( user_id=user, site_id=site.id, project__id=site.project.id, organization__id=site.project.organization_id, group=group, ended_at=None) if created: description = "{0} was assigned as {1} in {2}".format( role.user.get_full_name(), role.group.name, role.project) noti_type = 8 if data.get('group') == "Reviewer": noti_type = 7 noti = role.logs.create( source=role.user, type=noti_type, title=description, description=description, content_object=site, site=site, project=site.project, organization=site.project.organization, extra_object=self.request.user) result = {} result['description'] = description result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format( role.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("project-{}".format( role.project.id)).send( {"text": json.dumps(result)}) ChannelGroup("site-{}".format(role.site.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send( {"text": json.dumps(result)}) Device = get_device_model() if Device.objects.filter(name=role.user.email).exists(): message = { 'notify_type': 'Assign Site', 'site': { 'name': site.name, 'id': site.id } } Device.objects.filter( name=role.user.email).send_message(message) elif level == "1": project = Project.objects.get(pk=self.kwargs.get('pk')) role, created = UserRole.objects.get_or_create( user_id=user, organization_id=project.organization_id, project_id=self.kwargs.get('pk'), site_id=None, group=group, ended_at=None) print role.__dict__ if created: print role.__dict__ description = "{0} was assigned as {2} in {1}".format( role.user.get_full_name(), role.project, role.group.name) noti = role.logs.create( source=role.user, type=25, title=description, organization=project.organization, project=project, description=description, content_object=project, extra_object=self.request.user) result = {} result['description'] = description result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format( role.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("project-{}".format( role.project.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send( {"text": json.dumps(result)}) elif level == "2": organization = Organization.objects.get( pk=self.kwargs.get('pk')) role, created = UserRole.objects.get_or_create( user_id=user, organization_id=self.kwargs.get('pk'), project_id=None, site_id=None, group=group) if created: description = "{0} was assigned as Organization Admin in {1}".format( role.user.get_full_name(), role.organization) noti = role.logs.create(source=role.user, type=4, title=description, organization=organization, description=description, content_object=organization, extra_object=self.request.user) result = {} result['description'] = description result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format( role.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send( {"text": json.dumps(result)}) else: role.ended_at = None role.save() # except Exception as e: # raise ValidationError({ # "User Creation Failed ".format(str(e)), # }) return Response({'msg': data}, status=status.HTTP_200_OK)
def post(self, *args, **kwargs): queryset = UserRole.objects.filter(organization__isnull=False, ended_at__isnull=True) data = self.request.data level = self.kwargs.get('level') try: with transaction.atomic(): group = Group.objects.get(name=data.get('group')) if level == "0": for site_id in data.get('sites'): site = Site.objects.get(pk=site_id) for user in data.get('users'): role, created = UserRole.objects.get_or_create( user_id=user, site_id=site.id, project__id=site.project.id, organization_id=site.project.organization.id, group=group) if created: description = "{0} was assigned as {1} in {2}".format( role.user.get_full_name(), role.lgroup.name, role.project) noti_type = 8 if data.get('group') == "Reviewer": noti_type = 7 noti = role.logs.create( source=role.user, type=noti_type, title=description, description=description, content_type=site, extra_object=self.request.user, site=role.site) result = {} result['description'] = description result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format( role.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("project-{}".format( role.project.id)).send( {"text": json.dumps(result)}) ChannelGroup("site-{}".format( role.site.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send( {"text": json.dumps(result)}) Device = get_device_model() if Device.objects.filter( name=role.user.email).exists(): message = { 'notify_type': 'Assign Site', 'site': { 'name': site.name, 'id': site.id } } Device.objects.filter( name=role.user.email).send_message(message) elif level == "1": for project_id in data.get('projects'): project = Project.objects.get(pk=project_id) for user in data.get('users'): role, created = UserRole.objects.get_or_create( user_id=user, project_id=project_id, organization__id=project.organization.id, group=group) if created: description = "{0} was assigned as Project Manager in {1}".format( role.user.get_full_name(), role.project) noti = role.logs.create( source=role.user, type=6, title=description, description=description, content_type=project, extra_object=self.request.user) result = {} result['description'] = description result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format( role.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("project-{}".format( role.project.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send( {"text": json.dumps(result)}) elif level == "2": for organization_id in data.get('organizations'): organization = Organization.objects.get( pk=organization_id) for user in data.get('users'): role, created = UserRole.objects.get_or_create( user_id=user, organization_id=project_id, group=group) if created: description = "{0} was assigned as Organization Admin in {1}".format( role.user.get_full_name(), role.project) noti = role.logs.create( source=role.user, type=7, title=description, description=description, content_type=organization, extra_object=self.request.user) result = {} result['description'] = description result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format( role.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("project-{}".format( role.project.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0").send( {"text": json.dumps(result)}) except Exception as e: raise ValidationError({ "User Creation Failed ".format(str(e)), }) return Response({'msg': 'ok'}, status=status.HTTP_200_OK)
def all_notification(user, message): ChannelGroup("%s" % user).send({"text": json.dumps({"msg": message})})
def multiuserassignregion(source_user, project_id, regions, users, group_id): project = Project.objects.get(pk=project_id) group_name = Group.objects.get(pk=group_id).name sites_count = len(regions) users_count = len(users) task_id = multiuserassignregion.request.id task = CeleryTaskProgress.objects.get(task_id=task_id) task.content_object = project task.description = "Assign " + str(users_count) + " people in " + str( sites_count) + " regions." task.status = 1 task.save() try: with transaction.atomic(): roles_created = 0 for region_id in regions: if region_id == "0": sites = Site.objects.filter( region__isnull=True, project_id=project_id).values('id') else: sites = Site.objects.filter( region_id=region_id, project_id=project_id).values('id') for site_id in sites: for user in users: site = Site.objects.filter(pk=site_id['id']).first() if site and site.project_id == project.id: role, created = UserRole.objects.get_or_create( user_id=user, site_id=site_id['id'], project__id=project.id, organization__id=project.organization_id, group_id=group_id, ended_at=None) if created: roles_created += 1 # description = "{0} was assigned as {1} in {2}".format( # role.user.get_full_name(), role.lgroup.name, role.project) # noti_type = 8 # if data.get('group') == "Reviewer": # noti_type =7 # noti = role.logs.create(source=role.user, type=noti_type, title=description, # description=description, content_type=site, extra_object=self.request.user, # site=role.site) # result = {} # result['description'] = description # result['url'] = noti.get_absolute_url() # ChannelGroup("notify-{}".format(role.organization.id)).send({"text": json.dumps(result)}) # ChannelGroup("project-{}".format(role.project.id)).send({"text": json.dumps(result)}) # ChannelGroup("site-{}".format(role.site.id)).send({"text": json.dumps(result)}) # ChannelGroup("notify-0").send({"text": json.dumps(result)}) # Device = get_device_model() # if Device.objects.filter(name=role.user.email).exists(): # message = {'notify_type':'Assign Site', 'site':{'name': site.name, 'id': site.id}} # Device.objects.filter(name=role.user.email).send_message(message) task.status = 2 task.save() if roles_created == 0: noti = FieldSightLog.objects.create( source=source_user, type=23, title="Task Completed.", content_object=project, recipient=source_user, extra_message="All " + str(users_count) + " users were already assigned as " + group_name + " in " + str(sites_count) + " selected regions ") result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result[ 'source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = noti.get_event_name(), result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 23, result['date'] = str(noti.date), result['extra_message'] = "All " + str( users_count ) + " users were already assigned as " + group_name + " in " + str( sites_count) + " selected regions ", result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) else: noti = FieldSightLog.objects.create( source=source_user, type=22, title="Bulk site User Assign", content_object=project, organization=project.organization, project=project, extra_message=str(roles_created) + " new " + group_name + " Roles in " + str(sites_count) + " regions ") result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result[ 'source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = noti.get_event_name(), result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 22, result['date'] = str(noti.date), result['extra_message'] = str( roles_created) + " new " + group_name + " Roles in " + str( sites_count) + " regions ", result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) except Exception as e: print 'Site Upload Unsuccesfull. ------------------------------------------%s' % e task.status = 3 task.save() noti = FieldSightLog.objects.create( source=source_user, type=422, title="Bulk Region User Assign", content_object=project, recipient=source_user, extra_message=group_name + " for " + str(users_count) + " people in " + str(sites_count) + " regions ") result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result['source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = noti.get_event_name(), result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 422, result['date'] = str(noti.date), result['extra_message'] = group_name + " role for " + str( users_count) + " people in " + str(sites_count) + " regions ", result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) return None
def bulkuploadsites(source_user, file, pk): time.sleep(5) project = Project.objects.get(pk=pk) task_id = bulkuploadsites.request.id task = CeleryTaskProgress.objects.get(task_id=task_id) task.content_object = project task.status = 1 task.save() try: sites = file.get_records() count = len(sites) task.description = "Bulk Upload of " + str(count) + " Sites." task.save() with transaction.atomic(): i = 0 for site in sites: # time.sleep(0.7) site = dict((k, v) for k, v in site.iteritems() if v is not '') lat = site.get("longitude", 85.3240) long = site.get("latitude", 27.7172) location = Point(lat, long, srid=4326) type_id = int(site.get("type", "1")) region_idf = site.get("region_id", None) region_id = None if region_idf is not None: region, created = Region.objects.get_or_create( identifier=str(region_idf), project=project) region_id = region.id _site, created = Site.objects.get_or_create( identifier=str(site.get("id")), name=site.get("name"), project=project, type_id=type_id, region_id=region_id) _site.phone = site.get("phone") _site.address = site.get("address") _site.public_desc = site.get("public_desc"), _site.additional_desc = site.get("additional_desc") _site.location = location _site.logo = "logo/default-org.jpg" meta_ques = project.site_meta_attributes myanswers = {} for question in meta_ques: myanswers[question['question_name']] = site.get( question['question_name'], "") print site.get(question['question_name']) _site.site_meta_attributes_ans = myanswers _site.save() i += 1 interval = count / 20 if i > interval: interval = i + interval bulkuploadsites.update_state(state='PROGRESS', meta={ 'current': i, 'total': count }) task.status = 2 task.save() noti = project.logs.create(source=source_user, type=12, title="Bulk Sites", organization=project.organization, project=project, content_object=project, extra_message=str(count) + " Sites") result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result[ 'source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = project.name, result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 12, result['date'] = str(noti.date), result['extra_message'] = str(count) + " Sites", result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) # ChannelGroup("project-{}".format(project.id)).send({"text": json.dumps(result)}) except Exception as e: task.status = 3 task.save() print 'Site Upload Unsuccesfull. %s' % e print e.__dict__ noti = project.logs.create(source=source_user, type=412, title="Bulk Sites", content_object=project, recipient=source_user, extra_message=str(count) + " Sites @error " + u'{}'.format(e.message)) result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result['source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = project.name, result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 412, result['date'] = str(noti.date), result['extra_message'] = str(count) + " Sites @error " + u'{}'.format( e.message), result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) return None
def multiuserassignproject(source_user, org_id, projects, users, group_id): org = Organization.objects.get(pk=org_id) projects_count = len(projects) users_count = len(users) task_id = multiuserassignproject.request.id task = CeleryTaskProgress.objects.get(task_id=task_id) task.content_object = org task.description = "Assign " + str(users_count) + " people in " + str( projects_count) + " projects." task.status = 1 task.save() try: with transaction.atomic(): roles_created = 0 for project_id in projects: project = Project.objects.get(pk=project_id) for user in users: role, created = UserRole.objects.get_or_create( user_id=user, project_id=project_id, organization_id=org.id, group_id=group_id, ended_at=None) if created: roles_created += 1 # description = "{0} was assigned as Project Manager in {1}".format( # role.user.get_full_name(), role.project) # noti = role.logs.create(source=role.user, type=6, title=description, description=description, # content_object=role.project, extra_object=self.request.user) # result = {} # result['description'] = description # result['url'] = noti.get_absolute_url() # ChannelGroup("notify-{}".format(role.organization.id)).send({"text": json.dumps(result)}) # ChannelGroup("project-{}".format(role.project.id)).send({"text": json.dumps(result)}) # ChannelGroup("notify-0").send({"text": json.dumps(result)}) task.status = 2 task.save() if roles_created == 0: noti = FieldSightLog.objects.create( source=source_user, type=23, title="Task Completed.", content_object=org, recipient=source_user, extra_message=str(roles_created) + " new Project Manager Roles in " + str(projects_count) + " projects ") result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result[ 'source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = noti.get_event_name(), result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 23, result['date'] = str(noti.date), result['extra_message'] = "All " + str( users_count ) + " people were already assigned as Project Managers in " + str( projects_count) + " selected projects ", result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) else: noti = FieldSightLog.objects.create( source=source_user, type=21, title="Bulk Project User Assign", content_object=org, organization=org, extra_message=str(roles_created) + " new Project Manager Roles in " + str(projects_count) + " projects ") result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result[ 'source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = noti.get_event_name(), result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 21, result['date'] = str(noti.date), result['extra_message'] = str( roles_created) + " new Project Manager Roles in " + str( projects_count) + " projects ", result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) except Exception as e: task.status = 3 task.save() noti = FieldSightLog.objects.create(source=source_user, type=421, title="Bulk Project User Assign", content_object=org, recipient=source_user, extra_message=str(users_count) + " people in " + str(projects_count) + " projects ") result = {} result['id'] = noti.id, result['source_uid'] = source_user.id, result['source_name'] = source_user.username, result['source_img'] = source_user.user_profile.profile_picture.url, result['get_source_url'] = noti.get_source_url(), result['get_event_name'] = noti.get_event_name(), result['get_event_url'] = noti.get_event_url(), result['get_extraobj_name'] = None, result['get_extraobj_url'] = None, result['get_absolute_url'] = noti.get_absolute_url(), result['type'] = 421, result['date'] = str(noti.date), result['extra_message'] = str(users_count) + " people in " + str( projects_count) + " projects ", result['seen_by'] = [], ChannelGroup("notif-user-{}".format(source_user.id)).send( {"text": json.dumps(result)}) return None
def create(self, request, *args, **kwargs): if self.request.user.is_anonymous(): self.permission_denied(self.request) fsxfid = kwargs.get('pk', None) siteid = kwargs.get('site_id', None) if siteid == '0': siteid = None if fsxfid is None: return self.error_response("Fieldsight Form ID Not Given", False, request) try: fs_proj_xf = get_object_or_404(FieldSightXF, pk=kwargs.get('pk')) fxf = None try: if fs_proj_xf.is_survey: xform = fs_proj_xf.xf elif fs_proj_xf.is_scheduled and siteid: site = Site.objects.get(pk=siteid) schedule = fs_proj_xf.schedule selected_days = tuple(schedule.selected_days.all()) s, created = Schedule.objects.get_or_create(name=schedule.name, site=site, date_range_start=schedule.date_range_start, date_range_end=schedule.date_range_end) if created: s.selected_days.add(*selected_days) s.save() fxf, created = FieldSightXF.objects.get_or_create(is_scheduled=True, site=site, xf=fs_proj_xf.xf, from_project=True, fsform=fs_proj_xf, schedule=s) xform = fxf.xf elif (fs_proj_xf.is_scheduled is False and fs_proj_xf.is_staged is False) and siteid: site = Site.objects.get(pk=siteid) fxf, created = FieldSightXF.objects.get_or_create(is_scheduled=False,is_staged=False, site=site, xf=fs_proj_xf.xf, from_project=True, fsform=fs_proj_xf) xform = fxf.xf elif fs_proj_xf.is_staged and siteid: site = Site.objects.get(pk=siteid) project_stage = fs_proj_xf.stage try: site_stage = Stage.objects.get(site=site, project_stage_id=project_stage.id) fxf = site_stage.stage_forms xform = fxf.xf except Exception as e: project = fs_proj_xf.project project_main_stages = project.stages.filter(stage__isnull=True) for pms in project_main_stages: project_sub_stages = Stage.objects.filter(stage__id=pms.pk, stage_forms__is_deleted=False) site_main_stage, created = Stage.objects.get_or_create(name=pms.name, order=pms.order, site=site, description=pms.description, project_stage_id=pms.id) for pss in project_sub_stages: site_sub_stage, created = Stage.objects.get_or_create(name=pss.name, order=pss.order, site=site, description=pss.description, stage=site_main_stage, project_stage_id=pss.id) if FieldSightXF.objects.filter(stage=pss).exists(): project_fsxf = pss.stage_forms site_form, created = FieldSightXF.objects.get_or_create(is_staged=True, xf=project_fsxf.xf, site=siteid,fsform=project_fsxf, stage=site_sub_stage, is_deployed=True) if project_fsxf.id == fs_proj_xf.id: fxf = site_form xform = fxf.xf except Exception as e: xform = fs_proj_xf.xf proj_id = fs_proj_xf.project.id except: return self.error_response("Site Id Or Form ID Not Vaild", False, request) if request.method.upper() == 'HEAD': return Response(status=status.HTTP_204_NO_CONTENT, headers=self.get_openrosa_headers(request), template_name=self.template_name) site_fsxf_id = None if fxf: site_fsxf_id = fxf.id if fs_proj_xf.is_survey: error, instance = create_instance_from_xml(request, None, None, fs_proj_xf.id, proj_id, xform) else: error, instance = create_instance_from_xml(request, site_fsxf_id, siteid, fs_proj_xf.id, proj_id, xform) if error or not instance: return self.error_response(error, False, request) noti = instance.fieldsight_instance.logs.create(source=self.request.user, type=16, title="new Project level Submission", organization=fs_proj_xf.project.organization, project=fs_proj_xf.project, extra_object=fs_proj_xf.project, content_object=instance.fieldsight_instance) result = {} result['description'] = noti.description result['url'] = noti.get_absolute_url() # ChannelGroup("notify-{}".format(self.object.project.organization.id)).send({"text": json.dumps(result)}) # ChannelGroup("project-{}".format(self.object.project.id)).send({"text": json.dumps(result)}) if instance.fieldsight_instance.site: ChannelGroup("site-{}".format(instance.fieldsight_instance.site.id)).send({"text": json.dumps(result)}) else: ChannelGroup("project-{}".format(instance.fieldsight_instance.project.id)).send({"text": json.dumps(result)}) # modify create instance context = self.get_serializer_context() serializer = FieldSightSubmissionSerializer(instance, context=context) return Response(serializer.data, headers=self.get_openrosa_headers(request), status=status.HTTP_201_CREATED, template_name=self.template_name)
def perform_create(self, serializer): data = self.request.data if "id" in data and data.get('id'): raise ValidationError({ "Update User Invalid Operation ", }) if "password" not in data: raise ValidationError({ "Password Required ", }) if "cpassword" not in data: raise ValidationError({ "Password Required ", }) if data.get('cpassword') != data.get('password'): raise ValidationError({ "Password Missmatch ", }) username = data.get('username') email = data.get('email') if User.objects.filter(username=username).exists(): raise ValidationError({ "Username Already Used ", }) if User.objects.filter(email=email).exists(): raise ValidationError({ "Email Already Used ", }) try: with transaction.atomic(): user = serializer.save() user.set_password(data.get('password')) user.is_superuser = True user.save() profile = UserProfile(user=user, organization_id=self.kwargs.get('pk')) profile.save() site = get_current_site(self.request) new_user = RegistrationProfile.objects.create_inactive_user( new_user=user, site=site, send_email=True, request=self.request, ) noti = profile.logs.create( source=self.request.user, type=0, title="new User", organization=profile.organization, description="new user {0} created by {1}".format( user.username, self.request.user.username)) result = {} result['description'] = 'new user {0} created by {1}'.format( user.username, self.request.user.username) result['url'] = noti.get_absolute_url() ChannelGroup("notify-{}".format(profile.organization.id)).send( {"text": json.dumps(result)}) ChannelGroup("notify-0".format(profile.organization.id)).send( {"text": json.dumps(result)}) signals.user_registered.send(sender=RegistrationView, user=new_user, request=self.request) except Exception as e: raise ValidationError({ "User Creation Failed {}".format(str(e)), })
def treatment_go(treatment): group = ChannelGroup("treatment-waiting") count = len(group.channel_layer.group_channels('treatment-waiting')) group.send({"text": json.dumps({"action": "go_treating", "treatment": treatment.id})}) return count > 0
def __init__(self, channel_to_response, tracker_type): self.model = tracker_correspondence[tracker_type] self.channel_to_response = channel_to_response self.tracker_type = tracker_type self.template_name = f'otree_tools/trackers_export/{tracker_type}_data.csv' self.channel = ChannelGroup(self.channel_to_response)