Exemple #1
0
def push_visit(self,
               visit_id,
               created=False,
               auth_header=None,
               task_name_ids=[]):
    # logger.info(f"Pushing visit {visit_id} to AZA")
    capture_message(f"Pushing visit {visit_id} to AZA")
    assert_allow_push()
    url = f"{settings.ZAKEN_API_URL}/visits/"

    if not created:
        logger.info("AZA does not support updating visits anymore.")
        return f"AZA does not support updating visits anymore: visit_id: {visit_id}, created: {created}"

    data = get_serialized_visit(visit_id)

    try:
        response = requests.post(
            url,
            timeout=(CONNECT_TIMEOUT, READ_TIMEOUT),
            json=data,
            headers=get_headers(auth_header),
        )
        response.raise_for_status()
    except Exception as exception:
        self.retry(exc=exception)

    return f"visit_id: {visit_id}, created: {created}"
Exemple #2
0
    def fetch_team_state_types(self, auth_header=None):
        url = f"{settings.ZAKEN_API_URL}/themes/{self.team_settings.zaken_team_name}/state-types/?role=toezichthouder"

        response = requests.get(
            url,
            timeout=5,
            headers=get_headers(auth_header),
        )
        response.raise_for_status()

        return response.json().get("results", [])
Exemple #3
0
    def fetch_team_schedules(self, auth_header=None):
        url = f"{settings.ZAKEN_API_URL}/themes/{self.team_settings.zaken_team_name}/schedule-types/"

        response = requests.get(
            url,
            timeout=5,
            headers=get_headers(auth_header),
        )
        response.raise_for_status()

        return response.json()
    def fetch_events(self):
        url = f"{settings.ZAKEN_API_URL}/cases/{self.case_id}/events/"

        response = requests.get(
            url,
            timeout=5,
            headers=get_headers(),
        )
        response.raise_for_status()

        return response.json()
Exemple #5
0
    def fetch_team_reasons(self, auth_header=None):
        if settings.USE_ZAKEN_MOCK_DATA:
            return get_team_reasons()

        url = f"{settings.ZAKEN_API_URL}/themes/{self.zaken_team_name}/reasons/"

        response = requests.get(
            url,
            timeout=5,
            headers=get_headers(auth_header),
        )
        response.raise_for_status()

        return response.json().get("results", [])
Exemple #6
0
    def list(self, request):
        """
        Returns a list of cases found with the given parameters
        """

        if request.version == "v1":
            # TODO: Replace query parameter strings with constants
            postal_code = request.GET.get("postalCode", None)
            street_name = request.GET.get("streetName", "")
            street_number = request.GET.get("streetNumber", None)
            suffix = request.GET.get("suffix", "")

            if postal_code is None and street_name == "":
                return HttpResponseBadRequest(
                    "Missing postal code or street name is required"
                )
            elif not street_number:
                return HttpResponseBadRequest("Missing street number is required")
            else:
                cases = q.get_search_results(
                    postal_code, street_number, suffix, street_name
                )
                cases = self.__add_fraud_prediction__(cases)
                cases = self.__add_teams__(cases, datetime.now())

                return JsonResponse({"cases": cases})
        else:
            if settings.USE_ZAKEN_MOCK_DATA:
                result = get_zaken_case_list()
            else:
                url = f"{settings.ZAKEN_API_URL}/cases/search/"
                queryParams = {}
                queryParams.update(request.GET)

                response = requests.get(
                    url,
                    params=queryParams,
                    timeout=0.5,
                    headers=get_headers(),
                )
                response.raise_for_status()

                result = response.json().get("results", [])

            for case in result:
                Case.get(case_id=case.get("id"), is_top_bwv_case=False)

            cases = self.__add_fraud_prediction__(result)
            cases = self.__add_teams__(cases, datetime.now())
            return JsonResponse({"cases": cases})
Exemple #7
0
def update_external_state(self, state_id, team_member_emails):
    logger.info(f"Updating external state {state_id} in zaken")

    assert_allow_push()

    url = f"{settings.ZAKEN_API_URL}/case-states/{state_id}/update-from-top/"
    data = {"user_emails": team_member_emails}

    try:
        response = requests.post(
            url,
            timeout=(CONNECT_TIMEOUT, READ_TIMEOUT),
            json=data,
            headers=get_headers(),
        )
        response.raise_for_status()

    except Exception as exception:
        self.retry(exc=exception)

    logger.info(f"Finished updating external state {state_id}")
Exemple #8
0
def push_visit(self, visit_id, created=False):
    logger.info(f"Pushing visit {visit_id} to zaken")

    assert_allow_push()
    url = f"{settings.ZAKEN_API_URL}/visits/"

    if not created:
        logger.info("Zaken does not support updating visits anymore.")

    data = get_serialized_visit(visit_id)

    try:
        response = requests.post(
            url,
            timeout=(CONNECT_TIMEOUT, READ_TIMEOUT),
            json=data,
            headers=get_headers(),
        )
        response.raise_for_status()
    except Exception as exception:
        self.retry(exc=exception)

    return response
