def _filter_order_fields(self, resource, pid):
     fhir_resource = SimpleFhirR4Reader(resource)
     summary = ParticipantSummaryDao().get(pid)
     if not summary:
         raise BadRequest('No summary for particpant id: {}'.format(pid))
     code_dict = summary.asdict()
     format_json_code(code_dict, self.code_dao, 'genderIdentityId')
     format_json_code(code_dict, self.code_dao, 'stateId')
     # MayoLink api has strong opinions on what should be sent and the order of elements. Dont touch.
     order = {
         'order': {
             'collected':
             fhir_resource.authoredOn,
             'account':
             '',
             'number':
             fhir_resource.extension.get(
                 url=VIBRENT_BARCODE_URL).valueString,
             'patient': {
                 'medical_record_number': str(summary.biobankId),
                 'first_name': '*',
                 'last_name': str(summary.biobankId),
                 'middle_name': '',
                 'birth_date': '3/3/1933',
                 'gender': code_dict['genderIdentity'],
                 'address1': summary.streetAddress,
                 'address2': summary.streetAddress2,
                 'city': summary.city,
                 'state': code_dict['state'],
                 'postal_code': str(summary.zipCode),
                 'phone': str(summary.phoneNumber),
                 'account_number': None,
                 'race': summary.race,
                 'ethnic_group': None
             },
             'physician': {
                 'name': None,
                 'phone': None,
                 'npi': None
             },
             'report_notes':
             fhir_resource.extension.get(url=VIBRENT_ORDER_URL).valueString,
             'tests': {
                 'test': {
                     'code': '1SAL2',
                     'name': 'PMI Saliva, FDA Kit',
                     'comments': None
                 }
             },
             'comments':
             'Salivary Kit Order, direct from participant'
         }
     }
     return order
    def _filter_order_fields(self, resource, pid):
        fhir_resource = SimpleFhirR4Reader(resource)
        summary = ParticipantSummaryDao().get(pid)
        if not summary:
            raise BadRequest('No summary for participant id: {}'.format(pid))
        code_dict = summary.asdict()
        format_json_code(code_dict, self.code_dao, 'genderIdentityId')
        format_json_code(code_dict, self.code_dao, 'stateId')
        if 'genderIdentity' in code_dict and code_dict['genderIdentity']:
            if code_dict['genderIdentity'] == 'GenderIdentity_Woman':
                gender_val = 'F'
            elif code_dict['genderIdentity'] == 'GenderIdentity_Man':
                gender_val = 'M'
            else:
                gender_val = 'U'
        else:
            gender_val = 'U'

        order_id = int(fhir_resource.basedOn[0].identifier.value)
        with self.session() as session:
            result = session.query(BiobankDVOrder.barcode).filter(
                BiobankDVOrder.order_id == order_id).first()
            barcode = None if not result else result if isinstance(
                result, str) else result.barcode

        # MayoLink api has strong opinions on what should be sent and the order of elements. Dont touch.
        order = {
            'order': {
                'collected': fhir_resource.occurrenceDateTime,
                'account': '',
                'number': barcode,
                'patient': {
                    'medical_record_number':
                    str(to_client_biobank_id(summary.biobankId)),
                    'first_name':
                    '*',
                    'last_name':
                    str(to_client_biobank_id(summary.biobankId)),
                    'middle_name':
                    '',
                    'birth_date':
                    '3/3/1933',
                    'gender':
                    gender_val,
                    'address1':
                    summary.streetAddress,
                    'address2':
                    summary.streetAddress2,
                    'city':
                    summary.city,
                    'state':
                    code_dict['state'],
                    'postal_code':
                    str(summary.zipCode),
                    'phone':
                    str(summary.phoneNumber),
                    'account_number':
                    None,
                    'race':
                    summary.race,
                    'ethnic_group':
                    None
                },
                'physician': {
                    'name': 'None',  # must be a string value, not None.
                    'phone': None,
                    'npi': None
                },
                'report_notes':
                fhir_resource.extension.get(url=DV_ORDER_URL).valueString,
                'tests': {
                    'test': {
                        'code': '1SAL2',
                        'name': 'PMI Saliva, FDA Kit',
                        'comments': None
                    }
                },
                'comments': 'Salivary Kit Order, direct from participant'
            }
        }
        return order