Add button to re-import Harvest cache time entry from API
This commit is contained in:
		
							parent
							
								
									a1c9199416
								
							
						
					
					
						commit
						f388f2d6cf
					
				
					 2 changed files with 92 additions and 1 deletions
				
			
		|  | @ -62,7 +62,7 @@ class HarvestTimeEntryView(HarvestMasterView): | |||
|         g.set_link('notes') | ||||
| 
 | ||||
|     def configure_form(self, f): | ||||
|         super(HarvestTimeEntryView, self).configure_form(f) | ||||
|         super().configure_form(f) | ||||
| 
 | ||||
|         # make sure id is first field | ||||
|         f.remove('id') | ||||
|  | @ -84,11 +84,20 @@ class HarvestTimeEntryView(HarvestMasterView): | |||
|         f.remove('task_id') | ||||
|         f.set_renderer('task', self.render_harvest_task) | ||||
| 
 | ||||
|         # hours | ||||
|         f.set_renderer('hours', self.render_hours) | ||||
| 
 | ||||
|         f.set_type('notes', 'text') | ||||
| 
 | ||||
|         f.set_type('billable_rate', 'currency') | ||||
|         f.set_type('cost_rate', 'currency') | ||||
| 
 | ||||
|     def render_hours(self, entry, field): | ||||
|         hours = getattr(entry, field) | ||||
|         app = self.get_rattail_app() | ||||
|         duration = app.render_duration(hours=hours) | ||||
|         return f"{hours} ({duration})" | ||||
| 
 | ||||
|     def get_xref_buttons(self, entry): | ||||
|         buttons = super(HarvestTimeEntryView, self).get_xref_buttons(entry) | ||||
|         model = self.model | ||||
|  | @ -105,6 +114,43 @@ class HarvestTimeEntryView(HarvestMasterView): | |||
| 
 | ||||
|         return buttons | ||||
| 
 | ||||
|     def import_from_harvest(self): | ||||
|         app = self.get_rattail_app() | ||||
|         handler = app.get_import_handler('to_rattail.from_harvest.import', require=True) | ||||
|         importer = handler.get_importer('HarvestTimeEntry') | ||||
|         importer.session = self.Session() | ||||
|         importer.setup() | ||||
| 
 | ||||
|         cache_entry = self.get_instance() | ||||
|         if self.oneoff_import(importer, local_object=cache_entry): | ||||
|             self.request.session.flash(f"{self.get_model_title()} has been " | ||||
|                                        f"(re-)imported from Harvest: {cache_entry}") | ||||
|         else: | ||||
|             self.request.session.flash("Import failed!", 'error') | ||||
| 
 | ||||
|         return self.redirect(self.get_action_url('view', cache_entry)) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def defaults(cls, config): | ||||
|         route_prefix = cls.get_route_prefix() | ||||
|         instance_url_prefix = cls.get_instance_url_prefix() | ||||
|         permission_prefix = cls.get_permission_prefix() | ||||
|         model_title = cls.get_model_title() | ||||
| 
 | ||||
|         # normal defaults | ||||
|         cls._defaults(config) | ||||
| 
 | ||||
|         # import from harvest | ||||
|         config.add_tailbone_permission(permission_prefix, | ||||
|                                        f'{permission_prefix}.import_from_harvest', | ||||
|                                        f"Re-Import {model_title} from Harvest") | ||||
|         config.add_route(f'{route_prefix}.import_from_harvest', | ||||
|                          f'{instance_url_prefix}/import-from-harvest', | ||||
|                          request_method='POST') | ||||
|         config.add_view(cls, attr='import_from_harvest', | ||||
|                         route_name=f'{route_prefix}.import_from_harvest', | ||||
|                         permission=f'{permission_prefix}.import_from_harvest') | ||||
| 
 | ||||
| 
 | ||||
| def defaults(config, **kwargs): | ||||
|     base = globals() | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar