Initial commit
This commit is contained in:
		
						commit
						810d4726c3
					
				
					 17 changed files with 1414 additions and 0 deletions
				
			
		
							
								
								
									
										29
									
								
								rattail_corepos/datasync/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								rattail_corepos/datasync/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| # -*- coding: utf-8; -*- | ||||
| ################################################################################ | ||||
| # | ||||
| #  Rattail -- Retail Software Framework | ||||
| #  Copyright © 2010-2018 Lance Edgar | ||||
| # | ||||
| #  This file is part of Rattail. | ||||
| # | ||||
| #  Rattail is free software: you can redistribute it and/or modify it under the | ||||
| #  terms of the GNU General Public License as published by the Free Software | ||||
| #  Foundation, either version 3 of the License, or (at your option) any later | ||||
| #  version. | ||||
| # | ||||
| #  Rattail is distributed in the hope that it will be useful, but WITHOUT ANY | ||||
| #  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
| #  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | ||||
| #  details. | ||||
| # | ||||
| #  You should have received a copy of the GNU General Public License along with | ||||
| #  Rattail.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ################################################################################ | ||||
| """ | ||||
| CORE POS Interface | ||||
| """ | ||||
| 
 | ||||
| from __future__ import unicode_literals, absolute_import | ||||
| 
 | ||||
| from rattail_corepos._version import __version__ | ||||
							
								
								
									
										102
									
								
								rattail_corepos/datasync/corepos.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								rattail_corepos/datasync/corepos.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,102 @@ | |||
| # -*- coding: utf-8; -*- | ||||
| ################################################################################ | ||||
| # | ||||
| #  Rattail -- Retail Software Framework | ||||
| #  Copyright © 2010-2018 Lance Edgar | ||||
| # | ||||
| #  This file is part of Rattail. | ||||
| # | ||||
| #  Rattail is free software: you can redistribute it and/or modify it under the | ||||
| #  terms of the GNU General Public License as published by the Free Software | ||||
| #  Foundation, either version 3 of the License, or (at your option) any later | ||||
| #  version. | ||||
| # | ||||
| #  Rattail is distributed in the hope that it will be useful, but WITHOUT ANY | ||||
| #  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
| #  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | ||||
| #  details. | ||||
| # | ||||
| #  You should have received a copy of the GNU General Public License along with | ||||
| #  Rattail.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ################################################################################ | ||||
| """ | ||||
| DataSync for CORE POS | ||||
| """ | ||||
| 
 | ||||
| from __future__ import unicode_literals, absolute_import | ||||
| 
 | ||||
| import six | ||||
| 
 | ||||
| from corepos.db import Session as CoreSession, model as corepos | ||||
| 
 | ||||
| from rattail.db import model | ||||
| from rattail.datasync import DataSyncWatcher | ||||
| 
 | ||||
| 
 | ||||
| class COREPOSProductWatcher(DataSyncWatcher): | ||||
|     """ | ||||
|     DataSync watcher for the CORE POS database. | ||||
|     """ | ||||
| 
 | ||||
|     def get_changes(self, lastrun): | ||||
|         if not lastrun: | ||||
|             return | ||||
| 
 | ||||
|         changes = [] | ||||
|         session = CoreSession() | ||||
|         lastrun = self.localize_lastrun(session, lastrun) | ||||
| 
 | ||||
|         # Department | ||||
|         departments = session.query(corepos.Department)\ | ||||
|                              .filter(corepos.Department.modified >= lastrun)\ | ||||
|                              .all() | ||||
|         if departments: | ||||
|             changes.extend([ | ||||
|                 (None, | ||||
|                  model.DataSyncChange( | ||||
|                      payload_type='Department', | ||||
|                      payload_key=six.text_type(dept.dept_no))) | ||||
|                 for dept in departments]) | ||||
| 
 | ||||
|         # TODO: subdepartment table doesn't have a modified flag? | ||||
|         # # Subdepartment | ||||
|         # subdepartments = session.query(corepos.Subdepartment)\ | ||||
|         #                         .filter(corepos.Subdepartment.modified >= lastrun)\ | ||||
|         #                         .all() | ||||
|         # if subdepartments: | ||||
|         #     changes.extend([ | ||||
|         #         (None, | ||||
|         #          model.DataSyncChange( | ||||
|         #              payload_type='Subdepartment', | ||||
|         #              payload_key=six.text_type(subdept.subdept_no))) | ||||
|         #         for subdept in subdepartments]) | ||||
| 
 | ||||
