def handle(self, domain, **options):
     from casexml.apps.phone.cleanliness import (
         set_cleanliness_flags_for_domain, set_cleanliness_flags_for_all_domains)
     force_full = options['force']
     if domain:
         set_cleanliness_flags_for_domain(domain, force_full=force_full)
     else:
         set_cleanliness_flags_for_all_domains(force_full=force_full)
 def handle(self, domain, **options):
     from casexml.apps.phone.cleanliness import (
         set_cleanliness_flags_for_domain,
         set_cleanliness_flags_for_all_domains)
     force_full = options['force']
     if domain:
         set_cleanliness_flags_for_domain(domain, force_full=force_full)
     else:
         set_cleanliness_flags_for_all_domains(force_full=force_full)
Example #3
0
 def handle(self, *args, **options):
     from casexml.apps.phone.cleanliness import (
         set_cleanliness_flags_for_domain, set_cleanliness_flags_for_all_domains)
     force_full = options['force']
     if len(args) == 1:
         domain = args[0]
         set_cleanliness_flags_for_domain(domain, force_full=force_full)
     else:
         assert len(args) == 0
         set_cleanliness_flags_for_all_domains(force_full=force_full)
 def handle(self, *args, **options):
     from casexml.apps.phone.cleanliness import (
         set_cleanliness_flags_for_domain, set_cleanliness_flags_for_all_domains)
     force_full = options['force']
     if len(args) == 1:
         domain = args[0]
         set_cleanliness_flags_for_domain(domain, force_full=force_full)
     else:
         assert len(args) == 0
         set_cleanliness_flags_for_all_domains(force_full=force_full)
 def handle(self, *args, **kwargs):
     from casexml.apps.phone.cleanliness import set_cleanliness_flags_for_domain
     if len(args) == 1:
         domain = args[0]
         set_cleanliness_flags_for_domain(domain)
     else:
         assert len(args) == 0
         for domain in Domain.get_all_names():
             if OWNERSHIP_CLEANLINESS.enabled(domain):
                 print 'updating flags for {}'.format(domain)
                 set_cleanliness_flags_for_domain(domain)
