コード例 #1
0
 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')
コード例 #2
0
    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)})
コード例 #3
0
ファイル: models.py プロジェクト: cdlIris/double_auction
    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
コード例 #4
0
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)})
コード例 #5
0
    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
コード例 #6
0
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
コード例 #7
0
 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
コード例 #8
0
 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')
コード例 #9
0
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()
コード例 #10
0
    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())
コード例 #11
0
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
コード例 #12
0
 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')
コード例 #13
0
 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')
コード例 #14
0
 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')
コード例 #15
0
    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)})
コード例 #16
0
    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())
コード例 #17
0
 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
コード例 #18
0
ファイル: views.py プロジェクト: nix1947/fieldsight-kobocat
    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)
コード例 #19
0
    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)
コード例 #20
0
    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
コード例 #21
0
    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)
コード例 #22
0
    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)
コード例 #23
0
 def all_notification(user, message):
     ChannelGroup("%s" % user).send({"text": json.dumps({"msg": message})})
コード例 #24
0
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
コード例 #25
0
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
コード例 #26
0
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
コード例 #27
0
    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)
コード例 #28
0
    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)),
            })
コード例 #29
0
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
コード例 #30
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)