Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,8 @@ elif str(
<field name="name">Medical License</field>
<field name="code">ML</field>
</record>
<record model="res.partner.id_category" id="res_partner_id_category_controlled_substance">
<field name="name">Controlled Substance</field>
<field name="code">CS</field>
</record>
</odoo>
39 changes: 39 additions & 0 deletions partner_identification_dea/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@ class ResPartner(models.Model):
compute="_compute_dea_medical_license",
store=True,
)
contr_subst_license = fields.Char(
string="Contr. Subst. License",
compute="_compute_dea_medical_license",
store=True,
)
contr_subst_expired_date = fields.Date(
string="Contr. Subst. Expiration Date",
compute="_compute_dea_medical_license",
store=True,
)

@api.depends("id_numbers")
def _compute_dea_medical_license(self):
Expand All @@ -47,6 +57,10 @@ def _compute_dea_medical_license(self):
"partner_identification_dea.res_partner_id_category_medical",
raise_if_not_found=False,
)
controlled_subst_id = self.env.ref(
"partner_identification_dea.res_partner_id_category_controlled_substance",
raise_if_not_found=False,
)
partner_id_number_obj = self.env["res.partner.id_number"]
for rec in self:
dea_number = partner_id_number_obj.search(
Expand All @@ -67,6 +81,15 @@ def _compute_dea_medical_license(self):
order="id desc",
limit=1,
)
controlled_subst = partner_id_number_obj.search(
[
("category_id", "=", controlled_subst_id and controlled_subst_id.id),
("status", "=", "open"),
("partner_id", "=", rec.id),
],
order="id desc",
limit=1,
)
rec.dea_active = dea_number and "yes" or "no"
rec.dea_expired_date = dea_number and dea_number.valid_until or False
rec.dea_number = dea_number and dea_number.name or ""
Expand All @@ -76,6 +99,10 @@ def _compute_dea_medical_license(self):
rec.medical_license_expired_date = (
medical_license and medical_license.valid_until or False
)
rec.contr_subst_license = controlled_subst.name if controlled_subst else ""
rec.contr_subst_expired_date = (
controlled_subst.valid_until if controlled_subst else False
)

@api.model
def send_expiration_date_notification(self):
Expand Down Expand Up @@ -116,3 +143,15 @@ def send_expiration_date_notification(self):
# partner.id,
# force_send=True,
# )

@api.model
def name_search(self, name='', args=None, operator='ilike', limit=100):
args = args or []
if name:
domain = [
"|",
("name", operator, name),
("contr_subst_license", operator, name)
]
return self.search(domain + args, limit=limit).name_get()
return super().name_search(name=name, args=args, operator=operator, limit=limit)
56 changes: 54 additions & 2 deletions partner_identification_dea/tests/test_res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,26 @@ def setUp(self):
"partner_identification_dea.res_partner_id_category_medical",
raise_if_not_found=False,
)
self.controlled_id = self.env.ref(
"partner_identification_dea.res_partner_id_category_controlled_substance",
raise_if_not_found=False,
)
self.date = fields.Date.today() + relativedelta(days=30)
self.expired_date = fields.Date.today() - relativedelta(days=10)
self.partner_obj = self.env["res.partner"]
self.partner_number_obj = self.env["res.partner.id_number"]
self.partner_roy = self.partner_obj.create({"name": "Roy"})
self.partner_jimmy = self.partner_obj.create({"name": "Jimmy"})
self.partner_john = self.partner_obj.create({"name": "John"})
self.partner_number_obj.create(
{
"partner_id": self.partner_roy.id,
"category_id": self.dea_category_id.id,
"status": "open",
"valid_until": self.date,
"name": "12345600",
"name": "AA1270533",
}
)

self.partner_number_obj.create(
{
"partner_id": self.partner_jimmy.id,
Expand All @@ -42,6 +47,53 @@ def setUp(self):
"name": "12360001",
}
)
self.controlled_number = self.partner_number_obj.create(
{
"partner_id": self.partner_john.id,
"category_id": self.controlled_id.id,
"status": "open",
"valid_until": self.date,
"name": "78901234",
}
)

def test_dea_and_medical_license_fields_computed(self):
"""Test DEA and medical license fields computed from ID numbers."""
self.partner_roy.invalidate_cache()
self.partner_jimmy.invalidate_cache()
self.assertEqual(self.partner_roy.dea_number, "AA1270533")
self.assertEqual(self.partner_roy.dea_expired_date, self.date)
self.assertEqual(self.partner_jimmy.medical_license, "12360001")
self.assertEqual(self.partner_jimmy.medical_license_expired_date, self.date)

def test_contr_subst_license_fields_computed(self):
"""Test controlled substance license fields computed from ID number."""
self.partner_john.invalidate_cache()
self.assertEqual(self.partner_john.contr_subst_license, "78901234")
self.assertEqual(self.partner_john.contr_subst_expired_date, self.date)

def test_contr_subst_license_expired_or_inactive(self):
"""Test license is ignored if expired or inactive."""
# Test with status = 'closed'
self.controlled_number.status = 'close'
self.partner_john._compute_dea_medical_license()
self.assertEqual(self.partner_john.contr_subst_license, "")
self.assertFalse(self.partner_john.contr_subst_expired_date)
# Test with future status=open but expired date
self.controlled_number.write({
'status': 'open',
'valid_until': self.expired_date,
})
self.partner_john._compute_dea_medical_license()
self.assertEqual(self.partner_john.contr_subst_license, "78901234")
self.assertEqual(self.partner_john.contr_subst_expired_date, self.expired_date)

def test_name_search_by_contr_subst_license(self):
"""Test name_search can find partner by controlled substance license."""
result = self.partner_obj.name_search(name="78901234")
self.assertTrue(result)
self.assertEqual(result[0][0], self.partner_john.id)
self.assertIn("John", result[0][1])

def test_send_expiration_date_notification(self):
self.partner_obj.send_expiration_date_notification()
2 changes: 2 additions & 0 deletions partner_identification_dea/views/res_partner_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
<field name="dea_expired_date" />
<field name="medical_license" />
<field name="medical_license_expired_date" />
<field name="contr_subst_license"/>
<field name="contr_subst_expired_date"/>
</field>
<xpath
expr="//field[@name='child_ids']//form//field[@name='comment']"
Expand Down
Loading