diff --git a/g2p_odk_importer/models/odk_client.py b/g2p_odk_importer/models/odk_client.py index 7750042..9832939 100644 --- a/g2p_odk_importer/models/odk_client.py +++ b/g2p_odk_importer/models/odk_client.py @@ -89,6 +89,7 @@ def import_delta_records(self, last_sync_timestamp=None, skip=0, top=100): raise ValidationError(f"Failed to parse response: {e}") from e for member in data["value"]: + _logger.info("ODK RAW DATA:%s" % member) try: mapped_json = pyjq.compile(self.json_formatter).all(member)[0] if self.target_registry == "individual": @@ -101,11 +102,7 @@ def import_delta_records(self, last_sync_timestamp=None, skip=0, top=100): updated_mapped_json = self.get_addl_data(mapped_json) - existing_partner = self.find_existing_partner(mapped_json) - if existing_partner: - existing_partner.write(updated_mapped_json) - else: - self.env["res.partner"].sudo().create(updated_mapped_json) + self.env["res.partner"].sudo().create(updated_mapped_json) data.update({"form_updated": True}) except Exception as e: @@ -214,20 +211,6 @@ def handle_media_import(self, member, mapped_json): ) ] - def find_existing_partner(self, mapped_json): - if "reg_ids" not in mapped_json: - return None - for reg_id_tuple in mapped_json["reg_ids"]: - reg_id = reg_id_tuple[2] - id_type_id = self.env["g2p.id.type"].search([("id", "=", reg_id["id_type"])], limit=1).id - existing_partner = self.env["res.partner"].search( - [("reg_ids.id_type", "=", id_type_id), ("reg_ids.value", "=", reg_id["value"])], limit=1 - ) - if existing_partner: - mapped_json["reg_ids"].remove(reg_id_tuple) - return existing_partner - return None - def get_member_kind(self, record): kind_as_str = record.get("kind", None) kind = self.env["g2p.group.membership.kind"].search([("name", "=", kind_as_str)], limit=1) diff --git a/g2p_odk_importer/models/odk_config.py b/g2p_odk_importer/models/odk_config.py index 999455e..350a90f 100644 --- a/g2p_odk_importer/models/odk_config.py +++ b/g2p_odk_importer/models/odk_config.py @@ -13,3 +13,5 @@ class OdkConfig(models.Model): base_url = fields.Char(string="Base URL", required=True) username = fields.Char(required=True) password = fields.Char(required=True) + project = fields.Char(required=False) + form_id = fields.Char(string="Form ID", required=False) diff --git a/g2p_odk_importer/models/odk_import.py b/g2p_odk_importer/models/odk_import.py index 990e6a6..90e3eb7 100644 --- a/g2p_odk_importer/models/odk_import.py +++ b/g2p_odk_importer/models/odk_import.py @@ -16,8 +16,7 @@ class OdkImport(models.Model): _description = "ODK Import" odk_config = fields.Many2one("odk.config", string="ODK Config", required=True) - project = fields.Char(required=False) - form_id = fields.Char(string="Form ID", required=False) + odk_config_name = fields.Char(related="odk_config.name") json_formatter = fields.Text(string="JSON Formatter", required=True) target_registry = fields.Selection([("individual", "Individual"), ("group", "Group")], required=True) last_sync_time = fields.Datetime(string="Last synced on", required=False) @@ -57,8 +56,8 @@ def test_connection(self): config.odk_config.base_url, config.odk_config.username, config.odk_config.password, - config.project, - config.form_id, + config.odk_config.project, + config.odk_config.form_id, config.target_registry, ) client.login() @@ -85,8 +84,8 @@ def import_records(self): config.odk_config.base_url, config.odk_config.username, config.odk_config.password, - config.project, - config.form_id, + config.odk_config.project, + config.odk_config.form_id, config.target_registry, config.json_formatter, ) @@ -123,8 +122,8 @@ def import_records_by_id(self, _id): config.base_url, config.username, config.password, - self.project, - self.form_id, + config.project, + config.form_id, self.target_registry, self.json_formatter, ) diff --git a/g2p_odk_importer/tests/test_odk_client.py b/g2p_odk_importer/tests/test_odk_client.py index 8634b2b..61f2bcd 100644 --- a/g2p_odk_importer/tests/test_odk_client.py +++ b/g2p_odk_importer/tests/test_odk_client.py @@ -120,28 +120,6 @@ def test_handle_media_import(self, mock_get): self.client.handle_media_import(member, mapped_json) self.assertIn("supporting_documents_ids", mapped_json) - def test_find_existing_partner(self): - mapped_json = { - "reg_ids": [(0, 0, {"id_type": "National ID", "value": "12345", "expiry_date": "2024-12-31"})] - } - self.env_mock["g2p.id.type"].search.return_value.id = 1 - self.env_mock["res.partner"].search.return_value = MagicMock() - - odk_client = ODKClient( - self.env_mock, - 1, - self.base_url, - self.username, - self.password, - self.project_id, - self.form_id, - self.target_registry, - self.json_formatter, - ) - - result = odk_client.find_existing_partner(mapped_json) - self.assertIsNotNone(result) - def test_get_dob(self): record = {"birthdate": "2000-01-01", "age": 4} odk_client = ODKClient( diff --git a/g2p_odk_importer/tests/test_odk_import.py b/g2p_odk_importer/tests/test_odk_import.py index bd68887..3d50f81 100644 --- a/g2p_odk_importer/tests/test_odk_import.py +++ b/g2p_odk_importer/tests/test_odk_import.py @@ -23,6 +23,8 @@ def setUpClass(cls): "base_url": cls.base_url, "username": cls.username, "password": cls.password, + "project": cls.project_id, + "form_id": cls.form_id, } ) @@ -35,8 +37,6 @@ def test_test_connection(self, mock_test_connection, mock_login): odk_import = self.env["odk.import"].create( { "odk_config": self.odk_config.id, - "project": self.project_id, - "form_id": self.form_id, "target_registry": self.target_registry, "json_formatter": self.json_formatter, } @@ -58,8 +58,6 @@ def test_import_records(self, mock_import_delta_records, mock_login): odk_import = self.env["odk.import"].create( { "odk_config": self.odk_config.id, - "project": self.project_id, - "form_id": self.form_id, "target_registry": self.target_registry, "json_formatter": self.json_formatter, } @@ -81,8 +79,6 @@ def test_import_records_no_updates(self, mock_import_delta_records, mock_login): odk_import = self.env["odk.import"].create( { "odk_config": self.odk_config.id, - "project": self.project_id, - "form_id": self.form_id, "target_registry": self.target_registry, "json_formatter": self.json_formatter, } diff --git a/g2p_odk_importer/views/odk_config_views.xml b/g2p_odk_importer/views/odk_config_views.xml index daa952a..a0c2eeb 100644 --- a/g2p_odk_importer/views/odk_config_views.xml +++ b/g2p_odk_importer/views/odk_config_views.xml @@ -25,13 +25,17 @@ + + + + - ODK Configuration + Configuration ir.actions.act_window odk.config tree,form diff --git a/g2p_odk_importer/views/odk_import_views.xml b/g2p_odk_importer/views/odk_import_views.xml index 3a1557f..2fbfcea 100644 --- a/g2p_odk_importer/views/odk_import_views.xml +++ b/g2p_odk_importer/views/odk_import_views.xml @@ -16,7 +16,7 @@ 1 - +