예제 #1
0
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
예제 #2
0
 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)
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
    )
예제 #6
0
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,
    )
예제 #7
0
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,
    )
예제 #8
0
 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))
예제 #9
0
 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))
예제 #10
0
 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)
예제 #11
0
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)
예제 #12
0
파일: models.py 프로젝트: ekush/commcare-hq
 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)
예제 #13
0
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))
예제 #15
0
    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
예제 #16
0
파일: models.py 프로젝트: ekush/commcare-hq
    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
예제 #17
0
파일: models.py 프로젝트: ekush/commcare-hq
 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)
예제 #18
0
 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)
예제 #19
0
 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)
예제 #20
0
 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)
예제 #21
0
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)