示例#1
0
def auto_create_project_mappings(workspace_id: int):
    """
    Create Project Mappings
    :return: mappings
    """
    try:
        fyle_credentials: FyleCredential = FyleCredential.objects.get(
            workspace_id=workspace_id)
        qbo_credentials: QBOCredential = QBOCredential.objects.get(
            workspace_id=workspace_id)

        fyle_connection = FyleConnector(
            refresh_token=fyle_credentials.refresh_token,
            workspace_id=workspace_id)

        qbo_connection = QBOConnector(credentials_object=qbo_credentials,
                                      workspace_id=workspace_id)

        fyle_connection.sync_projects()
        qbo_connection.sync_customers()

        post_projects_in_batches(fyle_connection, workspace_id)

    except WrongParamsError as exception:
        logger.error(
            'Error while creating projects workspace_id - %s in Fyle %s %s',
            workspace_id, exception.message, {'error': exception.response})

    except Exception:
        error = traceback.format_exc()
        error = {'error': error}
        logger.error(
            'Error while creating projects workspace_id - %s error: %s',
            workspace_id, error)
示例#2
0
def post_projects_in_batches(fyle_connection: FyleConnector,
                             workspace_id: int):
    existing_project_names = ExpenseAttribute.objects.filter(
        attribute_type='PROJECT',
        workspace_id=workspace_id).values_list('value', flat=True)
    qbo_attributes_count = DestinationAttribute.objects.filter(
        attribute_type='CUSTOMER', workspace_id=workspace_id).count()

    page_size = 200
    for offset in range(0, qbo_attributes_count, page_size):
        limit = offset + page_size
        paginated_qbo_attributes = DestinationAttribute.objects.filter(
            attribute_type='CUSTOMER',
            workspace_id=workspace_id).order_by('value', 'id')[offset:limit]

        paginated_qbo_attributes = remove_duplicates(paginated_qbo_attributes)

        fyle_payload: List[Dict] = create_fyle_projects_payload(
            paginated_qbo_attributes, existing_project_names, workspace_id)
        if fyle_payload:
            fyle_connection.connection.Projects.post(fyle_payload)
            fyle_connection.sync_projects()

        Mapping.bulk_create_mappings(paginated_qbo_attributes, 'PROJECT',
                                     'CUSTOMER', workspace_id)