|         # TODO: vendor table doesn't have a modified flag? | ||||
|         # # Vendor | ||||
|         # vendors = session.query(corepos.Vendor)\ | ||||
|         #                  .filter(corepos.Vendor.modified >= lastrun)\ | ||||
|         #                  .all() | ||||
|         # if vendors: | ||||
|         #     changes.extend([ | ||||
|         #         (None, | ||||
|         #          model.DataSyncChange( | ||||
|         #              payload_type='Vendor', | ||||
|         #              payload_key=six.text_type(vendor.vendorID))) | ||||
|         #         for vendor in vendors]) | ||||
| 
 | ||||
|         # Product | ||||
|         products = session.query(corepos.Product)\ | ||||
|                           .filter(corepos.Product.modified >= lastrun)\ | ||||
|                           .all() | ||||
|         if products: | ||||
|             changes.extend([ | ||||
|                 (None, | ||||
|                  model.DataSyncChange( | ||||
|                      payload_type='Product', | ||||
|                      payload_key=product.upc)) | ||||
|                 for product in products | ||||
|                 if product.upc]) | ||||
| 
 | ||||
|         session.close() | ||||
|         return changes | ||||
							
								
								
									
										74
									
								
								rattail_corepos/datasync/rattail.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								rattail_corepos/datasync/rattail.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| # -*- coding: utf-8; -*- | ||||
| ################################################################################ | ||||
| # | ||||
| #  Rattail -- Retail Software Framework | ||||
| #  Copyright © 2010-2018 Lance Edgar | ||||
| # | ||||
| #  This file is part of Rattail. | ||||
| # | ||||
| #  Rattail is free software: you can redistribute it and/or modify it under the | ||||
| #  terms of the GNU General Public License as published by the Free Software | ||||
| #  Foundation, either version 3 of the License, or (at your option) any later | ||||
| #  version. | ||||
| # | ||||
| #  Rattail is distributed in the hope that it will be useful, but WITHOUT ANY | ||||
| #  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
| #  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | ||||
| #  details. | ||||
| # | ||||
| #  You should have received a copy of the GNU General Public License along with | ||||
| #  Rattail.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ################################################################################ | ||||
| """ | ||||
| DataSync for Milo | ||||
| """ | ||||
| 
 | ||||
| from __future__ import unicode_literals, absolute_import | ||||
| 
 | ||||
| from sqlalchemy.orm.exc import NoResultFound | ||||
| 
 | ||||
| from rattail.datasync import NewDataSyncImportConsumer | ||||
| 
 | ||||
| from corepos.db import Session as CoreSession, model as corepos | ||||
| 
 | ||||
| 
 | ||||
| class FromCOREPOSToRattailBase(NewDataSyncImportConsumer): | ||||
|     """ | ||||
|     Base class for CORE POS -> Rattail data sync consumers. | ||||
|     """ | ||||
|     handler_spec = 'rattail_corepos.importing.corepos:FromCOREPOSToRattail' | ||||
| 
 | ||||
|     def begin_transaction(self): | ||||
|         self.corepos_session = CoreSession() | ||||
| 
 | ||||
|     def rollback_transaction(self): | ||||
|         self.corepos_session.rollback() | ||||
|         self.corepos_session.close() | ||||
| 
 | ||||
|     def commit_transaction(self): | ||||
|         # always rollback here, we don't want any accidents in CORE POS | ||||
|         self.corepos_session.rollback() | ||||
|         self.corepos_session.close() | ||||
| 
 | ||||
| 
 | ||||
| class FromCOREPOSToRattailProducts(FromCOREPOSToRattailBase): | ||||
|     """ | ||||
|     Handles CORE POS -> Rattail sync for product data. | ||||
|     """ | ||||
| 
 | ||||
|     def get_host_object(self, session, change): | ||||
| 
 | ||||
|         if change.payload_type == 'Product': | ||||
|             try: | ||||
|                 return self.corepos_session.query(corepos.Product)\ | ||||
|                                            .filter(corepos.Product.upc == change.payload_key)\ | ||||
|                                            .one() | ||||
|             except NoResultFound: | ||||
|                 pass | ||||
| 
 | ||||
|         else: | ||||
|             # try to fetch CORE POS object via typical method | ||||
|             Model = getattr(corepos, change.payload_type) | ||||
|             return self.corepos_session.query(Model)\ | ||||
|                                        .get(int(change.payload_key)) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar