def make_supply_point_product(supply_point_case, product_uuid, owner_id=None): domain = supply_point_case.domain id = uuid.uuid4().hex user_id = const.get_commtrack_user_id(domain) owner_id = owner_id or get_owner_id(supply_point_case) or user_id username = const.COMMTRACK_USERNAME product_name = Product.get(product_uuid).name caseblock = CaseBlock( case_id=id, create=True, version=V2, case_name=product_name, user_id=user_id, owner_id=owner_id, case_type=const.SUPPLY_POINT_PRODUCT_CASE_TYPE, update={ "product": product_uuid }, index={ const.PARENT_CASE_REF: (const.SUPPLY_POINT_CASE_TYPE, supply_point_case._id), } ) casexml = ElementTree.tostring(caseblock.as_xml()) submit_case_blocks(casexml, domain, username, user_id, xmlns=const.COMMTRACK_SUPPLY_POINT_PRODUCT_XMLNS) sppc = SupplyPointProductCase.get(id) sppc.bind_to_location(supply_point_case.location) sppc.save() return sppc
def _from_caseblock(cls, domain, caseblock): username = const.COMMTRACK_USERNAME casexml = ElementTree.tostring(caseblock.as_xml()) submit_case_blocks( casexml, domain, username, const.get_commtrack_user_id(domain), xmlns=const.COMMTRACK_SUPPLY_POINT_XMLNS ) return cls.get(caseblock._id)
def update_supply_point_from_location(supply_point, location): domain = supply_point.domain assert domain == location.domain are_different = (supply_point.external_id != location.external_id or supply_point.name != location.name or supply_point.location_id != location.location_id) if are_different: kwargs = { 'external_id': location.external_id } if location.external_id else {} caseblock = CaseBlock(case_id=supply_point.case_id, create=False, case_name=location.name, user_id=const.get_commtrack_user_id( location.domain), update={ 'location_id': location.location_id, }, **kwargs) _submit_commtrack_caseblock(domain, caseblock, "update_supply_point_from_location") return SupplyInterface(domain).get_supply_point(supply_point.case_id) else: return supply_point
def update_supply_point_from_location(supply_point, location): domain = supply_point.domain assert domain == location.domain are_different = ( supply_point.external_id != location.external_id or supply_point.name != location.name or supply_point.location_id != location.location_id ) if are_different: kwargs = {'external_id': location.external_id} if location.external_id else {} caseblock = CaseBlock( case_id=supply_point.case_id, create=False, case_name=location.name, user_id=const.get_commtrack_user_id(location.domain), update={ 'location_id': location.location_id, }, **kwargs ) _submit_commtrack_caseblock(domain, caseblock, "update_supply_point_from_location") return SupplyInterface(domain).get_supply_point(supply_point.case_id) else: return supply_point
def _submit_commtrack_caseblock(domain, caseblock): submit_case_blocks( caseblock.as_string(), domain, const.COMMTRACK_USERNAME, const.get_commtrack_user_id(domain), xmlns=const.COMMTRACK_SUPPLY_POINT_XMLNS )
def _submit_commtrack_caseblock(domain, caseblock, source): submit_case_blocks( caseblock.as_text(), domain, const.COMMTRACK_USERNAME, const.get_commtrack_user_id(domain), xmlns=const.COMMTRACK_SUPPLY_POINT_XMLNS, device_id=__name__ + "." + source, )
def _submit_commtrack_caseblock(domain, caseblock, source): submit_case_blocks( caseblock.as_string().decode('utf-8'), domain, const.COMMTRACK_USERNAME, const.get_commtrack_user_id(domain), xmlns=const.COMMTRACK_SUPPLY_POINT_XMLNS, device_id=__name__ + "." + source, )
def testMakeSupplyPoint(self): sp = make_supply_point(TEST_DOMAIN, self.loc) self.assertEqual("CommCareCase", sp.doc_type) self.assertEqual(self.loc.name, sp.name) self.assertEqual(TEST_DOMAIN, sp.domain) self.assertEqual(const.SUPPLY_POINT_CASE_TYPE, sp.type) self.assertEqual(self.loc._id, sp.location_id) self.assertEqual(const.get_commtrack_user_id(TEST_DOMAIN), sp.user_id) self.assertEqual(sp.user_id, sp.owner_id) self.assertFalse(sp.closed) self.assertTrue(len(sp.actions) > 0) for dateprop in ('opened_on', 'modified_on', 'server_modified_on'): self.assertTrue(getattr(sp, dateprop) is not None) self.assertTrue(isinstance(getattr(sp, dateprop), datetime))
def testMakeSupplyPoint(self): sp = make_supply_point(TEST_DOMAIN, self.loc) self.assertEqual("CommCareCase", sp.doc_type) self.assertEqual(self.loc.name, sp.name) self.assertEqual(TEST_DOMAIN, sp.domain) self.assertEqual(const.SUPPLY_POINT_CASE_TYPE, sp.type) self.assertEqual(self.loc._id, sp.location_id) self.assertEqual(const.get_commtrack_user_id(TEST_DOMAIN), sp.user_id) self.assertEqual(self.loc.group_id, sp.owner_id) self.assertFalse(sp.closed) self.assertTrue(len(sp.actions) > 0) for dateprop in ('opened_on', 'modified_on', 'server_modified_on'): self.assertTrue(getattr(sp, dateprop) is not None) self.assertTrue(isinstance(getattr(sp, dateprop), datetime))
def create_from_location(cls, domain, location): # a supply point is currently just a case with a special type id = uuid.uuid4().hex user_id = const.get_commtrack_user_id(domain) owner_id = location.group_id kwargs = {"external_id": location.external_id} if location.external_id else {} caseblock = CaseBlock( case_id=id, create=True, case_name=location.name, user_id=user_id, owner_id=owner_id, case_type=const.SUPPLY_POINT_CASE_TYPE, update={"location_id": location._id}, **kwargs ) return cls._from_caseblock(domain, caseblock)
def make_supply_point(domain, location): # a supply point is currently just a case with a special type case_id = uuid.uuid4().hex user_id = const.get_commtrack_user_id(domain) owner_id = location.location_id kwargs = { 'external_id': location.external_id } if location.external_id else {} caseblock = CaseBlock(case_id=case_id, create=True, case_name=location.name, user_id=user_id, owner_id=owner_id, case_type=const.SUPPLY_POINT_CASE_TYPE, update={ 'location_id': location.location_id, }, **kwargs) _submit_commtrack_caseblock(domain, caseblock, "make_supply_point") return SupplyInterface(domain).get_supply_point(case_id)
def create_from_location(cls, domain, location): # a supply point is currently just a case with a special type id = uuid.uuid4().hex user_id = const.get_commtrack_user_id(domain) owner_id = location.group_id kwargs = {'external_id': location.external_id} if location.external_id else {} caseblock = CaseBlock( case_id=id, create=True, version=V2, case_name=location.name, user_id=user_id, owner_id=owner_id, case_type=const.SUPPLY_POINT_CASE_TYPE, update={ 'location_id': location._id, }, **kwargs ) return cls._from_caseblock(domain, caseblock)
def make_supply_point(domain, location): # a supply point is currently just a case with a special type case_id = uuid.uuid4().hex user_id = const.get_commtrack_user_id(domain) owner_id = location.location_id kwargs = {'external_id': location.external_id} if location.external_id else {} caseblock = CaseBlock( case_id=case_id, create=True, case_name=location.name, user_id=user_id, owner_id=owner_id, case_type=const.SUPPLY_POINT_CASE_TYPE, update={ 'location_id': location.location_id, }, **kwargs ) _submit_commtrack_caseblock(domain, caseblock, "make_supply_point") return SupplyInterface(domain).get_supply_point(case_id)
def testMakeSupplyPointProduct(self): spp = make_supply_point_product(self.sp, self.product._id) self.assertEqual("CommCareCase", spp.doc_type) self.assertEqual(TEST_DOMAIN, spp.domain) self.assertEqual(const.SUPPLY_POINT_PRODUCT_CASE_TYPE, spp.type) self.assertEqual(self.product.name, spp.name) self.assertEqual(self.product._id, spp.product) self.assertEqual(self.product._id, spp.get_product()._id) self.assertEqual(self.sp.location_, spp.location_) self.assertEqual(const.get_commtrack_user_id(TEST_DOMAIN), spp.user_id) self.assertEqual(self.sp.owner_id, spp.owner_id) self.assertFalse(spp.closed) self.assertTrue(len(spp.actions) > 0) [parent_ref] = spp.indices self.assertEqual(const.PARENT_CASE_REF, parent_ref.identifier) self.assertEqual(const.SUPPLY_POINT_CASE_TYPE, parent_ref.referenced_type) self.assertEqual(self.sp._id, parent_ref.referenced_id) self.assertEqual(self.sp._id, spp.get_supply_point_case()._id) for dateprop in ('opened_on', 'modified_on', 'server_modified_on'): self.assertTrue(getattr(spp, dateprop) is not None) self.assertTrue(isinstance(getattr(spp, dateprop), datetime))
def update_from_location(self, location): assert self.domain == location.domain def _are_different(supply_point, loc): return (supply_point.external_id != loc.external_id or supply_point.name != loc.name or supply_point.location_id != loc._id) if _are_different(self, location): kwargs = {'external_id': location.external_id} if location.external_id else {} caseblock = CaseBlock( case_id=self._id, create=False, case_name=location.name, user_id=const.get_commtrack_user_id(location.domain), update={ 'location_id': location._id, }, **kwargs ) return SupplyPointCase._from_caseblock(location.domain, caseblock) else: return self
def update_from_location(self, location): assert self.domain == location.domain def _are_different(supply_point, loc): return (supply_point.external_id != loc.external_id or supply_point.name != loc.name or supply_point.location_id != loc._id) if _are_different(self, location): kwargs = {'external_id': location.external_id} if location.external_id else {} caseblock = CaseBlock( case_id=self._id, create=False, version=V2, case_name=location.name, user_id=const.get_commtrack_user_id(location.domain), update={ 'location_id': location._id, }, **kwargs ) return SupplyPointCase._from_caseblock(location.domain, caseblock) else: return self
def _from_caseblock(cls, domain, caseblock): username = const.COMMTRACK_USERNAME casexml = ElementTree.tostring(caseblock.as_xml()) submit_case_blocks(casexml, domain, username, const.get_commtrack_user_id(domain), xmlns=const.COMMTRACK_SUPPLY_POINT_XMLNS) return cls.get(caseblock._id)
def testMakeOwnedSupplyPoint(self): sp = make_supply_point(TEST_DOMAIN, self.loc) sp.owner_id = 'some-other-owner' sp.save() self.assertEqual(const.get_commtrack_user_id(TEST_DOMAIN), sp.user_id) self.assertEqual('some-other-owner', sp.owner_id)
def testMakeOwnedSupplyPoint(self): sp = self.loc.linked_supply_point() sp.owner_id = 'some-other-owner' sp.save() self.assertEqual(const.get_commtrack_user_id(TEST_DOMAIN), sp.user_id) self.assertEqual('some-other-owner', sp.owner_id)
def testMakeOwnedSupplyPoint(self): sp = make_supply_point(TEST_DOMAIN, self.loc, 'some-other-owner') self.assertEqual(const.get_commtrack_user_id(TEST_DOMAIN), sp.user_id) self.assertEqual('some-other-owner', sp.owner_id)
def _submit_commtrack_caseblock(domain, caseblock): submit_case_blocks(caseblock.as_string(), domain, const.COMMTRACK_USERNAME, const.get_commtrack_user_id(domain), xmlns=const.COMMTRACK_SUPPLY_POINT_XMLNS)