def schedule_expense_group_creation(workspace_id: int, user: str): """ Schedule Expense group creation :param workspace_id: Workspace id :param user: User email :return: None """ fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) fyle_connector = FyleConnector(fyle_credentials.refresh_token, workspace_id) fyle_sdk_connection = fyle_connector.connection jobs = FyleJobsSDK(settings.FYLE_JOBS_URL, fyle_sdk_connection) task_log = TaskLog.objects.create(workspace_id=workspace_id, type='FETCHING_EXPENSES', status='IN_PROGRESS') created_job = jobs.trigger_now( callback_url='{0}{1}'.format( settings.API_URL, '/workspaces/{0}/fyle/expense_groups/'.format(workspace_id)), callback_method='POST', object_id=task_log.id, payload={'task_log_id': task_log.id}, job_description='Fetch expenses: Workspace id - {0}, user - {1}'. format(workspace_id, user)) task_log.task_id = created_job['id'] task_log.save()
def schedule_invoice_creation(workspace_id, expense_group_ids, user): """ Schedule Invoice creation :param workspace_id: :param expense_group_ids: :param user: :return: """ expense_groups = ExpenseGroup.objects.filter( workspace_id=workspace_id, id__in=expense_group_ids).all() fyle_sdk_connection = connect_to_fyle(workspace_id) jobs = FyleJobsSDK(settings.FYLE_JOBS_URL, fyle_sdk_connection) for expense_group in expense_groups: task_log = TaskLog.objects.create( workspace_id=expense_group.workspace.id, expense_group=expense_group, type='CREATING INVOICE', status='IN_PROGRESS') created_job = jobs.trigger_now( callback_url='{0}{1}'.format( settings.API_BASE_URL, '/workspace_jobs/{0}/expense_group/{1}/invoice/trigger/'. format(workspace_id, expense_group.id)), callback_method='POST', object_id=task_log.id, payload={'task_log_id': task_log.id}, job_description=f'Create invoice: Workspace id - {workspace_id}, \ user - {user}, expense group id - {expense_group.id}') task_log.task_id = created_job['id'] task_log.save()
def schedule_expense_group_creation(workspace_id, user): """ Schedule Expense Group creation :param workspace_id: :param user: :return: """ task_log = TaskLog.objects.create(workspace_id=workspace_id, type="FETCHING EXPENSES", status="IN_PROGRESS") try: fyle_sdk_connection = connect_to_fyle(workspace_id) jobs = FyleJobsSDK(settings.FYLE_JOBS_URL, fyle_sdk_connection) created_job = jobs.trigger_now( callback_url='{0}{1}'.format( settings.API_BASE_URL, '/workspace_jobs/{0}/expense_group/trigger/'.format( workspace_id)), callback_method='POST', object_id=task_log.id, payload={'task_log_id': task_log.id}, job_description= f'Fetch expenses: Workspace id - {workspace_id}, user - {user}') task_log.task_id = created_job['id'] task_log.save() except FyleCredential.DoesNotExist: LOGGER.error('Error: Fyle Credentials not found for this workspace.') task_log.detail = { 'error': 'Please connect your Source (Fyle) Account' } task_log.status = 'FYLE CONNECTION ERROR' task_log.save()
def schedule_bills_creation(workspace_id: int, expense_group_ids: List[str], user): """ Schedule bills creation :param expense_group_ids: List of expense group ids :param workspace_id: workspace id :param user: user email :return: None """ if expense_group_ids: expense_groups = ExpenseGroup.objects.filter( workspace_id=workspace_id, id__in=expense_group_ids, bill__id__isnull=True).all() else: expense_groups = ExpenseGroup.objects.filter( workspace_id=workspace_id, bill__id__isnull=True).all() fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) fyle_connector = FyleConnector(fyle_credentials.refresh_token, workspace_id) fyle_sdk_connection = fyle_connector.connection jobs = FyleJobsSDK(settings.FYLE_JOBS_URL, fyle_sdk_connection) for expense_group in expense_groups: task_log, _ = TaskLog.objects.update_or_create( workspace_id=expense_group.workspace_id, expense_group=expense_group, defaults={ 'status': 'IN_PROGRESS', 'type': 'CREATING_BILL' }) created_job = jobs.trigger_now( callback_url='{0}{1}'.format( settings.API_URL, '/workspaces/{0}/qbo/bills/'.format(workspace_id)), callback_method='POST', object_id=task_log.id, payload={ 'expense_group_id': expense_group.id, 'task_log_id': task_log.id }, job_description= 'Create Bill: Workspace id - {0}, user - {1}, expense group id - {2}' .format(workspace_id, user, expense_group.id)) task_log.task_id = created_job['id'] task_log.save()