Skip to content

Commit

Permalink
[ADD] connector_carepoint: Account export
Browse files Browse the repository at this point in the history
* Add patient account export logic and tests
  • Loading branch information
lasley committed Sep 15, 2016
1 parent 0f358e5 commit 7953a61
Show file tree
Hide file tree
Showing 9 changed files with 436 additions and 109 deletions.
1 change: 1 addition & 0 deletions connector_carepoint/consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ def delay_export_all_bindings(session, model_name, record_id, vals):
'carepoint.address.patient',
'carepoint.organization',
'carepoint.address.organization',
'carepoint.account',
])
def delay_create(session, model_name, record_id, vals):
""" Create a new binding record, then trigger delayed export
Expand Down
2 changes: 1 addition & 1 deletion connector_carepoint/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
from . import address_physician

# CarePoint Mappings/Binds
from . import account
from . import carepoint_account
from . import carepoint_store
from . import carepoint_organization
from . import carepoint_state
Expand Down
89 changes: 0 additions & 89 deletions connector_carepoint/models/account.py

This file was deleted.

5 changes: 3 additions & 2 deletions connector_carepoint/models/address_abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,15 +116,16 @@ def _get_by_partner(self, partner, edit=True, recurse=False):
""" It returns the address associated to the partner.
Params:
partner: Recordset singleton of partner to search for
create: Bool determining whether to create address if not exist
edit: Bool determining whether to create new or edit existing
address
recurse: Bool determining whether to recurse into children (this
is only functional when edit=True)
Return:
Recordset of partner address
"""
address = self.search([('partner_id', '=', partner.id)], limit=1)
vals = self.address_id._get_partner_sync_vals(partner)
_logger.info('_get_by_partner %s, %s, %s' % (address, partner, vals))
_logger.debug('_get_by_partner %s, %s, %s' % (address, partner, vals))
if not edit:
return address
if not address:
Expand Down
164 changes: 164 additions & 0 deletions connector_carepoint/models/carepoint_account.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2016 LasLabs Inc.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

import logging
from openerp import models, fields, api
from openerp.addons.connector.connector import ConnectorUnit
from openerp.addons.connector.unit.mapper import (mapping,
ExportMapper,
)
from ..unit.backend_adapter import CarepointCRUDAdapter
from ..unit.mapper import CarepointImportMapper
from ..backend import carepoint
from ..unit.import_synchronizer import (DelayedBatchImporter,
CarepointImporter,
)
from ..unit.export_synchronizer import CarepointExporter

_logger = logging.getLogger(__name__)


class CarepointCarepointAccount(models.Model):
_name = 'carepoint.carepoint.account'
_inherit = 'carepoint.binding'
_inherits = {'carepoint.account': 'odoo_id'}
_description = 'Carepoint CarepointAccount'
_cp_lib = 'account'

odoo_id = fields.Many2one(
string='CarepointAccount',
comodel_name='carepoint.account',
required=True,
ondelete='restrict',
)


class CarepointAccount(models.Model):
_name = 'carepoint.account'
_description = 'CarePoint CarepointAccount'

patient_id = fields.Many2one(
string='Patient',
comodel_name='medical.patient',
)
carepoint_bind_ids = fields.One2many(
comodel_name='carepoint.carepoint.account',
inverse_name='odoo_id',
string='Carepoint Bindings',
)

@api.model
def _get_by_patient(self, patient, create=True, recurse=False):
""" It returns the account associated to the patient.
Params:
patient: Recordset singleton of partner to search for
create: Bool determining whether to create account if not exist
recurse: Bool determining whether to recurse into children (this
is only functional when create=True)
Return:
Recordset of patient account
"""
account = self.search([('patient_id', '=', patient.id)], limit=1)
if not create:
return account
if not account:
account = self.create({
'patient_id': patient.id,
})
if recurse:
children = self.env['medical.patient'].search([
('partner_id', 'in', patient.child_ids.ids),
])
for child in children:
self._get_by_patient(child, create, recurse)
return account


@carepoint
class CarepointAccountAdapter(CarepointCRUDAdapter):
_model_name = 'carepoint.carepoint.account'


@carepoint
class CarepointAccountUnit(ConnectorUnit):
_model_name = 'carepoint.carepoint.account'

def _import_accounts(self, patient_id):
adapter = self.unit_for(CarepointAccountAdapter)
importer = self.unit_for(CarepointAccountImporter)
accounts = adapter.search(pat_id=patient_id)
for account in accounts:
importer.run(account)


@carepoint
class CarepointAccountBatchImporter(DelayedBatchImporter):
""" Import the Carepoint CarepointAccounts.
For every product category in the list, a delayed job is created.
Import from a date
"""
_model_name = ['carepoint.carepoint.account']


@carepoint
class CarepointAccountImportMapper(CarepointImportMapper):
_model_name = 'carepoint.carepoint.account'
direct = []

@mapping
def patient_id(self, record):
binder = self.binder_for('carepoint.medical.patient')
patient_id = binder.to_odoo(record['pat_id'])
return {'patient_id': patient_id}

@mapping
def carepoint_id(self, record):
return {'carepoint_id': '%s,%s' % (record['pat_id'], record['ID'])}


@carepoint
class CarepointAccountImporter(CarepointImporter):
_model_name = ['carepoint.carepoint.account']
_base_mapper = CarepointAccountImportMapper

def _import_dependencies(self):
""" Import depends for record """
record = self.carepoint_record
self._import_dependency(record['pat_id'],
'carepoint.medical.patient')


@carepoint
class CarepointAccountExportMapper(ExportMapper):
_model_name = 'carepoint.carepoint.account'
direct = []

@mapping
def pat_id(self, binding):
binder = self.binder_for('carepoint.medical.patient')
patient_id = binder.to_backend(binding.patient_id)
return {'pat_id': patient_id}

@mapping
def ID(self, binding):
return {'ID': binding.carepoint_id}

@mapping
def static_defaults(self, binding):
return {
'acct_type_cn': 0,
'resp_pty_yn': 0,
'chromis_id': None,
}


@carepoint
class CarepointAccountExporter(CarepointExporter):
_model_name = 'carepoint.carepoint.account'
_base_mapper = CarepointAccountExportMapper

def _export_dependencies(self):
""" Export depends for a record """
self._export_dependency(self.binding_record.patient_id,
'carepoint.medical.patient')
11 changes: 10 additions & 1 deletion connector_carepoint/models/medical_patient.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from ..unit.export_synchronizer import CarepointExporter

from .address_patient import CarepointAddressPatientUnit
from .carepoint_account import CarepointAccountUnit

_logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -114,10 +115,13 @@ class MedicalPatientImporter(CarepointImporter):
_base_mapper = MedicalPatientImportMapper

def _after_import(self, partner_binding):
""" Import the addresses """
""" Import the addresses and accounts """
book = self.unit_for(CarepointAddressPatientUnit,
model='carepoint.carepoint.address.patient')
book._import_addresses(self.carepoint_id, partner_binding)
account = self.unit_for(CarepointAccountUnit,
model='carepoint.carepoint.account')
account._import_accounts(self.carepoint_id)


@carepoint
Expand Down Expand Up @@ -166,3 +170,8 @@ def _after_export(self):
edit=True,
recurse=True,
)
self.env['carepoint.account']._get_by_patient(
self.binding_record.odoo_id,
create=True,
recurse=True,
)
8 changes: 7 additions & 1 deletion connector_carepoint/tests/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,30 @@

from . import test_carepoint_store
from . import test_procurement_order

from . import test_fdb_unit
from . import test_fdb_ndc

from . import test_account_invoice_line
from . import test_medical_prescription_order_line

from . import test_sale_order_line
from . import test_sale_order
from . import test_stock_picking
from . import test_stock_warehouse

from . import test_carepoint_item
from . import test_carepoint_vendor
from . import test_carepoint_account

from . import test_address_abstract
from . import test_address
from . import test_address_patient
from . import test_address_store
from . import test_address_organization
from . import test_address_physician
from . import test_medical_patient

from . import test_medical_patient
from . import test_medical_pathology
from . import test_medical_pathology_type_code

Expand Down
Loading

0 comments on commit 7953a61

Please sign in to comment.