Пример #1
0
    def workflow_action(self, request, instance=None, *args, **kwargs):
        try:
            with transaction.atomic():
                if not instance:
                    instance = self.get_object()

                comms_log_id = request.data.get('comms_log_id')
                if comms_log_id and comms_log_id is not 'null':
                    workflow_entry = instance.comms_logs.get(id=comms_log_id)
                else:
                    workflow_entry = self.add_comms_log(request,
                                                        instance,
                                                        workflow=True)

                # Set status
                workflow_type = request.data.get('workflow_type')
                email_data = None

                if workflow_type == Offence.WORKFLOW_CLOSE:
                    instance.close(request)
                    # Email to manager
                    email_data = prepare_mail(request, instance,
                                              workflow_entry, send_mail)
                else:
                    # Should not reach here
                    # instance.save()
                    pass

                # Log the above email as a communication log entry
                if email_data:
                    serializer = OffenceCommsLogEntrySerializer(
                        instance=workflow_entry, data=email_data, partial=True)
                    serializer.is_valid(raise_exception=True)
                    serializer.save()

                return self.retrieve(request)
                # return_serializer = OffenceSerializer(instance=instance, context={'request': request})
                # headers = self.get_success_headers(return_serializer.data)
                # return Response(
                #     return_serializer.data,
                #     status=status.HTTP_201_CREATED,
                #     headers=headers
                # )
        except serializers.ValidationError:
            print(traceback.print_exc())
            raise
        except ValidationError as e:
            print(traceback.print_exc())
            raise serializers.ValidationError(repr(e.error_dict))
        except Exception as e:
            print(traceback.print_exc())
            raise serializers.ValidationError(str(e))
Пример #2
0
    def close(self, request):
        # TODO: add logic to check for disposal date
        # NOTE: close_record logic moved to can_close_legal_case
        if not self.disposal_date:
            self.status = self.STATUS_WAITING_FOR_DISPOSAL
            # send mail
            #request_data = None
            #if not request:
            #   request_data = FakeRequest(data={
            #          'assigned_to_id': self.custodian_email
            #         })
            #else:

            #if self.custodian_email:
            #   request.data['recipient_address'] = self.custodian_email
            email_data = prepare_mail(request=request,
                                      instance=self,
                                      workflow_entry=None,
                                      send_mail=send_mail,
                                      recipient_address=self.custodian_email)
            #prepare_mail(request=request, instance=self, workflow_entry=None, send_mail=send_mail)
            # write comms log based on email_data
            print("email_data")
            print(email_data)
            to = email_data.get('to', '')
            fromm = email_data.get('fromm', '')
            cc = email_data.get('cc', '')
            #log_type = email_data.get('log_type')
            log_type = 'email'
            reference = email_data.get('reference', '')
            subject = email_data.get('subject', '')
            text = email_data.get('text', '')
            ArtifactCommsLogEntry.objects.create(artifact=self,
                                                 to=to,
                                                 fromm=fromm,
                                                 cc=cc,
                                                 log_type=log_type,
                                                 reference=reference,
                                                 subject=subject,
                                                 text=text)
            # action log
            self.log_user_action(
                ArtifactUserAction.ACTION_WAITING_FOR_DISPOSAL.format(
                    self.number), request)
        else:
            self.status = self.STATUS_CLOSED
            # attempt to close parent
            ##
            self.log_user_action(
                ArtifactUserAction.ACTION_CLOSE.format(self.number), request)
        self.save()