def migrate_to_enikshay(domain, migration_comment, beneficiaries, skip_adherence, chunk_size,
                        location_owner, default_location_owner, dry_run):
    total = beneficiaries.count()
    counter = 0
    num_succeeded = 0
    num_failed = 0
    num_failed_chunks = 0
    logger.info('Starting migration of %d patients in domain %s.' % (total, domain))

    if dry_run:
        logger.info('Dry run, exiting...')
        return

    factory = CaseFactory(domain=domain)
    case_structures = []

    for beneficiary in beneficiaries:
        counter += 1
        try:
            case_factory = BeneficiaryCaseFactory(
                domain, migration_comment, beneficiary, location_owner, default_location_owner
            )
            case_structures.extend(case_factory.get_case_structures_to_create(skip_adherence))
        except Exception:
            num_failed += 1
            logger.error(
                'Failed on %d of %d. Case ID=%s' % (
                    counter, total, beneficiary.caseId
                ),
                exc_info=True,
            )
        else:
            num_succeeded += 1
            if num_succeeded % chunk_size == 0:
                logger.info('%d cases to save.' % len(case_structures))
                logger.info('committing beneficiaries {}-{}...'.format(
                    num_succeeded - chunk_size + 1, num_succeeded
                ))
                try:
                    factory.create_or_update_cases(case_structures)
                except Exception:
                    num_failed_chunks += 1
                    logger.error(
                        'Failure writing case structures',
                        exc_info=True,
                    )
                case_structures = []
                logger.info('done')

            logger.info(
                'Succeeded on %s of %d. Case ID=%s' % (
                    counter, total, beneficiary.caseId
                )
            )

    if case_structures:
        logger.info('committing final cases...'.format(num_succeeded - chunk_size, num_succeeded))
        factory.create_or_update_cases(case_structures)

    logger.info('Done creating cases for domain %s.' % domain)
    logger.info('Number of attempts: %d.' % counter)
    logger.info('Number of successes: %d.' % num_succeeded)
    logger.info('Number of failures: %d.' % num_failed)
    logger.info('Number of chunks to fail writing: %d' % num_failed_chunks)

    # since we circumvented cleanliness checks just call this at the end
    logger.info('Setting cleanliness flags')
    set_cleanliness_flags_for_domain(domain, force_full=True, raise_soft_assertions=False)
    logger.info('Done!')
    def handle(self, domain, migration_comment, **options):
        if not settings.UNIT_TESTING:
            raise CommandError(
                'must migrate case data from phone_number to contact_phone_number before running'
            )

        base_query = PatientDetail.objects.order_by('scode', 'Dtocode',
                                                    'Tbunitcode', 'PHI')

        if options['location_codes']:
            location_filter = Q()
            for location_code in options['location_codes']:
                codes = location_code.split('-')
                assert 1 <= len(codes) <= 4
                q = Q(scode=codes[0])
                if len(codes) > 1:
                    q = q & Q(Dtocode=codes[1])
                if len(codes) > 2:
                    q = q & Q(Tbunitcode=int(codes[2]))
                if len(codes) > 3:
                    q = q & Q(PHI=int(codes[3]))
                location_filter = location_filter | q
            base_query = base_query.filter(location_filter)

        if options['nikshay_ids']:
            base_query = base_query.filter(PregId__in=options['nikshay_ids'])

        start = options['start']
        limit = options['limit']
        chunk_size = options['chunk_size']
        test_phi = options['test_phi']
        if test_phi:
            logger.warning("** USING TEST PHI ID **")

        if limit is not None:
            patient_details = base_query[start:start + limit]
        else:
            patient_details = base_query[start:]

        total = patient_details.count()
        counter = 0
        num_succeeded = 0
        num_failed = 0
        num_matching_case_not_migrated = 0
        logger.info('Starting migration of %d patient cases on domain %s.' %
                    (total, domain))
        nikshay_codes_to_location = get_nikshay_codes_to_location(domain)
        factory = CaseFactory(domain=domain)
        case_structures = []

        for patient_detail in patient_details:
            counter += 1
            try:
                case_factory = EnikshayCaseFactory(domain, migration_comment,
                                                   patient_detail,
                                                   nikshay_codes_to_location,
                                                   test_phi)
                case_structures.extend(
                    case_factory.get_case_structures_to_create())
            except MatchingNikshayIdCaseNotMigrated:
                num_matching_case_not_migrated += 1
                logger.error(
                    'Matching case not migrated for %d of %d.  Nikshay ID=%s' %
                    (counter, total, patient_detail.PregId))
            except Exception:
                num_failed += 1
                logger.error(
                    'Failed on %d of %d. Nikshay ID=%s' %
                    (counter, total, patient_detail.PregId),
                    exc_info=True,
                )
            else:
                num_succeeded += 1
                if num_succeeded % chunk_size == 0:
                    logger.info('committing cases {}-{}...'.format(
                        num_succeeded - chunk_size, num_succeeded))
                    factory.create_or_update_cases(case_structures)
                    case_structures = []
                    logger.info('done')

                logger.info('Succeeded on %s of %d. Nikshay ID=%s' %
                            (counter, total, patient_detail.PregId))

        if case_structures:
            logger.info('committing final cases...'.format(
                num_succeeded - chunk_size, num_succeeded))
            factory.create_or_update_cases(case_structures)

        logger.info('Done creating cases for domain %s.' % domain)
        logger.info('Number of attempts: %d.' % counter)
        logger.info('Number of successes: %d.' % num_succeeded)
        logger.info('Number of failures: %d.' % num_failed)
        logger.info('Number of cases matched but not migrated: %d.' %
                    num_matching_case_not_migrated)

        # since we circumvented cleanliness checks just call this at the end
        logger.info('Setting cleanliness flags')
        set_cleanliness_flags_for_domain(domain,
                                         force_full=True,
                                         raise_soft_assertions=False)
        logger.info('Done!')
