Example #1
0
def explode_cases(request, domain, template="hqcase/explode_cases.html"):
    if request.method == 'POST':
        user_id = request.POST['user_id']
        user = CommCareUser.get_by_user_id(user_id, domain)
        factor = request.POST.get('factor', '2')
        try:
            factor = int(factor)
        except ValueError:
            messages.error(request, 'factor must be an int; was: %s' % factor)
        else:
            keys = [[domain, owner_id, False] for owner_id in user.get_owner_ids()]
            for case in CommCareCase.view('hqcase/by_owner',
                keys=keys,
                include_docs=True,
                reduce=False
            ):
                for i in range(factor - 1):
                    new_case_id = uuid.uuid4().hex
                    case_block, attachments = make_creating_casexml(case, new_case_id)
                    submit_case_blocks(case_block, domain, attachments=attachments)

            messages.success(request, "All of %s's cases were exploded by a factor of %d" % (user.raw_username, factor))

    return render(request, template, {
        'domain': domain,
        'users': CommCareUser.by_domain(domain),
    })
 def test_make_creating_casexml(self):
     for input, files, output in TESTS:
         with mock_fetch_case_attachment(input.case_id, files):
             case_block, attachments = make_creating_casexml(input, "new-case-abc123")
             self.assertXmlEqual(case_block, output)
             self.assertDictEqual(
                 {key: value.read() for key, value in attachments.items()},
                 {value: open(value).read() for key, value in files.items()},
             )
Example #3
0
 def test_make_creating_casexml(self):
     for input, files, output in TESTS:
         with mock_fetch_case_attachment(input.case_id, files):
             case_block, attachments = make_creating_casexml(
                 'mock-domain', input, 'new-case-abc123')
             self.assertXmlEqual(case_block, output)
             self.assertDictEqual(
                 {key: value.read() for key, value in attachments.items()},
                 {value: open(value).read() for key, value in files.items()}
             )
Example #4
0
def submit_case(case, new_case_id, domain, new_parent_ids=dict()):
    case_block, attachments = make_creating_casexml(case, new_case_id, new_parent_ids)
    submit_case_blocks(case_block, domain, attachments=attachments)