Skip to content

Commit

Permalink
[ADD] connector_carepoint: Inventory handling
Browse files Browse the repository at this point in the history
* Restructure medicament and rename to carepoint.item
* Add stock.warehouse & add to medical.pharmacy depends
* Add carepoint vendor
* Remove non-functional fdb pem mogc tests
  • Loading branch information
lasley committed Aug 31, 2016
1 parent 68a7602 commit 9e7d98f
Show file tree
Hide file tree
Showing 31 changed files with 1,350 additions and 627 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ addons:
- python-simplejson
- python-serial
- python-yaml
- sqlite3
- libsqlite3-dev

env:
global:
Expand Down
2 changes: 1 addition & 1 deletion connector_carepoint/__openerp__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{
'name': 'CarePoint Connector',
'description': 'Two-Way Sync With CarePoint',
'version': '9.0.1.0.0',
'version': '9.0.1.0.1',
'category': 'Connector',
'author': "LasLabs",
'license': 'AGPL-3',
Expand Down
4 changes: 2 additions & 2 deletions connector_carepoint/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Copyright 2015-2016 LasLabs Inc.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, fields
from openerp import models, fields, api
from openerp.addons.connector.connector import ConnectorEnvironment
from openerp.addons.connector.checkpoint import checkpoint

Expand Down Expand Up @@ -53,7 +53,7 @@ class CarepointBinding(models.AbstractModel):

@api.model
def _default_backend_id(self):
return self.env['easypost.backend'].search([
return self.env['carepoint.backend'].search([
('is_default', '=', True),
('active', '=', True),
],
Expand Down
19 changes: 6 additions & 13 deletions connector_carepoint/data/carepoint_carepoint_account_data.xml
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<odoo noupdate="1">

<record model="medical.patient" id="patient_null">
<field name="name">Null Patient</field>
<field name="active" eval="False" />
</record>

<record model="carepoint.carepoint.account" id="account_null">
<field name="patient_id" ref="connector_carepoint.patient_null" />
<field name="carepoint_id">0</field>
</record>
<record model="medical.patient" id="patient_null">
<field name="name">Null Patient</field>
<field name="active" eval="False" />
</record>

</data>
</openerp>
</odoo>
4 changes: 3 additions & 1 deletion connector_carepoint/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
from . import procurement_order
from . import account_invoice_line
from . import stock_picking
from . import stock_warehouse

# Medical Models
from . import medical_pharmacy
from . import medical_patient
from . import medical_physician
from . import medical_medicament
from . import medical_prescription_order
from . import medical_prescription_order_line

Expand All @@ -30,6 +30,8 @@
# CarePoint Mappings/Binds
from . import account
from . import carepoint_state
from . import carepoint_item
from . import carepoint_vendor

# FDB
from . import fdb_ndc
Expand Down
8 changes: 4 additions & 4 deletions connector_carepoint/models/carepoint_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ class CarepointBackend(models.Model):
comodel_name='account.payment.term',
required=True,
)
import_medicaments_from_date = fields.Datetime()
import_items_from_date = fields.Datetime()
import_patients_from_date = fields.Datetime()
import_physicians_from_date = fields.Datetime()
import_prescriptions_from_date = fields.Datetime()
Expand Down Expand Up @@ -291,9 +291,9 @@ def cron_import_sale_order(self):
self.search([]).import_sale_order()

@api.multi
def import_medical_medicament(self):
self._import_from_date('carepoint.medical.medicament',
'import_medicaments_from_date')
def import_carepoint_item(self):
self._import_from_date('carepoint.carepoint.item',
'import_items_from_date')
return True

@api.multi
Expand Down
183 changes: 183 additions & 0 deletions connector_carepoint/models/carepoint_item.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# -*- 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.unit.mapper import (mapping,
only_create,
changed_by,
ExportMapper,
)
from ..unit.backend_adapter import CarepointCRUDAdapter
from ..unit.mapper import CarepointImportMapper, trim
from ..backend import carepoint
from ..unit.import_synchronizer import (DelayedBatchImporter,
CarepointImporter,
)
from ..unit.export_synchronizer import CarepointExporter

_logger = logging.getLogger(__name__)


class CarepointCarepointItem(models.Model):
_name = 'carepoint.carepoint.item'
_inherit = 'carepoint.binding'
_inherits = {'carepoint.item': 'odoo_id'}
_description = 'Carepoint Item'
_cp_lib = 'item' # Name of model in Carepoint lib (snake_case)

odoo_id = fields.Many2one(
string='Item',
comodel_name='carepoint.item',
required=True,
ondelete='restrict',
)
store_id = fields.Many2one(
string='Store',
comodel_name='carepoint.medical.pharmacy',
readonly=True,
)


class CarepointItem(models.Model):
_name = 'carepoint.item'
_inherits = {'medical.medicament': 'medicament_id'}

medicament_id = fields.Many2one(
string='Medicament',
comodel_name='medical.medicament',
ondelete='cascade',
required=True,
)
warehouse_id = fields.Many2one(
string='Warehouse',
comodel_name='stock.warehouse',
required=True,
)
carepoint_bind_ids = fields.One2many(
comodel_name='carepoint.carepoint.item',
inverse_name='odoo_id',
string='Carepoint Bindings',
)
store_on_hand = fields.Float(
compute="_compute_store_qty",
)
store_on_order = fields.Float(
compute="_compute_store_qty",
)
trigger_export = fields.Boolean()

@api.one
def _compute_store_qty(self):
context_product = self.with_context(warehouse=self.warehouse_id.id)
avail = context_product._product_available()[self.id]
self.store_on_hand = avail['qty_available']
self.store_on_order = avail['incoming_qty']


@carepoint
class CarepointItemAdapter(CarepointCRUDAdapter):
_model_name = 'carepoint.carepoint.item'


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


@carepoint
class CarepointItemImportMapper(CarepointImportMapper):
_model_name = 'carepoint.carepoint.item'

direct = [
(trim('DESCR'), 'name'),
(trim('UPCCODE'), 'barcode'),
('add_date', 'created_at'),
('chg_date', 'updated_at'),
]

@mapping
def active(self, record):
"""Check if the product is active in Carepoint
and set active flag in OpenERP
status == 1 in Carepoint means active"""
return {'active': (record.get('ACTIVE_YN') == 1)}

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

@mapping
def warehouse_id(self, record):
binder = self.binder_for('carepoint.stock.warehouse')
store_id = binder.to_odoo(record['store_id'])
return {'warehouse_id': store_id}

@mapping
def carepoint_id(self, record):
return {'carepoint_id': record['item_id']}

@mapping
@only_create
def odoo_id(self, record):
""" It binds on a medicament of an existing NDC """
ndc_id = self.env['fdb.ndc'].search(
[('name', '=', record['NDC'].strip())],
limit=1,
)
if len(ndc_id):
return {'odoo_id': ndc_id[0].medicament_id.id}


@carepoint
class CarepointItemImporter(CarepointImporter):
_model_name = ['carepoint.carepoint.item']

_base_mapper = CarepointItemImportMapper

def _import_dependencies(self):
""" Import depends for record """
record = self.carepoint_record
self._import_dependency(record['NDC'].strip(),
'carepoint.fdb.ndc.cs.ext')
self._import_dependency(record['NDC'].strip(),
'carepoint.fdb.ndc')
self._import_dependency(record['VENDOR'].strip(),
'carepoint.carepoint.vendor')


@carepoint
class CarepointItemExportMapper(ExportMapper):
_model_name = 'carepoint.carepoint.item'

direct = [
('name', 'DESCR'),
('barcode', 'UPCCODE'),
]

@mapping
@changed_by('active')
def active_yn(self, binding):
return {'ACTIVE_YN': binding.active}

@mapping
@changed_by('trigger_export')
def export_quantities(self, binding):
if binding.trigger_export:
binding.trigger_export = False
return {'ONHAND': binding.store_on_hand,
'ONORDER': binding.store_on_order,
}


@carepoint
class CarepointItemExporter(CarepointExporter):
_model_name = ['carepoint.carepoint.item']
_base_mapper = CarepointItemExportMapper
Loading

0 comments on commit 9e7d98f

Please sign in to comment.