def validate_posting_elimination_resolution(request):
    monitoring = request.validated['monitoring']
    monitoring.eliminationResolution.datePublished = monitoring.eliminationResolution.dateCreated
    if not monitoring.eliminationReport:
        accelerator = get_monitoring_accelerator(request.context)
        allow_post_since = calculate_normalized_business_date(
            monitoring.conclusion.datePublished, RESOLUTION_WAIT_PERIOD,
            accelerator)
        if get_now() < allow_post_since:
            raise_operation_error(
                request,
                "Can't post eliminationResolution without eliminationReport "
                "earlier than {} business days since conclusion.datePublished".
                format(RESOLUTION_WAIT_PERIOD.days))
    def test_patch_to_active(self):
        self.app.authorization = ('Basic', (self.sas_name, self.sas_pass))

        context = self.acceleration if SANDBOX_MODE else {}
        accelerator = get_monitoring_accelerator(context)

        now_date = datetime.now(TZ)
        if accelerator:
            end_date = calc_datetime(
                now_date,
                MONITORING_TIME,
                accelerator=accelerator
            )
        else:
            end_date = calc_working_datetime(
                now_date,
                MONITORING_TIME,
                midnight=True,
                calendar=WORKING_DAYS
            )
        response = self.app.patch_json(
            '/monitorings/{}'.format(self.monitoring_id),
            {"data": {
                "status": "active",
                "decision": {
                    "description": "text",
                    "date": (now_date - timedelta(days=2)).isoformat()
                }
            }}
        )

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.content_type, 'application/json')
        self.assertEqual(response.json['data']["status"], "active")
        self.assertEqual(response.json['data']["monitoringPeriod"]["startDate"], now_date.isoformat())
        self.assertEqual(response.json['data']["dateModified"], now_date.isoformat())
        self.assertEqual(response.json['data']["monitoringPeriod"]["endDate"], end_date.isoformat())
        self.assertEqual(response.json['data']["endDate"], end_date.isoformat())
Ejemplo n.º 3
0
 def collection_post(self):
     """
     Post a post
     """
     monitoring = self.context
     post = self.request.validated['post']
     set_author(post, self.request, 'author')
     set_author(post.documents, self.request, 'author')
     upload_objects_documents(self.request, post)
     if post.author == get_monitoring_role('sas') and post.relatedPost is None:
         accelerator = get_monitoring_accelerator(self.context)
         post.dateOverdue = calculate_normalized_business_date(get_now(), POST_OVERDUE_TIME, accelerator)
     if monitoring.status in (ADDRESSED_STATUS, DECLINED_STATUS):
         post.postOf = CONCLUSION_OBJECT_TYPE
     monitoring.posts.append(post)
     if save_monitoring(self.request):
         self.LOGGER.info('Created monitoring post {}'.format(post.id),
                          extra=context_unpack(self.request,
                                               {'MESSAGE_ID': 'monitoring_post_create'},
                                               {'POST_ID': post.id}))
         self.request.response.status = 201
         self.request.response.headers['Location'] = self.request.route_url(
             'Monitoring Post', monitoring_id=monitoring.id, post_id=post.id)
         return {'data': post.serialize('view')}
 def test_no_acceleration(self):
     self.assertEqual(get_monitoring_accelerator({}), 0)
 def test_acceleration_value(self):
     self.assertEqual(
         get_monitoring_accelerator({'monitoringDetails': 'accelerator=2'}),
         2)
Ejemplo n.º 6
0
    def patch(self):
        monitoring = self.request.validated['monitoring']
        monitoring_old_status = monitoring.status
        elimination_resolution = monitoring.eliminationResolution

        apply_patch(self.request,
                    save=False,
                    src=self.request.validated['monitoring_src'])

        now = get_now()
        if monitoring_old_status == DRAFT_STATUS and monitoring.status == ACTIVE_STATUS:
            set_author(monitoring.decision.documents, self.request, 'author')
            accelerator = get_monitoring_accelerator(self.context)
            monitoring.monitoringPeriod = generate_period(
                now, MONITORING_TIME, accelerator)
            monitoring.decision.datePublished = now
            monitoring.endDate = calculate_normalized_business_date(
                now, MONITORING_TIME, accelerator)
        elif monitoring_old_status == ACTIVE_STATUS and monitoring.status == ADDRESSED_STATUS:
            set_author(monitoring.conclusion.documents, self.request, 'author')
            accelerator = get_monitoring_accelerator(self.context)
            monitoring.conclusion.datePublished = now
            monitoring.eliminationPeriod = generate_period(
                now, ELIMINATION_PERIOD_TIME, accelerator)
        elif monitoring_old_status == ACTIVE_STATUS and monitoring.status == DECLINED_STATUS:
            accelerator = get_monitoring_accelerator(self.context)
            monitoring.eliminationPeriod = generate_period(
                now, ELIMINATION_PERIOD_NO_VIOLATIONS_TIME, accelerator)
            monitoring.conclusion.datePublished = now
        elif any([
                monitoring_old_status == DRAFT_STATUS
                and monitoring.status == CANCELLED_STATUS,
                monitoring_old_status == ACTIVE_STATUS
                and monitoring.status == STOPPED_STATUS,
                monitoring_old_status == DECLINED_STATUS
                and monitoring.status == STOPPED_STATUS,
                monitoring_old_status == ADDRESSED_STATUS
                and monitoring.status == STOPPED_STATUS
        ]):
            set_author(monitoring.cancellation.documents, self.request,
                       'author')
            monitoring.cancellation.datePublished = now

        if not elimination_resolution and monitoring.eliminationResolution:
            validate_posting_elimination_resolution(self.request)
            monitoring.eliminationResolution.datePublished = monitoring.eliminationResolution.dateCreated

        # download (change urls of) documents for Decision, Conclusion, etc.
        raw_data = self.request.json.get("data", {})
        for key in raw_data.keys():
            if hasattr(getattr(monitoring, key, None),
                       "documents") and "documents" in raw_data[key]:
                upload_objects_documents(self.request,
                                         getattr(monitoring, key),
                                         key=key)

        save_monitoring(self.request, date_modified=now)
        LOGGER.info('Updated monitoring {}'.format(monitoring.id),
                    extra=context_unpack(self.request,
                                         {'MESSAGE_ID': 'monitoring_patch'}))
        return {'data': monitoring.serialize('view')}