Пример #3
0
    def workflow_action(self, request, instance=None, create_inspection=None, *args, **kwargs):
        print("workflow action")
        print(request.data)
        try:
            with transaction.atomic():
                # email recipient
                #recipient_id = None

                if not instance:
                    instance = self.get_object()

                comms_log_id = request.data.get('inspection_comms_log_id')
                if comms_log_id and comms_log_id is not 'null':
                    workflow_entry = instance.comms_logs.get(
                            id=comms_log_id)
                else:
                    workflow_entry = self.add_comms_log(request, instance, workflow=True)
                    temporary_document_collection_id = request.data.get('temporary_document_collection_id')
                    if temporary_document_collection_id:
                        temp_doc_collection, created = TemporaryDocumentCollection.objects.get_or_create(
                                id=temporary_document_collection_id)
                        if temp_doc_collection:
                            for doc in temp_doc_collection.documents.all():
                                save_comms_log_document_obj(instance, workflow_entry, doc)
                            temp_doc_collection.delete()

                # Set Inspection status depending on workflow type
                workflow_type = request.data.get('workflow_type')
                if workflow_type == 'send_to_manager':
                    instance.send_to_manager(request)
                elif workflow_type == 'request_amendment':
                    instance.request_amendment(request)
                elif workflow_type == 'endorse':
                    instance.endorse(request)
                elif workflow_type == 'close':
                    instance.close(request)

                #if not workflow_type or workflow_type in ('', ''):
                if create_inspection:
                    instance.region_id = None if not request.data.get('region_id') else request.data.get('region_id')
                    instance.district_id = None if not request.data.get('district_id') else request.data.get('district_id')
                    instance.assigned_to_id = None if not request.data.get('assigned_to_id') else request.data.get('assigned_to_id')
                    instance.inspection_type_id = None if not request.data.get('inspection_type_id') else request.data.get('inspection_type_id')
                    instance.allocated_group_id = None if not request.data.get('allocated_group_id') else request.data.get('allocated_group_id')
                    instance.call_email_id = None if not request.data.get('call_email_id') else request.data.get('call_email_id')
                    instance.legal_case_id = None if not request.data.get('legal_case_id') else request.data.get('legal_case_id')
                    instance.details = None if not request.data.get('details') else request.data.get('details')
                #elif workflow_type not in ('send_to_manager', 'request_amendment'):
                 #   instance.assigned_to_id = None if not request.data.get('assigned_to_id') else request.data.get('assigned_to_id')
                else:
                    instance.assigned_to_id = None
                    instance.allocated_group_id = None if not request.data.get('allocated_group_id') else request.data.get('allocated_group_id')
                    #recipient_id = instance.inspection_team_lead_id

                instance.save()
                
                # Needed for create inspection
                if create_inspection:
                    instance = self.modify_inspection_team(request, instance, workflow=True, user_id=instance.assigned_to_id)

                # send email
                if workflow_type == 'send_to_manager':
                    email_data = prepare_mail(
                            request, 
                            instance, 
                            workflow_entry, 
                            send_mail, 
                            recipient_id=instance.inspection_team_lead_id,
                            email_type='send_to_manager')
                elif workflow_type == 'request_amendment':
                    email_data = prepare_mail(
                            request, 
                            instance, 
                            workflow_entry, 
                            send_mail, 
                            email_type='request_amendment')
                elif workflow_type == 'endorse':
                    email_data = prepare_mail(
                            request, 
                            instance, 
                            workflow_entry, 
                            send_mail, 
                            email_type='endorse')
                else:
                    email_data = prepare_mail(request, instance, workflow_entry, send_mail)

                serializer = InspectionCommsLogEntrySerializer(instance=workflow_entry, data=email_data, partial=True)
                serializer.is_valid(raise_exception=True)
                if serializer.is_valid():
                    serializer.save()
                    return_serializer = InspectionSerializer(instance=instance, 
                            context={'request': request}
                            ) 
                    headers = self.get_success_headers(return_serializer.data)
                    return Response(
                            return_serializer.data, 
                            status=status.HTTP_201_CREATED,
                            headers=headers
                            )
        except serializers.ValidationError:
            print(traceback.print_exc())
            raise
        except ValidationError as e:
            print(traceback.print_exc())
            raise serializers.ValidationError(repr(e.error_dict))
        except Exception as e:
            print(traceback.print_exc())
            raise serializers.ValidationError(str(e))
Пример #4
0
    def workflow_action(self, request, *args, **kwargs):
        print(request.data)
        try:
            with transaction.atomic():
                instance = self.get_object()
                comms_log_id = request.data.get('call_email_comms_log_id')
                if comms_log_id and comms_log_id is not 'null':
                    workflow_entry = instance.comms_logs.get(
                            id=comms_log_id)
                else:
                    workflow_entry = self.add_comms_log(request, workflow=True)

                # Set CallEmail status depending on workflow type
                workflow_type = request.data.get('workflow_type')
                if workflow_type == 'forward_to_regions':
                    instance.forward_to_regions(request)
                elif workflow_type == 'forward_to_wildlife_protection_branch':
                    instance.forward_to_wildlife_protection_branch(request)
                elif workflow_type == 'allocate_for_follow_up':
                    instance.allocate_for_follow_up(request)
                elif workflow_type == 'allocate_for_inspection':
                    instance.allocate_for_inspection(request)
                elif workflow_type == 'allocate_for_case':
                    instance.allocate_for_case(request)
                elif workflow_type == 'close':
                    instance.close(request)
                elif workflow_type == 'offence':
                    instance.add_offence(request)
                elif workflow_type == 'sanction_outcome':
                    instance.add_sanction_outcome(request)

                if request.data.get('referrers_selected'):
                    instance.add_referrers(request)

                instance.region_id = None if not request.data.get('region_id') else request.data.get('region_id')
                instance.district_id = None if not request.data.get('district_id') else request.data.get('district_id')
                instance.assigned_to_id = None if not request.data.get('assigned_to_id') else request.data.get('assigned_to_id')
                instance.inspection_type_id = None if not request.data.get('inspection_type_id') else request.data.get('inspection_type_id')
                instance.case_priority_id = None if not request.data.get('case_priority_id') else request.data.get('case_priority_id')
                instance.allocated_group_id = None if not request.data.get('allocated_group_id') else request.data.get('allocated_group_id')
                instance.advice_details = None if not request.data.get('advice_details') else request.data.get('advice_details')

                instance.save()

                if workflow_type == 'close':
                    email_data = prepare_mail(request, instance, workflow_entry, send_mail, email_type="close")
                else:
                    email_data = prepare_mail(request, instance, workflow_entry, send_mail)

                serializer = CallEmailLogEntrySerializer(instance=workflow_entry, data=email_data, partial=True)
                serializer.is_valid(raise_exception=True)
                if serializer.is_valid():
                    serializer.save()
                    return_serializer = CallEmailSerializer(instance=instance, 
                            context={'request': request}
                            ) 
                    headers = self.get_success_headers(return_serializer.data)
                    return Response(
                            return_serializer.data, 
                            status=status.HTTP_201_CREATED,
                            headers=headers
                            )
        except serializers.ValidationError:
            print(traceback.print_exc())
            raise
        except ValidationError as e:
            print(traceback.print_exc())
            raise serializers.ValidationError(repr(e.error_dict))
        except Exception as e:
            print(traceback.print_exc())
            raise serializers.ValidationError(str(e))