def get_eligible_cases_v2(generator):
    logger.info("v2 __get_eligible_cases__")
    if settings.USE_ZAKEN_MOCK_DATA:
        cases = get_zaken_case_list()
        team_schedules = get_team_schedules()
        reasons = get_team_reasons()
        state_types = get_team_state_types()
    else:
        url = f"{settings.ZAKEN_API_URL}/cases/"
        queryParams = {
            "openCases": "true",
            "team":
            generator.settings.day_settings.team_settings.zaken_team_name,
            "startDate": generator.settings.opening_date.strftime("%Y-%m-%d"),
            "noPagination": "true",
        }

        response = requests.get(
            url,
            params=queryParams,
            timeout=5,
            headers=get_headers(),
        )
        response.raise_for_status()

        cases = response.json()

        team_schedules = generator.settings.day_settings.fetch_team_schedules()
        reasons = generator.settings.day_settings.fetch_team_reasons()
        state_types = generator.settings.day_settings.fetch_team_state_types()

    logger.info("validate team_schedules")
    team_schedules = dict((
        k,
        [
            s for s in getattr(generator.settings, k)
            if s in [ss.get("id", 0) for ss in v]
        ],
    ) for k, v in team_schedules.items() if hasattr(generator.settings, k))
    logger.info("validate reasons")
    reasons = [
        r for r in generator.settings.reasons
        if r in [reason.get("id", 0) for reason in reasons]
    ]
    logger.info("validate state_types")
    state_types = [state.get("id", 0) for state in state_types]
    state_types_selected = [
        st for st in generator.settings.state_types if st in state_types
    ]
    logger.info("selected algorithm states")
    logger.info(state_types_selected)
    logger.info("initial case count")
    logger.info(len(cases))
    cases = filter_out_incompatible_cases(cases)
    logger.info("after filter_out_incompatible_cases")
    logger.info(len(cases))
    cases = filter_schedules(cases, team_schedules)
    logger.info("after filter_schedules")
    logger.info(len(cases))
    cases = filter_state_types(cases, state_types)
    logger.info("after filter_state_types")
    logger.info(len(cases))
    cases = filter_cases_with_postal_code(cases, generator.postal_code_ranges)
    logger.info("after filter_cases_with_postal_code")
    logger.info(len(cases))
    cases = [
        c for c in cases if str(c.get("id")) not in
        [str(case.get("id")) for case in generator.exclude_cases]
    ]
Exemple #10
0
        "start_date": start_date,
        "states": states,
        "users": users,
    }

    if end_date:
        data["end_date"] = end_date

    url = f"{settings.ZAKEN_API_URL}/push/"

    try:
        response = requests.post(
            url,
            timeout=(CONNECT_TIMEOUT, READ_TIMEOUT),
            json=data,
            headers=get_headers(),
        )
        response.raise_for_status()

        response_json = response.json()

        itinerary_item.external_state_id = response_json["state"]["id"]
        itinerary_item.save()

        logger.info(f"Finished pushing case {case_id}")

        return response
    except Exception as exception:
        self.retry(exc=exception)

def get_eligible_cases_v2(generator):
    logger.info("v2 __get_eligible_cases__")
    if settings.USE_ZAKEN_MOCK_DATA:
        cases = get_zaken_case_list()
        team_schedules = get_team_schedules()
        reasons = get_team_reasons()
        state_types = get_team_state_types()
    else:
        logger.info("Get from AZA: state_types")
        state_types = generator.settings.day_settings.fetch_team_state_types(
            generator.auth_header)
        logger.info("Get from AZA: team_schedules")
        team_schedules = generator.settings.day_settings.fetch_team_schedules(
            generator.auth_header)
        logger.info("Get from AZA: reasons")
        reasons = generator.settings.day_settings.fetch_team_reasons(
            generator.auth_header)
        logger.info("Get from AZA: cases")

        url = f"{settings.ZAKEN_API_URL}/cases/"

        queryParams = {
            "open_cases": "true",
            "state_types": [state.get("id", 0) for state in state_types],
            "theme":
            generator.settings.day_settings.team_settings.zaken_team_name,
            "from_start_date":
            generator.settings.opening_date.strftime("%Y-%m-%d"),
            "page_size": 1000,
        }
        logger.info("With queryParams")
        logger.info(queryParams)
        now = datetime.datetime.now()
        response = requests.get(
            url,
            params=queryParams,
            timeout=60,
            headers=get_headers(generator.auth_header),
        )
        response.raise_for_status()
        logger.info("Request duration")
        logger.info(datetime.datetime.now() - now)

        cases = response.json().get("results")

    logger.info("initial case count")
    logger.info(len(cases))
    logger.info("validate team_schedules")
    team_schedules = (dict((
        k,
        [
            s for s in getattr(generator.settings, k)
            if s in [ss.get("id", 0) for ss in v]
        ],
    ) for k, v in team_schedules.items() if k in [
        "day_segments",
        "week_segments",
    ]) if team_schedules else {})
    logger.info("validate reasons")
    reasons = [
        r for r in generator.settings.reasons
        if r in [reason.get("id", 0) for reason in reasons]
    ]
    logger.info("validate state_types")
    state_types = [state.get("id", 0) for state in state_types]
    state_types_selected = [
        st for st in generator.settings.state_types if st in state_types
    ]
    logger.info("selected algorithm states")
    logger.info(state_types_selected)
    cases = filter_out_incompatible_cases(cases)
    logger.info("after filter_out_incompatible_cases")
    logger.info(len(cases))
    cases = filter_schedules(cases, team_schedules)
    logger.info("after filter_schedules")
    logger.info(len(cases))
    cases = filter_state_types(cases, state_types)
    logger.info("after filter_state_types")
    logger.info(len(cases))
    cases = filter_cases_with_postal_code(cases, generator.postal_code_ranges)
    logger.info("after filter_cases_with_postal_code")
    logger.info(len(cases))
    cases = [
        c for c in cases if str(c.get("id")) not in
        [str(case.get("id")) for case in generator.exclude_cases]
    ]