Example #8
0
    def handle(self, domain, **options):
        base_query = Beneficiary.objects.filter(
            caseStatus__in=['suspect', 'patient', 'patient '], )

        if options['nikshayId']:
            base_query = base_query.filter(nikshayId=options['nikshayId'])

        start = options['start']
        limit = options['limit']
        chunk_size = options['chunk_size']

        if limit is not None:
            beneficiaries = base_query[start:start + limit]
        else:
            beneficiaries = base_query[start:]

        # Assert never null
        assert not beneficiaries.filter(firstName__isnull=True).exists()
        assert not beneficiaries.filter(lastName__isnull=True).exists()
        assert not beneficiaries.filter(phoneNumber__isnull=True).exists()
        assert not Episode.objects.filter(
            dateOfDiagnosis__isnull=True).exists()
        assert not Episode.objects.filter(patientWeight__isnull=True).exists()
        assert not Episode.objects.filter(rxStartDate__isnull=True).exists()
        assert not Episode.objects.filter(site__isnull=True).exists()
        assert not Adherence.objects.filter(creationDate__isnull=True).exists()

        # Assert always null
        assert not beneficiaries.filter(mdrTBSuspected__isnull=False).exists()
        assert not beneficiaries.filter(middleName__isnull=False).exists()
        assert not beneficiaries.filter(nikshayId__isnull=False).exists()
        assert not beneficiaries.filter(symptoms__isnull=False).exists()
        assert not beneficiaries.filter(tsType__isnull=False).exists()
        assert not Episode.objects.filter(phoneNumber__isnull=False).exists()

        total = beneficiaries.count()
        counter = 0
        num_succeeded = 0
        num_failed = 0
        logger.info('Starting migration of %d patients in domain %s.' %
                    (total, domain))
        factory = CaseFactory(domain=domain)
        case_structures = []

        for beneficiary in beneficiaries:
            counter += 1
            try:
                case_factory = BeneficiaryCaseFactory(domain, beneficiary)
                case_structures.extend(
                    case_factory.get_case_structures_to_create())
            except Exception:
                num_failed += 1
                logger.error(
                    'Failed on %d of %d. Nikshay ID=%s' %
                    (counter, total, beneficiary.nikshayId),
                    exc_info=True,
                )
            else:
                num_succeeded += 1
                if num_succeeded % chunk_size == 0:
                    logger.info('committing cases {}-{}...'.format(
                        num_succeeded - chunk_size, num_succeeded))
                    factory.create_or_update_cases(case_structures)
                    case_structures = []
                    logger.info('done')

                logger.info('Succeeded on %s of %d. Nikshay ID=%s' %
                            (counter, total, beneficiary.nikshayId))

        if case_structures:
            logger.info('committing final cases...'.format(
                num_succeeded - chunk_size, num_succeeded))
            factory.create_or_update_cases(case_structures)

        logger.info('Done creating cases for domain %s.' % domain)
        logger.info('Number of attempts: %d.' % counter)
        logger.info('Number of successes: %d.' % num_succeeded)
        logger.info('Number of failures: %d.' % num_failed)

        # since we circumvented cleanliness checks just call this at the end
        logger.info('Setting cleanliness flags')
        set_cleanliness_flags_for_domain(domain,
                                         force_full=True,
                                         raise_soft_assertions=False)
        logger.info('Done!')
Example #9
0
    def handle(self, domain, **options):
        base_query = PatientDetail.objects.filter(
            PregId__startswith=options['startswith'],
        ).order_by('PregId')

        start = options['start']
        limit = options['limit']
        chunk_size = options['chunk_size']
        test_phi = options['test_phi']
        if test_phi:
            logger.warning("** USING TEST PHI ID **")

        if limit is not None:
            patient_details = base_query[start:start + limit]
        else:
            patient_details = base_query[start:]

        total = patient_details.count()
        counter = 0
        num_succeeded = 0
        num_failed = 0
        logger.info('Starting migration of %d patient cases on domain %s.' % (total, domain))
        nikshay_codes_to_location = get_nikshay_codes_to_location(domain)
        factory = CaseFactory(domain=domain)
        case_structures = []

        for patient_detail in patient_details:
            counter += 1
            try:
                case_factory = EnikshayCaseFactory(
                    domain, patient_detail, nikshay_codes_to_location, test_phi
                )
                case_structures.extend(case_factory.get_case_structures_to_create())
            except Exception:
                num_failed += 1
                logger.error(
                    'Failed on %d of %d. Nikshay ID=%s' % (
                        counter, total, patient_detail.PregId
                    ),
                    exc_info=True,
                )
            else:
                num_succeeded += 1
                if num_succeeded % chunk_size == 0:
                    logger.info('committing cases {}-{}...'.format(num_succeeded - chunk_size, num_succeeded))
                    factory.create_or_update_cases(case_structures)
                    case_structures = []
                    logger.info('done')

                logger.info(
                    'Succeeded on %s of %d. Nikshay ID=%s' % (
                        counter, total, patient_detail.PregId
                    )
                )

        if case_structures:
            logger.info('committing final cases...'.format(num_succeeded - chunk_size, num_succeeded))
            factory.create_or_update_cases(case_structures)

        logger.info('Done creating cases for domain %s.' % domain)
        logger.info('Number of attempts: %d.' % counter)
        logger.info('Number of successes: %d.' % num_succeeded)
        logger.info('Number of failures: %d.' % num_failed)

        # since we circumvented cleanliness checks just call this at the end
        logger.info('Setting cleanliness flags')
        set_cleanliness_flags_for_domain(domain, force_full=True)
        logger.info('Done!')