diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..578b7933 --- /dev/null +++ b/.flake8 @@ -0,0 +1,32 @@ +[flake8] +extend-ignore = + # Comparison to true should be 'if cond is true:' or 'if cond:' + E712, + # Comparison to None should be 'cond is None:' (E711) + E711, + # Line break occurred before a binary operator (W503) + W503, + # Missing whitespace after ',', ';', or ':' (E231) + E231, + # Line too long (82 > 79 characters) (E501) + E501, + # E251 unexpected spaces around keyword / parameter equals + E251, + # E502 the backslash is redundant between brackets + E502, + # E128 continuation line under-indented for visual indent + E128, + # E125 continuation line with same indent as next logical line + E125, + # E131 continuation line unaligned for hanging indent + E131, + # E129 visually indented line with same indent as next logical line + E129, + # Multiple spaces after ',' (E241) + E241, + E402, + +max-line-length = 99 +max-complexity = 19 +ban-relative-imports = true +select = B,C,E,F,N,W,I25 diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml index 2ef7e706..82267918 100644 --- a/.github/workflows/codecov.yml +++ b/.github/workflows/codecov.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest environment: CI Environment steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - uses: satackey/action-docker-layer-caching@v0.0.11 continue-on-error: true - name: Bring up Services and Run Tests @@ -32,4 +32,4 @@ jobs: run: docker compose -f docker-compose-pipeline.yml down - name: Evaluate Coverage if: ${{ (env.STATUS == 'FAIL') || (env.FAILED > 0) }} - run: exit 1 \ No newline at end of file + run: exit 1 diff --git a/.github/workflows/production_deployment.yml b/.github/workflows/production_deployment.yml index e4a0adb5..6c773f0f 100644 --- a/.github/workflows/production_deployment.yml +++ b/.github/workflows/production_deployment.yml @@ -66,4 +66,4 @@ jobs: sentry-cli releases finalize $SENTRY_RELEASE # Create new deploy for this Sentry release - sentry-cli releases deploys $SENTRY_RELEASE new -e $SENTRY_DEPLOY_ENVIRONMENT \ No newline at end of file + sentry-cli releases deploys $SENTRY_RELEASE new -e $SENTRY_DEPLOY_ENVIRONMENT diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..94ab9ffc --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,35 @@ +default_stages: [commit] +fail_fast: true +exclude: ^(sql/|(.*\/)?migrations\/) +default_language_version: + python: python3 + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.0.1 + hooks: + - id: check-ast + - id: check-merge-conflict + - id: debug-statements + - id: detect-private-key + - id: end-of-file-fixer + - id: trailing-whitespace + + - repo: https://github.com/timothycrosley/isort + rev: 5.12.0 + hooks: + - id: isort + args: ["--profile", "black", --trailing-comma, --line-length=125] + + - repo: https://github.com/pycqa/flake8 + rev: 3.9.2 + hooks: + - id: flake8 + additional_dependencies: [flake8-isort, flake8-tidy-imports] + + - repo: https://github.com/Lucas-C/pre-commit-hooks-bandit + rev: v1.0.5 + hooks: + - id: python-bandit-vulnerability-check + args: [ -lll, --recursive, -c, bandit.yaml, .] + files: .py$ diff --git a/Dockerfile b/Dockerfile index af85a456..8081be23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,10 +17,10 @@ RUN if [ "$CI" = "ENABLED" ]; then \ apt -y update; \ apt-get install postgresql-15 -y --no-install-recommends; \ fi - + # Installing requirements COPY requirements.txt /tmp/requirements.txt -RUN pip install --upgrade pip && pip install -r /tmp/requirements.txt && pip install pylint-django==2.3.0 +RUN pip install --upgrade pip && pip install -r /tmp/requirements.txt && pip install flake8 # Copy Project to the container @@ -29,7 +29,7 @@ COPY . /fyle-xero-api/ WORKDIR /fyle-xero-api # Do linting checks -# RUN pylint --load-plugins pylint_django --rcfile=.pylintrc apps/**.py +RUN flake8 . # Expose development port EXPOSE 8000 diff --git a/README.md b/README.md index 4fa0eacf..a00ca8b2 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Django Rest Framework API for Fyle Xero Integration ``` $ mv docker-compose.yml.template docker-compose.yml ``` - + * Setup environment variables in docker_compose.yml ```yaml @@ -33,7 +33,7 @@ Django Rest Framework API for Fyle Xero Integration XERO_REDIRECT_URI: http://localhost:4200/workspaces/xero/callback XERO_TOKEN_URI: https://identity.xero.com/connect/token ``` - + * Build docker images ``` @@ -53,7 +53,7 @@ Django Rest Framework API for Fyle Xero Integration ``` * To tail the logs a service you can do - + ``` docker-compose logs -f ``` diff --git a/apps/exceptions.py b/apps/exceptions.py index cf8ea220..0080fe7e 100644 --- a/apps/exceptions.py +++ b/apps/exceptions.py @@ -1,14 +1,19 @@ import logging -from rest_framework.views import status from rest_framework.response import Response +from rest_framework.views import status +from xerosdk.exceptions import ( + InternalServerError, + InvalidClientError, + InvalidGrant, + InvalidTokenError, + UnsuccessfulAuthentication, + WrongParamsError, +) -from xerosdk.exceptions import InvalidGrant, InvalidTokenError, UnsuccessfulAuthentication, \ - WrongParamsError, InvalidClientError, InternalServerError -from apps.workspaces.models import XeroCredentials, Workspace, FyleCredential, \ - WorkspaceGeneralSettings, WorkspaceSchedule from apps.fyle.models import ExpenseGroup from apps.mappings.models import GeneralMapping, TenantMapping +from apps.workspaces.models import FyleCredential, Workspace, WorkspaceGeneralSettings, WorkspaceSchedule, XeroCredentials logger = logging.getLogger(__name__) logger.level = logging.INFO @@ -21,103 +26,88 @@ def new_fn(*args, **kwargs): return func(*args, **kwargs) except ExpenseGroup.DoesNotExist: return Response( - data={ - 'message': 'Expense group not found' - }, - status=status.HTTP_400_BAD_REQUEST + data={"message": "Expense group not found"}, + status=status.HTTP_400_BAD_REQUEST, ) except FyleCredential.DoesNotExist: return Response( - data={ - 'message': 'Fyle credentials not found in workspace' - }, - status=status.HTTP_400_BAD_REQUEST + data={"message": "Fyle credentials not found in workspace"}, + status=status.HTTP_400_BAD_REQUEST, ) except GeneralMapping.DoesNotExist: return Response( - { - 'message': 'General mappings do not exist for the workspace' - }, - status=status.HTTP_400_BAD_REQUEST + {"message": "General mappings do not exist for the workspace"}, + status=status.HTTP_400_BAD_REQUEST, ) except (WrongParamsError, InvalidTokenError) as exception: - logger.info('Xero token expired workspace_id - %s %s', kwargs['workspace_id'], - {'error': exception.response}) + logger.info( + "Xero token expired workspace_id - %s %s", + kwargs["workspace_id"], + {"error": exception.response}, + ) return Response( - data={ - 'message': 'Xero token expired workspace_id' - }, - status=status.HTTP_400_BAD_REQUEST + data={"message": "Xero token expired workspace_id"}, + status=status.HTTP_400_BAD_REQUEST, ) - + except Workspace.DoesNotExist: return Response( - data={ - 'message': 'Workspace with this id does not exist' - }, - status=status.HTTP_400_BAD_REQUEST + data={"message": "Workspace with this id does not exist"}, + status=status.HTTP_400_BAD_REQUEST, ) except WorkspaceSchedule.DoesNotExist: return Response( - data={ - 'message': 'Workspace schedule does not exist in workspace' - }, - status=status.HTTP_400_BAD_REQUEST + data={"message": "Workspace schedule does not exist in workspace"}, + status=status.HTTP_400_BAD_REQUEST, ) - except (InvalidGrant, UnsuccessfulAuthentication, InvalidClientError) as exception: + except ( + InvalidGrant, + UnsuccessfulAuthentication, + InvalidClientError, + ) as exception: logger.info(exception) return Response( - data={ - 'message': 'Xero connection expired' - }, - status=status.HTTP_400_BAD_REQUEST + data={"message": "Xero connection expired"}, + status=status.HTTP_400_BAD_REQUEST, ) except WorkspaceGeneralSettings.DoesNotExist: return Response( - { - 'message': 'General Settings does not exist in workspace' - }, - status=status.HTTP_400_BAD_REQUEST + {"message": "General Settings does not exist in workspace"}, + status=status.HTTP_400_BAD_REQUEST, ) except XeroCredentials.DoesNotExist: - logger.info('Xero credentials not found in workspace') + logger.info("Xero credentials not found in workspace") return Response( - data={ - 'message': 'Xero credentials not found in workspace' - }, - status=status.HTTP_400_BAD_REQUEST + data={"message": "Xero credentials not found in workspace"}, + status=status.HTTP_400_BAD_REQUEST, ) except TenantMapping.DoesNotExist: return Response( - { - 'message': 'Tenant mappings do not exist for the workspace' - }, - status=status.HTTP_400_BAD_REQUEST + {"message": "Tenant mappings do not exist for the workspace"}, + status=status.HTTP_400_BAD_REQUEST, ) - except InternalServerError as exception: + except InternalServerError: return Response( - { - 'message': 'Internal server error' - }, - status=status.HTTP_500_INTERNAL_SERVER_ERROR - ) + {"message": "Internal server error"}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR, + ) except Exception as exception: logger.exception(exception) return Response( data={ - 'message': 'An unhandled error has occurred, please re-try later' + "message": "An unhandled error has occurred, please re-try later" }, - status=status.HTTP_400_BAD_REQUEST + status=status.HTTP_400_BAD_REQUEST, ) return new_fn diff --git a/apps/fyle/actions.py b/apps/fyle/actions.py index 9d3501c6..ebf3d43d 100644 --- a/apps/fyle/actions.py +++ b/apps/fyle/actions.py @@ -1,35 +1,42 @@ -from fyle_accounting_mappings.models import ExpenseAttribute -from django.db.models import Q - -from apps.tasks.models import TaskLog -from apps.workspaces.models import FyleCredential, WorkspaceGeneralSettings, Workspace -from apps.workspaces.serializers import WorkspaceSerializer from datetime import datetime, timezone -from .models import Expense, ExpenseGroup, ExpenseGroupSettings +from django.db.models import Q +from fyle_accounting_mappings.models import ExpenseAttribute from fyle_integrations_platform_connector import PlatformConnector -def get_expense_field(workspace_id): +from apps.fyle.models import ExpenseGroup +from apps.workspaces.models import FyleCredential, Workspace, WorkspaceGeneralSettings - default_attributes = ['EMPLOYEE', 'CATEGORY', 'PROJECT', 'COST_CENTER', 'CORPORATE_CARD', 'TAX_GROUP'] - attributes = ExpenseAttribute.objects.filter( - ~Q(attribute_type__in=default_attributes), - workspace_id=workspace_id - ).values('attribute_type', 'display_name').distinct() - expense_fields= [ - {'attribute_type': 'COST_CENTER', 'display_name': 'Cost Center'}, - {'attribute_type': 'PROJECT', 'display_name': 'Project'} +def get_expense_field(workspace_id): + default_attributes = [ + "EMPLOYEE", + "CATEGORY", + "PROJECT", + "COST_CENTER", + "CORPORATE_CARD", + "TAX_GROUP", + ] + attributes = ( + ExpenseAttribute.objects.filter( + ~Q(attribute_type__in=default_attributes), workspace_id=workspace_id + ) + .values("attribute_type", "display_name") + .distinct() + ) + + expense_fields = [ + {"attribute_type": "COST_CENTER", "display_name": "Cost Center"}, + {"attribute_type": "PROJECT", "display_name": "Project"}, ] for attribute in attributes: expense_fields.append(attribute) - + return expense_fields def sync_fyle_dimension(workspace_id): - workspace = Workspace.objects.get(id=workspace_id) if workspace.source_synced_at: time_interval = datetime.now(timezone.utc) - workspace.source_synced_at @@ -41,11 +48,10 @@ def sync_fyle_dimension(workspace_id): platform.import_fyle_dimensions() workspace.source_synced_at = datetime.now() - workspace.save(update_fields=['source_synced_at']) + workspace.save(update_fields=["source_synced_at"]) def refresh_fyle_dimension(workspace_id): - fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) platform = PlatformConnector(fyle_credentials) @@ -53,23 +59,20 @@ def refresh_fyle_dimension(workspace_id): workspace = Workspace.objects.get(id=workspace_id) workspace.source_synced_at = datetime.now() - workspace.save(update_fields=['source_synced_at']) + workspace.save(update_fields=["source_synced_at"]) def exportable_expense_group(workspace_id): - configuration = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) fund_source = [] if configuration.reimbursable_expenses_object: - fund_source.append('PERSONAL') + fund_source.append("PERSONAL") if configuration.corporate_credit_card_expenses_object: - fund_source.append('CCC') + fund_source.append("CCC") expense_group_ids = ExpenseGroup.objects.filter( - workspace_id=workspace_id, - exported_at__isnull=True, - fund_source__in=fund_source - ).values_list('id', flat=True) + workspace_id=workspace_id, exported_at__isnull=True, fund_source__in=fund_source + ).values_list("id", flat=True) return expense_group_ids diff --git a/apps/fyle/apps.py b/apps/fyle/apps.py index 662db2da..00240760 100644 --- a/apps/fyle/apps.py +++ b/apps/fyle/apps.py @@ -2,4 +2,4 @@ class FyleConfig(AppConfig): - name = 'fyle' + name = "fyle" diff --git a/apps/fyle/helpers.py b/apps/fyle/helpers.py index d163ca3e..3896b7ab 100644 --- a/apps/fyle/helpers.py +++ b/apps/fyle/helpers.py @@ -1,7 +1,6 @@ import json import requests - from django.conf import settings @@ -14,28 +13,25 @@ def post_request(url, body, refresh_token=None): if refresh_token: access_token = get_access_token(refresh_token) - api_headers['content-type'] = 'application/json' - api_headers['Authorization'] = 'Bearer {0}'.format(access_token) + api_headers["content-type"] = "application/json" + api_headers["Authorization"] = "Bearer {0}".format(access_token) - response = requests.post( - url, - headers=api_headers, - data=body - ) + response = requests.post(url, headers=api_headers, data=body) if response.status_code == 200: return json.loads(response.text) else: raise Exception(response.text) + def get_request(url, params, refresh_token): """ Create a HTTP get request. """ access_token = get_access_token(refresh_token) api_headers = { - 'content-type': 'application/json', - 'Authorization': 'Bearer {0}'.format(access_token) + "content-type": "application/json", + "Authorization": "Bearer {0}".format(access_token), } api_params = {} @@ -50,11 +46,7 @@ def get_request(url, params, refresh_token): api_params[k] = p - response = requests.get( - url, - headers=api_headers, - params=api_params - ) + response = requests.get(url, headers=api_headers, params=api_params) if response.status_code == 200: return json.loads(response.text) @@ -67,20 +59,20 @@ def get_access_token(refresh_token: str) -> str: Get access token from fyle """ api_data = { - 'grant_type': 'refresh_token', - 'refresh_token': refresh_token, - 'client_id': settings.FYLE_CLIENT_ID, - 'client_secret': settings.FYLE_CLIENT_SECRET + "grant_type": "refresh_token", + "refresh_token": refresh_token, + "client_id": settings.FYLE_CLIENT_ID, + "client_secret": settings.FYLE_CLIENT_SECRET, } - return post_request(settings.FYLE_TOKEN_URI, body=api_data)['access_token'] + return post_request(settings.FYLE_TOKEN_URI, body=api_data)["access_token"] def get_fyle_orgs(refresh_token: str, cluster_domain: str): """ Get fyle orgs of a user """ - api_url = '{0}/api/orgs/'.format(cluster_domain) + api_url = "{0}/api/orgs/".format(cluster_domain) return get_request(api_url, {}, refresh_token) @@ -91,6 +83,6 @@ def get_cluster_domain(refresh_token: str) -> str: :param refresh_token: (str) :return: cluster_domain (str) """ - cluster_api_url = '{0}/oauth/cluster/'.format(settings.FYLE_BASE_URL) + cluster_api_url = "{0}/oauth/cluster/".format(settings.FYLE_BASE_URL) - return post_request(cluster_api_url, {}, refresh_token)['cluster_domain'] + return post_request(cluster_api_url, {}, refresh_token)["cluster_domain"] diff --git a/apps/fyle/models.py b/apps/fyle/models.py index 8f8f983a..aaa9cbcd 100644 --- a/apps/fyle/models.py +++ b/apps/fyle/models.py @@ -2,17 +2,15 @@ Fyle Models """ import logging -from dateutil import parser from datetime import datetime -from typing import List, Dict +from typing import Dict, List +from dateutil import parser from django.contrib.postgres.aggregates import ArrayAgg from django.contrib.postgres.fields import ArrayField -from django.db.models import JSONField from django.contrib.postgres.fields.jsonb import KeyTextTransform from django.db import models -from django.db.models import Count, Q - +from django.db.models import Count, JSONField from fyle_accounting_mappings.models import ExpenseAttribute from apps.workspaces.models import Workspace @@ -22,20 +20,45 @@ ALLOWED_FIELDS = [ - 'employee_email', 'report_id', 'claim_number', 'settlement_id', - 'fund_source', 'vendor', 'category', 'project', 'cost_center', - 'verified_at', 'approved_at', 'spent_at', 'expense_id', 'posted_at' + "employee_email", + "report_id", + "claim_number", + "settlement_id", + "fund_source", + "vendor", + "category", + "project", + "cost_center", + "verified_at", + "approved_at", + "spent_at", + "expense_id", + "posted_at", ] ALLOWED_FORM_INPUT = { - 'group_expenses_by': ['settlement_id', 'claim_number', 'report_id', 'category', 'vendor', 'expense_id'], - 'export_date_type': ['current_date', 'approved_at', 'spent_at', 'verified_at', 'last_spent_at', 'posted_at'] + "group_expenses_by": [ + "settlement_id", + "claim_number", + "report_id", + "category", + "vendor", + "expense_id", + ], + "export_date_type": [ + "current_date", + "approved_at", + "spent_at", + "verified_at", + "last_spent_at", + "posted_at", + ], } SOURCE_ACCOUNT_MAP = { - 'PERSONAL_CASH_ACCOUNT': 'PERSONAL', - 'PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT': 'CCC' + "PERSONAL_CASH_ACCOUNT": "PERSONAL", + "PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT": "CCC", } @@ -59,46 +82,73 @@ class Expense(models.Model): """ Expense """ + id = models.AutoField(primary_key=True) - employee_email = models.EmailField(max_length=255, unique=False, help_text='Email id of the Fyle employee') - employee_name = models.CharField(max_length=255, null=True, help_text='Name of the Fyle employee') - category = models.CharField(max_length=255, null=True, blank=True, help_text='Fyle Expense Category') - sub_category = models.CharField(max_length=255, null=True, blank=True, help_text='Fyle Expense Sub-Category') - project = models.CharField(max_length=255, null=True, blank=True, help_text='Project') - expense_id = models.CharField(max_length=255, unique=True, help_text='Expense ID') - org_id = models.CharField(max_length=255, null=True, help_text='Organization ID') - expense_number = models.CharField(max_length=255, help_text='Expense Number') - claim_number = models.CharField(max_length=255, help_text='Claim Number', null=True) - amount = models.FloatField(help_text='Home Amount') - currency = models.CharField(max_length=5, help_text='Home Currency') - foreign_amount = models.FloatField(null=True, help_text='Foreign Amount') - foreign_currency = models.CharField(null=True, max_length=5, help_text='Foreign Currency') - settlement_id = models.CharField(max_length=255, help_text='Settlement ID', null=True) - reimbursable = models.BooleanField(default=False, help_text='Expense reimbursable or not') - state = models.CharField(max_length=255, help_text='Expense state') - vendor = models.CharField(max_length=255, null=True, blank=True, help_text='Vendor') - cost_center = models.CharField(max_length=255, null=True, blank=True, help_text='Fyle Expense Cost Center') - corporate_card_id = models.CharField(max_length=255, null=True, blank=True, help_text='Corporate Card ID') - purpose = models.TextField(null=True, blank=True, help_text='Purpose') - report_id = models.CharField(max_length=255, help_text='Report ID') - billable = models.BooleanField(default=False, help_text='Expense billable or not') - file_ids = ArrayField(base_field=models.CharField(max_length=255), null=True, help_text='File IDs') - spent_at = models.DateTimeField(null=True, help_text='Expense spent at') - approved_at = models.DateTimeField(null=True, help_text='Expense approved at') - posted_at = models.DateTimeField(null=True, help_text='Date when the money is taken from the bank') - expense_created_at = models.DateTimeField(help_text='Expense created at') - expense_updated_at = models.DateTimeField(help_text='Expense created at') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') - fund_source = models.CharField(max_length=255, help_text='Expense fund source') - verified_at = models.DateTimeField(help_text='Report verified at', null=True) + employee_email = models.EmailField( + max_length=255, unique=False, help_text="Email id of the Fyle employee" + ) + employee_name = models.CharField( + max_length=255, null=True, help_text="Name of the Fyle employee" + ) + category = models.CharField( + max_length=255, null=True, blank=True, help_text="Fyle Expense Category" + ) + sub_category = models.CharField( + max_length=255, null=True, blank=True, help_text="Fyle Expense Sub-Category" + ) + project = models.CharField( + max_length=255, null=True, blank=True, help_text="Project" + ) + expense_id = models.CharField(max_length=255, unique=True, help_text="Expense ID") + org_id = models.CharField(max_length=255, null=True, help_text="Organization ID") + expense_number = models.CharField(max_length=255, help_text="Expense Number") + claim_number = models.CharField(max_length=255, help_text="Claim Number", null=True) + amount = models.FloatField(help_text="Home Amount") + currency = models.CharField(max_length=5, help_text="Home Currency") + foreign_amount = models.FloatField(null=True, help_text="Foreign Amount") + foreign_currency = models.CharField( + null=True, max_length=5, help_text="Foreign Currency" + ) + settlement_id = models.CharField( + max_length=255, help_text="Settlement ID", null=True + ) + reimbursable = models.BooleanField( + default=False, help_text="Expense reimbursable or not" + ) + state = models.CharField(max_length=255, help_text="Expense state") + vendor = models.CharField(max_length=255, null=True, blank=True, help_text="Vendor") + cost_center = models.CharField( + max_length=255, null=True, blank=True, help_text="Fyle Expense Cost Center" + ) + corporate_card_id = models.CharField( + max_length=255, null=True, blank=True, help_text="Corporate Card ID" + ) + purpose = models.TextField(null=True, blank=True, help_text="Purpose") + report_id = models.CharField(max_length=255, help_text="Report ID") + billable = models.BooleanField(default=False, help_text="Expense billable or not") + file_ids = ArrayField( + base_field=models.CharField(max_length=255), null=True, help_text="File IDs" + ) + spent_at = models.DateTimeField(null=True, help_text="Expense spent at") + approved_at = models.DateTimeField(null=True, help_text="Expense approved at") + posted_at = models.DateTimeField( + null=True, help_text="Date when the money is taken from the bank" + ) + expense_created_at = models.DateTimeField(help_text="Expense created at") + expense_updated_at = models.DateTimeField(help_text="Expense created at") + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") + fund_source = models.CharField(max_length=255, help_text="Expense fund source") + verified_at = models.DateTimeField(help_text="Report verified at", null=True) custom_properties = JSONField(null=True) - paid_on_xero = models.BooleanField(help_text='Expense Payment status on Xero', default=False) - tax_amount = models.FloatField(null=True, help_text='Tax Amount') - tax_group_id = models.CharField(null=True, max_length=255, help_text='Tax Group ID') + paid_on_xero = models.BooleanField( + help_text="Expense Payment status on Xero", default=False + ) + tax_amount = models.FloatField(null=True, help_text="Tax Amount") + tax_group_id = models.CharField(null=True, max_length=255, help_text="Tax Group ID") class Meta: - db_table = 'expenses' + db_table = "expenses" @staticmethod def create_expense_objects(expenses: List[Dict], workspace_id: int): @@ -109,114 +159,155 @@ def create_expense_objects(expenses: List[Dict], workspace_id: int): eliminated_expenses = [] for expense in expenses: - cutoff_date = _format_date('2021-08-01T00:00:00.000Z') - expense_created_at = _format_date(expense['expense_created_at']) + cutoff_date = _format_date("2021-08-01T00:00:00.000Z") + expense_created_at = _format_date(expense["expense_created_at"]) if expense_created_at > cutoff_date: expense_object, _ = Expense.objects.update_or_create( - expense_id=expense['id'], + expense_id=expense["id"], defaults={ - 'employee_email': expense['employee_email'], - 'employee_name': expense['employee_name'], - 'category': expense['category'], - 'sub_category': expense['sub_category'], - 'project': expense['project'], - 'expense_number': expense['expense_number'], - 'org_id': expense['org_id'], - 'claim_number': expense['claim_number'], - 'amount': expense['amount'], - 'currency': expense['currency'], - 'foreign_amount': expense['foreign_amount'], - 'foreign_currency': expense['foreign_currency'], - 'settlement_id': expense['settlement_id'], - 'reimbursable': expense['reimbursable'], - 'state': expense['state'], - 'vendor': expense['vendor'][:250] if expense['vendor'] else None, - 'cost_center': expense['cost_center'], - 'corporate_card_id': expense['corporate_card_id'], - 'purpose': expense['purpose'], - 'report_id': expense['report_id'], - 'file_ids': expense['file_ids'], - 'spent_at': expense['spent_at'], - 'approved_at': expense['approved_at'], - 'posted_at': expense['posted_at'], - 'expense_created_at': expense['expense_created_at'], - 'expense_updated_at': expense['expense_updated_at'], - 'fund_source': SOURCE_ACCOUNT_MAP[expense['source_account_type']], - 'verified_at': expense['verified_at'], - 'custom_properties': expense['custom_properties'], - 'tax_amount': expense['tax_amount'] if expense['tax_amount'] else 0, - 'tax_group_id': expense['tax_group_id'], - 'billable': expense['billable'] if expense['billable'] else False - } + "employee_email": expense["employee_email"], + "employee_name": expense["employee_name"], + "category": expense["category"], + "sub_category": expense["sub_category"], + "project": expense["project"], + "expense_number": expense["expense_number"], + "org_id": expense["org_id"], + "claim_number": expense["claim_number"], + "amount": expense["amount"], + "currency": expense["currency"], + "foreign_amount": expense["foreign_amount"], + "foreign_currency": expense["foreign_currency"], + "settlement_id": expense["settlement_id"], + "reimbursable": expense["reimbursable"], + "state": expense["state"], + "vendor": expense["vendor"][:250] + if expense["vendor"] + else None, + "cost_center": expense["cost_center"], + "corporate_card_id": expense["corporate_card_id"], + "purpose": expense["purpose"], + "report_id": expense["report_id"], + "file_ids": expense["file_ids"], + "spent_at": expense["spent_at"], + "approved_at": expense["approved_at"], + "posted_at": expense["posted_at"], + "expense_created_at": expense["expense_created_at"], + "expense_updated_at": expense["expense_updated_at"], + "fund_source": SOURCE_ACCOUNT_MAP[ + expense["source_account_type"] + ], + "verified_at": expense["verified_at"], + "custom_properties": expense["custom_properties"], + "tax_amount": expense["tax_amount"] + if expense["tax_amount"] + else 0, + "tax_group_id": expense["tax_group_id"], + "billable": expense["billable"] + if expense["billable"] + else False, + }, ) - if not ExpenseGroup.objects.filter(expenses__id=expense_object.id).first(): + if not ExpenseGroup.objects.filter( + expenses__id=expense_object.id + ).first(): expense_objects.append(expense_object) else: - eliminated_expenses.append(expense['id']) + eliminated_expenses.append(expense["id"]) if eliminated_expenses: - logger.info('Expenses with ids {} are not eligible for import'.format(eliminated_expenses)) + logger.info( + "Expenses with ids {} are not eligible for import".format( + eliminated_expenses + ) + ) return expense_objects + def get_default_expense_group_fields(): - return ['employee_email', 'report_id', 'claim_number', 'fund_source'] - + return ["employee_email", "report_id", "claim_number", "fund_source"] + + def get_default_ccc_expense_group_fields(): - return ['employee_email', 'report_id', 'claim_number', 'fund_source', 'expense_id'] + return ["employee_email", "report_id", "claim_number", "fund_source", "expense_id"] + def get_default_expense_state(): - return 'PAYMENT_PROCESSING' + return "PAYMENT_PROCESSING" + def get_default_ccc_expense_state(): - return 'PAID' + return "PAID" + CCC_EXPENSE_STATE = ( - ('APPROVED', 'APPROVED'), - ('PAID', 'PAID'), - ('PAYMENT_PROCESSING', 'PAYMENT_PROCESSING') + ("APPROVED", "APPROVED"), + ("PAID", "PAID"), + ("PAYMENT_PROCESSING", "PAYMENT_PROCESSING"), ) + class ExpenseGroupSettings(models.Model): """ ExpenseGroupCustomizationSettings """ + id = models.AutoField(primary_key=True) reimbursable_expense_group_fields = ArrayField( - base_field=models.CharField(max_length=100), default=get_default_expense_group_fields, - help_text='list of fields reimbursable expense grouped by' + base_field=models.CharField(max_length=100), + default=get_default_expense_group_fields, + help_text="list of fields reimbursable expense grouped by", ) corporate_credit_card_expense_group_fields = ArrayField( - base_field=models.CharField(max_length=100), default=get_default_ccc_expense_group_fields, - help_text='list of fields ccc expenses grouped by' + base_field=models.CharField(max_length=100), + default=get_default_ccc_expense_group_fields, + help_text="list of fields ccc expenses grouped by", ) expense_state = models.CharField( - max_length=100, default=get_default_expense_state, - help_text='state at which expenses are fetched (PAYMENT_PROCESSING / PAID)', null=False) + max_length=100, + default=get_default_expense_state, + help_text="state at which expenses are fetched (PAYMENT_PROCESSING / PAID)", + null=False, + ) reimbursable_expense_state = models.CharField( - max_length=100, default=get_default_expense_state, - help_text='state at which the reimbursable expenses are fetched (PAYMENT_PROCESSING / PAID)', null=True) + max_length=100, + default=get_default_expense_state, + help_text="state at which the reimbursable expenses are fetched (PAYMENT_PROCESSING / PAID)", + null=True, + ) ccc_expense_state = models.CharField( - max_length=100, default=get_default_ccc_expense_state, choices=CCC_EXPENSE_STATE, - help_text='state at which the ccc expenses are fetched (PAYMENT_PROCESSING /PAID)', null=True) - reimbursable_export_date_type = models.CharField(max_length=100, default='current_date', help_text='Export Date') - ccc_export_date_type = models.CharField(max_length=100, default='spent_at', help_text='CCC Export Date') - import_card_credits = models.BooleanField(help_text='Import Card Credits', default=False) + max_length=100, + default=get_default_ccc_expense_state, + choices=CCC_EXPENSE_STATE, + help_text="state at which the ccc expenses are fetched (PAYMENT_PROCESSING /PAID)", + null=True, + ) + reimbursable_export_date_type = models.CharField( + max_length=100, default="current_date", help_text="Export Date" + ) + ccc_export_date_type = models.CharField( + max_length=100, default="spent_at", help_text="CCC Export Date" + ) + import_card_credits = models.BooleanField( + help_text="Import Card Credits", default=False + ) workspace = models.OneToOneField( - Workspace, on_delete=models.PROTECT, help_text='To which workspace this expense group setting belongs to', - related_name='expense_group_settings' + Workspace, + on_delete=models.PROTECT, + help_text="To which workspace this expense group setting belongs to", + related_name="expense_group_settings", ) - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") class Meta: - db_table = 'expense_group_settings' + db_table = "expense_group_settings" @staticmethod def update_expense_group_settings(expense_group_settings: Dict, workspace_id: int): @@ -231,70 +322,89 @@ def update_expense_group_settings(expense_group_settings: Dict, workspace_id: in immutable_ccc_list = tuple(current_ccc_settings) for field in immutable_reimbursable_list: - if field in ALLOWED_FORM_INPUT['group_expenses_by']: + if field in ALLOWED_FORM_INPUT["group_expenses_by"]: current_reimbursable_settings.remove(field) for field in immutable_ccc_list: - if field in ALLOWED_FORM_INPUT['group_expenses_by']: + if field in ALLOWED_FORM_INPUT["group_expenses_by"]: current_ccc_settings.remove(field) - if 'report_id' not in current_reimbursable_settings: - if 'claim_number' in current_reimbursable_settings: - current_reimbursable_settings.remove('claim_number') + if "report_id" not in current_reimbursable_settings: + if "claim_number" in current_reimbursable_settings: + current_reimbursable_settings.remove("claim_number") else: - current_reimbursable_settings.append('claim_number') + current_reimbursable_settings.append("claim_number") - if 'report_id' not in current_ccc_settings: - if 'claim_number' in current_ccc_settings: - current_ccc_settings.remove('claim_number') + if "report_id" not in current_ccc_settings: + if "claim_number" in current_ccc_settings: + current_ccc_settings.remove("claim_number") else: - current_ccc_settings.append('claim_number') + current_ccc_settings.append("claim_number") reimbursable_grouped_by.extend(current_reimbursable_settings) corporate_credit_card_expenses_grouped_by.extend(current_ccc_settings) - reimbursable_grouped_by.extend(expense_group_settings['reimbursable_expense_group_fields']) + reimbursable_grouped_by.extend( + expense_group_settings["reimbursable_expense_group_fields"] + ) corporate_credit_card_expenses_grouped_by.extend( - expense_group_settings['corporate_credit_card_expense_group_fields'] + expense_group_settings["corporate_credit_card_expense_group_fields"] ) reimbursable_grouped_by = list(set(reimbursable_grouped_by)) - corporate_credit_card_expenses_grouped_by = list(set(corporate_credit_card_expenses_grouped_by)) + corporate_credit_card_expenses_grouped_by = list( + set(corporate_credit_card_expenses_grouped_by) + ) - for field in ALLOWED_FORM_INPUT['export_date_type']: + for field in ALLOWED_FORM_INPUT["export_date_type"]: if field in reimbursable_grouped_by: reimbursable_grouped_by.remove(field) - for field in ALLOWED_FORM_INPUT['export_date_type']: + for field in ALLOWED_FORM_INPUT["export_date_type"]: if field in corporate_credit_card_expenses_grouped_by: corporate_credit_card_expenses_grouped_by.remove(field) - if expense_group_settings['reimbursable_export_date_type'] != 'current_date': - reimbursable_grouped_by.append(expense_group_settings['reimbursable_export_date_type']) + if expense_group_settings["reimbursable_export_date_type"] != "current_date": + reimbursable_grouped_by.append( + expense_group_settings["reimbursable_export_date_type"] + ) - if expense_group_settings['ccc_export_date_type'] != 'current_date': - corporate_credit_card_expenses_grouped_by.append(expense_group_settings['ccc_export_date_type']) + if expense_group_settings["ccc_export_date_type"] != "current_date": + corporate_credit_card_expenses_grouped_by.append( + expense_group_settings["ccc_export_date_type"] + ) - if 'claim_number' in reimbursable_grouped_by and corporate_credit_card_expenses_grouped_by: - reimbursable_grouped_by.append('report_id') - corporate_credit_card_expenses_grouped_by.append('report_id') + if ( + "claim_number" in reimbursable_grouped_by + and corporate_credit_card_expenses_grouped_by + ): + reimbursable_grouped_by.append("report_id") + corporate_credit_card_expenses_grouped_by.append("report_id") import_card_credits = settings.import_card_credits - if 'import_card_credits' in expense_group_settings.keys(): - import_card_credits = expense_group_settings['import_card_credits'] + if "import_card_credits" in expense_group_settings.keys(): + import_card_credits = expense_group_settings["import_card_credits"] return ExpenseGroupSettings.objects.update_or_create( workspace_id=workspace_id, defaults={ - 'reimbursable_expense_group_fields': reimbursable_grouped_by, - 'corporate_credit_card_expense_group_fields': corporate_credit_card_expenses_grouped_by, - 'expense_state': expense_group_settings['expense_state'], - 'reimbursable_expense_state': expense_group_settings['reimbursable_expense_state'] if 'reimbursable_expense_state' in expense_group_settings else expense_group_settings['expense_state'], - 'ccc_expense_state': expense_group_settings['ccc_expense_state'] if 'ccc_expense_state' in expense_group_settings else expense_group_settings['expense_state'], - 'reimbursable_export_date_type': expense_group_settings['reimbursable_export_date_type'], - 'ccc_export_date_type': expense_group_settings['ccc_export_date_type'], - 'import_card_credits': import_card_credits - } + "reimbursable_expense_group_fields": reimbursable_grouped_by, + "corporate_credit_card_expense_group_fields": corporate_credit_card_expenses_grouped_by, + "expense_state": expense_group_settings["expense_state"], + "reimbursable_expense_state": expense_group_settings[ + "reimbursable_expense_state" + ] + if "reimbursable_expense_state" in expense_group_settings + else expense_group_settings["expense_state"], + "ccc_expense_state": expense_group_settings["ccc_expense_state"] + if "ccc_expense_state" in expense_group_settings + else expense_group_settings["expense_state"], + "reimbursable_export_date_type": expense_group_settings[ + "reimbursable_export_date_type" + ], + "ccc_export_date_type": expense_group_settings["ccc_export_date_type"], + "import_card_credits": import_card_credits, + }, ) @@ -307,14 +417,19 @@ def _group_expenses(expenses, group_fields, workspace_id): for field in group_fields: if field.lower() not in ALLOWED_FIELDS: group_fields.pop(group_fields.index(field)) - field = ExpenseAttribute.objects.filter(workspace_id=workspace_id, - attribute_type=field.upper()).first() + field = ExpenseAttribute.objects.filter( + workspace_id=workspace_id, attribute_type=field.upper() + ).first() if field: - custom_fields[field.attribute_type.lower()] = KeyTextTransform(field.display_name, - 'custom_properties') + custom_fields[field.attribute_type.lower()] = KeyTextTransform( + field.display_name, "custom_properties" + ) - expense_groups = list(expenses.values(*group_fields, **custom_fields).annotate( - total=Count('*'), expense_ids=ArrayAgg('id'))) + expense_groups = list( + expenses.values(*group_fields, **custom_fields).annotate( + total=Count("*"), expense_ids=ArrayAgg("id") + ) + ) return expense_groups @@ -322,73 +437,106 @@ class ExpenseGroup(models.Model): """ Expense Group """ + id = models.AutoField(primary_key=True) - workspace = models.ForeignKey(Workspace, on_delete=models.PROTECT, - help_text='To which workspace this expense group belongs to') - fund_source = models.CharField(max_length=255, help_text='Expense fund source') - response_logs = JSONField(help_text='Reponse log of the export', null=True) - expenses = models.ManyToManyField(Expense, help_text="Expenses under this Expense Group") - description = JSONField(max_length=255, help_text='Description', null=True) - employee_name = models.CharField(max_length=100, help_text='Expense Group Employee Name', null=True) - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - exported_at = models.DateTimeField(help_text='Exported at', null=True) - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + workspace = models.ForeignKey( + Workspace, + on_delete=models.PROTECT, + help_text="To which workspace this expense group belongs to", + ) + fund_source = models.CharField(max_length=255, help_text="Expense fund source") + response_logs = JSONField(help_text="Reponse log of the export", null=True) + expenses = models.ManyToManyField( + Expense, help_text="Expenses under this Expense Group" + ) + description = JSONField(max_length=255, help_text="Description", null=True) + employee_name = models.CharField( + max_length=100, help_text="Expense Group Employee Name", null=True + ) + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + exported_at = models.DateTimeField(help_text="Exported at", null=True) + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") class Meta: - db_table = 'expense_groups' + db_table = "expense_groups" @staticmethod - def create_expense_groups_by_report_id_fund_source(expense_objects: List[Expense], workspace_id): + def create_expense_groups_by_report_id_fund_source( + expense_objects: List[Expense], workspace_id + ): """ Group expense by report_id and fund_source """ - expense_group_settings = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) + expense_group_settings = ExpenseGroupSettings.objects.get( + workspace_id=workspace_id + ) - reimbursable_expense_group_fields = expense_group_settings.reimbursable_expense_group_fields - reimbursable_expenses = list(filter(lambda expense: expense.fund_source == 'PERSONAL', expense_objects)) + reimbursable_expense_group_fields = ( + expense_group_settings.reimbursable_expense_group_fields + ) + reimbursable_expenses = list( + filter(lambda expense: expense.fund_source == "PERSONAL", expense_objects) + ) - expense_groups = _group_expenses(reimbursable_expenses, reimbursable_expense_group_fields, workspace_id) + expense_groups = _group_expenses( + reimbursable_expenses, reimbursable_expense_group_fields, workspace_id + ) - corporate_credit_card_expense_group_field = expense_group_settings.corporate_credit_card_expense_group_fields - corporate_credit_card_expenses = list(filter(lambda expense: expense.fund_source == 'CCC', expense_objects)) + corporate_credit_card_expense_group_field = ( + expense_group_settings.corporate_credit_card_expense_group_fields + ) + corporate_credit_card_expenses = list( + filter(lambda expense: expense.fund_source == "CCC", expense_objects) + ) corporate_credit_card_expense_groups = _group_expenses( - corporate_credit_card_expenses, corporate_credit_card_expense_group_field, workspace_id) + corporate_credit_card_expenses, + corporate_credit_card_expense_group_field, + workspace_id, + ) expense_groups.extend(corporate_credit_card_expense_groups) expense_group_objects = [] for expense_group in expense_groups: - if expense_group_settings.reimbursable_export_date_type == 'last_spent_at': - expense_group['last_spent_at'] = Expense.objects.filter( - id__in=expense_group['expense_ids'] - ).order_by('-spent_at').first().spent_at + if expense_group_settings.reimbursable_export_date_type == "last_spent_at": + expense_group["last_spent_at"] = ( + Expense.objects.filter(id__in=expense_group["expense_ids"]) + .order_by("-spent_at") + .first() + .spent_at + ) - if expense_group_settings.ccc_export_date_type == 'last_spent_at': - expense_group['last_spent_at'] = Expense.objects.filter( - id__in=expense_group['expense_ids'] - ).order_by('-spent_at').first().spent_at + if expense_group_settings.ccc_export_date_type == "last_spent_at": + expense_group["last_spent_at"] = ( + Expense.objects.filter(id__in=expense_group["expense_ids"]) + .order_by("-spent_at") + .first() + .spent_at + ) - employee_name = Expense.objects.filter( - id__in=expense_group['expense_ids'] - ).first().employee_name + employee_name = ( + Expense.objects.filter(id__in=expense_group["expense_ids"]) + .first() + .employee_name + ) - expense_ids = expense_group['expense_ids'] - expense_group.pop('total') - expense_group.pop('expense_ids') + expense_ids = expense_group["expense_ids"] + expense_group.pop("total") + expense_group.pop("expense_ids") for key in expense_group: - if key in ALLOWED_FORM_INPUT['export_date_type']: + if key in ALLOWED_FORM_INPUT["export_date_type"]: if expense_group[key]: - expense_group[key] = expense_group[key].strftime('%Y-%m-%d') + expense_group[key] = expense_group[key].strftime("%Y-%m-%d") else: - expense_group[key] = datetime.now().strftime('%Y-%m-%d') + expense_group[key] = datetime.now().strftime("%Y-%m-%d") expense_group_object = ExpenseGroup.objects.create( workspace_id=workspace_id, - fund_source=expense_group['fund_source'], + fund_source=expense_group["fund_source"], description=expense_group, - employee_name=employee_name + employee_name=employee_name, ) expense_group_object.expenses.add(*expense_ids) @@ -402,27 +550,37 @@ class Reimbursement(models.Model): """ Reimbursements """ + id = models.AutoField(primary_key=True) workspace = models.ForeignKey( - Workspace, on_delete=models.PROTECT, help_text='To which workspace this reimbursement belongs to' + Workspace, + on_delete=models.PROTECT, + help_text="To which workspace this reimbursement belongs to", ) - settlement_id = models.CharField(max_length=255, help_text='Fyle Settlement ID') - reimbursement_id = models.CharField(max_length=255, help_text='Fyle Reimbursement ID') - state = models.CharField(max_length=255, help_text='Fyle Reimbursement State') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + settlement_id = models.CharField(max_length=255, help_text="Fyle Settlement ID") + reimbursement_id = models.CharField( + max_length=255, help_text="Fyle Reimbursement ID" + ) + state = models.CharField(max_length=255, help_text="Fyle Reimbursement State") + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") class Meta: - db_table = 'reimbursements' + db_table = "reimbursements" @staticmethod - def create_or_update_reimbursement_objects(reimbursements: List[Dict], workspace_id): + def create_or_update_reimbursement_objects( + reimbursements: List[Dict], workspace_id + ): """ Create or Update reimbursement attributes """ - reimbursement_id_list = [reimbursement['id'] for reimbursement in reimbursements] + reimbursement_id_list = [ + reimbursement["id"] for reimbursement in reimbursements + ] existing_reimbursements = Reimbursement.objects.filter( - reimbursement_id__in=reimbursement_id_list, workspace_id=workspace_id).all() + reimbursement_id__in=reimbursement_id_list, workspace_id=workspace_id + ).all() existing_reimbursement_ids = [] primary_key_map = {} @@ -430,30 +588,35 @@ def create_or_update_reimbursement_objects(reimbursements: List[Dict], workspace for existing_reimbursement in existing_reimbursements: existing_reimbursement_ids.append(existing_reimbursement.reimbursement_id) primary_key_map[existing_reimbursement.reimbursement_id] = { - 'id': existing_reimbursement.id, - 'state': existing_reimbursement.state + "id": existing_reimbursement.id, + "state": existing_reimbursement.state, } attributes_to_be_created = [] attributes_to_be_updated = [] for reimbursement in reimbursements: - reimbursement['state'] = 'COMPLETE' if reimbursement['is_paid'] else 'PENDING' - if reimbursement['id'] not in existing_reimbursement_ids: + reimbursement["state"] = ( + "COMPLETE" if reimbursement["is_paid"] else "PENDING" + ) + if reimbursement["id"] not in existing_reimbursement_ids: attributes_to_be_created.append( Reimbursement( - settlement_id=reimbursement['settlement_id'], - reimbursement_id=reimbursement['id'], - state=reimbursement['state'], - workspace_id=workspace_id + settlement_id=reimbursement["settlement_id"], + reimbursement_id=reimbursement["id"], + state=reimbursement["state"], + workspace_id=workspace_id, ) ) else: - if reimbursement['state'] != primary_key_map[reimbursement['id']]['state']: + if ( + reimbursement["state"] + != primary_key_map[reimbursement["id"]]["state"] + ): attributes_to_be_updated.append( Reimbursement( - id=primary_key_map[reimbursement['id']]['id'], - state=reimbursement['state'] + id=primary_key_map[reimbursement["id"]]["id"], + state=reimbursement["state"], ) ) @@ -461,7 +624,9 @@ def create_or_update_reimbursement_objects(reimbursements: List[Dict], workspace Reimbursement.objects.bulk_create(attributes_to_be_created, batch_size=50) if attributes_to_be_updated: - Reimbursement.objects.bulk_update(attributes_to_be_updated, fields=['state'], batch_size=50) + Reimbursement.objects.bulk_update( + attributes_to_be_updated, fields=["state"], batch_size=50 + ) @staticmethod def get_last_synced_at(workspace_id: int): @@ -470,6 +635,8 @@ def get_last_synced_at(workspace_id: int): :param workspace_id: Workspace Id :return: last_synced_at datetime """ - return Reimbursement.objects.filter( - workspace_id=workspace_id - ).order_by('-updated_at').first() + return ( + Reimbursement.objects.filter(workspace_id=workspace_id) + .order_by("-updated_at") + .first() + ) diff --git a/apps/fyle/serializers.py b/apps/fyle/serializers.py index 09a98907..cf0302ac 100644 --- a/apps/fyle/serializers.py +++ b/apps/fyle/serializers.py @@ -1,42 +1,47 @@ +from fyle_accounting_mappings.models import ExpenseAttribute from rest_framework import serializers -from .models import Expense, ExpenseGroup, ExpenseGroupSettings -from fyle_accounting_mappings.models import ExpenseAttribute +from apps.fyle.models import Expense, ExpenseGroup, ExpenseGroupSettings class ExpenseSerializer(serializers.ModelSerializer): """ Expense serializer """ + class Meta: model = Expense - fields = '__all__' + fields = "__all__" class ExpenseGroupSettingsSerializer(serializers.ModelSerializer): """ Expense group serializer """ + class Meta: model = ExpenseGroupSettings - fields = '__all__' + fields = "__all__" + class ExpenseGroupSerializer(serializers.ModelSerializer): """ Expense group serializer """ + expenses = ExpenseSerializer(many=True) class Meta: model = ExpenseGroup - fields = '__all__' - extra_fields = ['expenses'] + fields = "__all__" + extra_fields = ["expenses"] class ExpenseFieldSerializer(serializers.ModelSerializer): """ Expense Fields Serializer """ + class Meta: model = ExpenseAttribute - fields = ['attribute_type', 'display_name'] + fields = ["attribute_type", "display_name"] diff --git a/apps/fyle/tasks.py b/apps/fyle/tasks.py index e6dfb86c..d3fc779e 100644 --- a/apps/fyle/tasks.py +++ b/apps/fyle/tasks.py @@ -1,44 +1,39 @@ import logging -from typing import List import traceback from datetime import datetime +from typing import List from django.db import transaction -from django_q.tasks import async_task - -from apps.workspaces.models import FyleCredential, Workspace, WorkspaceGeneralSettings -from apps.tasks.models import TaskLog - -from fyle_integrations_platform_connector import PlatformConnector from fyle.platform.exceptions import InvalidTokenError as FyleInvalidTokenError +from fyle_integrations_platform_connector import PlatformConnector -from .models import Expense, ExpenseGroup, ExpenseGroupSettings - +from apps.fyle.models import Expense, ExpenseGroup, ExpenseGroupSettings +from apps.tasks.models import TaskLog +from apps.workspaces.models import FyleCredential, Workspace, WorkspaceGeneralSettings logger = logging.getLogger(__name__) logger.level = logging.INFO SOURCE_ACCOUNT_MAP = { - 'PERSONAL': 'PERSONAL_CASH_ACCOUNT', - 'CCC': 'PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT' + "PERSONAL": "PERSONAL_CASH_ACCOUNT", + "CCC": "PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT", } + def get_task_log_and_fund_source(workspace_id: int): task_log, _ = TaskLog.objects.update_or_create( workspace_id=workspace_id, - type='FETCHING_EXPENSES', - defaults={ - 'status': 'IN_PROGRESS' - } + type="FETCHING_EXPENSES", + defaults={"status": "IN_PROGRESS"}, ) general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) fund_source = [] if general_settings.reimbursable_expenses_object: - fund_source.append('PERSONAL') + fund_source.append("PERSONAL") if general_settings.corporate_credit_card_expenses_object is not None: - fund_source.append('CCC') + fund_source.append("CCC") return task_log, fund_source @@ -55,19 +50,20 @@ def create_expense_groups(workspace_id: int, fund_source: List[str], task_log: T async_create_expense_groups(workspace_id, fund_source, task_log) - task_log.detail = { - 'message': 'Creating expense groups' - } + task_log.detail = {"message": "Creating expense groups"} task_log.save() return task_log -def async_create_expense_groups(workspace_id: int, fund_source: List[str], task_log: TaskLog): +def async_create_expense_groups( + workspace_id: int, fund_source: List[str], task_log: TaskLog +): try: with transaction.atomic(): - - expense_group_settings = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) + expense_group_settings = ExpenseGroupSettings.objects.get( + workspace_id=workspace_id + ) workspace = Workspace.objects.get(pk=workspace_id) last_synced_at = workspace.last_synced_at ccc_last_synced_at = workspace.ccc_last_synced_at @@ -81,28 +77,44 @@ def async_create_expense_groups(workspace_id: int, fund_source: List[str], task_ expenses = [] reimbursable_expenses_count = 0 - if 'PERSONAL' in fund_source: - expenses.extend(platform.expenses.get( - source_account_type=['PERSONAL_CASH_ACCOUNT'], - state=expense_group_settings.reimbursable_expense_state, - settled_at=last_synced_at if expense_group_settings.reimbursable_expense_state == 'PAYMENT_PROCESSING' else None, - filter_credit_expenses=True, - last_paid_at=last_synced_at if expense_group_settings.reimbursable_expense_state == 'PAID' else None - )) + if "PERSONAL" in fund_source: + expenses.extend( + platform.expenses.get( + source_account_type=["PERSONAL_CASH_ACCOUNT"], + state=expense_group_settings.reimbursable_expense_state, + settled_at=last_synced_at + if expense_group_settings.reimbursable_expense_state + == "PAYMENT_PROCESSING" + else None, + filter_credit_expenses=True, + last_paid_at=last_synced_at + if expense_group_settings.reimbursable_expense_state == "PAID" + else None, + ) + ) if expenses: workspace.last_synced_at = datetime.now() reimbursable_expenses_count += len(expenses) - if 'CCC' in fund_source: - expenses.extend(platform.expenses.get( - source_account_type=['PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT'], - state=expense_group_settings.ccc_expense_state, - settled_at=ccc_last_synced_at if expense_group_settings.ccc_expense_state == 'PAYMENT_PROCESSING' else None, - approved_at=ccc_last_synced_at if expense_group_settings.ccc_expense_state == 'APPROVED' else None, - filter_credit_expenses=filter_credit_expenses, - last_paid_at=ccc_last_synced_at if expense_group_settings.ccc_expense_state == 'PAID' else None - )) + if "CCC" in fund_source: + expenses.extend( + platform.expenses.get( + source_account_type=["PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT"], + state=expense_group_settings.ccc_expense_state, + settled_at=ccc_last_synced_at + if expense_group_settings.ccc_expense_state + == "PAYMENT_PROCESSING" + else None, + approved_at=ccc_last_synced_at + if expense_group_settings.ccc_expense_state == "APPROVED" + else None, + filter_credit_expenses=filter_credit_expenses, + last_paid_at=ccc_last_synced_at + if expense_group_settings.ccc_expense_state == "PAID" + else None, + ) + ) if len(expenses) != reimbursable_expenses_count: workspace.ccc_last_synced_at = datetime.now() @@ -115,28 +127,29 @@ def async_create_expense_groups(workspace_id: int, fund_source: List[str], task_ expense_objects, workspace_id ) - task_log.status = 'COMPLETE' + task_log.status = "COMPLETE" task_log.save() except FyleCredential.DoesNotExist: - logger.info('Fyle credentials not found %s', workspace_id) - task_log.detail = { - 'message': 'Fyle credentials do not exist in workspace' - } - task_log.status = 'FAILED' + logger.info("Fyle credentials not found %s", workspace_id) + task_log.detail = {"message": "Fyle credentials do not exist in workspace"} + task_log.status = "FAILED" task_log.save() except FyleInvalidTokenError: logger.info("Invalid Token for Fyle") except Exception: error = traceback.format_exc() - task_log.detail = { - 'error': error - } - task_log.status = 'FATAL' + task_log.detail = {"error": error} + task_log.status = "FATAL" task_log.save() - logger.exception('Something unexpected happened workspace_id: %s %s', task_log.workspace_id, task_log.detail) + logger.exception( + "Something unexpected happened workspace_id: %s %s", + task_log.workspace_id, + task_log.detail, + ) + def sync_dimensions(fyle_credentials): platform = PlatformConnector(fyle_credentials) diff --git a/apps/fyle/urls.py b/apps/fyle/urls.py index 30938f4e..a4051bce 100644 --- a/apps/fyle/urls.py +++ b/apps/fyle/urls.py @@ -1,14 +1,29 @@ from django.urls import path -from .views import ExpenseGroupView,ExpenseFieldsView, ExpenseGroupSettingsView, \ - SyncFyleDimensionView, RefreshFyleDimensionView, ExpenseGroupSyncView, ExportableExpenseGroupsView +from apps.fyle.views import ( + ExpenseFieldsView, + ExpenseGroupSettingsView, + ExpenseGroupSyncView, + ExpenseGroupView, + ExportableExpenseGroupsView, + RefreshFyleDimensionView, + SyncFyleDimensionView, +) urlpatterns = [ - path('expense_groups/', ExpenseGroupView.as_view()), - path('exportable_expense_groups/', ExportableExpenseGroupsView.as_view(), name='exportable-expense-groups'), - path('expense_groups/sync/', ExpenseGroupSyncView.as_view(), name='sync-expense-groups'), - path('expense_fields/', ExpenseFieldsView.as_view()), - path('expense_group_settings/', ExpenseGroupSettingsView.as_view()), - path('sync_dimensions/', SyncFyleDimensionView.as_view()), - path('refresh_dimensions/', RefreshFyleDimensionView.as_view()) + path("expense_groups/", ExpenseGroupView.as_view()), + path( + "exportable_expense_groups/", + ExportableExpenseGroupsView.as_view(), + name="exportable-expense-groups", + ), + path( + "expense_groups/sync/", + ExpenseGroupSyncView.as_view(), + name="sync-expense-groups", + ), + path("expense_fields/", ExpenseFieldsView.as_view()), + path("expense_group_settings/", ExpenseGroupSettingsView.as_view()), + path("sync_dimensions/", SyncFyleDimensionView.as_view()), + path("refresh_dimensions/", RefreshFyleDimensionView.as_view()), ] diff --git a/apps/fyle/views.py b/apps/fyle/views.py index 30685483..35699aa6 100644 --- a/apps/fyle/views.py +++ b/apps/fyle/views.py @@ -1,13 +1,12 @@ -from rest_framework.views import status from rest_framework import generics from rest_framework.response import Response +from rest_framework.views import status -from .tasks import get_task_log_and_fund_source, async_create_expense_groups -from .models import Expense, ExpenseGroup, ExpenseGroupSettings -from .serializers import ExpenseGroupSerializer, ExpenseFieldSerializer, \ - ExpenseGroupSettingsSerializer from apps.exceptions import handle_view_exceptions -from .actions import exportable_expense_group, get_expense_field, refresh_fyle_dimension, sync_fyle_dimension +from apps.fyle.actions import exportable_expense_group, get_expense_field, refresh_fyle_dimension, sync_fyle_dimension +from apps.fyle.models import ExpenseGroup, ExpenseGroupSettings +from apps.fyle.serializers import ExpenseFieldSerializer, ExpenseGroupSerializer, ExpenseGroupSettingsSerializer +from apps.fyle.tasks import async_create_expense_groups, get_task_log_and_fund_source from fyle_xero_api.utils import LookupFieldMixin @@ -15,18 +14,22 @@ class ExpenseGroupView(LookupFieldMixin, generics.ListCreateAPIView): """ List Fyle Expenses """ + serializer_class = ExpenseGroupSerializer - queryset = ExpenseGroup.objects.filter(tasklog__status='COMPLETE').order_by('-updated_at') + queryset = ExpenseGroup.objects.filter(tasklog__status="COMPLETE").order_by( + "-updated_at" + ) serializer_class = ExpenseGroupSerializer - filterset_fields = {'exported_at': {'gte', 'lte'}} + filterset_fields = {"exported_at": {"gte", "lte"}} class ExpenseGroupSettingsView(generics.RetrieveAPIView): """ Expense Group Settings View """ - lookup_field = 'workspace_id' - lookup_url_kwarg = 'workspace_id' + + lookup_field = "workspace_id" + lookup_url_kwarg = "workspace_id" serializer_class = ExpenseGroupSettingsSerializer queryset = ExpenseGroupSettings.objects.all() @@ -36,30 +39,25 @@ class ExpenseFieldsView(generics.ListAPIView): serializer_class = ExpenseFieldSerializer def get(self, request, *args, **kwargs): + expense_fields = get_expense_field(workspace_id=kwargs["workspace_id"]) - expense_fields = get_expense_field(workspace_id=kwargs['workspace_id']) - - return Response( - expense_fields, - status=status.HTTP_200_OK - ) + return Response(expense_fields, status=status.HTTP_200_OK) class ExpenseGroupSyncView(generics.CreateAPIView): """ Create expense groups """ + def post(self, request, *args, **kwargs): """ Post expense groups creation """ - task_log, fund_source = get_task_log_and_fund_source(kwargs['workspace_id']) + task_log, fund_source = get_task_log_and_fund_source(kwargs["workspace_id"]) - async_create_expense_groups(kwargs['workspace_id'], fund_source, task_log) + async_create_expense_groups(kwargs["workspace_id"], fund_source, task_log) - return Response( - status=status.HTTP_200_OK - ) + return Response(status=status.HTTP_200_OK) class SyncFyleDimensionView(generics.ListCreateAPIView): @@ -73,11 +71,9 @@ def post(self, request, *args, **kwargs): Sync Data From Fyle """ - sync_fyle_dimension(workspace_id=kwargs['workspace_id']) + sync_fyle_dimension(workspace_id=kwargs["workspace_id"]) - return Response( - status=status.HTTP_200_OK - ) + return Response(status=status.HTTP_200_OK) class RefreshFyleDimensionView(generics.ListCreateAPIView): @@ -91,22 +87,22 @@ def post(self, request, *args, **kwargs): Sync data from Fyle """ - refresh_fyle_dimension(workspace_id=kwargs['workspace_id']) + refresh_fyle_dimension(workspace_id=kwargs["workspace_id"]) - return Response( - status=status.HTTP_200_OK - ) + return Response(status=status.HTTP_200_OK) class ExportableExpenseGroupsView(generics.RetrieveAPIView): """ List Exportable Expense Groups """ + def get(self, request, *args, **kwargs): - - expense_group_ids = exportable_expense_group(workspace_id=kwargs['workspace_id']) + expense_group_ids = exportable_expense_group( + workspace_id=kwargs["workspace_id"] + ) return Response( - data={'exportable_expense_group_ids': expense_group_ids}, - status=status.HTTP_200_OK + data={"exportable_expense_group_ids": expense_group_ids}, + status=status.HTTP_200_OK, ) diff --git a/apps/mappings/__init__.py b/apps/mappings/__init__.py index c86ed84c..2b1156cc 100644 --- a/apps/mappings/__init__.py +++ b/apps/mappings/__init__.py @@ -1 +1 @@ -default_app_config = 'apps.mappings.apps.MappingsConfig' +default_app_config = "apps.mappings.apps.MappingsConfig" diff --git a/apps/mappings/actions.py b/apps/mappings/actions.py index 29facada..9add7d27 100644 --- a/apps/mappings/actions.py +++ b/apps/mappings/actions.py @@ -1,24 +1,20 @@ import logging -from .serializers import TenantMappingSerializer, GeneralMappingSerializer -from .models import TenantMapping, GeneralMapping -from apps.workspaces.models import XeroCredentials -from apps.xero.utils import XeroConnector -from apps.workspaces.models import Workspace -from ..workspaces.models import WorkspaceGeneralSettings - -from django_q.tasks import Chain from xerosdk.exceptions import UnsuccessfulAuthentication -from .utils import MappingUtils - +from apps.mappings.models import TenantMapping +from apps.mappings.utils import MappingUtils +from apps.workspaces.models import Workspace, XeroCredentials +from apps.xero.utils import XeroConnector logger = logging.getLogger(__name__) -def tenant_mapping_view(workspace_id, tenant_mapping_payload): +def tenant_mapping_view(workspace_id, tenant_mapping_payload): mapping_utils = MappingUtils(workspace_id) - tenant_mapping_object = mapping_utils.create_or_update_tenant_mapping(tenant_mapping_payload) + tenant_mapping_object = mapping_utils.create_or_update_tenant_mapping( + tenant_mapping_payload + ) xero_credentials = XeroCredentials.objects.filter(workspace_id=workspace_id).first() workspace = Workspace.objects.filter(id=workspace_id).first() @@ -26,23 +22,29 @@ def tenant_mapping_view(workspace_id, tenant_mapping_payload): xero_connector = XeroConnector(xero_credentials, workspace_id=workspace_id) tenant_mapping = TenantMapping.objects.filter(workspace_id=workspace_id).first() company_info = xero_connector.get_organisations()[0] - workspace.xero_currency = company_info['BaseCurrency'] + workspace.xero_currency = company_info["BaseCurrency"] workspace.save() - xero_credentials.country = company_info['CountryCode'] + xero_credentials.country = company_info["CountryCode"] xero_credentials.save() if tenant_mapping and not tenant_mapping.connection_id: connections = xero_connector.connection.connections.get_all() - connection = list(filter(lambda connection: connection['tenantId'] == tenant_mapping.tenant_id, connections)) + connection = list( + filter( + lambda connection: connection["tenantId"] + == tenant_mapping.tenant_id, + connections, + ) + ) if connection: - tenant_mapping.connection_id = connection[0]['id'] + tenant_mapping.connection_id = connection[0]["id"] tenant_mapping.save() except UnsuccessfulAuthentication: - logger.info('Xero refresh token is invalid for workspace_id - %s', workspace_id) + logger.info("Xero refresh token is invalid for workspace_id - %s", workspace_id) except Exception: - logger.info('Error while fetching company information') - + logger.info("Error while fetching company information") + return tenant_mapping_object diff --git a/apps/mappings/apps.py b/apps/mappings/apps.py index 4d0b6683..4ba60859 100644 --- a/apps/mappings/apps.py +++ b/apps/mappings/apps.py @@ -2,8 +2,8 @@ class MappingsConfig(AppConfig): - name = 'apps.mappings' + name = "apps.mappings" def ready(self): super(MappingsConfig, self).ready() - import apps.mappings.signals + import apps.mappings.signals # noqa: F401 diff --git a/apps/mappings/constants.py b/apps/mappings/constants.py index 7597c83f..8879e77b 100644 --- a/apps/mappings/constants.py +++ b/apps/mappings/constants.py @@ -1,45 +1,45 @@ FYLE_EXPENSE_SYSTEM_FIELDS = [ - 'employee id', - 'organisation name', - 'employee name', - 'employee email', - 'expense date', - 'expense id', - 'report id', - 'employee id', - 'department', - 'state', - 'reporter', - 'report', - 'purpose', - 'vendor', - 'category', - 'category code', - 'mileage distance', - 'mileage unit', - 'flight from city', - 'flight to city', - 'flight from date', - 'flight to date', - 'flight from class', - 'flight to class', - 'hotel checkin', - 'hotel checkout', - 'hotel location', - 'hotel breakfast', - 'currency', - 'amount', - 'foreign currency', - 'foreign amount', - 'tax', - 'approver', - 'project', - 'billable', - 'cost center', - 'cost center code', - 'approved on', - 'reimbursable', - 'receipts', - 'paid date', - 'expense created date' + "employee id", + "organisation name", + "employee name", + "employee email", + "expense date", + "expense id", + "report id", + "employee id", + "department", + "state", + "reporter", + "report", + "purpose", + "vendor", + "category", + "category code", + "mileage distance", + "mileage unit", + "flight from city", + "flight to city", + "flight from date", + "flight to date", + "flight from class", + "flight to class", + "hotel checkin", + "hotel checkout", + "hotel location", + "hotel breakfast", + "currency", + "amount", + "foreign currency", + "foreign amount", + "tax", + "approver", + "project", + "billable", + "cost center", + "cost center code", + "approved on", + "reimbursable", + "receipts", + "paid date", + "expense created date", ] diff --git a/apps/mappings/exceptions.py b/apps/mappings/exceptions.py index 6531f2bc..b50c8ed0 100644 --- a/apps/mappings/exceptions.py +++ b/apps/mappings/exceptions.py @@ -1,63 +1,69 @@ import logging import traceback -from xerosdk.exceptions import WrongParamsError as XeroWrongParamsError, InvalidTokenError as XeroInvalidTokenError, UnsuccessfulAuthentication, InvalidGrant -from fyle.platform.exceptions import WrongParamsError, InvalidTokenError, InternalServerError, PlatformError + +from fyle.platform.exceptions import InternalServerError, InvalidTokenError, PlatformError, WrongParamsError +from xerosdk.exceptions import InvalidGrant +from xerosdk.exceptions import InvalidTokenError as XeroInvalidTokenError +from xerosdk.exceptions import UnsuccessfulAuthentication +from xerosdk.exceptions import WrongParamsError as XeroWrongParamsError + from apps.workspaces.models import XeroCredentials logger = logging.getLogger(__name__) logger.level = logging.INFO + def handle_import_exceptions(task_name): def decorator(func): def new_fn(workspace_id, *args): error = { - 'task': task_name, - 'workspace_id': workspace_id, - 'alert': False, - 'message': None, - 'response': None + "task": task_name, + "workspace_id": workspace_id, + "alert": False, + "message": None, + "response": None, } try: return func(workspace_id, *args) except InvalidTokenError: - error['message'] = 'Invalid Fyle refresh token' - + error["message"] = "Invalid Fyle refresh token" + except XeroCredentials.DoesNotExist: - error['message'] = 'Xero Credentials not found' - + error["message"] = "Xero Credentials not found" + except WrongParamsError as exception: - error['message'] = exception.message - error['response'] = exception.response - error['alert'] = True - + error["message"] = exception.message + error["response"] = exception.response + error["alert"] = True + except InternalServerError as exception: - error['message'] = 'Internal server error while importing to Fyle' - error['response'] = exception.__dict__ - + error["message"] = "Internal server error while importing to Fyle" + error["response"] = exception.__dict__ + except (XeroWrongParamsError, XeroInvalidTokenError) as exception: - error['message'] = 'Xero token expired' - error['response'] = exception.__dict__ - + error["message"] = "Xero token expired" + error["response"] = exception.__dict__ + except PlatformError as exception: - error['message'] = 'Platform error while importing to Fyle' - error['response'] = exception.response - + error["message"] = "Platform error while importing to Fyle" + error["response"] = exception.response + except (UnsuccessfulAuthentication, InvalidGrant): - error['message'] = 'Xero refresh token is invalid' - + error["message"] = "Xero refresh token is invalid" + except Exception: response = traceback.format_exc() - error['message'] = 'Something went wrong' - error['response'] = response - error['alert'] = True - - if error['alert']: + error["message"] = "Something went wrong" + error["response"] = response + error["alert"] = True + + if error["alert"]: logger.error(error) - + else: logger.info(error) - + return new_fn return decorator diff --git a/apps/mappings/helpers.py b/apps/mappings/helpers.py index 8f28bf15..452cb13a 100644 --- a/apps/mappings/helpers.py +++ b/apps/mappings/helpers.py @@ -1,8 +1,8 @@ from datetime import datetime from django_q.models import Schedule - from fyle_accounting_mappings.models import MappingSetting + from apps.workspaces.models import WorkspaceGeneralSettings @@ -11,20 +11,30 @@ def schedule_or_delete_fyle_import_tasks(configuration: WorkspaceGeneralSettings :param configuration: WorkspaceGeneralSettings Instance :return: None """ - project_mapping = MappingSetting.objects.filter(source_field='PROJECT', workspace_id=configuration.workspace_id).first() - if configuration.import_categories or (project_mapping and project_mapping.import_to_fyle) or configuration.import_suppliers_as_merchants: + project_mapping = MappingSetting.objects.filter( + source_field="PROJECT", workspace_id=configuration.workspace_id + ).first() + if ( + configuration.import_categories + or (project_mapping and project_mapping.import_to_fyle) + or configuration.import_suppliers_as_merchants + ): start_datetime = datetime.now() Schedule.objects.update_or_create( - func='apps.mappings.tasks.auto_import_and_map_fyle_fields', - args='{}'.format(configuration.workspace_id), + func="apps.mappings.tasks.auto_import_and_map_fyle_fields", + args="{}".format(configuration.workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': start_datetime - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": start_datetime, + }, ) - elif not configuration.import_categories and not (project_mapping and project_mapping.import_to_fyle) and not configuration.import_suppliers_as_merchants: + elif ( + not configuration.import_categories + and not (project_mapping and project_mapping.import_to_fyle) + and not configuration.import_suppliers_as_merchants + ): Schedule.objects.filter( - func='apps.mappings.tasks.auto_import_and_map_fyle_fields', - args='{}'.format(configuration.workspace_id) + func="apps.mappings.tasks.auto_import_and_map_fyle_fields", + args="{}".format(configuration.workspace_id), ).delete() diff --git a/apps/mappings/models.py b/apps/mappings/models.py index 77f74a8c..f8131711 100644 --- a/apps/mappings/models.py +++ b/apps/mappings/models.py @@ -2,6 +2,7 @@ Mapping Models """ from django.db import models + from apps.workspaces.models import Workspace @@ -9,17 +10,24 @@ class TenantMapping(models.Model): """ Tenant Mapping """ + id = models.AutoField(primary_key=True) - tenant_name = models.CharField(max_length=255, help_text='Xero Tenant name') - tenant_id = models.CharField(max_length=255, help_text='Xero Tenant id') - connection_id = models.CharField(max_length=255, help_text='Xero Connection id', null=True, blank=True) - workspace = models.OneToOneField(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') + tenant_name = models.CharField(max_length=255, help_text="Xero Tenant name") + tenant_id = models.CharField(max_length=255, help_text="Xero Tenant id") + connection_id = models.CharField( + max_length=255, help_text="Xero Connection id", null=True, blank=True + ) + workspace = models.OneToOneField( + Workspace, on_delete=models.PROTECT, help_text="Reference to Workspace model" + ) + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" + ) + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") class Meta: - unique_together = ('tenant_name', 'workspace') - db_table = 'tenant_mappings' + unique_together = ("tenant_name", "workspace") + db_table = "tenant_mappings" @staticmethod def get_tenant_details(workspace_id): @@ -30,18 +38,37 @@ class GeneralMapping(models.Model): """ General Mapping """ + id = models.AutoField(primary_key=True) - bank_account_name = models.CharField(max_length=255, help_text='Xero bank account name', null=True) - bank_account_id = models.CharField(max_length=255, help_text='Xero bank account id', null=True) - payment_account_name = models.CharField(max_length=255, help_text='Xero Payment Account name', null=True) - payment_account_id = models.CharField(max_length=255, help_text='Xero payment account id', null=True) - workspace = models.OneToOneField(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model', - related_name='general_mappings') - default_tax_code_name = models.CharField(max_length=255, help_text='Xero default Tax Code name', null=True) - default_tax_code_id = models.CharField(max_length=255, help_text='Xero default Tax Code ID', null=True) - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') + bank_account_name = models.CharField( + max_length=255, help_text="Xero bank account name", null=True + ) + bank_account_id = models.CharField( + max_length=255, help_text="Xero bank account id", null=True + ) + payment_account_name = models.CharField( + max_length=255, help_text="Xero Payment Account name", null=True + ) + payment_account_id = models.CharField( + max_length=255, help_text="Xero payment account id", null=True + ) + workspace = models.OneToOneField( + Workspace, + on_delete=models.PROTECT, + help_text="Reference to Workspace model", + related_name="general_mappings", + ) + default_tax_code_name = models.CharField( + max_length=255, help_text="Xero default Tax Code name", null=True + ) + default_tax_code_id = models.CharField( + max_length=255, help_text="Xero default Tax Code ID", null=True + ) + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" + ) + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") class Meta: - unique_together = ('bank_account_name', 'workspace') - db_table = 'general_mappings' + unique_together = ("bank_account_name", "workspace") + db_table = "general_mappings" diff --git a/apps/mappings/queue.py b/apps/mappings/queue.py index dd2a3859..08190ab7 100644 --- a/apps/mappings/queue.py +++ b/apps/mappings/queue.py @@ -1,23 +1,24 @@ -from django_q.models import Schedule from datetime import datetime, timedelta + +from django_q.models import Schedule from fyle_accounting_mappings.models import MappingSetting def schedule_auto_map_employees(employee_mapping_preference: str, workspace_id: str): if employee_mapping_preference: Schedule.objects.update_or_create( - func='apps.mappings.tasks.async_auto_map_employees', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.async_auto_map_employees", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': datetime.now() - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": datetime.now(), + }, ) else: schedule: Schedule = Schedule.objects.filter( - func='apps.mappings.tasks.async_auto_map_employees', - args='{}'.format(workspace_id) + func="apps.mappings.tasks.async_auto_map_employees", + args="{}".format(workspace_id), ).first() if schedule: @@ -27,18 +28,18 @@ def schedule_auto_map_employees(employee_mapping_preference: str, workspace_id: def schedule_cost_centers_creation(import_to_fyle, workspace_id: int): if import_to_fyle: schedule, _ = Schedule.objects.update_or_create( - func='apps.mappings.tasks.auto_create_cost_center_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_cost_center_mappings", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': datetime.now() - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": datetime.now(), + }, ) else: schedule: Schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_cost_center_mappings', - args='{}'.format(workspace_id) + func="apps.mappings.tasks.auto_create_cost_center_mappings", + args="{}".format(workspace_id), ).first() if schedule: @@ -48,18 +49,18 @@ def schedule_cost_centers_creation(import_to_fyle, workspace_id: int): def schedule_tax_groups_creation(import_tax_codes, workspace_id): if import_tax_codes: schedule, _ = Schedule.objects.update_or_create( - func='apps.mappings.tasks.auto_create_tax_codes_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_tax_codes_mappings", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': datetime.now() - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": datetime.now(), + }, ) else: schedule: Schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_tax_codes_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_tax_codes_mappings", + args="{}".format(workspace_id), ).first() if schedule: @@ -73,18 +74,18 @@ def schedule_fyle_attributes_creation(workspace_id: int): if mapping_settings: schedule, _ = Schedule.objects.get_or_create( - func='apps.mappings.tasks.async_auto_create_custom_field_mappings', - args='{0}'.format(workspace_id), + func="apps.mappings.tasks.async_auto_create_custom_field_mappings", + args="{0}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': datetime.now() + timedelta(hours=24) - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": datetime.now() + timedelta(hours=24), + }, ) else: schedule: Schedule = Schedule.objects.filter( - func='apps.mappings.tasks.async_auto_create_custom_field_mappings', - args=workspace_id + func="apps.mappings.tasks.async_auto_create_custom_field_mappings", + args=workspace_id, ).first() if schedule: diff --git a/apps/mappings/serializers.py b/apps/mappings/serializers.py index 4c68b3ed..a4103bba 100644 --- a/apps/mappings/serializers.py +++ b/apps/mappings/serializers.py @@ -1,21 +1,23 @@ from rest_framework import serializers -from .models import TenantMapping, GeneralMapping +from apps.mappings.models import GeneralMapping, TenantMapping class TenantMappingSerializer(serializers.ModelSerializer): """ Tenant mappings group serializer """ + class Meta: model = TenantMapping - fields = '__all__' + fields = "__all__" class GeneralMappingSerializer(serializers.ModelSerializer): """ General mappings group serializer """ + class Meta: model = GeneralMapping - fields = '__all__' + fields = "__all__" diff --git a/apps/mappings/signals.py b/apps/mappings/signals.py index 346a245b..c8d93433 100644 --- a/apps/mappings/signals.py +++ b/apps/mappings/signals.py @@ -1,37 +1,33 @@ """ Mappings Signal """ -from django.db.models import Q -from django.db.models.signals import post_save, pre_save -from django.dispatch import receiver -from datetime import datetime +from django.db.models.signals import post_save, pre_save +from django.dispatch import receiver from django_q.tasks import async_task +from fyle_accounting_mappings.models import Mapping, MappingSetting -from fyle_accounting_mappings.models import MappingSetting, ExpenseAttribute, Mapping -from apps.tasks.models import Error +from apps.mappings.helpers import schedule_or_delete_fyle_import_tasks +from apps.mappings.models import TenantMapping from apps.mappings.queue import schedule_cost_centers_creation, schedule_fyle_attributes_creation from apps.mappings.tasks import upload_attributes_to_fyle +from apps.tasks.models import Error from apps.workspaces.models import WorkspaceGeneralSettings -from django.db.models.signals import post_save -from django.dispatch import receiver - -from .models import TenantMapping -from .helpers import schedule_or_delete_fyle_import_tasks @receiver(post_save, sender=Mapping) def resolve_post_mapping_errors(sender, instance: Mapping, **kwargs): """ Resolve errors after mapping is created """ - if instance.source_type in ('CATEGORY', 'EMPLOYEE'): + if instance.source_type in ("CATEGORY", "EMPLOYEE"): error = Error.objects.filter(expense_attribute_id=instance.source_id).first() if error: error.is_resolved = True error.save() + @receiver(post_save, sender=MappingSetting) def run_post_mapping_settings_triggers(sender, instance: MappingSetting, **kwargs): """ @@ -39,12 +35,16 @@ def run_post_mapping_settings_triggers(sender, instance: MappingSetting, **kwarg :param instance: Row instance of Sender Class :return: None """ - workspace_general_settings = WorkspaceGeneralSettings.objects.filter(workspace_id=instance.workspace_id).first() - if instance.source_field == 'PROJECT': + workspace_general_settings = WorkspaceGeneralSettings.objects.filter( + workspace_id=instance.workspace_id + ).first() + if instance.source_field == "PROJECT": schedule_or_delete_fyle_import_tasks(workspace_general_settings) - if instance.source_field == 'COST_CENTER': - schedule_cost_centers_creation(instance.import_to_fyle, int(instance.workspace_id)) + if instance.source_field == "COST_CENTER": + schedule_cost_centers_creation( + instance.import_to_fyle, int(instance.workspace_id) + ) if instance.is_custom: schedule_fyle_attributes_creation(int(instance.workspace_id)) @@ -57,25 +57,33 @@ def run_pre_mapping_settings_triggers(sender, instance: MappingSetting, **kwargs :param instance: Row instance of Sender Class :return: None """ - default_attributes = ['EMPLOYEE', 'CATEGORY', 'PROJECT', 'COST_CENTER', 'CORPORATE_CARD', 'TAX_GROUP'] + default_attributes = [ + "EMPLOYEE", + "CATEGORY", + "PROJECT", + "COST_CENTER", + "CORPORATE_CARD", + "TAX_GROUP", + ] - instance.source_field = instance.source_field.upper().replace(' ', '_') + instance.source_field = instance.source_field.upper().replace(" ", "_") if instance.source_field not in default_attributes: upload_attributes_to_fyle( workspace_id=int(instance.workspace_id), xero_attribute_type=instance.destination_field, fyle_attribute_type=instance.source_field, - source_placeholder=instance.source_placeholder + source_placeholder=instance.source_placeholder, ) async_task( - 'apps.mappings.tasks.auto_create_expense_fields_mappings', + "apps.mappings.tasks.auto_create_expense_fields_mappings", int(instance.workspace_id), instance.destination_field, - instance.source_field + instance.source_field, ) + @receiver(post_save, sender=TenantMapping) def run_post_tenant_mapping_trigger(sender, instance: TenantMapping, **kwargs): """ @@ -83,5 +91,5 @@ def run_post_tenant_mapping_trigger(sender, instance: TenantMapping, **kwargs): :param instance: Row Instance of Sender Class :return: None """ - async_task('apps.xero.tasks.create_missing_currency', int(instance.workspace_id)) - async_task('apps.xero.tasks.update_xero_short_code', int(instance.workspace_id)) + async_task("apps.xero.tasks.create_missing_currency", int(instance.workspace_id)) + async_task("apps.xero.tasks.update_xero_short_code", int(instance.workspace_id)) diff --git a/apps/mappings/tasks.py b/apps/mappings/tasks.py index 26077e33..8acf8ce6 100644 --- a/apps/mappings/tasks.py +++ b/apps/mappings/tasks.py @@ -1,65 +1,80 @@ import logging -from datetime import datetime, timedelta +from typing import Dict, List -from typing import List, Dict - -from django_q.models import Schedule from django_q.tasks import Chain - +from fyle_accounting_mappings.models import DestinationAttribute, ExpenseAttribute, Mapping, MappingSetting from fyle_integrations_platform_connector import PlatformConnector -from fyle_accounting_mappings.models import Mapping, MappingSetting, DestinationAttribute, ExpenseAttribute - -from .exceptions import handle_import_exceptions - -from apps.xero.utils import XeroConnector +from apps.mappings.constants import FYLE_EXPENSE_SYSTEM_FIELDS +from apps.mappings.exceptions import handle_import_exceptions from apps.tasks.models import Error -from apps.workspaces.models import XeroCredentials, FyleCredential, WorkspaceGeneralSettings -from apps.mappings.models import TenantMapping -from .constants import FYLE_EXPENSE_SYSTEM_FIELDS +from apps.workspaces.models import FyleCredential, WorkspaceGeneralSettings, XeroCredentials +from apps.xero.utils import XeroConnector logger = logging.getLogger(__name__) logger.level = logging.INFO DEFAULT_FYLE_CATEGORIES = [ - 'Activity', 'Train', 'Fuel', 'Snacks', 'Office Supplies', 'Utility', 'Entertainment', 'Others', 'Mileage', 'Food', - 'Per Diem', 'Bus', 'Internet', 'Taxi', 'Courier', 'Hotel', 'Professional Services', 'Phone', 'Office Party', - 'Flight', 'Software', 'Parking', 'Toll Charge', 'Tax', 'Training', 'Unspecified' + "Activity", + "Train", + "Fuel", + "Snacks", + "Office Supplies", + "Utility", + "Entertainment", + "Others", + "Mileage", + "Food", + "Per Diem", + "Bus", + "Internet", + "Taxi", + "Courier", + "Hotel", + "Professional Services", + "Phone", + "Office Party", + "Flight", + "Software", + "Parking", + "Toll Charge", + "Tax", + "Training", + "Unspecified", ] -def disable_expense_attributes(source_field, destination_field, workspace_id): - filter = { - 'mapping__isnull': False, - 'mapping__destination_type': destination_field - } +def disable_expense_attributes(source_field, destination_field, workspace_id): + filter = {"mapping__isnull": False, "mapping__destination_type": destination_field} destination_attribute_ids = DestinationAttribute.objects.filter( attribute_type=destination_field, active=False, workspace_id=workspace_id, **filter - ).values_list('id',flat=True) - - filter = { - 'mapping__destination_id__in': destination_attribute_ids - } + ).values_list("id", flat=True) + + filter = {"mapping__destination_id__in": destination_attribute_ids} expense_attributes_to_disable = ExpenseAttribute.objects.filter( - attribute_type=source_field, - active=True, - **filter + attribute_type=source_field, active=True, **filter ) expense_attributes_ids = [] if expense_attributes_to_disable: - expense_attributes_ids = [expense_attribute.id for expense_attribute in expense_attributes_to_disable] + expense_attributes_ids = [ + expense_attribute.id for expense_attribute in expense_attributes_to_disable + ] expense_attributes_to_disable.update(active=False) - + return expense_attributes_ids + def resolve_expense_attribute_errors( - source_attribute_type: str, workspace_id: int, destination_attribute_type: str = None): + source_attribute_type: str, + workspace_id: int, + destination_attribute_type: str = None, +): """ Resolve Expense Attribute Errors :return: None @@ -67,18 +82,20 @@ def resolve_expense_attribute_errors( errored_attribute_ids: List[int] = Error.objects.filter( is_resolved=False, workspace_id=workspace_id, - type='{}_MAPPING'.format(source_attribute_type) - ).values_list('expense_attribute_id', flat=True) + type="{}_MAPPING".format(source_attribute_type), + ).values_list("expense_attribute_id", flat=True) if errored_attribute_ids: mapped_attribute_ids = [] mapped_attribute_ids: List[int] = Mapping.objects.filter( source_id__in=errored_attribute_ids - ).values_list('source_id', flat=True) + ).values_list("source_id", flat=True) if mapped_attribute_ids: - Error.objects.filter(expense_attribute_id__in=mapped_attribute_ids).update(is_resolved=True) + Error.objects.filter(expense_attribute_id__in=mapped_attribute_ids).update( + is_resolved=True + ) def remove_duplicates(xero_attributes: List[DestinationAttribute]): @@ -94,7 +111,12 @@ def remove_duplicates(xero_attributes: List[DestinationAttribute]): return unique_attributes -def create_fyle_categories_payload(categories: List[DestinationAttribute], workspace_id: int, category_map: Dict, updated_categories: List[ExpenseAttribute] = None): +def create_fyle_categories_payload( + categories: List[DestinationAttribute], + workspace_id: int, + category_map: Dict, + updated_categories: List[ExpenseAttribute] = None, +): """ Create Fyle Categories Payload from Xero Categories :param workspace_id: Workspace integer id @@ -105,84 +127,107 @@ def create_fyle_categories_payload(categories: List[DestinationAttribute], works if updated_categories: for category in updated_categories: - destination_id_of_category = category.mapping.first().destination.destination_id - payload.append({ - 'id': category.source_id, - 'name': category.value, - 'code': destination_id_of_category, - 'is_enabled': category.active - }) + destination_id_of_category = ( + category.mapping.first().destination.destination_id + ) + payload.append( + { + "id": category.source_id, + "name": category.value, + "code": destination_id_of_category, + "is_enabled": category.active, + } + ) else: for category in categories: if category.value.lower() not in category_map: - payload.append({ - 'name': category.value, - 'code': category.destination_id, - 'is_enabled': category.active - }) + payload.append( + { + "name": category.value, + "code": category.destination_id, + "is_enabled": category.active, + } + ) return payload + def get_all_categories_from_fyle(platform: PlatformConnector): - categories_generator = platform.connection.v1beta.admin.categories.list_all(query_params={ - 'order': 'id.desc' - }) + categories_generator = platform.connection.v1beta.admin.categories.list_all( + query_params={"order": "id.desc"} + ) categories = [] for response in categories_generator: - if response.get('data'): - categories.extend(response['data']) - + if response.get("data"): + categories.extend(response["data"]) + category_name_map = {} for category in categories: - if category['sub_category'] and category['name'] != category['sub_category']: - category['name'] = '{0} / {1}'.format(category['name'], category['sub_category']) - category_name_map[category['name'].lower()] = category + if category["sub_category"] and category["name"] != category["sub_category"]: + category["name"] = "{0} / {1}".format( + category["name"], category["sub_category"] + ) + category_name_map[category["name"].lower()] = category return category_name_map + def upload_categories_to_fyle(workspace_id): """ Upload categories to Fyle """ - fyle_credentials: FyleCredential = FyleCredential.objects.get(workspace_id=workspace_id) - xero_credentials: XeroCredentials = XeroCredentials.get_active_xero_credentials(workspace_id) - general_settings = WorkspaceGeneralSettings.objects.filter(workspace_id=workspace_id).first() + fyle_credentials: FyleCredential = FyleCredential.objects.get( + workspace_id=workspace_id + ) + xero_credentials: XeroCredentials = XeroCredentials.get_active_xero_credentials( + workspace_id + ) + general_settings = WorkspaceGeneralSettings.objects.filter( + workspace_id=workspace_id + ).first() platform = PlatformConnector(fyle_credentials) category_map = get_all_categories_from_fyle(platform=platform) xero_connection = XeroConnector( - credentials_object=xero_credentials, - workspace_id=workspace_id + credentials_object=xero_credentials, workspace_id=workspace_id ) platform.categories.sync() xero_connection.sync_accounts() xero_attributes = DestinationAttribute.objects.filter( workspace_id=workspace_id, - attribute_type='ACCOUNT', - detail__account_type__in=general_settings.charts_of_accounts + attribute_type="ACCOUNT", + detail__account_type__in=general_settings.charts_of_accounts, ).all() xero_attributes = remove_duplicates(xero_attributes) - fyle_payload: List[Dict] = create_fyle_categories_payload(xero_attributes, workspace_id, category_map) + fyle_payload: List[Dict] = create_fyle_categories_payload( + xero_attributes, workspace_id, category_map + ) if fyle_payload: platform.categories.post_bulk(fyle_payload) platform.categories.sync() - - category_ids_to_be_changed = disable_expense_attributes('CATEGORY', 'ACCOUNT', workspace_id) + + category_ids_to_be_changed = disable_expense_attributes( + "CATEGORY", "ACCOUNT", workspace_id + ) if category_ids_to_be_changed: - expense_attributes = ExpenseAttribute.objects.filter(id__in=category_ids_to_be_changed) - fyle_payload: List[Dict] = create_fyle_categories_payload([], workspace_id,category_map,updated_categories=expense_attributes) + expense_attributes = ExpenseAttribute.objects.filter( + id__in=category_ids_to_be_changed + ) + fyle_payload: List[Dict] = create_fyle_categories_payload( + [], workspace_id, category_map, updated_categories=expense_attributes + ) platform.categories.post_bulk(fyle_payload) platform.categories.sync() return xero_attributes -@handle_import_exceptions(task_name='auto create category mappings') +@handle_import_exceptions(task_name="auto create category mappings") def auto_create_category_mappings(workspace_id): """ Create Category Mappings @@ -191,16 +236,17 @@ def auto_create_category_mappings(workspace_id): fyle_categories = upload_categories_to_fyle(workspace_id=workspace_id) - Mapping.bulk_create_mappings(fyle_categories, 'CATEGORY', 'ACCOUNT', workspace_id) + Mapping.bulk_create_mappings(fyle_categories, "CATEGORY", "ACCOUNT", workspace_id) - resolve_expense_attribute_errors(source_attribute_type='CATEGORY', workspace_id=workspace_id) + resolve_expense_attribute_errors( + source_attribute_type="CATEGORY", workspace_id=workspace_id + ) return [] -@handle_import_exceptions(task_name='async auto map employees') +@handle_import_exceptions(task_name="async auto map employees") def async_auto_map_employees(workspace_id: int): - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) employee_mapping_preference = general_settings.auto_map_employees fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) @@ -212,29 +258,34 @@ def async_auto_map_employees(workspace_id: int): platform.employees.sync() xero_connection.sync_contacts() - Mapping.auto_map_employees('CONTACT', employee_mapping_preference, workspace_id) + Mapping.auto_map_employees("CONTACT", employee_mapping_preference, workspace_id) - resolve_expense_attribute_errors(source_attribute_type='EMPLOYEE', workspace_id=workspace_id) + resolve_expense_attribute_errors( + source_attribute_type="EMPLOYEE", workspace_id=workspace_id + ) def sync_xero_attributes(xero_attribute_type: str, workspace_id: int): - xero_credentials: XeroCredentials = XeroCredentials.get_active_xero_credentials(workspace_id) + xero_credentials: XeroCredentials = XeroCredentials.get_active_xero_credentials( + workspace_id + ) xero_connection = XeroConnector( - credentials_object=xero_credentials, - workspace_id=workspace_id + credentials_object=xero_credentials, workspace_id=workspace_id ) - if xero_attribute_type == 'ITEM': + if xero_attribute_type == "ITEM": xero_connection.sync_items() - elif xero_attribute_type == 'TAX_CODE': + elif xero_attribute_type == "TAX_CODE": xero_connection.sync_tax_codes() - elif xero_attribute_type == 'CUSTOMER': + elif xero_attribute_type == "CUSTOMER": xero_connection.sync_customers() else: xero_connection.sync_tracking_categories() -def create_fyle_cost_centers_payload(xero_attributes: List[DestinationAttribute], existing_fyle_cost_centers: list): +def create_fyle_cost_centers_payload( + xero_attributes: List[DestinationAttribute], existing_fyle_cost_centers: list +): """ Create Fyle Cost Centers Payload from xero Objects :param workspace_id: Workspace integer id @@ -242,28 +293,37 @@ def create_fyle_cost_centers_payload(xero_attributes: List[DestinationAttribute] :param fyle_attribute: Fyle Attribute :return: Fyle Cost Centers Payload """ - existing_fyle_cost_centers = [cost_center.lower() for cost_center in existing_fyle_cost_centers] + existing_fyle_cost_centers = [ + cost_center.lower() for cost_center in existing_fyle_cost_centers + ] fyle_cost_centers_payload = [] for xero_attribute in xero_attributes: if xero_attribute.value.lower() not in existing_fyle_cost_centers: - fyle_cost_centers_payload.append({ - 'name': xero_attribute.value, - 'is_enabled': True if xero_attribute.active is None else xero_attribute.active, - 'description': 'Cost Center - {0}, Id - {1}'.format( - xero_attribute.value, - xero_attribute.destination_id - ) - }) + fyle_cost_centers_payload.append( + { + "name": xero_attribute.value, + "is_enabled": True + if xero_attribute.active is None + else xero_attribute.active, + "description": "Cost Center - {0}, Id - {1}".format( + xero_attribute.value, xero_attribute.destination_id + ), + } + ) return fyle_cost_centers_payload -def post_cost_centers_in_batches(platform: PlatformConnector, workspace_id: int, xero_attribute_type: str): +def post_cost_centers_in_batches( + platform: PlatformConnector, workspace_id: int, xero_attribute_type: str +): existing_cost_center_names = ExpenseAttribute.objects.filter( - attribute_type='COST_CENTER', workspace_id=workspace_id).values_list('value', flat=True) + attribute_type="COST_CENTER", workspace_id=workspace_id + ).values_list("value", flat=True) xero_attribute_count = DestinationAttribute.objects.filter( - attribute_type=xero_attribute_type, workspace_id=workspace_id).count() + attribute_type=xero_attribute_type, workspace_id=workspace_id + ).count() page_size = 200 @@ -271,43 +331,53 @@ def post_cost_centers_in_batches(platform: PlatformConnector, workspace_id: int, limit = offset + page_size paginated_xero_attributes = DestinationAttribute.objects.filter( attribute_type=xero_attribute_type, workspace_id=workspace_id - ).order_by('value', 'id')[offset:limit] + ).order_by("value", "id")[offset:limit] paginated_xero_attributes = remove_duplicates(paginated_xero_attributes) fyle_payload: List[Dict] = create_fyle_cost_centers_payload( - paginated_xero_attributes, existing_cost_center_names) + paginated_xero_attributes, existing_cost_center_names + ) if fyle_payload: platform.cost_centers.post_bulk(fyle_payload) platform.cost_centers.sync() - Mapping.bulk_create_mappings(paginated_xero_attributes, 'COST_CENTER', xero_attribute_type, workspace_id) + Mapping.bulk_create_mappings( + paginated_xero_attributes, "COST_CENTER", xero_attribute_type, workspace_id + ) -@handle_import_exceptions(task_name='auto create cost center mappings') +@handle_import_exceptions(task_name="auto create cost center mappings") def auto_create_cost_center_mappings(workspace_id: int): """ Create Cost Center Mappings """ - fyle_credentials: FyleCredential = FyleCredential.objects.get(workspace_id=workspace_id) + fyle_credentials: FyleCredential = FyleCredential.objects.get( + workspace_id=workspace_id + ) platform = PlatformConnector(fyle_credentials) mapping_setting = MappingSetting.objects.get( - source_field='COST_CENTER', import_to_fyle=True, workspace_id=workspace_id + source_field="COST_CENTER", import_to_fyle=True, workspace_id=workspace_id ) platform.cost_centers.sync() sync_xero_attributes(mapping_setting.destination_field, workspace_id=workspace_id) - post_cost_centers_in_batches(platform, workspace_id, mapping_setting.destination_field) + post_cost_centers_in_batches( + platform, workspace_id, mapping_setting.destination_field + ) -def create_fyle_projects_payload(projects: List[DestinationAttribute], existing_project_names: list, - updated_projects: List[ExpenseAttribute] = None): +def create_fyle_projects_payload( + projects: List[DestinationAttribute], + existing_project_names: list, + updated_projects: List[ExpenseAttribute] = None, +): """ Create Fyle Projects Payload from Xero Projects and Customers :param projects: Xero Projects @@ -316,56 +386,63 @@ def create_fyle_projects_payload(projects: List[DestinationAttribute], existing_ payload = [] if updated_projects: for project in updated_projects: - destination_id_of_project = project.mapping.first().destination.destination_id - payload.append({ - 'id': project.source_id, - 'name': project.value, - 'code': destination_id_of_project, - 'description': 'Project - {0}, Id - {1}'.format( - project.value, - destination_id_of_project - ), - 'is_enabled': project.active - }) + destination_id_of_project = ( + project.mapping.first().destination.destination_id + ) + payload.append( + { + "id": project.source_id, + "name": project.value, + "code": destination_id_of_project, + "description": "Project - {0}, Id - {1}".format( + project.value, destination_id_of_project + ), + "is_enabled": project.active, + } + ) else: - existing_project_names = [project_name.lower() for project_name in existing_project_names] + existing_project_names = [ + project_name.lower() for project_name in existing_project_names + ] for project in projects: if project.value.lower() not in existing_project_names: - payload.append({ - 'name': project.value, - 'code': project.destination_id, - 'description': 'Project - {0}, Id - {1}'.format( - project.value, - project.destination_id - ), - 'is_enabled': True if project.active is None else project.active - }) + payload.append( + { + "name": project.value, + "code": project.destination_id, + "description": "Project - {0}, Id - {1}".format( + project.value, project.destination_id + ), + "is_enabled": True + if project.active is None + else project.active, + } + ) return payload -def disable_renamed_projects(workspace_id,destination_field): + +def disable_renamed_projects(workspace_id, destination_field): page_size = 200 - expense_attributes_count = ExpenseAttribute.objects.filter(attribute_type='PROJECT',workspace_id=workspace_id,auto_mapped=True).count() + expense_attributes_count = ExpenseAttribute.objects.filter( + attribute_type="PROJECT", workspace_id=workspace_id, auto_mapped=True + ).count() expense_attribute_to_be_disabled = [] for offset in range(0, expense_attributes_count, page_size): limit = offset + page_size fyle_projects = ExpenseAttribute.objects.filter( - workspace_id=workspace_id, - attribute_type="PROJECT", - auto_mapped=True - ).order_by('value', 'id')[offset:limit] + workspace_id=workspace_id, attribute_type="PROJECT", auto_mapped=True + ).order_by("value", "id")[offset:limit] - project_names = list( - set(field.value for field in fyle_projects) - ) + project_names = list(set(field.value for field in fyle_projects)) xero_customers = DestinationAttribute.objects.filter( attribute_type=destination_field, workspace_id=workspace_id, - value__in=project_names - ).values_list('value', flat=True) + value__in=project_names, + ).values_list("value", flat=True) for fyle_project in fyle_projects: if fyle_project.value not in xero_customers: @@ -376,55 +453,75 @@ def disable_renamed_projects(workspace_id,destination_field): return expense_attribute_to_be_disabled -def post_projects_in_batches(platform: PlatformConnector, - workspace_id: int, destination_field: str): +def post_projects_in_batches( + platform: PlatformConnector, workspace_id: int, destination_field: str +): existing_project_names = ExpenseAttribute.objects.filter( - attribute_type='PROJECT', workspace_id=workspace_id).values_list('value', flat=True) + attribute_type="PROJECT", workspace_id=workspace_id + ).values_list("value", flat=True) xero_attributes_count = DestinationAttribute.objects.filter( - attribute_type=destination_field, workspace_id=workspace_id).count() + attribute_type=destination_field, workspace_id=workspace_id + ).count() page_size = 200 for offset in range(0, xero_attributes_count, page_size): limit = offset + page_size paginated_xero_attributes = DestinationAttribute.objects.filter( - attribute_type=destination_field, workspace_id=workspace_id).order_by('value', 'id')[offset:limit] + attribute_type=destination_field, workspace_id=workspace_id + ).order_by("value", "id")[offset:limit] paginated_xero_attributes = remove_duplicates(paginated_xero_attributes) fyle_payload: List[Dict] = create_fyle_projects_payload( - paginated_xero_attributes, existing_project_names) + paginated_xero_attributes, existing_project_names + ) if fyle_payload: platform.projects.post_bulk(fyle_payload) platform.projects.sync() - Mapping.bulk_create_mappings(paginated_xero_attributes, 'PROJECT', destination_field, workspace_id) - - if destination_field == 'CUSTOMER': - expense_attribute_to_be_disable = disable_renamed_projects(workspace_id,destination_field) - project_ids_to_be_changed = disable_expense_attributes('PROJECT', 'CUSTOMER', workspace_id) + Mapping.bulk_create_mappings( + paginated_xero_attributes, "PROJECT", destination_field, workspace_id + ) + + if destination_field == "CUSTOMER": + expense_attribute_to_be_disable = disable_renamed_projects( + workspace_id, destination_field + ) + project_ids_to_be_changed = disable_expense_attributes( + "PROJECT", "CUSTOMER", workspace_id + ) project_ids_to_be_changed.extend(expense_attribute_to_be_disable) if project_ids_to_be_changed: - expense_attributes = ExpenseAttribute.objects.filter(id__in=project_ids_to_be_changed) - fyle_payload: List[Dict] = create_fyle_projects_payload(projects=[], existing_project_names=[], updated_projects=expense_attributes) + expense_attributes = ExpenseAttribute.objects.filter( + id__in=project_ids_to_be_changed + ) + fyle_payload: List[Dict] = create_fyle_projects_payload( + projects=[], + existing_project_names=[], + updated_projects=expense_attributes, + ) platform.projects.post_bulk(fyle_payload) platform.projects.sync() -@handle_import_exceptions(task_name='auto_create_project_mappings') + +@handle_import_exceptions(task_name="auto_create_project_mappings") def auto_create_project_mappings(workspace_id: int): """ Create Project Mappings :return: mappings """ - fyle_credentials: FyleCredential = FyleCredential.objects.get(workspace_id=workspace_id) + fyle_credentials: FyleCredential = FyleCredential.objects.get( + workspace_id=workspace_id + ) platform = PlatformConnector(fyle_credentials) platform.projects.sync() mapping_setting = MappingSetting.objects.get( - source_field='PROJECT', workspace_id=workspace_id + source_field="PROJECT", workspace_id=workspace_id ) sync_xero_attributes(mapping_setting.destination_field, workspace_id) @@ -432,8 +529,13 @@ def auto_create_project_mappings(workspace_id: int): post_projects_in_batches(platform, workspace_id, mapping_setting.destination_field) -def create_fyle_expense_custom_fields_payload(xero_attributes: List[DestinationAttribute], workspace_id: int, - fyle_attribute: str, platform: PlatformConnector, source_placeholder: str = None): +def create_fyle_expense_custom_fields_payload( + xero_attributes: List[DestinationAttribute], + workspace_id: int, + fyle_attribute: str, + platform: PlatformConnector, + source_placeholder: str = None, +): """ Create Fyle Expense Custom Field Payload from Xero Objects :param workspace_id: Workspace ID @@ -444,30 +546,42 @@ def create_fyle_expense_custom_fields_payload(xero_attributes: List[DestinationA fyle_expense_custom_field_options = [] - [fyle_expense_custom_field_options.append(xero_attribute.value) for xero_attribute in xero_attributes] + [ + fyle_expense_custom_field_options.append(xero_attribute.value) + for xero_attribute in xero_attributes + ] if fyle_attribute.lower() not in FYLE_EXPENSE_SYSTEM_FIELDS: - existing_attribute = ExpenseAttribute.objects.filter( - attribute_type=fyle_attribute, workspace_id=workspace_id).values_list('detail', flat=True).first() + existing_attribute = ( + ExpenseAttribute.objects.filter( + attribute_type=fyle_attribute, workspace_id=workspace_id + ) + .values_list("detail", flat=True) + .first() + ) custom_field_id = None placeholder = None if existing_attribute is not None: - custom_field_id = existing_attribute['custom_field_id'] - placeholder = existing_attribute['placeholder'] if 'placeholder' in existing_attribute else None + custom_field_id = existing_attribute["custom_field_id"] + placeholder = ( + existing_attribute["placeholder"] + if "placeholder" in existing_attribute + else None + ) - fyle_attribute = fyle_attribute.replace('_', ' ').title() + fyle_attribute = fyle_attribute.replace("_", " ").title() new_placeholder = None - # Here is the explanation of what's happening in the if-else ladder below + # Here is the explanation of what's happening in the if-else ladder below # source_field is the field that's save in mapping settings, this field user may or may not fill in the custom field form # placeholder is the field that's saved in the detail column of destination attributes # fyle_attribute is what we're constructing when both of these fields would not be available if not (source_placeholder or placeholder): # If source_placeholder and placeholder are both None, then we're creating adding a self constructed placeholder - new_placeholder = 'Select {0}'.format(fyle_attribute) + new_placeholder = "Select {0}".format(fyle_attribute) elif not source_placeholder and placeholder: # If source_placeholder is None but placeholder is not, then we're choosing same place holder as 1 in detail section new_placeholder = placeholder @@ -479,28 +593,35 @@ def create_fyle_expense_custom_fields_payload(xero_attributes: List[DestinationA new_placeholder = source_placeholder expense_custom_field_payload = { - 'field_name': fyle_attribute, - 'type': 'SELECT', - 'is_enabled': True, - 'is_mandatory': False, - 'placeholder': new_placeholder, - 'options': fyle_expense_custom_field_options, - 'code': None + "field_name": fyle_attribute, + "type": "SELECT", + "is_enabled": True, + "is_mandatory": False, + "placeholder": new_placeholder, + "options": fyle_expense_custom_field_options, + "code": None, } if custom_field_id: expense_field = platform.expense_custom_fields.get_by_id(custom_field_id) - expense_custom_field_payload['id'] = custom_field_id - expense_custom_field_payload['is_mandatory'] = expense_field['is_mandatory'] + expense_custom_field_payload["id"] = custom_field_id + expense_custom_field_payload["is_mandatory"] = expense_field["is_mandatory"] return expense_custom_field_payload -def upload_attributes_to_fyle(workspace_id: int, xero_attribute_type: str, fyle_attribute_type: str, source_placeholder: str = None): +def upload_attributes_to_fyle( + workspace_id: int, + xero_attribute_type: str, + fyle_attribute_type: str, + source_placeholder: str = None, +): """ Upload attributes to Fyle """ - fyle_credentials: FyleCredential = FyleCredential.objects.get(workspace_id=workspace_id) + fyle_credentials: FyleCredential = FyleCredential.objects.get( + workspace_id=workspace_id + ) platform = PlatformConnector(fyle_credentials) @@ -515,7 +636,7 @@ def upload_attributes_to_fyle(workspace_id: int, xero_attribute_type: str, fyle_ workspace_id=workspace_id, fyle_attribute=fyle_attribute_type, source_placeholder=source_placeholder, - platform=platform + platform=platform, ) if fyle_custom_field_payload: @@ -525,20 +646,31 @@ def upload_attributes_to_fyle(workspace_id: int, xero_attribute_type: str, fyle_ return xero_attributes -@handle_import_exceptions(task_name='auto create expense fields_mappings') -def auto_create_expense_fields_mappings(workspace_id: int, xero_attribute_type: str, fyle_attribute_type: str, source_placeholder: str = None): +@handle_import_exceptions(task_name="auto create expense fields_mappings") +def auto_create_expense_fields_mappings( + workspace_id: int, + xero_attribute_type: str, + fyle_attribute_type: str, + source_placeholder: str = None, +): """ Create Fyle Attributes Mappings :return: mappings """ - fyle_attributes = upload_attributes_to_fyle(workspace_id=workspace_id, xero_attribute_type=xero_attribute_type, - fyle_attribute_type=fyle_attribute_type, source_placeholder=source_placeholder) + fyle_attributes = upload_attributes_to_fyle( + workspace_id=workspace_id, + xero_attribute_type=xero_attribute_type, + fyle_attribute_type=fyle_attribute_type, + source_placeholder=source_placeholder, + ) if fyle_attributes: - Mapping.bulk_create_mappings(fyle_attributes, fyle_attribute_type, xero_attribute_type, workspace_id) + Mapping.bulk_create_mappings( + fyle_attributes, fyle_attribute_type, xero_attribute_type, workspace_id + ) -@handle_import_exceptions(task_name='async auto create custom field_mappings') +@handle_import_exceptions(task_name="async auto create custom field_mappings") def async_auto_create_custom_field_mappings(workspace_id: str): mapping_settings = MappingSetting.objects.filter( is_custom=True, import_to_fyle=True, workspace_id=workspace_id @@ -548,30 +680,40 @@ def async_auto_create_custom_field_mappings(workspace_id: str): if mapping_setting.import_to_fyle: sync_xero_attributes(mapping_setting.destination_field, workspace_id) auto_create_expense_fields_mappings( - workspace_id, mapping_setting.destination_field, mapping_setting.source_field, - mapping_setting.source_placeholder + workspace_id, + mapping_setting.destination_field, + mapping_setting.source_field, + mapping_setting.source_placeholder, ) -def upload_tax_groups_to_fyle(platform_connection: PlatformConnector, workspace_id: int): +def upload_tax_groups_to_fyle( + platform_connection: PlatformConnector, workspace_id: int +): existing_tax_codes_name = ExpenseAttribute.objects.filter( - attribute_type='TAX_GROUP', workspace_id=workspace_id).values_list('value', flat=True) + attribute_type="TAX_GROUP", workspace_id=workspace_id + ).values_list("value", flat=True) xero_attributes = DestinationAttribute.objects.filter( - attribute_type='TAX_CODE', workspace_id=workspace_id).order_by('value', 'id') + attribute_type="TAX_CODE", workspace_id=workspace_id + ).order_by("value", "id") xero_attributes = remove_duplicates(xero_attributes) - fyle_payload: List[Dict] = create_fyle_tax_group_payload(xero_attributes, existing_tax_codes_name) + fyle_payload: List[Dict] = create_fyle_tax_group_payload( + xero_attributes, existing_tax_codes_name + ) if fyle_payload: platform_connection.tax_groups.post_bulk(fyle_payload) platform_connection.tax_groups.sync() - Mapping.bulk_create_mappings(xero_attributes, 'TAX_GROUP', 'TAX_CODE', workspace_id) + Mapping.bulk_create_mappings(xero_attributes, "TAX_GROUP", "TAX_CODE", workspace_id) -def create_fyle_tax_group_payload(xero_attributes: List[DestinationAttribute], existing_fyle_tax_groups: list): +def create_fyle_tax_group_payload( + xero_attributes: List[DestinationAttribute], existing_fyle_tax_groups: list +): """ Create Fyle tax Group Payload from Xero Objects :param existing_fyle_tax_groups: Existing tax groups names @@ -579,41 +721,47 @@ def create_fyle_tax_group_payload(xero_attributes: List[DestinationAttribute], e :return: Fyle tax Group Payload """ - existing_fyle_tax_groups = [tax_group.lower() for tax_group in existing_fyle_tax_groups] + existing_fyle_tax_groups = [ + tax_group.lower() for tax_group in existing_fyle_tax_groups + ] fyle_tax_group_payload = [] for xero_attribute in xero_attributes: if xero_attribute.value.lower() not in existing_fyle_tax_groups: fyle_tax_group_payload.append( { - 'name': xero_attribute.value, - 'is_enabled': True, - 'percentage': round((xero_attribute.detail['tax_rate'] / 100), 2) + "name": xero_attribute.value, + "is_enabled": True, + "percentage": round((xero_attribute.detail["tax_rate"] / 100), 2), } ) return fyle_tax_group_payload -@handle_import_exceptions(task_name='auto create tax codes_mappings') +@handle_import_exceptions(task_name="auto create tax codes_mappings") def auto_create_tax_codes_mappings(workspace_id: int): """ Create Tax Codes Mappings :return: None """ - fyle_credentials: FyleCredential = FyleCredential.objects.get(workspace_id=workspace_id) + fyle_credentials: FyleCredential = FyleCredential.objects.get( + workspace_id=workspace_id + ) platform = PlatformConnector(fyle_credentials=fyle_credentials) platform.tax_groups.sync() - sync_xero_attributes('TAX_CODE', workspace_id) + sync_xero_attributes("TAX_CODE", workspace_id) upload_tax_groups_to_fyle(platform, workspace_id) def auto_create_suppliers_as_merchants(workspace_id): - fyle_credentials: FyleCredential = FyleCredential.objects.get(workspace_id=workspace_id) + fyle_credentials: FyleCredential = FyleCredential.objects.get( + workspace_id=workspace_id + ) fyle_connection = PlatformConnector(fyle_credentials) xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id) @@ -629,19 +777,25 @@ def auto_import_and_map_fyle_fields(workspace_id): """ Auto import and map fyle fields """ - workspace_general_settings: WorkspaceGeneralSettings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) - project_mapping = MappingSetting.objects.filter(source_field='PROJECT', workspace_id=workspace_general_settings.workspace_id).first() + workspace_general_settings: WorkspaceGeneralSettings = ( + WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + ) + project_mapping = MappingSetting.objects.filter( + source_field="PROJECT", workspace_id=workspace_general_settings.workspace_id + ).first() chain = Chain() if workspace_general_settings.import_categories: - chain.append('apps.mappings.tasks.auto_create_category_mappings', workspace_id) + chain.append("apps.mappings.tasks.auto_create_category_mappings", workspace_id) if project_mapping and project_mapping.import_to_fyle: - chain.append('apps.mappings.tasks.auto_create_project_mappings', workspace_id) - + chain.append("apps.mappings.tasks.auto_create_project_mappings", workspace_id) + if workspace_general_settings.import_suppliers_as_merchants: - chain.append('apps.mappings.tasks.auto_create_suppliers_as_merchants', workspace_id) + chain.append( + "apps.mappings.tasks.auto_create_suppliers_as_merchants", workspace_id + ) if chain.length() > 0: chain.run() diff --git a/apps/mappings/urls.py b/apps/mappings/urls.py index 7c69285d..9214d7ac 100644 --- a/apps/mappings/urls.py +++ b/apps/mappings/urls.py @@ -1,9 +1,9 @@ -from django.urls import path, include +from django.urls import include, path -from .views import TenantMappingView, AutoMapEmployeeView +from apps.mappings.views import AutoMapEmployeeView, TenantMappingView urlpatterns = [ - path('tenant/', TenantMappingView.as_view()), - path('', include('fyle_accounting_mappings.urls')), - path('auto_map_employees/trigger/', AutoMapEmployeeView.as_view()) + path("tenant/", TenantMappingView.as_view()), + path("", include("fyle_accounting_mappings.urls")), + path("auto_map_employees/trigger/", AutoMapEmployeeView.as_view()), ] diff --git a/apps/mappings/utils.py b/apps/mappings/utils.py index cb9027ee..b64626b0 100644 --- a/apps/mappings/utils.py +++ b/apps/mappings/utils.py @@ -1,11 +1,10 @@ from typing import Dict +from apps.mappings.models import GeneralMapping, TenantMapping from apps.workspaces.models import WorkspaceGeneralSettings +from apps.xero.queue import schedule_payment_creation from fyle_xero_api.utils import assert_valid -from .models import TenantMapping, GeneralMapping -from ..xero.queue import schedule_payment_creation - class MappingUtils: def __init__(self, workspace_id): @@ -18,17 +17,21 @@ def create_or_update_tenant_mapping(self, tenant_mapping: Dict): :return: tenant mappings objects """ - assert_valid('tenant_name' in tenant_mapping and tenant_mapping['tenant_name'], - 'tenant name field is blank') - assert_valid('tenant_id' in tenant_mapping and tenant_mapping['tenant_id'], - 'tenant id field is blank') + assert_valid( + "tenant_name" in tenant_mapping and tenant_mapping["tenant_name"], + "tenant name field is blank", + ) + assert_valid( + "tenant_id" in tenant_mapping and tenant_mapping["tenant_id"], + "tenant id field is blank", + ) tenant_mapping_object, _ = TenantMapping.objects.update_or_create( workspace_id=self.__workspace_id, defaults={ - 'tenant_name': tenant_mapping['tenant_name'], - 'tenant_id': tenant_mapping['tenant_id'] - } + "tenant_name": tenant_mapping["tenant_name"], + "tenant_id": tenant_mapping["tenant_id"], + }, ) return tenant_mapping_object @@ -40,53 +43,71 @@ def create_or_update_general_mapping(self, general_mapping: Dict): :return: general mappings objects """ - general_settings: WorkspaceGeneralSettings = WorkspaceGeneralSettings.objects.get( - workspace_id=self.__workspace_id) + general_settings: WorkspaceGeneralSettings = ( + WorkspaceGeneralSettings.objects.get(workspace_id=self.__workspace_id) + ) params = { - 'bank_account_name': None, - 'bank_account_id': None, - 'payment_account_name': None, - 'payment_account_id': None, - 'default_tax_code_id': None, - 'default_tax_code_name': None + "bank_account_name": None, + "bank_account_id": None, + "payment_account_name": None, + "payment_account_id": None, + "default_tax_code_id": None, + "default_tax_code_name": None, } - if general_settings.corporate_credit_card_expenses_object == 'BANK TRANSACTION': - assert_valid('bank_account_name' in general_mapping and general_mapping['bank_account_name'], - 'bank account name field is blank') - assert_valid('bank_account_id' in general_mapping and general_mapping['bank_account_id'], - 'bank account id field is blank') - - params['bank_account_name'] = general_mapping.get('bank_account_name') - params['bank_account_id'] = general_mapping.get('bank_account_id') + if general_settings.corporate_credit_card_expenses_object == "BANK TRANSACTION": + assert_valid( + "bank_account_name" in general_mapping + and general_mapping["bank_account_name"], + "bank account name field is blank", + ) + assert_valid( + "bank_account_id" in general_mapping + and general_mapping["bank_account_id"], + "bank account id field is blank", + ) + + params["bank_account_name"] = general_mapping.get("bank_account_name") + params["bank_account_id"] = general_mapping.get("bank_account_id") if general_settings.sync_fyle_to_xero_payments: - assert_valid('payment_account_name' in general_mapping and general_mapping['payment_account_name'], - 'payment account name field is blank') - assert_valid('payment_account_id' in general_mapping and general_mapping['payment_account_id'], - 'payment account id field is blank') - - params['payment_account_name'] = general_mapping.get('payment_account_name') - params['payment_account_id'] = general_mapping.get('payment_account_id') + assert_valid( + "payment_account_name" in general_mapping + and general_mapping["payment_account_name"], + "payment account name field is blank", + ) + assert_valid( + "payment_account_id" in general_mapping + and general_mapping["payment_account_id"], + "payment account id field is blank", + ) + + params["payment_account_name"] = general_mapping.get("payment_account_name") + params["payment_account_id"] = general_mapping.get("payment_account_id") if general_settings.import_tax_codes: - assert_valid('default_tax_code_name' in general_mapping and general_mapping['default_tax_code_name'], - 'default tax code name is blank') - assert_valid('default_tax_code_name' in general_mapping and general_mapping['default_tax_code_name'], - 'default tax code name is blank') - - params['default_tax_code_id'] = general_mapping['default_tax_code_id'] - params['default_tax_code_name'] = general_mapping['default_tax_code_name'] + assert_valid( + "default_tax_code_name" in general_mapping + and general_mapping["default_tax_code_name"], + "default tax code name is blank", + ) + assert_valid( + "default_tax_code_name" in general_mapping + and general_mapping["default_tax_code_name"], + "default tax code name is blank", + ) + + params["default_tax_code_id"] = general_mapping["default_tax_code_id"] + params["default_tax_code_name"] = general_mapping["default_tax_code_name"] general_mapping_object, _ = GeneralMapping.objects.update_or_create( - workspace_id=self.__workspace_id, - defaults=params + workspace_id=self.__workspace_id, defaults=params ) schedule_payment_creation( sync_fyle_to_xero_payments=general_settings.sync_fyle_to_xero_payments, - workspace_id=self.__workspace_id + workspace_id=self.__workspace_id, ) return general_mapping_object diff --git a/apps/mappings/views.py b/apps/mappings/views.py index 3b4f0dd1..59f3f3e3 100644 --- a/apps/mappings/views.py +++ b/apps/mappings/views.py @@ -5,13 +5,12 @@ from rest_framework.response import Response from rest_framework.views import status -from fyle_xero_api.utils import assert_valid - -from .serializers import TenantMappingSerializer -from .models import TenantMapping -from ..workspaces.models import WorkspaceGeneralSettings from apps.exceptions import handle_view_exceptions -from .actions import tenant_mapping_view +from apps.mappings.actions import tenant_mapping_view +from apps.mappings.models import TenantMapping +from apps.mappings.serializers import TenantMappingSerializer +from apps.workspaces.models import WorkspaceGeneralSettings +from fyle_xero_api.utils import assert_valid logger = logging.getLogger(__name__) @@ -21,25 +20,27 @@ class TenantMappingView(generics.CreateAPIView, generics.RetrieveAPIView): Tenant mappings view """ - lookup_field = 'workspace_id' - lookup_url_kwarg = 'workspace_id' + lookup_field = "workspace_id" + lookup_url_kwarg = "workspace_id" serializer_class = TenantMappingSerializer queryset = TenantMapping.objects.all() - def post(self, request, *args, **kwargs): """ Post Tenant mapping view """ tenant_mapping_payload = request.data - assert_valid(tenant_mapping_payload is not None, 'Request body is empty') + assert_valid(tenant_mapping_payload is not None, "Request body is empty") - tenant_mapping_object = tenant_mapping_view(workspace_id=kwargs['workspace_id'],tenant_mapping_payload=tenant_mapping_payload) + tenant_mapping_object = tenant_mapping_view( + workspace_id=kwargs["workspace_id"], + tenant_mapping_payload=tenant_mapping_payload, + ) return Response( data=self.serializer_class(tenant_mapping_object).data, - status=status.HTTP_200_OK + status=status.HTTP_200_OK, ) @@ -47,31 +48,30 @@ class AutoMapEmployeeView(generics.CreateAPIView): """ Auto Map Employees view """ + @handle_view_exceptions() def post(self, request, *args, **kwargs): """ Trigger Auto Map employees """ - - workspace_id = kwargs['workspace_id'] - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + + workspace_id = kwargs["workspace_id"] + general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=workspace_id + ) chain = Chain() if not general_settings.auto_map_employees: return Response( data={ - 'message': 'Employee mapping preference not found for this workspace' + "message": "Employee mapping preference not found for this workspace" }, - status=status.HTTP_400_BAD_REQUEST + status=status.HTTP_400_BAD_REQUEST, ) - chain.append( - 'apps.mappings.tasks.async_auto_map_employees', workspace_id) + chain.append("apps.mappings.tasks.async_auto_map_employees", workspace_id) chain.run() - return Response( - data={}, - status=status.HTTP_200_OK - ) + return Response(data={}, status=status.HTTP_200_OK) diff --git a/apps/tasks/apps.py b/apps/tasks/apps.py index 20547224..5aadae04 100644 --- a/apps/tasks/apps.py +++ b/apps/tasks/apps.py @@ -2,4 +2,4 @@ class TasksConfig(AppConfig): - name = 'tasks' + name = "tasks" diff --git a/apps/tasks/models.py b/apps/tasks/models.py index a58feced..9a712697 100644 --- a/apps/tasks/models.py +++ b/apps/tasks/models.py @@ -1,10 +1,10 @@ from django.db import models from django.db.models import JSONField +from fyle_accounting_mappings.models import ExpenseAttribute -from apps.workspaces.models import Workspace from apps.fyle.models import ExpenseGroup -from apps.xero.models import Bill, BankTransaction, Payment -from fyle_accounting_mappings.models import ExpenseAttribute +from apps.workspaces.models import Workspace +from apps.xero.models import BankTransaction, Bill, Payment def get_default(): @@ -15,29 +15,51 @@ class TaskLog(models.Model): """ Table to store task logs """ + id = models.AutoField(primary_key=True) - workspace = models.ForeignKey(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model') - type = models.CharField(max_length=50, help_text='Task type (FETCH_EXPENSES / CREATE_BILL)') - task_id = models.CharField(max_length=255, null=True, help_text='Django Q task reference') - expense_group = models.ForeignKey(ExpenseGroup, on_delete=models.PROTECT, - null=True, help_text='Reference to Expense group') - payment = models.ForeignKey(Payment, on_delete=models.PROTECT, help_text='Reference to Payment', null=True) - bill = models.ForeignKey(Bill, on_delete=models.PROTECT, help_text='Reference to Bill', null=True) - bank_transaction = models.ForeignKey(BankTransaction, on_delete=models.PROTECT, - help_text='Reference to Bank Transaction', null=True) - status = models.CharField(max_length=255, help_text='Task Status') - detail = JSONField(help_text='Task response', null=True, default=get_default()) - xero_errors = JSONField(help_text='Xero Errors', null=True) - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') + workspace = models.ForeignKey( + Workspace, on_delete=models.PROTECT, help_text="Reference to Workspace model" + ) + type = models.CharField( + max_length=50, help_text="Task type (FETCH_EXPENSES / CREATE_BILL)" + ) + task_id = models.CharField( + max_length=255, null=True, help_text="Django Q task reference" + ) + expense_group = models.ForeignKey( + ExpenseGroup, + on_delete=models.PROTECT, + null=True, + help_text="Reference to Expense group", + ) + payment = models.ForeignKey( + Payment, on_delete=models.PROTECT, help_text="Reference to Payment", null=True + ) + bill = models.ForeignKey( + Bill, on_delete=models.PROTECT, help_text="Reference to Bill", null=True + ) + bank_transaction = models.ForeignKey( + BankTransaction, + on_delete=models.PROTECT, + help_text="Reference to Bank Transaction", + null=True, + ) + status = models.CharField(max_length=255, help_text="Task Status") + detail = JSONField(help_text="Task response", null=True, default=get_default()) + xero_errors = JSONField(help_text="Xero Errors", null=True) + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" + ) + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") class Meta: - db_table = 'task_logs' + db_table = "task_logs" + ERROR_TYPE_CHOICES = ( - ('EMPLOYEE_MAPPING', 'EMPLOYEE_MAPPING'), - ('CATEGORY_MAPPING', 'CATEGORY_MAPPING'), - ('XERO_ERROR', 'XERO_ERROR') + ("EMPLOYEE_MAPPING", "EMPLOYEE_MAPPING"), + ("CATEGORY_MAPPING", "CATEGORY_MAPPING"), + ("XERO_ERROR", "XERO_ERROR"), ) @@ -45,22 +67,33 @@ class Error(models.Model): """ Table to store errors """ + id = models.AutoField(primary_key=True) - workspace = models.ForeignKey(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model') - type = models.CharField(max_length=50, choices=ERROR_TYPE_CHOICES, help_text='Error type') + workspace = models.ForeignKey( + Workspace, on_delete=models.PROTECT, help_text="Reference to Workspace model" + ) + type = models.CharField( + max_length=50, choices=ERROR_TYPE_CHOICES, help_text="Error type" + ) expense_group = models.ForeignKey( - ExpenseGroup, on_delete=models.PROTECT, - null=True, help_text='Reference to Expense group' + ExpenseGroup, + on_delete=models.PROTECT, + null=True, + help_text="Reference to Expense group", ) expense_attribute = models.OneToOneField( - ExpenseAttribute, on_delete=models.PROTECT, - null=True, help_text='Reference to Expense Attribute' + ExpenseAttribute, + on_delete=models.PROTECT, + null=True, + help_text="Reference to Expense Attribute", + ) + is_resolved = models.BooleanField(default=False, help_text="Is resolved") + error_title = models.CharField(max_length=255, help_text="Error title") + error_detail = models.TextField(help_text="Error detail") + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" ) - is_resolved = models.BooleanField(default=False, help_text='Is resolved') - error_title = models.CharField(max_length=255, help_text='Error title') - error_detail = models.TextField(help_text='Error detail') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") class Meta: - db_table = 'errors' + db_table = "errors" diff --git a/apps/tasks/serializers.py b/apps/tasks/serializers.py index 7a5fd061..7bc8e7ff 100644 --- a/apps/tasks/serializers.py +++ b/apps/tasks/serializers.py @@ -1,12 +1,13 @@ from rest_framework import serializers -from .models import TaskLog +from apps.tasks.models import TaskLog class TaskLogSerializer(serializers.ModelSerializer): """ Task Log serializer """ + class Meta: model = TaskLog - fields = '__all__' + fields = "__all__" diff --git a/apps/tasks/urls.py b/apps/tasks/urls.py index 9caf2d35..66d82811 100644 --- a/apps/tasks/urls.py +++ b/apps/tasks/urls.py @@ -1,6 +1,5 @@ from django.urls import path -from .views import TasksView +from apps.tasks.views import TasksView urlpatterns = [path("all/", TasksView.as_view())] - \ No newline at end of file diff --git a/apps/tasks/views.py b/apps/tasks/views.py index 7c0f5218..58651d00 100644 --- a/apps/tasks/views.py +++ b/apps/tasks/views.py @@ -1,21 +1,20 @@ -from django.db.models import Q - from rest_framework import generics -from rest_framework.response import Response -from rest_framework.views import status - -from fyle_xero_api.utils import assert_valid -from .models import TaskLog -from .serializers import TaskLogSerializer +from apps.tasks.models import TaskLog +from apps.tasks.serializers import TaskLogSerializer from fyle_xero_api.utils import LookupFieldMixin -class TasksView(LookupFieldMixin,generics.ListAPIView): +class TasksView(LookupFieldMixin, generics.ListAPIView): """ Tasks view """ + serializer_class = TaskLogSerializer queryset = TaskLog.objects.all() - filterset_fields = {'type':{'exact', 'in'}, 'expense_group_id':{'exact', 'in'}, 'status':{'exact', 'in'}} - ordering_fields = ('updated_at',) + filterset_fields = { + "type": {"exact", "in"}, + "expense_group_id": {"exact", "in"}, + "status": {"exact", "in"}, + } + ordering_fields = ("updated_at",) diff --git a/apps/users/apps.py b/apps/users/apps.py index 4ce1fabc..3ef1284a 100644 --- a/apps/users/apps.py +++ b/apps/users/apps.py @@ -2,4 +2,4 @@ class UsersConfig(AppConfig): - name = 'users' + name = "users" diff --git a/apps/users/forms.py b/apps/users/forms.py index 8501b6cc..8876c78d 100644 --- a/apps/users/forms.py +++ b/apps/users/forms.py @@ -1,19 +1,19 @@ from django import forms from django.contrib.auth.forms import ReadOnlyPasswordHashField -from .models import User +from apps.users.models import User class RegisterForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput) - password2 = forms.CharField(label='Confirm password', widget=forms.PasswordInput) + password2 = forms.CharField(label="Confirm password", widget=forms.PasswordInput) class Meta: model = User - fields = ('email', 'full_name') + fields = ("email", "full_name") def clean_email(self): - email = self.cleaned_data.get('email') + email = self.cleaned_data.get("email") qs = User.objects.filter(email=email) if qs.exists(): raise forms.ValidationError("email is taken") @@ -30,12 +30,15 @@ def clean_password2(self): class UserAdminCreationForm(forms.ModelForm): """A form for creating new users. Includes all the required fields, plus a repeated password.""" - password1 = forms.CharField(label='Password', widget=forms.PasswordInput) - password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) + + password1 = forms.CharField(label="Password", widget=forms.PasswordInput) + password2 = forms.CharField( + label="Password confirmation", widget=forms.PasswordInput + ) class Meta: model = User - fields = ('email', 'full_name') + fields = ("email", "full_name") def clean_password2(self): password1 = self.cleaned_data.get("password1") @@ -57,11 +60,12 @@ class UserAdminChangeForm(forms.ModelForm): the user, but replaces the password field with admin's password hash display field. """ + password = ReadOnlyPasswordHashField() class Meta: model = User - fields = ('email', 'full_name', 'password', 'active', 'admin') + fields = ("email", "full_name", "password", "active", "admin") def clean_password(self): return self.initial["password"] diff --git a/apps/users/helpers.py b/apps/users/helpers.py index f3ce3423..1d91ba36 100644 --- a/apps/users/helpers.py +++ b/apps/users/helpers.py @@ -5,6 +5,7 @@ from apps.fyle.helpers import get_cluster_domain from apps.workspaces.models import FyleCredential + def get_cluster_domain_and_refresh_token(user) -> Tuple[str, str]: """ Get cluster domain and refresh token from User diff --git a/apps/users/models.py b/apps/users/models.py index ce44c3c1..1afb0bb1 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -1,7 +1,5 @@ +from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from django.db import models -from django.contrib.auth.models import ( - BaseUserManager, AbstractBaseUser -) class UserManager(BaseUserManager): @@ -10,12 +8,9 @@ def create_user(self, email, full_name, password=None): Creates and saves a User with the given email and password. """ if not email: - raise ValueError('Users must have an email address') + raise ValueError("Users must have an email address") - user = self.model( - email=self.normalize_email(email), - full_name=full_name - ) + user = self.model(email=self.normalize_email(email), full_name=full_name) user.set_password(password) user.save(using=self._db) @@ -25,11 +20,7 @@ def create_staffuser(self, email, full_name, password): """ Creates and saves a staff user with the given email and password. """ - user = self.create_user( - email=email, - full_name=full_name, - password=password - ) + user = self.create_user(email=email, full_name=full_name, password=password) user.staff = True user.save(using=self._db) return user @@ -38,11 +29,7 @@ def create_superuser(self, email, full_name, password): """ Creates and saves a superuser with the given email and password. """ - user = self.create_user( - email, - full_name=full_name, - password=password - ) + user = self.create_user(email, full_name=full_name, password=password) user.staff = True user.admin = True user.save(using=self._db) @@ -51,23 +38,20 @@ def create_superuser(self, email, full_name, password): class User(AbstractBaseUser): id = models.AutoField(primary_key=True) - email = models.EmailField( - verbose_name='email address', - max_length=255 - ) - user_id = models.CharField(verbose_name='Fyle user id', max_length=255, unique=True) - full_name = models.CharField(verbose_name='full name', max_length=255) + email = models.EmailField(verbose_name="email address", max_length=255) + user_id = models.CharField(verbose_name="Fyle user id", max_length=255, unique=True) + full_name = models.CharField(verbose_name="full name", max_length=255) active = models.BooleanField(default=True) staff = models.BooleanField(default=False) admin = models.BooleanField(default=False) - USERNAME_FIELD = 'user_id' - REQUIRED_FIELDS = ['full_name', 'email'] + USERNAME_FIELD = "user_id" + REQUIRED_FIELDS = ["full_name", "email"] objects = UserManager() class Meta: - db_table = 'users' + db_table = "users" def has_module_perms(self, app_label): return True diff --git a/apps/users/serializers.py b/apps/users/serializers.py index ecdb606c..6f7c707a 100644 --- a/apps/users/serializers.py +++ b/apps/users/serializers.py @@ -1,9 +1,9 @@ from rest_framework import serializers -from .models import User +from apps.users.models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User - fields = '__all__' + fields = "__all__" diff --git a/apps/users/urls.py b/apps/users/urls.py index 06b647e3..380f715e 100644 --- a/apps/users/urls.py +++ b/apps/users/urls.py @@ -1,15 +1,9 @@ from django.urls import path -from .views import FyleOrgsView - -from apps.workspaces.apis.clone_settings.views \ - import CloneSettingsExistsView +from apps.users.views import FyleOrgsView +from apps.workspaces.apis.clone_settings.views import CloneSettingsExistsView urlpatterns = [ - path('orgs/', FyleOrgsView.as_view()), - path( - 'clone_settings/exists/', - CloneSettingsExistsView.as_view() - ), + path("orgs/", FyleOrgsView.as_view()), + path("clone_settings/exists/", CloneSettingsExistsView.as_view()), ] - \ No newline at end of file diff --git a/apps/users/views.py b/apps/users/views.py index 8ec8c87f..e61eaf5f 100644 --- a/apps/users/views.py +++ b/apps/users/views.py @@ -2,13 +2,7 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response -from fyle_rest_auth.models import AuthToken -from fyle_integrations_platform_connector import PlatformConnector - -from apps.workspaces.models import FyleCredential - from apps.fyle.helpers import get_fyle_orgs - from apps.users.helpers import get_cluster_domain_and_refresh_token @@ -23,12 +17,10 @@ def get(self, request, *args, **kwargs): """ Get cluster domain from Fyle """ - cluster_domain, refresh_token = get_cluster_domain_and_refresh_token(request.user) + cluster_domain, refresh_token = get_cluster_domain_and_refresh_token( + request.user + ) fyle_orgs = get_fyle_orgs(refresh_token, cluster_domain) - return Response( - data=fyle_orgs, - status=status.HTTP_200_OK - ) - \ No newline at end of file + return Response(data=fyle_orgs, status=status.HTTP_200_OK) diff --git a/apps/workspaces/actions.py b/apps/workspaces/actions.py index 159ae7b0..f142804b 100644 --- a/apps/workspaces/actions.py +++ b/apps/workspaces/actions.py @@ -1,32 +1,29 @@ import logging -from fyle_rest_auth.helpers import get_fyle_admin -from .models import Workspace + from django.contrib.auth import get_user_model -from apps.fyle.models import ExpenseGroupSettings -from .models import Workspace, FyleCredential, XeroCredentials, WorkspaceGeneralSettings, WorkspaceSchedule, LastExportDetail from django.core.cache import cache -from apps.fyle.helpers import get_cluster_domain -from fyle_rest_auth.models import AuthToken from django_q.tasks import async_task -from apps.mappings.models import TenantMapping -from apps.xero.utils import XeroConnector - +from fyle_accounting_mappings.models import ExpenseAttribute +from fyle_rest_auth.helpers import get_fyle_admin +from fyle_rest_auth.models import AuthToken from xerosdk import exceptions as xero_exc -from .utils import generate_xero_refresh_token -from apps.workspaces.signals import post_delete_xero_connection - +from apps.fyle.helpers import get_cluster_domain from apps.fyle.models import ExpenseGroupSettings -from fyle_accounting_mappings.models import ExpenseAttribute +from apps.mappings.models import TenantMapping +from apps.workspaces.models import FyleCredential, LastExportDetail, Workspace, XeroCredentials +from apps.workspaces.signals import post_delete_xero_connection +from apps.workspaces.utils import generate_xero_refresh_token +from apps.xero.utils import XeroConnector logger = logging.getLogger(__name__) -def post_workspace(access_token,request): - fyle_user = get_fyle_admin(access_token.split(' ')[1], None) - org_name = fyle_user['data']['org']['name'] - org_id = fyle_user['data']['org']['id'] - fyle_currency = fyle_user['data']['org']['currency'] +def post_workspace(access_token, request): + fyle_user = get_fyle_admin(access_token.split(" ")[1], None) + org_name = fyle_user["data"]["org"]["name"] + org_id = fyle_user["data"]["org"]["id"] + fyle_currency = fyle_user["data"]["org"]["currency"] User = get_user_model() workspace = Workspace.objects.filter(fyle_org_id=org_id).first() @@ -35,7 +32,9 @@ def post_workspace(access_token,request): workspace.user.add(User.objects.get(user_id=request.user)) cache.delete(str(workspace.id)) else: - workspace = Workspace.objects.create(name=org_name, fyle_currency=fyle_currency, fyle_org_id=org_id) + workspace = Workspace.objects.create( + name=org_name, fyle_currency=fyle_currency, fyle_org_id=org_id + ) ExpenseGroupSettings.objects.create(workspace_id=workspace.id) @@ -50,15 +49,19 @@ def post_workspace(access_token,request): FyleCredential.objects.update_or_create( refresh_token=auth_tokens.refresh_token, workspace_id=workspace.id, - cluster_domain=cluster_domain + cluster_domain=cluster_domain, + ) + + async_task( + "apps.workspaces.tasks.async_add_admins_to_workspace", + workspace.id, + request.user.user_id, ) - async_task('apps.workspaces.tasks.async_add_admins_to_workspace', workspace.id, request.user.user_id) - return workspace + def connect_xero(authorization_code, redirect_uri, workspace_id): - if redirect_uri: refresh_token = generate_xero_refresh_token(authorization_code, redirect_uri) else: @@ -70,8 +73,7 @@ def connect_xero(authorization_code, redirect_uri, workspace_id): if not xero_credentials: xero_credentials = XeroCredentials.objects.create( - refresh_token=refresh_token, - workspace_id=workspace_id + refresh_token=refresh_token, workspace_id=workspace_id ) else: @@ -82,44 +84,61 @@ def connect_xero(authorization_code, redirect_uri, workspace_id): if tenant_mapping and not tenant_mapping.connection_id: xero_connector = XeroConnector(xero_credentials, workspace_id=workspace_id) connections = xero_connector.connection.connections.get_all() - connection = list(filter(lambda connection: connection['tenantId'] == tenant_mapping.tenant_id, connections)) + connection = list( + filter( + lambda connection: connection["tenantId"] == tenant_mapping.tenant_id, + connections, + ) + ) if connection: - tenant_mapping.connection_id = connection[0]['id'] + tenant_mapping.connection_id = connection[0]["id"] tenant_mapping.save() - + if tenant_mapping: try: xero_connector = XeroConnector(xero_credentials, workspace_id=workspace_id) company_info = xero_connector.get_organisations()[0] - workspace.xero_currency = company_info['BaseCurrency'] + workspace.xero_currency = company_info["BaseCurrency"] workspace.save() - xero_credentials.country = company_info['CountryCode'] + xero_credentials.country = company_info["CountryCode"] xero_credentials.save() - except (xero_exc.WrongParamsError, xero_exc.UnsuccessfulAuthentication) as exception: - logger.info(exception.response) - - if workspace.onboarding_state == 'CONNECTION': - workspace.onboarding_state = 'EXPORT_SETTINGS' + except ( + xero_exc.WrongParamsError, + xero_exc.UnsuccessfulAuthentication, + ) as exception: + logger.info(exception.response) + + if workspace.onboarding_state == "CONNECTION": + workspace.onboarding_state = "EXPORT_SETTINGS" workspace.save() - + return xero_credentials + def revoke_connections(workspace_id): - xero_credentials = XeroCredentials.objects.filter(workspace_id=workspace_id).first() tenant_mapping = TenantMapping.objects.filter(workspace_id=workspace_id).first() if xero_credentials: if tenant_mapping and tenant_mapping.connection_id: try: - xero_connector = XeroConnector(xero_credentials, workspace_id=workspace_id) - xero_connector.connection.connections.remove_connection(tenant_mapping.connection_id) - except (xero_exc.InvalidGrant, xero_exc.UnsupportedGrantType, - xero_exc.InvalidTokenError, xero_exc.UnsuccessfulAuthentication, - xero_exc.WrongParamsError, xero_exc.NoPrivilegeError, - xero_exc.InternalServerError): + xero_connector = XeroConnector( + xero_credentials, workspace_id=workspace_id + ) + xero_connector.connection.connections.remove_connection( + tenant_mapping.connection_id + ) + except ( + xero_exc.InvalidGrant, + xero_exc.UnsupportedGrantType, + xero_exc.InvalidTokenError, + xero_exc.UnsuccessfulAuthentication, + xero_exc.WrongParamsError, + xero_exc.NoPrivilegeError, + xero_exc.InternalServerError, + ): pass - + xero_credentials.refresh_token = None xero_credentials.country = None xero_credentials.is_expired = True @@ -127,16 +146,20 @@ def revoke_connections(workspace_id): post_delete_xero_connection(workspace_id) -def get_workspace_admin(workspace_id): +def get_workspace_admin(workspace_id): workspace = Workspace.objects.get(pk=workspace_id) User = get_user_model() - + admin_email = [] users = workspace.user.all() for user in users: admin = User.objects.get(user_id=user) - employee = ExpenseAttribute.objects.filter(value=admin.email, workspace_id=workspace_id, attribute_type='EMPLOYEE').first() + employee = ExpenseAttribute.objects.filter( + value=admin.email, workspace_id=workspace_id, attribute_type="EMPLOYEE" + ).first() if employee: - admin_email.append({'name': employee.detail['full_name'], 'email': admin.email}) + admin_email.append( + {"name": employee.detail["full_name"], "email": admin.email} + ) return admin_email diff --git a/apps/workspaces/apis/advanced_settings/serializers.py b/apps/workspaces/apis/advanced_settings/serializers.py index 59f7622d..39f7d8ff 100644 --- a/apps/workspaces/apis/advanced_settings/serializers.py +++ b/apps/workspaces/apis/advanced_settings/serializers.py @@ -1,9 +1,9 @@ from rest_framework import serializers +from apps.mappings.models import GeneralMapping +from apps.workspaces.apis.advanced_settings.triggers import AdvancedSettingsTriggers from apps.workspaces.models import Workspace, WorkspaceGeneralSettings, WorkspaceSchedule from apps.workspaces.queue import schedule_sync -from apps.mappings.models import GeneralMapping -from .triggers import AdvancedSettingsTriggers class ReadWriteSerializerMethodField(serializers.SerializerMethodField): @@ -14,55 +14,49 @@ class ReadWriteSerializerMethodField(serializers.SerializerMethodField): def __init__(self, method_name=None, **kwargs): self.method_name = method_name - kwargs['source'] = '*' + kwargs["source"] = "*" super(serializers.SerializerMethodField, self).__init__(**kwargs) def to_internal_value(self, data): - return { - self.field_name: data - } + return {self.field_name: data} class WorkspaceScheduleSerializer(serializers.ModelSerializer): emails_selected = serializers.ListField(allow_null=True, required=False) + class Meta: model = WorkspaceSchedule fields = [ - 'enabled', - 'interval_hours', - 'additional_email_options', - 'emails_selected' + "enabled", + "interval_hours", + "additional_email_options", + "emails_selected", ] class WorkspaceGeneralSettingsSerializer(serializers.ModelSerializer): - - class Meta: model = WorkspaceGeneralSettings fields = [ - 'change_accounting_period', - 'sync_fyle_to_xero_payments', - 'sync_xero_to_fyle_payments', - 'auto_create_destination_entity', - 'auto_create_merchant_destination_entity' + "change_accounting_period", + "sync_fyle_to_xero_payments", + "sync_xero_to_fyle_payments", + "auto_create_destination_entity", + "auto_create_merchant_destination_entity", ] class GeneralMappingsSerializer(serializers.ModelSerializer): payment_account = ReadWriteSerializerMethodField() - class Meta: model = GeneralMapping - fields = [ - 'payment_account' - ] + fields = ["payment_account"] def get_payment_account(self, instance): return { - 'name': instance.payment_account_name, - 'id': instance.payment_account_id + "name": instance.payment_account_name, + "id": instance.payment_account_id, } @@ -72,76 +66,96 @@ class AdvancedSettingsSerializer(serializers.ModelSerializer): workspace_schedules = WorkspaceScheduleSerializer() workspace_id = serializers.SerializerMethodField() - class Meta: model = Workspace fields = [ - 'workspace_general_settings', - 'general_mappings', - 'workspace_schedules', - 'workspace_id' + "workspace_general_settings", + "general_mappings", + "workspace_schedules", + "workspace_id", ] - read_only_fields = ['workspace_id'] + read_only_fields = ["workspace_id"] def get_workspace_id(self, instance): return instance.id - - def update(self, instance, validated): - workspace_general_settings = validated.pop('workspace_general_settings') - general_mappings = validated.pop('general_mappings') - workspace_schedules = validated.pop('workspace_schedules') - workspace_general_settings_instance, _ = WorkspaceGeneralSettings.objects.update_or_create( + def update(self, instance, validated): + workspace_general_settings = validated.pop("workspace_general_settings") + general_mappings = validated.pop("general_mappings") + workspace_schedules = validated.pop("workspace_schedules") + + ( + workspace_general_settings_instance, + _, + ) = WorkspaceGeneralSettings.objects.update_or_create( workspace=instance, defaults={ - 'change_accounting_period' : workspace_general_settings.get('change_accounting_period'), - 'sync_fyle_to_xero_payments': workspace_general_settings.get('sync_fyle_to_xero_payments'), - 'sync_xero_to_fyle_payments' : workspace_general_settings.get('sync_xero_to_fyle_payments'), - 'auto_create_destination_entity' : workspace_general_settings.get('auto_create_destination_entity'), - 'auto_create_merchant_destination_entity': workspace_general_settings.get('auto_create_merchant_destination_entity') - } + "change_accounting_period": workspace_general_settings.get( + "change_accounting_period" + ), + "sync_fyle_to_xero_payments": workspace_general_settings.get( + "sync_fyle_to_xero_payments" + ), + "sync_xero_to_fyle_payments": workspace_general_settings.get( + "sync_xero_to_fyle_payments" + ), + "auto_create_destination_entity": workspace_general_settings.get( + "auto_create_destination_entity" + ), + "auto_create_merchant_destination_entity": workspace_general_settings.get( + "auto_create_merchant_destination_entity" + ), + }, ) GeneralMapping.objects.update_or_create( - workspace = instance, + workspace=instance, defaults={ - 'payment_account_name' : general_mappings.get('payment_account').get('name'), - 'payment_account_id' : general_mappings.get('payment_account').get('id') - } + "payment_account_name": general_mappings.get("payment_account").get( + "name" + ), + "payment_account_id": general_mappings.get("payment_account").get("id"), + }, ) schedule_sync( workspace_id=instance.id, - schedule_enabled=workspace_schedules.get('enabled'), - hours=workspace_schedules.get('interval_hours'), - email_added=workspace_schedules.get('additional_email_options'), - emails_selected=workspace_schedules.get('emails_selected') + schedule_enabled=workspace_schedules.get("enabled"), + hours=workspace_schedules.get("interval_hours"), + email_added=workspace_schedules.get("additional_email_options"), + emails_selected=workspace_schedules.get("emails_selected"), ) - AdvancedSettingsTriggers.run_workspace_general_settings_triggers(workspace_general_settings_instance) + AdvancedSettingsTriggers.run_workspace_general_settings_triggers( + workspace_general_settings_instance + ) - if instance.onboarding_state == 'ADVANCED_SETTINGS': - instance.onboarding_state = 'COMPLETE' + if instance.onboarding_state == "ADVANCED_SETTINGS": + instance.onboarding_state = "COMPLETE" instance.save() return instance def validate(self, data): - if not data.get('workspace_general_settings'): - raise serializers.ValidationError('Workspace general settings are required') - - if not data.get('general_mappings'): - raise serializers.ValidationError('General mappings are required') - - if data['workspace_general_settings']['sync_fyle_to_xero_payments']\ - and not data['general_mappings']['payment_account']['id']: - raise serializers.ValidationError('Payment account id is required') - - if data['workspace_general_settings']['sync_fyle_to_xero_payments']\ - and not data['general_mappings']['payment_account']['name']: - raise serializers.ValidationError('Payment account name is required') - - if not data.get('workspace_schedules'): - raise serializers.ValidationError('Workspace Schedules are required') + if not data.get("workspace_general_settings"): + raise serializers.ValidationError("Workspace general settings are required") + + if not data.get("general_mappings"): + raise serializers.ValidationError("General mappings are required") + + if ( + data["workspace_general_settings"]["sync_fyle_to_xero_payments"] + and not data["general_mappings"]["payment_account"]["id"] + ): + raise serializers.ValidationError("Payment account id is required") + + if ( + data["workspace_general_settings"]["sync_fyle_to_xero_payments"] + and not data["general_mappings"]["payment_account"]["name"] + ): + raise serializers.ValidationError("Payment account name is required") + + if not data.get("workspace_schedules"): + raise serializers.ValidationError("Workspace Schedules are required") return data diff --git a/apps/workspaces/apis/advanced_settings/triggers.py b/apps/workspaces/apis/advanced_settings/triggers.py index d094ffae..2430b9d1 100644 --- a/apps/workspaces/apis/advanced_settings/triggers.py +++ b/apps/workspaces/apis/advanced_settings/triggers.py @@ -1,26 +1,31 @@ -from apps.xero.queue import schedule_payment_creation, schedule_xero_objects_status_sync, schedule_reimbursements_sync from apps.workspaces.models import WorkspaceGeneralSettings +from apps.xero.queue import schedule_payment_creation, schedule_reimbursements_sync, schedule_xero_objects_status_sync class AdvancedSettingsTriggers: """ Class containing all triggers for advanced_configurations """ + @staticmethod - def run_workspace_general_settings_triggers(workspace_general_settings_instance: WorkspaceGeneralSettings): + def run_workspace_general_settings_triggers( + workspace_general_settings_instance: WorkspaceGeneralSettings, + ): """ Run workspace general settings triggers """ - schedule_payment_creation(workspace_general_settings_instance.sync_fyle_to_xero_payments,\ - workspace_general_settings_instance.workspace.id) + schedule_payment_creation( + workspace_general_settings_instance.sync_fyle_to_xero_payments, + workspace_general_settings_instance.workspace.id, + ) schedule_xero_objects_status_sync( sync_xero_to_fyle_payments=workspace_general_settings_instance.sync_xero_to_fyle_payments, - workspace_id=workspace_general_settings_instance.workspace.id + workspace_id=workspace_general_settings_instance.workspace.id, ) schedule_reimbursements_sync( sync_xero_to_fyle_payments=workspace_general_settings_instance.sync_xero_to_fyle_payments, - workspace_id=workspace_general_settings_instance.workspace.id + workspace_id=workspace_general_settings_instance.workspace.id, ) diff --git a/apps/workspaces/apis/advanced_settings/views.py b/apps/workspaces/apis/advanced_settings/views.py index e6d4e14c..b7fef686 100644 --- a/apps/workspaces/apis/advanced_settings/views.py +++ b/apps/workspaces/apis/advanced_settings/views.py @@ -1,11 +1,11 @@ from rest_framework import generics +from apps.workspaces.apis.advanced_settings.serializers import AdvancedSettingsSerializer from apps.workspaces.models import Workspace -from .serializers import AdvancedSettingsSerializer class AdvancedSettingsView(generics.RetrieveUpdateAPIView): serializer_class = AdvancedSettingsSerializer def get_object(self): - return Workspace.objects.filter(id=self.kwargs['workspace_id']).first() + return Workspace.objects.filter(id=self.kwargs["workspace_id"]).first() diff --git a/apps/workspaces/apis/clone_settings/helpers.py b/apps/workspaces/apis/clone_settings/helpers.py index 08bba2be..4ef86c30 100644 --- a/apps/workspaces/apis/clone_settings/helpers.py +++ b/apps/workspaces/apis/clone_settings/helpers.py @@ -1,4 +1,5 @@ from django.contrib.auth import get_user_model + from apps.workspaces.models import Workspace, WorkspaceGeneralSettings User = get_user_model() @@ -12,12 +13,17 @@ def get_latest_workspace(user_id: str): :return: workspace id / None """ user = User.objects.get(user_id=user_id) - user_workspaces = Workspace.objects.filter(user__in=[user]).values_list('id', flat=True) + user_workspaces = Workspace.objects.filter(user__in=[user]).values_list( + "id", flat=True + ) - workspace_general_setting = WorkspaceGeneralSettings.objects.filter( - workspace_id__in=user_workspaces, - workspace__onboarding_state='COMPLETE' - ).order_by('-updated_at').first() + workspace_general_setting = ( + WorkspaceGeneralSettings.objects.filter( + workspace_id__in=user_workspaces, workspace__onboarding_state="COMPLETE" + ) + .order_by("-updated_at") + .first() + ) if workspace_general_setting: return workspace_general_setting.workspace diff --git a/apps/workspaces/apis/clone_settings/serializers.py b/apps/workspaces/apis/clone_settings/serializers.py index a5b8a6ce..23a55764 100644 --- a/apps/workspaces/apis/clone_settings/serializers.py +++ b/apps/workspaces/apis/clone_settings/serializers.py @@ -1,14 +1,10 @@ -from apps.workspaces.models import Workspace -from rest_framework import serializers - from django.db import transaction +from rest_framework import serializers -from apps.workspaces.apis.export_settings.serializers import ( - ExportSettingsSerializer, ReadWriteSerializerMethodField -) - -from apps.workspaces.apis.import_settings.serializers import ImportSettingsSerializer from apps.workspaces.apis.advanced_settings.serializers import AdvancedSettingsSerializer +from apps.workspaces.apis.export_settings.serializers import ExportSettingsSerializer, ReadWriteSerializerMethodField +from apps.workspaces.apis.import_settings.serializers import ImportSettingsSerializer +from apps.workspaces.models import Workspace class CloneSettingsSerializer(serializers.ModelSerializer): @@ -20,29 +16,29 @@ class CloneSettingsSerializer(serializers.ModelSerializer): class Meta: model = Workspace fields = [ - 'workspace_id', - 'export_settings', - 'import_settings', - 'advanced_settings' + "workspace_id", + "export_settings", + "import_settings", + "advanced_settings", ] - read_only_fields = ['workspace_id'] + read_only_fields = ["workspace_id"] def get_workspace_id(self, instance): return instance.id - + def get_export_settings(self, instance): return ExportSettingsSerializer(instance).data def get_import_settings(self, instance): return ImportSettingsSerializer(instance).data - + def get_advanced_settings(self, instance): return AdvancedSettingsSerializer(instance).data - + def update(self, instance, validated): - export_settings = validated.pop('export_settings') - import_settings = validated.pop('import_settings') - advanced_settings = validated.pop('advanced_settings') + export_settings = validated.pop("export_settings") + import_settings = validated.pop("import_settings") + advanced_settings = validated.pop("advanced_settings") export_settings_serializer = ExportSettingsSerializer( instance, data=export_settings, partial=True @@ -56,11 +52,12 @@ def update(self, instance, validated): instance, data=advanced_settings, partial=True ) - if export_settings_serializer.is_valid(raise_exception=True) and \ - import_settings_serializer.is_valid(raise_exception=True) and \ - advanced_settings_serializer.is_valid(raise_exception=True): - - # Doing all these in a transaction block to make sure we revert + if ( + export_settings_serializer.is_valid(raise_exception=True) + and import_settings_serializer.is_valid(raise_exception=True) + and advanced_settings_serializer.is_valid(raise_exception=True) + ): + # Doing all these in a transaction block to make sure we revert # to old state when one of the serializer fails with transaction.atomic(): export_settings_serializer.save() @@ -68,15 +65,15 @@ def update(self, instance, validated): advanced_settings_serializer.save() return instance - + def validate(self, data): - if not data.get('export_settings'): - raise serializers.ValidationError('Export Settings are required') - - if not data.get('import_settings'): - raise serializers.ValidationError('Import Settings are required') - - if not data.get('advanced_settings'): - raise serializers.ValidationError('Advanced Settings are required') + if not data.get("export_settings"): + raise serializers.ValidationError("Export Settings are required") + + if not data.get("import_settings"): + raise serializers.ValidationError("Import Settings are required") + + if not data.get("advanced_settings"): + raise serializers.ValidationError("Advanced Settings are required") return data diff --git a/apps/workspaces/apis/clone_settings/views.py b/apps/workspaces/apis/clone_settings/views.py index 93094c50..6097b66d 100644 --- a/apps/workspaces/apis/clone_settings/views.py +++ b/apps/workspaces/apis/clone_settings/views.py @@ -1,12 +1,11 @@ from rest_framework import generics, status -from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from apps.workspaces.apis.clone_settings.helpers import get_latest_workspace +from apps.workspaces.apis.clone_settings.serializers import CloneSettingsSerializer from apps.workspaces.models import Workspace -from .helpers import get_latest_workspace -from .serializers import CloneSettingsSerializer - class CloneSettingsView(generics.RetrieveUpdateAPIView): serializer_class = CloneSettingsSerializer @@ -17,19 +16,17 @@ def get_object(self): return Workspace.objects.filter(id=latest_workspace.id).first() def put(self, request, **kwargs): - workspace_instance = Workspace.objects.get(id=kwargs['workspace_id']) - serializer = CloneSettingsSerializer(workspace_instance, data=request.data, partial=True) + workspace_instance = Workspace.objects.get(id=kwargs["workspace_id"]) + serializer = CloneSettingsSerializer( + workspace_instance, data=request.data, partial=True + ) if serializer.is_valid(raise_exception=True): serializer.save() - return Response( - data=serializer.data, - status=status.HTTP_200_OK - ) + return Response(data=serializer.data, status=status.HTTP_200_OK) class CloneSettingsExistsView(generics.RetrieveAPIView): - permission_classes = [IsAuthenticated] def get(self, request, *args, **kwargs): @@ -37,8 +34,8 @@ def get(self, request, *args, **kwargs): return Response( data={ - 'is_available': True if latest_workspace else False, - 'workspace_name': latest_workspace.name if latest_workspace else None + "is_available": True if latest_workspace else False, + "workspace_name": latest_workspace.name if latest_workspace else None, }, - status=status.HTTP_200_OK + status=status.HTTP_200_OK, ) diff --git a/apps/workspaces/apis/errors/serializers.py b/apps/workspaces/apis/errors/serializers.py index ff3c7a94..3fd7584a 100644 --- a/apps/workspaces/apis/errors/serializers.py +++ b/apps/workspaces/apis/errors/serializers.py @@ -1,6 +1,5 @@ -from rest_framework import serializers - from fyle_accounting_mappings.models import ExpenseAttribute +from rest_framework import serializers from apps.fyle.models import ExpenseGroup from apps.fyle.serializers import ExpenseSerializer @@ -11,29 +10,32 @@ class ExpenseAttributeSerializer(serializers.ModelSerializer): """ Serializer for Expense Attribute """ + class Meta: model = ExpenseAttribute - fields = '__all__' + fields = "__all__" class ExpenseGroupSerializer(serializers.ModelSerializer): """ Serializer for Expense Group """ + expenses = ExpenseSerializer(many=True) class Meta: model = ExpenseGroup - fields = '__all__' + fields = "__all__" class ErrorSerializer(serializers.ModelSerializer): """ Serializer for the Errors """ + expense_attribute = ExpenseAttributeSerializer() expense_group = ExpenseGroupSerializer() class Meta: model = Error - fields = '__all__' + fields = "__all__" diff --git a/apps/workspaces/apis/errors/views.py b/apps/workspaces/apis/errors/views.py index 9f892974..4fa4d255 100644 --- a/apps/workspaces/apis/errors/views.py +++ b/apps/workspaces/apis/errors/views.py @@ -1,32 +1,29 @@ from rest_framework import generics from apps.tasks.models import Error - -from .serializers import ErrorSerializer +from apps.workspaces.apis.errors.serializers import ErrorSerializer class ErrorsView(generics.ListAPIView): serializer_class = ErrorSerializer pagination_class = None - + def get_queryset(self): - type = self.request.query_params.get('type') - - is_resolved = self.request.query_params.get('is_resolved', None) + type = self.request.query_params.get("type") + + is_resolved = self.request.query_params.get("is_resolved", None) - params = { - 'workspace__id': self.kwargs.get('workspace_id') - } + params = {"workspace__id": self.kwargs.get("workspace_id")} - if is_resolved and is_resolved.lower() == 'true': + if is_resolved and is_resolved.lower() == "true": is_resolved = True - elif is_resolved and is_resolved.lower() == 'false': + elif is_resolved and is_resolved.lower() == "false": is_resolved = False if is_resolved is not None: - params['is_resolved'] = is_resolved + params["is_resolved"] = is_resolved if type: - params['type'] = type + params["type"] = type return Error.objects.filter(**params) diff --git a/apps/workspaces/apis/export_settings/serializers.py b/apps/workspaces/apis/export_settings/serializers.py index 24cf50c6..83a4d58b 100644 --- a/apps/workspaces/apis/export_settings/serializers.py +++ b/apps/workspaces/apis/export_settings/serializers.py @@ -1,11 +1,10 @@ -from apps.workspaces.models import Workspace, WorkspaceGeneralSettings -from rest_framework import serializers from fyle_accounting_mappings.models import MappingSetting +from rest_framework import serializers -from apps.workspaces.models import WorkspaceGeneralSettings -from apps.mappings.models import GeneralMapping from apps.fyle.models import ExpenseGroupSettings -from .triggers import ExportSettingsTrigger +from apps.mappings.models import GeneralMapping +from apps.workspaces.apis.export_settings.triggers import ExportSettingsTrigger +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings class ReadWriteSerializerMethodField(serializers.SerializerMethodField): @@ -16,26 +15,23 @@ class ReadWriteSerializerMethodField(serializers.SerializerMethodField): def __init__(self, method_name=None, **kwargs): self.method_name = method_name - kwargs['source'] = '*' + kwargs["source"] = "*" super(serializers.SerializerMethodField, self).__init__(**kwargs) def to_internal_value(self, data): - return { - self.field_name: data - } + return {self.field_name: data} class WorkspaceGeneralSettingsSerializer(serializers.ModelSerializer): - class Meta: model = WorkspaceGeneralSettings fields = [ - 'reimbursable_expenses_object', - 'corporate_credit_card_expenses_object', - 'auto_map_employees', - 'is_simplify_report_closure_enabled' + "reimbursable_expenses_object", + "corporate_credit_card_expenses_object", + "auto_map_employees", + "is_simplify_report_closure_enabled", ] - read_only_fields = ['is_simplify_report_closure_enabled'] + read_only_fields = ["is_simplify_report_closure_enabled"] class GeneralMappingsSerializer(serializers.ModelSerializer): @@ -43,31 +39,41 @@ class GeneralMappingsSerializer(serializers.ModelSerializer): class Meta: model = GeneralMapping - fields = ['bank_account'] + fields = ["bank_account"] def get_bank_account(self, instance): - return { - 'id': instance.bank_account_id, - 'name': instance.bank_account_name - } + return {"id": instance.bank_account_id, "name": instance.bank_account_name} + class ExpenseGroupSettingsSerializer(serializers.ModelSerializer): - reimbursable_expense_group_fields = serializers.ListField(allow_null=True, required=False) - reimbursable_export_date_type = serializers.CharField(allow_null=True, allow_blank=True, required=False) - reimbursable_expense_state = serializers.CharField(allow_null=True, allow_blank=True, required=False) - corporate_credit_card_expense_group_fields = serializers.ListField(allow_null=True, required=False) - ccc_export_date_type = serializers.CharField(allow_null=True, allow_blank=True, required=False) - ccc_expense_state = serializers.CharField(allow_null=True, allow_blank=True, required=False) + reimbursable_expense_group_fields = serializers.ListField( + allow_null=True, required=False + ) + reimbursable_export_date_type = serializers.CharField( + allow_null=True, allow_blank=True, required=False + ) + reimbursable_expense_state = serializers.CharField( + allow_null=True, allow_blank=True, required=False + ) + corporate_credit_card_expense_group_fields = serializers.ListField( + allow_null=True, required=False + ) + ccc_export_date_type = serializers.CharField( + allow_null=True, allow_blank=True, required=False + ) + ccc_expense_state = serializers.CharField( + allow_null=True, allow_blank=True, required=False + ) class Meta: model = ExpenseGroupSettings fields = [ - 'reimbursable_expense_group_fields', - 'reimbursable_export_date_type', - 'reimbursable_expense_state', - 'corporate_credit_card_expense_group_fields', - 'ccc_export_date_type', - 'ccc_expense_state' + "reimbursable_expense_group_fields", + "reimbursable_export_date_type", + "reimbursable_expense_state", + "corporate_credit_card_expense_group_fields", + "ccc_export_date_type", + "ccc_expense_state", ] @@ -80,104 +86,146 @@ class ExportSettingsSerializer(serializers.ModelSerializer): class Meta: model = Workspace fields = [ - 'workspace_general_settings', - 'expense_group_settings', - 'general_mappings', - 'workspace_id' + "workspace_general_settings", + "expense_group_settings", + "general_mappings", + "workspace_id", ] - read_only_fields = ['workspace_id'] + read_only_fields = ["workspace_id"] def get_workspace_id(self, instance): return instance.id - + def update(self, instance, validated): - workspace_general_settings = validated.pop('workspace_general_settings') - expense_group_settings = validated.pop('expense_group_settings') - general_mappings = validated.pop('general_mappings') + workspace_general_settings = validated.pop("workspace_general_settings") + expense_group_settings = validated.pop("expense_group_settings") + general_mappings = validated.pop("general_mappings") workspace_id = instance.id - workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter(workspace_id=workspace_id).first() + workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter( + workspace_id=workspace_id + ).first() map_merchant_to_contact = True if workspace_general_settings_instance: - map_merchant_to_contact = workspace_general_settings_instance.map_merchant_to_contact + map_merchant_to_contact = ( + workspace_general_settings_instance.map_merchant_to_contact + ) - workspace_general_settings_instance, _ = WorkspaceGeneralSettings.objects.update_or_create( + ( + workspace_general_settings_instance, + _, + ) = WorkspaceGeneralSettings.objects.update_or_create( workspace_id=workspace_id, defaults={ - 'auto_map_employees': workspace_general_settings['auto_map_employees'], - 'reimbursable_expenses_object': workspace_general_settings['reimbursable_expenses_object'], - 'corporate_credit_card_expenses_object': workspace_general_settings['corporate_credit_card_expenses_object'], - 'map_merchant_to_contact': map_merchant_to_contact - } + "auto_map_employees": workspace_general_settings["auto_map_employees"], + "reimbursable_expenses_object": workspace_general_settings[ + "reimbursable_expenses_object" + ], + "corporate_credit_card_expenses_object": workspace_general_settings[ + "corporate_credit_card_expenses_object" + ], + "map_merchant_to_contact": map_merchant_to_contact, + }, ) - expense_group_settings['import_card_credits'] = False + expense_group_settings["import_card_credits"] = False - if workspace_general_settings['corporate_credit_card_expenses_object'] == 'BANK TRANSACTION': + if ( + workspace_general_settings["corporate_credit_card_expenses_object"] + == "BANK TRANSACTION" + ): MappingSetting.objects.update_or_create( - destination_field='BANK_ACCOUNT', + destination_field="BANK_ACCOUNT", workspace_id=instance.id, defaults={ - 'source_field': 'CORPORATE_CARD', - 'import_to_fyle': False, - 'is_custom': False - } + "source_field": "CORPORATE_CARD", + "import_to_fyle": False, + "is_custom": False, + }, ) - expense_group_settings['import_card_credits'] = True - - ExportSettingsTrigger.run_workspace_general_settings_triggers(workspace_general_settings_instance) - - expense_group_settings_instance = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) - expense_group_settings['expense_state'] = expense_group_settings_instance.expense_state - expense_group_settings['reimbursable_expense_group_fields'] = expense_group_settings_instance.reimbursable_expense_group_fields - expense_group_settings['corporate_credit_card_expense_group_fields'] = expense_group_settings_instance.corporate_credit_card_expense_group_fields - - if 'expense_state' in expense_group_settings and not expense_group_settings['expense_state']: - expense_group_settings['expense_state'] = 'PAYMENT_PROCESSING' + expense_group_settings["import_card_credits"] = True - if not expense_group_settings['reimbursable_export_date_type']: - expense_group_settings['reimbursable_export_date_type'] = 'current_date' - - if not expense_group_settings['ccc_export_date_type']: - expense_group_settings['ccc_export_date_type'] = 'spent_at' + ExportSettingsTrigger.run_workspace_general_settings_triggers( + workspace_general_settings_instance + ) - ExpenseGroupSettings.update_expense_group_settings(expense_group_settings, workspace_id=workspace_id) + expense_group_settings_instance = ExpenseGroupSettings.objects.get( + workspace_id=workspace_id + ) + expense_group_settings[ + "expense_state" + ] = expense_group_settings_instance.expense_state + expense_group_settings[ + "reimbursable_expense_group_fields" + ] = expense_group_settings_instance.reimbursable_expense_group_fields + expense_group_settings[ + "corporate_credit_card_expense_group_fields" + ] = expense_group_settings_instance.corporate_credit_card_expense_group_fields + + if ( + "expense_state" in expense_group_settings + and not expense_group_settings["expense_state"] + ): + expense_group_settings["expense_state"] = "PAYMENT_PROCESSING" + + if not expense_group_settings["reimbursable_export_date_type"]: + expense_group_settings["reimbursable_export_date_type"] = "current_date" + + if not expense_group_settings["ccc_export_date_type"]: + expense_group_settings["ccc_export_date_type"] = "spent_at" + + ExpenseGroupSettings.update_expense_group_settings( + expense_group_settings, workspace_id=workspace_id + ) GeneralMapping.objects.update_or_create( workspace=instance, defaults={ - 'bank_account_name': general_mappings.get('bank_account').get('name'), - 'bank_account_id': general_mappings.get('bank_account').get('id') - } + "bank_account_name": general_mappings.get("bank_account").get("name"), + "bank_account_id": general_mappings.get("bank_account").get("id"), + }, ) - if instance.onboarding_state == 'EXPORT_SETTINGS': - instance.onboarding_state = 'IMPORT_SETTINGS' + if instance.onboarding_state == "EXPORT_SETTINGS": + instance.onboarding_state = "IMPORT_SETTINGS" instance.save() return instance - - def validate(self, data): - if not data.get('workspace_general_settings'): - raise serializers.ValidationError('Workspace general settings are required') - - if not data.get('expense_group_settings'): - raise serializers.ValidationError('Expense group settings are required') - if not data.get('general_mappings'): - raise serializers.ValidationError('General mappings are required') - - if data['workspace_general_settings']['corporate_credit_card_expenses_object'] == 'BANK TRANSACTION' \ - and not data['general_mappings']['bank_account']['id']: - raise serializers.ValidationError('Bank account id is required') - - if data['workspace_general_settings']['corporate_credit_card_expenses_object'] == 'BANK TRANSACTION' \ - and not data['general_mappings']['bank_account']['name']: - raise serializers.ValidationError('Bank account name is required') - - if data.get('workspace_general_settings').get('auto_map_employees') and \ - data.get('workspace_general_settings').get('auto_map_employees') not in ['EMAIL', 'NAME', 'EMPLOYEE_CODE']: - raise serializers.ValidationError('auto_map_employees can have only EMAIL / NAME / EMPLOYEE_CODE') + def validate(self, data): + if not data.get("workspace_general_settings"): + raise serializers.ValidationError("Workspace general settings are required") + + if not data.get("expense_group_settings"): + raise serializers.ValidationError("Expense group settings are required") + + if not data.get("general_mappings"): + raise serializers.ValidationError("General mappings are required") + + if ( + data["workspace_general_settings"]["corporate_credit_card_expenses_object"] + == "BANK TRANSACTION" + and not data["general_mappings"]["bank_account"]["id"] + ): + raise serializers.ValidationError("Bank account id is required") + + if ( + data["workspace_general_settings"]["corporate_credit_card_expenses_object"] + == "BANK TRANSACTION" + and not data["general_mappings"]["bank_account"]["name"] + ): + raise serializers.ValidationError("Bank account name is required") + + if data.get("workspace_general_settings").get( + "auto_map_employees" + ) and data.get("workspace_general_settings").get("auto_map_employees") not in [ + "EMAIL", + "NAME", + "EMPLOYEE_CODE", + ]: + raise serializers.ValidationError( + "auto_map_employees can have only EMAIL / NAME / EMPLOYEE_CODE" + ) return data diff --git a/apps/workspaces/apis/export_settings/triggers.py b/apps/workspaces/apis/export_settings/triggers.py index 65f1e46a..4b609489 100644 --- a/apps/workspaces/apis/export_settings/triggers.py +++ b/apps/workspaces/apis/export_settings/triggers.py @@ -1,6 +1,7 @@ +from fyle_accounting_mappings.models import MappingSetting + from apps.mappings.queue import schedule_auto_map_employees from apps.workspaces.models import WorkspaceGeneralSettings -from fyle_accounting_mappings.models import MappingSetting from apps.workspaces.utils import delete_cards_mapping_settings, schedule_or_delete_import_supplier_schedule @@ -8,25 +9,30 @@ class ExportSettingsTrigger: """ Class containing all triggers for Export Settings """ + @staticmethod - def run_workspace_general_settings_triggers(workspace_general_settings_instance: WorkspaceGeneralSettings): + def run_workspace_general_settings_triggers( + workspace_general_settings_instance: WorkspaceGeneralSettings, + ): """ Run workspace general settings triggers """ MappingSetting.objects.update_or_create( - destination_field='CONTACT', + destination_field="CONTACT", workspace_id=workspace_general_settings_instance.workspace_id, - source_field='EMPLOYEE', + source_field="EMPLOYEE", defaults={ - 'import_to_fyle': False, - 'is_custom': False, - 'source_placeholder': None - } + "import_to_fyle": False, + "is_custom": False, + "source_placeholder": None, + }, ) delete_cards_mapping_settings(workspace_general_settings_instance) schedule_or_delete_import_supplier_schedule(workspace_general_settings_instance) - schedule_auto_map_employees(workspace_general_settings_instance.auto_map_employees, - workspace_general_settings_instance.workspace_id) + schedule_auto_map_employees( + workspace_general_settings_instance.auto_map_employees, + workspace_general_settings_instance.workspace_id, + ) diff --git a/apps/workspaces/apis/export_settings/views.py b/apps/workspaces/apis/export_settings/views.py index f9e480f8..3891b49d 100644 --- a/apps/workspaces/apis/export_settings/views.py +++ b/apps/workspaces/apis/export_settings/views.py @@ -1,12 +1,11 @@ from rest_framework import generics +from apps.workspaces.apis.export_settings.serializers import ExportSettingsSerializer from apps.workspaces.models import Workspace -from .serializers import ExportSettingsSerializer - class ExportSettingsView(generics.RetrieveUpdateAPIView): serializer_class = ExportSettingsSerializer def get_object(self): - return Workspace.objects.filter(id=self.kwargs['workspace_id']).first() + return Workspace.objects.filter(id=self.kwargs["workspace_id"]).first() diff --git a/apps/workspaces/apis/import_settings/serializers.py b/apps/workspaces/apis/import_settings/serializers.py index 427720d3..de55c291 100644 --- a/apps/workspaces/apis/import_settings/serializers.py +++ b/apps/workspaces/apis/import_settings/serializers.py @@ -1,13 +1,11 @@ -from rest_framework import serializers -from fyle_accounting_mappings.models import MappingSetting from django.db import transaction from django.db.models import Q +from fyle_accounting_mappings.models import MappingSetting +from rest_framework import serializers -from apps.workspaces.models import Workspace, WorkspaceGeneralSettings -from apps.workspaces.models import WorkspaceGeneralSettings from apps.mappings.models import GeneralMapping -from .triggers import ImportSettingsTrigger - +from apps.workspaces.apis.import_settings.triggers import ImportSettingsTrigger +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings class MappingSettingFilteredListSerializer(serializers.ListSerializer): @@ -18,7 +16,17 @@ class MappingSettingFilteredListSerializer(serializers.ListSerializer): """ def to_representation(self, data): - data = data.filter(~Q(destination_field__in=['TAX_CODE', 'ACCOUNT', 'BANK_ACCOUNT', 'CUSTOMER', 'CONTACT'])) + data = data.filter( + ~Q( + destination_field__in=[ + "TAX_CODE", + "ACCOUNT", + "BANK_ACCOUNT", + "CUSTOMER", + "CONTACT", + ] + ) + ) return super(MappingSettingFilteredListSerializer, self).to_representation(data) @@ -30,13 +38,11 @@ class ReadWriteSerializerMethodField(serializers.SerializerMethodField): def __init__(self, method_name=None, **kwargs): self.method_name = method_name - kwargs['source'] = '*' + kwargs["source"] = "*" super(serializers.SerializerMethodField, self).__init__(**kwargs) def to_internal_value(self, data): - return { - self.field_name: data - } + return {self.field_name: data} class MappingSettingSerializer(serializers.ModelSerializer): @@ -44,18 +50,24 @@ class Meta: model = MappingSetting list_serializer_class = MappingSettingFilteredListSerializer fields = [ - 'source_field', - 'destination_field', - 'import_to_fyle', - 'is_custom', - 'source_placeholder' + "source_field", + "destination_field", + "import_to_fyle", + "is_custom", + "source_placeholder", ] class WorkspaceGeneralSettingsSerializer(serializers.ModelSerializer): class Meta: model = WorkspaceGeneralSettings - fields = ['import_categories', 'charts_of_accounts', 'import_tax_codes', 'import_customers', 'import_suppliers_as_merchants'] + fields = [ + "import_categories", + "charts_of_accounts", + "import_tax_codes", + "import_customers", + "import_suppliers_as_merchants", + ] class GeneralMappingsSerializer(serializers.ModelSerializer): @@ -63,14 +75,12 @@ class GeneralMappingsSerializer(serializers.ModelSerializer): class Meta: model = GeneralMapping - fields = [ - 'default_tax_code' - ] + fields = ["default_tax_code"] def get_default_tax_code(self, instance): return { - 'name': instance.default_tax_code_name, - 'id': instance.default_tax_code_id + "name": instance.default_tax_code_name, + "id": instance.default_tax_code_id, } @@ -83,101 +93,131 @@ class ImportSettingsSerializer(serializers.ModelSerializer): class Meta: model = Workspace fields = [ - 'workspace_general_settings', - 'general_mappings', - 'mapping_settings', - 'workspace_id' + "workspace_general_settings", + "general_mappings", + "mapping_settings", + "workspace_id", ] - read_only_fields = ['workspace_id'] + read_only_fields = ["workspace_id"] def get_workspace_id(self, instance): return instance.id - + def update(self, instance, validated): - workspace_general_settings = validated.pop('workspace_general_settings') - general_mappings = validated.pop('general_mappings') - mapping_settings = validated.pop('mapping_settings') + workspace_general_settings = validated.pop("workspace_general_settings") + general_mappings = validated.pop("general_mappings") + mapping_settings = validated.pop("mapping_settings") with transaction.atomic(): - workspace_general_settings_instance, _ = WorkspaceGeneralSettings.objects.update_or_create( + ( + workspace_general_settings_instance, + _, + ) = WorkspaceGeneralSettings.objects.update_or_create( workspace=instance, defaults={ - 'import_categories': workspace_general_settings.get('import_categories'), - 'charts_of_accounts': workspace_general_settings.get('charts_of_accounts'), - 'import_tax_codes': workspace_general_settings.get('import_tax_codes'), - 'import_customers': workspace_general_settings.get('import_customers'), - 'import_suppliers_as_merchants': workspace_general_settings.get('import_suppliers_as_merchants') - } + "import_categories": workspace_general_settings.get( + "import_categories" + ), + "charts_of_accounts": workspace_general_settings.get( + "charts_of_accounts" + ), + "import_tax_codes": workspace_general_settings.get( + "import_tax_codes" + ), + "import_customers": workspace_general_settings.get( + "import_customers" + ), + "import_suppliers_as_merchants": workspace_general_settings.get( + "import_suppliers_as_merchants" + ), + }, ) GeneralMapping.objects.update_or_create( workspace=instance, defaults={ - 'default_tax_code_name': general_mappings.get('default_tax_code').get('name'), - 'default_tax_code_id': general_mappings.get('default_tax_code').get('id') - } + "default_tax_code_name": general_mappings.get( + "default_tax_code" + ).get("name"), + "default_tax_code_id": general_mappings.get("default_tax_code").get( + "id" + ), + }, ) trigger: ImportSettingsTrigger = ImportSettingsTrigger( workspace_general_settings=workspace_general_settings, mapping_settings=mapping_settings, - workspace_id=instance.id + workspace_id=instance.id, ) - trigger.post_save_workspace_general_settings(workspace_general_settings_instance) + trigger.post_save_workspace_general_settings( + workspace_general_settings_instance + ) trigger.pre_save_mapping_settings() - - if workspace_general_settings['import_tax_codes']: - mapping_settings.append({ - 'source_field': 'TAX_GROUP', - 'destination_field': 'TAX_CODE', - 'import_to_fyle': True, - 'is_custom': False - }) - - if workspace_general_settings['import_customers']: - mapping_settings.append({ - 'source_field': 'PROJECT', - 'destination_field': 'CUSTOMER', - 'import_to_fyle': True, - 'is_custom': False - }) - - mapping_settings.append({ - 'source_field': 'CATEGORY', - 'destination_field': 'ACCOUNT', - 'import_to_fyle': True, - 'is_custom': False - }) - - + + if workspace_general_settings["import_tax_codes"]: + mapping_settings.append( + { + "source_field": "TAX_GROUP", + "destination_field": "TAX_CODE", + "import_to_fyle": True, + "is_custom": False, + } + ) + + if workspace_general_settings["import_customers"]: + mapping_settings.append( + { + "source_field": "PROJECT", + "destination_field": "CUSTOMER", + "import_to_fyle": True, + "is_custom": False, + } + ) + + mapping_settings.append( + { + "source_field": "CATEGORY", + "destination_field": "ACCOUNT", + "import_to_fyle": True, + "is_custom": False, + } + ) + for setting in mapping_settings: MappingSetting.objects.update_or_create( - destination_field=setting['destination_field'], + destination_field=setting["destination_field"], workspace_id=instance.id, defaults={ - 'source_field': setting['source_field'], - 'import_to_fyle': setting['import_to_fyle'] if 'import_to_fyle' in setting else False, - 'is_custom': setting['is_custom'] if 'is_custom' in setting else False, - 'source_placeholder': setting['source_placeholder'] if 'source_placeholder' in setting else None - } + "source_field": setting["source_field"], + "import_to_fyle": setting["import_to_fyle"] + if "import_to_fyle" in setting + else False, + "is_custom": setting["is_custom"] + if "is_custom" in setting + else False, + "source_placeholder": setting["source_placeholder"] + if "source_placeholder" in setting + else None, + }, ) - + trigger.post_save_mapping_settings(workspace_general_settings_instance) - if instance.onboarding_state == 'IMPORT_SETTINGS': - instance.onboarding_state = 'ADVANCED_SETTINGS' + if instance.onboarding_state == "IMPORT_SETTINGS": + instance.onboarding_state = "ADVANCED_SETTINGS" instance.save() return instance def validate(self, data): - if not data.get('workspace_general_settings'): - raise serializers.ValidationError('Workspace general settings are required') + if not data.get("workspace_general_settings"): + raise serializers.ValidationError("Workspace general settings are required") - if data.get('mapping_settings') is None: - raise serializers.ValidationError('Mapping settings are required') + if data.get("mapping_settings") is None: + raise serializers.ValidationError("Mapping settings are required") - if not data.get('general_mappings'): - raise serializers.ValidationError('General mappings are required') + if not data.get("general_mappings"): + raise serializers.ValidationError("General mappings are required") return data diff --git a/apps/workspaces/apis/import_settings/triggers.py b/apps/workspaces/apis/import_settings/triggers.py index e0710756..8b362bfa 100644 --- a/apps/workspaces/apis/import_settings/triggers.py +++ b/apps/workspaces/apis/import_settings/triggers.py @@ -1,37 +1,49 @@ from typing import Dict, List + from django.db.models import Q +from fyle_accounting_mappings.models import MappingSetting -from apps.mappings.queue import schedule_cost_centers_creation, schedule_tax_groups_creation,\ - schedule_fyle_attributes_creation from apps.mappings.helpers import schedule_or_delete_fyle_import_tasks +from apps.mappings.queue import ( + schedule_cost_centers_creation, + schedule_fyle_attributes_creation, + schedule_tax_groups_creation, +) from apps.workspaces.models import WorkspaceGeneralSettings -from fyle_accounting_mappings.models import MappingSetting class ImportSettingsTrigger: """ All the post save actions of Import Settings API """ - def __init__(self, workspace_general_settings: Dict, mapping_settings: List[Dict], workspace_id): + + def __init__( + self, + workspace_general_settings: Dict, + mapping_settings: List[Dict], + workspace_id, + ): self.__workspace_general_settings = workspace_general_settings self.__mapping_settings = mapping_settings self.__workspace_id = workspace_id - def post_save_workspace_general_settings(self, workspace_general_settings_instance: WorkspaceGeneralSettings): + def post_save_workspace_general_settings( + self, workspace_general_settings_instance: WorkspaceGeneralSettings + ): """ Post save action for workspace general settings """ - #This will take care of auto creating tax mappings + # This will take care of auto creating tax mappings schedule_tax_groups_creation( - import_tax_codes=self.__workspace_general_settings.get('import_tax_codes'), - workspace_id=self.__workspace_id + import_tax_codes=self.__workspace_general_settings.get("import_tax_codes"), + workspace_id=self.__workspace_id, ) - if not self.__workspace_general_settings.get('import_customers'): + if not self.__workspace_general_settings.get("import_customers"): MappingSetting.objects.filter( - workspace_id=self.__workspace_id, - source_field='PROJECT', - destination_field='CUSTOMER' + workspace_id=self.__workspace_id, + source_field="PROJECT", + destination_field="CUSTOMER", ).delete() schedule_or_delete_fyle_import_tasks(workspace_general_settings_instance) @@ -44,36 +56,44 @@ def pre_save_mapping_settings(self): cost_center_mapping_available = False - #Here we are checking if any of the mappings have PROJECT and COST_CENTER mapping + # Here we are checking if any of the mappings have PROJECT and COST_CENTER mapping for setting in mapping_settings: - if setting['source_field'] == 'COST_CENTER': + if setting["source_field"] == "COST_CENTER": cost_center_mapping_available = True - + if not cost_center_mapping_available: schedule_cost_centers_creation(False, self.__workspace_id) - - #Schdule for auto creating custom field mappings + + # Schdule for auto creating custom field mappings schedule_fyle_attributes_creation(self.__workspace_id) - def post_save_mapping_settings(self, workspace_general_settings_instance: WorkspaceGeneralSettings): + def post_save_mapping_settings( + self, workspace_general_settings_instance: WorkspaceGeneralSettings + ): """ Post save actions for mapping settings Here we need to clear out the data from the mapping-settings table for consecutive runs. """ - #We first need to avoid deleting mapping-settings that are always necessary. - destination_fields = ['TAX_CODE', 'ACCOUNT', 'BANK_ACCOUNT', 'CUSTOMER', 'CONTACT'] - - #Here we are filtering out the mapping_settings payload and adding the destination-fields that are present in the payload - #So that we avoid deleting them. + # We first need to avoid deleting mapping-settings that are always necessary. + destination_fields = [ + "TAX_CODE", + "ACCOUNT", + "BANK_ACCOUNT", + "CUSTOMER", + "CONTACT", + ] + + # Here we are filtering out the mapping_settings payload and adding the destination-fields that are present in the payload + # So that we avoid deleting them. for setting in self.__mapping_settings: - if setting['destination_field'] not in destination_fields: - destination_fields.append(setting['destination_field']) - - #Now that we have all the system necessary mapping-settings and the mapping-settings in the payload - #This query will take care of deleting all the redundant mapping-settings that are not required. + if setting["destination_field"] not in destination_fields: + destination_fields.append(setting["destination_field"]) + + # Now that we have all the system necessary mapping-settings and the mapping-settings in the payload + # This query will take care of deleting all the redundant mapping-settings that are not required. MappingSetting.objects.filter( ~Q(destination_field__in=destination_fields), - workspace_id=self.__workspace_id + workspace_id=self.__workspace_id, ).delete() schedule_or_delete_fyle_import_tasks(workspace_general_settings_instance) diff --git a/apps/workspaces/apis/import_settings/views.py b/apps/workspaces/apis/import_settings/views.py index e4d337fb..d642e154 100644 --- a/apps/workspaces/apis/import_settings/views.py +++ b/apps/workspaces/apis/import_settings/views.py @@ -1,12 +1,11 @@ from rest_framework import generics +from apps.workspaces.apis.import_settings.serializers import ImportSettingsSerializer from apps.workspaces.models import Workspace -from .serializers import ImportSettingsSerializer - class ImportSettingsView(generics.RetrieveUpdateAPIView): serializer_class = ImportSettingsSerializer def get_object(self): - return Workspace.objects.filter(id=self.kwargs['workspace_id']).first() + return Workspace.objects.filter(id=self.kwargs["workspace_id"]).first() diff --git a/apps/workspaces/apis/urls.py b/apps/workspaces/apis/urls.py index 73ab81e4..5d48c961 100644 --- a/apps/workspaces/apis/urls.py +++ b/apps/workspaces/apis/urls.py @@ -1,15 +1,15 @@ from django.urls import path -from .export_settings.views import ExportSettingsView -from .import_settings.views import ImportSettingsView -from .advanced_settings.views import AdvancedSettingsView -from .clone_settings.views import CloneSettingsView -from .errors.views import ErrorsView +from apps.workspaces.apis.advanced_settings.views import AdvancedSettingsView +from apps.workspaces.apis.clone_settings.views import CloneSettingsView +from apps.workspaces.apis.errors.views import ErrorsView +from apps.workspaces.apis.export_settings.views import ExportSettingsView +from apps.workspaces.apis.import_settings.views import ImportSettingsView urlpatterns = [ - path('/export_settings/', ExportSettingsView.as_view()), - path('/import_settings/', ImportSettingsView.as_view()), - path('/advanced_settings/', AdvancedSettingsView.as_view()), - path('/clone_settings/', CloneSettingsView.as_view()), - path('/errors/', ErrorsView.as_view()) + path("/export_settings/", ExportSettingsView.as_view()), + path("/import_settings/", ImportSettingsView.as_view()), + path("/advanced_settings/", AdvancedSettingsView.as_view()), + path("/clone_settings/", CloneSettingsView.as_view()), + path("/errors/", ErrorsView.as_view()), ] diff --git a/apps/workspaces/apps.py b/apps/workspaces/apps.py index f15bcbd8..670449b0 100644 --- a/apps/workspaces/apps.py +++ b/apps/workspaces/apps.py @@ -2,4 +2,4 @@ class WorkspacesConfig(AppConfig): - name = 'workspaces' + name = "workspaces" diff --git a/apps/workspaces/email.py b/apps/workspaces/email.py index ed6a4cef..a7e9d436 100644 --- a/apps/workspaces/email.py +++ b/apps/workspaces/email.py @@ -1,88 +1,94 @@ from datetime import date from typing import List -from django.core.mail import EmailMessage -from django.template.loader import render_to_string from django.conf import settings +from django.core.mail import EmailMessage from django.db.models import Q -from apps.mappings.models import TenantMapping - -from apps.tasks.models import TaskLog -from apps.workspaces.models import WorkspaceSchedule -from apps.tasks.models import Error +from django.template.loader import render_to_string from fyle_accounting_mappings.models import ExpenseAttribute -from apps.workspaces.models import Workspace + +from apps.mappings.models import TenantMapping +from apps.tasks.models import Error, TaskLog +from apps.workspaces.models import Workspace, WorkspaceSchedule def get_failed_task_logs_count(workspace_id: int) -> int: """ Returns the count of failed TaskLog objects that match certain criteria. - + Args: workspace_id (int): The ID of the workspace. - + Returns: int: The count of failed TaskLog objects. """ return TaskLog.objects.filter( - ~Q(type__in=['CREATING_PAYMENT', 'FETCHING_EXPENSES']), + ~Q(type__in=["CREATING_PAYMENT", "FETCHING_EXPENSES"]), workspace_id=workspace_id, - status='FAILED', + status="FAILED", ).count() -def get_admin_name(workspace_id: int, admin_email: str, ws_schedule: WorkspaceSchedule) -> str: +def get_admin_name( + workspace_id: int, admin_email: str, ws_schedule: WorkspaceSchedule +) -> str: """ Returns the name of the admin associated with the given email address. - + Args: workspace_id (int): The ID of the workspace. admin_email (str): The email address of the admin. ws_schedule (WorkspaceSchedule): The workspace schedule. - + Returns: str: The full name of the admin. """ - attribute = ExpenseAttribute.objects.filter(workspace_id=workspace_id, value=admin_email).first() + attribute = ExpenseAttribute.objects.filter( + workspace_id=workspace_id, value=admin_email + ).first() if attribute: - return attribute.detail['full_name'] + return attribute.detail["full_name"] else: for data in ws_schedule.additional_email_options: - if data['email'] == admin_email: - return data['name'] + if data["email"] == admin_email: + return data["name"] def get_errors(workspace_id: int) -> List[Error]: """ Returns a list of Error objects that match certain criteria. - + Args: workspace_id (int): The ID of the workspace. - + Returns: List[Error]: A list of Error objects. """ - return list(Error.objects.filter(workspace_id=workspace_id, is_resolved=False).order_by('id')[:10]) + return list( + Error.objects.filter(workspace_id=workspace_id, is_resolved=False).order_by( + "id" + )[:10] + ) def render_email_template(context: dict) -> str: """ Renders an email template with the provided context. - + Args: context (dict): The context to use when rendering the template. - + Returns: str: The rendered template as a string. """ - return render_to_string('mail_template.html', context) + return render_to_string("mail_template.html", context) def send_email_notification(admin_email: str, message: str): """ Sends an email notification to a specified admin email address. - + Args: admin_email (str): The email address of the admin. message (str): The message to include in the email. @@ -91,7 +97,7 @@ def send_email_notification(admin_email: str, message: str): subject="Export To Xero Failed", body=message, from_email=settings.EMAIL, - to=[admin_email] + to=[admin_email], ) mail.content_subtype = "html" @@ -106,17 +112,17 @@ def send_failure_notification_email( tenant_detail: TenantMapping, errors: List[Error], ): - error_types = {error.type.title().replace('_', ' ') for error in errors} + error_types = {error.type.title().replace("_", " ") for error in errors} context = { - 'name': admin_name, - 'errors_count': task_logs_count, - 'fyle_company': workspace.name, - 'xero_tenant': tenant_detail.tenant_name, - 'export_time': workspace.last_synced_at.strftime("%d %b %Y | %H:%M"), - 'year': date.today().year, - 'app_url': "{0}/workspaces/main/dashboard".format(settings.XERO_APP_URL), - 'errors': errors, - 'error_type': ', '.join(error_types) + "name": admin_name, + "errors_count": task_logs_count, + "fyle_company": workspace.name, + "xero_tenant": tenant_detail.tenant_name, + "export_time": workspace.last_synced_at.strftime("%d %b %Y | %H:%M"), + "year": date.today().year, + "app_url": "{0}/workspaces/main/dashboard".format(settings.XERO_APP_URL), + "errors": errors, + "error_type": ", ".join(error_types), } message = render_email_template(context) send_email_notification(admin_email, message) diff --git a/apps/workspaces/migrations/0033_auto_20230315_1034.py b/apps/workspaces/migrations/0033_auto_20230315_1034.py index b87b6b42..7d8d63af 100644 --- a/apps/workspaces/migrations/0033_auto_20230315_1034.py +++ b/apps/workspaces/migrations/0033_auto_20230315_1034.py @@ -26,4 +26,4 @@ class Migration(migrations.Migration): name='error_count', field=models.IntegerField(help_text='Number of errors in export', null=True), ) - ] \ No newline at end of file + ] diff --git a/apps/workspaces/models.py b/apps/workspaces/models.py index 92e2a1a0..2b20a0da 100644 --- a/apps/workspaces/models.py +++ b/apps/workspaces/models.py @@ -1,177 +1,280 @@ """ Workspace Models """ +from django.contrib.auth import get_user_model +from django.contrib.postgres.fields import ArrayField from django.db import models from django.db.models import JSONField -from django.contrib.postgres.fields import ArrayField -from django.contrib.auth import get_user_model from django_q.models import Schedule User = get_user_model() ONBOARDING_STATE_CHOICES = ( - ('CONNECTION', 'CONNECTION'), - ('EXPORT_SETTINGS', 'EXPORT_SETTINGS'), - ('IMPORT_SETTINGS', 'IMPORT_SETTINGS'), - ('ADVANCED_CONFIGURATION', 'ADVANCED_CONFIGURATION'), - ('COMPLETE', 'COMPLETE') + ("CONNECTION", "CONNECTION"), + ("EXPORT_SETTINGS", "EXPORT_SETTINGS"), + ("IMPORT_SETTINGS", "IMPORT_SETTINGS"), + ("ADVANCED_CONFIGURATION", "ADVANCED_CONFIGURATION"), + ("COMPLETE", "COMPLETE"), ) -#add or remove this after discussion. +# add or remove this after discussion. AUTO_MAP_EMPLOYEE = ( - ('EMAIL', 'EMAIL'), - ('NAME', 'NAME'), - ('EMPLOYEE_CODE', 'EMPLOYEE_CODE') + ("EMAIL", "EMAIL"), + ("NAME", "NAME"), + ("EMPLOYEE_CODE", "EMPLOYEE_CODE"), ) -APP_VERSION_CHOICES = ( - ('v1', 'v1'), - ('v2', 'v2') -) +APP_VERSION_CHOICES = (("v1", "v1"), ("v2", "v2")) + +EXPORT_MODE_CHOICES = (("MANUAL", "MANUAL"), ("AUTO", "AUTO")) -EXPORT_MODE_CHOICES = ( - ('MANUAL', 'MANUAL'), - ('AUTO', 'AUTO') -) def get_default_chart_of_accounts(): - return ['EXPENSE'] + return ["EXPENSE"] + def get_default_onboarding_state(): - return 'CONNECTION' + return "CONNECTION" + class Workspace(models.Model): """ Workspace model """ - id = models.AutoField(primary_key=True, help_text='Unique Id to identify a workspace') - name = models.CharField(max_length=255, help_text='Name of the workspace') - user = models.ManyToManyField(User, help_text='Reference to users table') - fyle_org_id = models.CharField(max_length=255, help_text='org id', unique=True) - fyle_currency = models.CharField(max_length=5, help_text='Fyle Currency', null=True) - xero_currency = models.CharField(max_length=5, help_text='Xero Currency', null=True) - app_version = models.CharField(max_length=2, help_text='App version', default='v2', choices=APP_VERSION_CHOICES) - xero_short_code = models.CharField(max_length=30, help_text='Xero short code', null=True, blank=True) - last_synced_at = models.DateTimeField(help_text='Datetime when expenses were pulled last', null=True) - ccc_last_synced_at = models.DateTimeField(help_text='Datetime when ccc expenses were pulled last', null=True) - source_synced_at = models.DateTimeField(help_text='Datetime when source dimensions were pulled', null=True) - destination_synced_at = models.DateTimeField(help_text='Datetime when destination dimensions were pulled', null=True) + + id = models.AutoField( + primary_key=True, help_text="Unique Id to identify a workspace" + ) + name = models.CharField(max_length=255, help_text="Name of the workspace") + user = models.ManyToManyField(User, help_text="Reference to users table") + fyle_org_id = models.CharField(max_length=255, help_text="org id", unique=True) + fyle_currency = models.CharField(max_length=5, help_text="Fyle Currency", null=True) + xero_currency = models.CharField(max_length=5, help_text="Xero Currency", null=True) + app_version = models.CharField( + max_length=2, help_text="App version", default="v2", choices=APP_VERSION_CHOICES + ) + xero_short_code = models.CharField( + max_length=30, help_text="Xero short code", null=True, blank=True + ) + last_synced_at = models.DateTimeField( + help_text="Datetime when expenses were pulled last", null=True + ) + ccc_last_synced_at = models.DateTimeField( + help_text="Datetime when ccc expenses were pulled last", null=True + ) + source_synced_at = models.DateTimeField( + help_text="Datetime when source dimensions were pulled", null=True + ) + destination_synced_at = models.DateTimeField( + help_text="Datetime when destination dimensions were pulled", null=True + ) onboarding_state = models.CharField( - max_length=50, choices=ONBOARDING_STATE_CHOICES, default=get_default_onboarding_state, - help_text='Onboarding status of the workspace', null=True + max_length=50, + choices=ONBOARDING_STATE_CHOICES, + default=get_default_onboarding_state, + help_text="Onboarding status of the workspace", + null=True, + ) + xero_accounts_last_synced_at = models.DateTimeField( + null=True, help_text="Xero Accounts last synced at time" + ) + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" ) - xero_accounts_last_synced_at = models.DateTimeField(null=True, help_text='Xero Accounts last synced at time') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") class Meta: - db_table = 'workspaces' + db_table = "workspaces" class XeroCredentials(models.Model): """ Table to store Xero credentials """ + id = models.AutoField(primary_key=True) - refresh_token = models.TextField(help_text='Stores Xero refresh token', null=True) - workspace = models.OneToOneField(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model') - is_expired = models.BooleanField(default=False, help_text='Xero token expiry flag') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') - country = models.CharField(max_length=255, help_text='Xero Country Name', null=True) + refresh_token = models.TextField(help_text="Stores Xero refresh token", null=True) + workspace = models.OneToOneField( + Workspace, on_delete=models.PROTECT, help_text="Reference to Workspace model" + ) + is_expired = models.BooleanField(default=False, help_text="Xero token expiry flag") + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" + ) + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") + country = models.CharField(max_length=255, help_text="Xero Country Name", null=True) class Meta: - db_table = 'xero_credentials' + db_table = "xero_credentials" @staticmethod def get_active_xero_credentials(workspace_id): - return XeroCredentials.objects.get(workspace_id=workspace_id, is_expired=False, refresh_token__isnull=False) + return XeroCredentials.objects.get( + workspace_id=workspace_id, is_expired=False, refresh_token__isnull=False + ) class FyleCredential(models.Model): """ Table to store Fyle credentials """ + id = models.AutoField(primary_key=True) - refresh_token = models.TextField(help_text='Stores Fyle refresh token') - cluster_domain = models.CharField(max_length=255, help_text='Cluster domain', null=True) - workspace = models.OneToOneField(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') + refresh_token = models.TextField(help_text="Stores Fyle refresh token") + cluster_domain = models.CharField( + max_length=255, help_text="Cluster domain", null=True + ) + workspace = models.OneToOneField( + Workspace, on_delete=models.PROTECT, help_text="Reference to Workspace model" + ) + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" + ) + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") class Meta: - db_table = 'fyle_credentials' + db_table = "fyle_credentials" class WorkspaceGeneralSettings(models.Model): """ Workspace General Settings """ - id = models.AutoField(primary_key=True, help_text='Unique Id to identify a workspace') - workspace = models.OneToOneField(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model', - related_name='workspace_general_settings') - reimbursable_expenses_object = models.CharField(max_length=50, help_text='Reimbursable Expenses type', null=True) - corporate_credit_card_expenses_object = models.CharField(max_length=50, - help_text='Non Reimbursable Expenses type', null=True) - sync_fyle_to_xero_payments = models.BooleanField(default=False, help_text='Auto Sync Payments from Fyle to Xero') - sync_xero_to_fyle_payments = models.BooleanField(default=False, help_text='Auto Sync Payments from Xero to Fyle') - map_merchant_to_contact = models.BooleanField(default=False, help_text='Map Merchant to Contact for CCC Expenses') - change_accounting_period = models.BooleanField(default=False, help_text='Change the accounting period') - import_categories = models.BooleanField(default=False, help_text='Auto import Categories to Fyle') - auto_map_employees = models.CharField(max_length=50, help_text='Auto Map Employees from Xero to Fyle', null=True, choices=AUTO_MAP_EMPLOYEE) - auto_create_destination_entity = models.BooleanField(default=False, help_text='Auto create contact') - auto_create_merchant_destination_entity = models.BooleanField(default=False, help_text='Auto create fyle merchnat as xero contact') - skip_cards_mapping = models.BooleanField(default=False, help_text='Skip cards mapping') - import_tax_codes = models.BooleanField(default=False, help_text='Auto import tax codes to Fyle', null=True) - import_customers = models.BooleanField(default=False, help_text='Auto import customers to Fyle') - import_suppliers_as_merchants = models.BooleanField(default=False, help_text='Auto import suppliers to Fyle') - is_simplify_report_closure_enabled = models.BooleanField(default=True, help_text='Simplify report closure is enabled') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + + id = models.AutoField( + primary_key=True, help_text="Unique Id to identify a workspace" + ) + workspace = models.OneToOneField( + Workspace, + on_delete=models.PROTECT, + help_text="Reference to Workspace model", + related_name="workspace_general_settings", + ) + reimbursable_expenses_object = models.CharField( + max_length=50, help_text="Reimbursable Expenses type", null=True + ) + corporate_credit_card_expenses_object = models.CharField( + max_length=50, help_text="Non Reimbursable Expenses type", null=True + ) + sync_fyle_to_xero_payments = models.BooleanField( + default=False, help_text="Auto Sync Payments from Fyle to Xero" + ) + sync_xero_to_fyle_payments = models.BooleanField( + default=False, help_text="Auto Sync Payments from Xero to Fyle" + ) + map_merchant_to_contact = models.BooleanField( + default=False, help_text="Map Merchant to Contact for CCC Expenses" + ) + change_accounting_period = models.BooleanField( + default=False, help_text="Change the accounting period" + ) + import_categories = models.BooleanField( + default=False, help_text="Auto import Categories to Fyle" + ) + auto_map_employees = models.CharField( + max_length=50, + help_text="Auto Map Employees from Xero to Fyle", + null=True, + choices=AUTO_MAP_EMPLOYEE, + ) + auto_create_destination_entity = models.BooleanField( + default=False, help_text="Auto create contact" + ) + auto_create_merchant_destination_entity = models.BooleanField( + default=False, help_text="Auto create fyle merchnat as xero contact" + ) + skip_cards_mapping = models.BooleanField( + default=False, help_text="Skip cards mapping" + ) + import_tax_codes = models.BooleanField( + default=False, help_text="Auto import tax codes to Fyle", null=True + ) + import_customers = models.BooleanField( + default=False, help_text="Auto import customers to Fyle" + ) + import_suppliers_as_merchants = models.BooleanField( + default=False, help_text="Auto import suppliers to Fyle" + ) + is_simplify_report_closure_enabled = models.BooleanField( + default=True, help_text="Simplify report closure is enabled" + ) + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") charts_of_accounts = ArrayField( - base_field=models.CharField(max_length=100), default=get_default_chart_of_accounts, - help_text='list of chart of account types to be imported into Fyle' + base_field=models.CharField(max_length=100), + default=get_default_chart_of_accounts, + help_text="list of chart of account types to be imported into Fyle", ) class Meta: - db_table = 'workspace_general_settings' + db_table = "workspace_general_settings" class WorkspaceSchedule(models.Model): """ Workspace Schedule """ - id = models.AutoField(primary_key=True, help_text='Unique Id to identify a schedule') - workspace = models.OneToOneField(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model', - related_name='workspace_schedules') + + id = models.AutoField( + primary_key=True, help_text="Unique Id to identify a schedule" + ) + workspace = models.OneToOneField( + Workspace, + on_delete=models.PROTECT, + help_text="Reference to Workspace model", + related_name="workspace_schedules", + ) enabled = models.BooleanField(default=False) - start_datetime = models.DateTimeField(help_text='Datetime for start of schedule', null=True) + start_datetime = models.DateTimeField( + help_text="Datetime for start of schedule", null=True + ) interval_hours = models.IntegerField(null=True) schedule = models.OneToOneField(Schedule, on_delete=models.PROTECT, null=True) - error_count = models.IntegerField(null=True, help_text='Number of errors in export') - additional_email_options = JSONField(default=list, help_text='Email and Name of person to send email', null=True) - emails_selected = ArrayField(base_field=models.CharField(max_length=255), null=True, - help_text='Emails that has to be send mail') + error_count = models.IntegerField(null=True, help_text="Number of errors in export") + additional_email_options = JSONField( + default=list, help_text="Email and Name of person to send email", null=True + ) + emails_selected = ArrayField( + base_field=models.CharField(max_length=255), + null=True, + help_text="Emails that has to be send mail", + ) class Meta: - db_table = 'workspace_schedules' + db_table = "workspace_schedules" class LastExportDetail(models.Model): """ Table to store Last Export Details """ + id = models.AutoField(primary_key=True) - last_exported_at = models.DateTimeField(help_text='Last exported at datetime', null=True) + last_exported_at = models.DateTimeField( + help_text="Last exported at datetime", null=True + ) export_mode = models.CharField( - max_length=50, help_text='Mode of the export Auto / Manual', choices=EXPORT_MODE_CHOICES, null=True + max_length=50, + help_text="Mode of the export Auto / Manual", + choices=EXPORT_MODE_CHOICES, + null=True, + ) + total_expense_groups_count = models.IntegerField( + help_text="Total count of expense groups exported", null=True + ) + successful_expense_groups_count = models.IntegerField( + help_text="count of successful expense_groups ", null=True + ) + failed_expense_groups_count = models.IntegerField( + help_text="count of failed expense_groups ", null=True + ) + workspace = models.OneToOneField( + Workspace, on_delete=models.PROTECT, help_text="Reference to Workspace model" + ) + created_at = models.DateTimeField( + auto_now_add=True, help_text="Created at datetime" ) - total_expense_groups_count = models.IntegerField(help_text='Total count of expense groups exported', null=True) - successful_expense_groups_count = models.IntegerField(help_text='count of successful expense_groups ', null=True) - failed_expense_groups_count = models.IntegerField(help_text='count of failed expense_groups ', null=True) - workspace = models.OneToOneField(Workspace, on_delete=models.PROTECT, help_text='Reference to Workspace model') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at datetime') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at datetime') + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at datetime") class Meta: - db_table = 'last_export_details' + db_table = "last_export_details" diff --git a/apps/workspaces/permissions.py b/apps/workspaces/permissions.py index 8e22d99d..64709ad4 100644 --- a/apps/workspaces/permissions.py +++ b/apps/workspaces/permissions.py @@ -1,6 +1,6 @@ from django.contrib.auth import get_user_model -from rest_framework import permissions from django.core.cache import cache +from rest_framework import permissions from apps.workspaces.models import Workspace @@ -12,7 +12,9 @@ class WorkspacePermissions(permissions.BasePermission): Permission check for users <> workspaces """ - def validate_and_cache(self, workspace_users, user: User, workspace_id: str, cache_users: bool = False): + def validate_and_cache( + self, workspace_users, user: User, workspace_id: str, cache_users: bool = False + ): if user.id in workspace_users: if cache_users: cache.set(workspace_id, workspace_users, 172800) @@ -21,12 +23,14 @@ def validate_and_cache(self, workspace_users, user: User, workspace_id: str, cac return False def has_permission(self, request, view): - workspace_id = str(view.kwargs.get('workspace_id')) + workspace_id = str(view.kwargs.get("workspace_id")) user = request.user workspace_users = cache.get(workspace_id) if workspace_users: return self.validate_and_cache(workspace_users, user, workspace_id) else: - workspace_users = Workspace.objects.filter(pk=workspace_id).values_list('user', flat=True) + workspace_users = Workspace.objects.filter(pk=workspace_id).values_list( + "user", flat=True + ) return self.validate_and_cache(workspace_users, user, workspace_id, True) diff --git a/apps/workspaces/queue.py b/apps/workspaces/queue.py index fbb3d06f..2317cac8 100644 --- a/apps/workspaces/queue.py +++ b/apps/workspaces/queue.py @@ -1,37 +1,44 @@ from datetime import datetime, timedelta from typing import List + from django_q.models import Schedule -from apps.workspaces.models import WorkspaceSchedule +from apps.workspaces.models import WorkspaceSchedule def schedule_email_notification(workspace_id: int, schedule_enabled: bool, hours: int): if schedule_enabled: schedule, _ = Schedule.objects.update_or_create( - func='apps.workspaces.tasks.run_email_notification', - args='{}'.format(workspace_id), + func="apps.workspaces.tasks.run_email_notification", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': hours * 60, - 'next_run': datetime.now() + timedelta(minutes=10) - } + "schedule_type": Schedule.MINUTES, + "minutes": hours * 60, + "next_run": datetime.now() + timedelta(minutes=10), + }, ) else: schedule: Schedule = Schedule.objects.filter( - func='apps.workspaces.tasks.run_email_notification', - args='{}'.format(workspace_id) + func="apps.workspaces.tasks.run_email_notification", + args="{}".format(workspace_id), ).first() if schedule: schedule.delete() -def schedule_sync(workspace_id: int, schedule_enabled: bool, hours: int, email_added: List, emails_selected: List): - ws_schedule, _ = WorkspaceSchedule.objects.get_or_create( - workspace_id=workspace_id - ) +def schedule_sync( + workspace_id: int, + schedule_enabled: bool, + hours: int, + email_added: List, + emails_selected: List, +): + ws_schedule, _ = WorkspaceSchedule.objects.get_or_create(workspace_id=workspace_id) - schedule_email_notification(workspace_id=workspace_id, schedule_enabled=schedule_enabled, hours=hours) + schedule_email_notification( + workspace_id=workspace_id, schedule_enabled=schedule_enabled, hours=hours + ) if schedule_enabled: ws_schedule.enabled = schedule_enabled @@ -43,13 +50,13 @@ def schedule_sync(workspace_id: int, schedule_enabled: bool, hours: int, email_a ws_schedule.additional_email_options.append(email_added) schedule, _ = Schedule.objects.update_or_create( - func='apps.workspaces.tasks.run_sync_schedule', - args='{}'.format(workspace_id), + func="apps.workspaces.tasks.run_sync_schedule", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': hours * 60, - 'next_run': datetime.now() - } + "schedule_type": Schedule.MINUTES, + "minutes": hours * 60, + "next_run": datetime.now(), + }, ) ws_schedule.schedule = schedule diff --git a/apps/workspaces/serializers.py b/apps/workspaces/serializers.py index bcf6c0f8..4fe9ff6d 100644 --- a/apps/workspaces/serializers.py +++ b/apps/workspaces/serializers.py @@ -3,7 +3,14 @@ """ from rest_framework import serializers -from .models import Workspace, FyleCredential, XeroCredentials, WorkspaceGeneralSettings, WorkspaceSchedule, LastExportDetail +from apps.workspaces.models import ( + FyleCredential, + LastExportDetail, + Workspace, + WorkspaceGeneralSettings, + WorkspaceSchedule, + XeroCredentials, +) class WorkspaceSerializer(serializers.ModelSerializer): @@ -13,7 +20,7 @@ class WorkspaceSerializer(serializers.ModelSerializer): class Meta: model = Workspace - fields = '__all__' + fields = "__all__" class FyleCredentialSerializer(serializers.ModelSerializer): @@ -23,7 +30,7 @@ class FyleCredentialSerializer(serializers.ModelSerializer): class Meta: model = FyleCredential - fields = '__all__' + fields = "__all__" class XeroCredentialSerializer(serializers.ModelSerializer): @@ -33,30 +40,34 @@ class XeroCredentialSerializer(serializers.ModelSerializer): class Meta: model = XeroCredentials - fields = '__all__' + fields = "__all__" class WorkSpaceGeneralSettingsSerializer(serializers.ModelSerializer): """ General settings serializer """ + class Meta: model = WorkspaceGeneralSettings - fields = '__all__' + fields = "__all__" class WorkspaceScheduleSerializer(serializers.ModelSerializer): """ Workspace Schedule Serializer """ + class Meta: model = WorkspaceSchedule - fields = '__all__' + fields = "__all__" + class LastExportDetailSerializer(serializers.ModelSerializer): """ Last export detail serializer """ + class Meta: model = LastExportDetail - fields = '__all__' + fields = "__all__" diff --git a/apps/workspaces/signals.py b/apps/workspaces/signals.py index 725acbce..eeb20ed2 100644 --- a/apps/workspaces/signals.py +++ b/apps/workspaces/signals.py @@ -1,6 +1,8 @@ -from apps.workspaces.models import Workspace from fyle_accounting_mappings.models import DestinationAttribute, Mapping + from apps.mappings.models import TenantMapping +from apps.workspaces.models import Workspace + def post_delete_xero_connection(workspace_id): """ @@ -8,11 +10,13 @@ def post_delete_xero_connection(workspace_id): :return: None """ workspace = Workspace.objects.get(id=workspace_id) - if workspace.onboarding_state in ('CONNECTION', 'EXPORT_SETTINGS'): + if workspace.onboarding_state in ("CONNECTION", "EXPORT_SETTINGS"): TenantMapping.objects.filter(workspace_id=workspace_id).delete() - Mapping.objects.filter(workspace_id=workspace_id, source_type='EMPLOYEE').delete() + Mapping.objects.filter( + workspace_id=workspace_id, source_type="EMPLOYEE" + ).delete() DestinationAttribute.objects.filter(workspace_id=workspace_id).delete() - workspace.onboarding_state = 'CONNECTION' + workspace.onboarding_state = "CONNECTION" workspace.xero_short_code = None workspace.xero_currency = None workspace.save() diff --git a/apps/workspaces/tasks.py b/apps/workspaces/tasks.py index 7d6d936e..00a254b8 100644 --- a/apps/workspaces/tasks.py +++ b/apps/workspaces/tasks.py @@ -1,19 +1,16 @@ -from datetime import datetime, timedelta -from typing import List import logging - -from django_q.models import Schedule +from datetime import datetime from fyle_integrations_platform_connector import PlatformConnector from apps.fyle.models import ExpenseGroup from apps.fyle.tasks import async_create_expense_groups from apps.mappings.models import TenantMapping -from apps.workspaces.email import get_admin_name, get_errors, get_failed_task_logs_count, send_failure_notification_email -from apps.xero.tasks import schedule_bills_creation, schedule_bank_transaction_creation, create_chain_and_export from apps.tasks.models import TaskLog -from apps.workspaces.models import Workspace, WorkspaceSchedule, WorkspaceGeneralSettings, LastExportDetail, FyleCredential from apps.users.models import User +from apps.workspaces.email import get_admin_name, get_errors, get_failed_task_logs_count, send_failure_notification_email +from apps.workspaces.models import FyleCredential, LastExportDetail, Workspace, WorkspaceGeneralSettings, WorkspaceSchedule +from apps.xero.tasks import create_chain_and_export, schedule_bank_transaction_creation, schedule_bills_creation logger = logging.getLogger(__name__) logger.level = logging.INFO @@ -28,41 +25,47 @@ def run_sync_schedule(workspace_id): """ task_log, _ = TaskLog.objects.update_or_create( workspace_id=workspace_id, - type='FETCHING_EXPENSES', - defaults={ - 'status': 'IN_PROGRESS' - } + type="FETCHING_EXPENSES", + defaults={"status": "IN_PROGRESS"}, ) general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) fund_source = [] if general_settings.reimbursable_expenses_object: - fund_source.append('PERSONAL') + fund_source.append("PERSONAL") if general_settings.corporate_credit_card_expenses_object: - fund_source.append('CCC') + fund_source.append("CCC") async_create_expense_groups( workspace_id=workspace_id, fund_source=fund_source, task_log=task_log ) - if task_log.status == 'COMPLETE': - export_to_xero(workspace_id, 'AUTO') + if task_log.status == "COMPLETE": + export_to_xero(workspace_id, "AUTO") -def export_to_xero(workspace_id, export_mode='MANUAL'): +def export_to_xero(workspace_id, export_mode="MANUAL"): general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) last_export_detail = LastExportDetail.objects.get(workspace_id=workspace_id) last_exported_at = datetime.now() chaining_attributes = [] if general_settings.reimbursable_expenses_object: - expense_group_ids = ExpenseGroup.objects.filter(fund_source='PERSONAL').values_list('id', flat=True) - chaining_attributes.extend(schedule_bills_creation(workspace_id, expense_group_ids)) + expense_group_ids = ExpenseGroup.objects.filter( + fund_source="PERSONAL" + ).values_list("id", flat=True) + chaining_attributes.extend( + schedule_bills_creation(workspace_id, expense_group_ids) + ) if general_settings.corporate_credit_card_expenses_object: - expense_group_ids = ExpenseGroup.objects.filter(fund_source='CCC').values_list('id', flat=True) - chaining_attributes.extend(schedule_bank_transaction_creation(workspace_id, expense_group_ids)) + expense_group_ids = ExpenseGroup.objects.filter(fund_source="CCC").values_list( + "id", flat=True + ) + chaining_attributes.extend( + schedule_bank_transaction_creation(workspace_id, expense_group_ids) + ) if chaining_attributes: create_chain_and_export(chaining_attributes, workspace_id) @@ -72,28 +75,38 @@ def export_to_xero(workspace_id, export_mode='MANUAL'): def async_update_fyle_credentials(fyle_org_id: str, refresh_token: str): - fyle_credentials = FyleCredential.objects.filter(workspace__fyle_org_id=fyle_org_id).first() + fyle_credentials = FyleCredential.objects.filter( + workspace__fyle_org_id=fyle_org_id + ).first() if fyle_credentials: fyle_credentials.refresh_token = refresh_token fyle_credentials.save() def run_email_notification(workspace_id): - ws_schedule = WorkspaceSchedule.objects.get( - workspace_id=workspace_id, enabled=True - ) + ws_schedule = WorkspaceSchedule.objects.get(workspace_id=workspace_id, enabled=True) task_logs_count = get_failed_task_logs_count(workspace_id) workspace = Workspace.objects.get(id=workspace_id) tenant_detail = TenantMapping.get_tenant_details(workspace_id) - if task_logs_count and (ws_schedule.error_count is None or task_logs_count > ws_schedule.error_count): + if task_logs_count and ( + ws_schedule.error_count is None or task_logs_count > ws_schedule.error_count + ): errors = get_errors(workspace_id) for admin_email in ws_schedule.emails_selected: admin_name = get_admin_name(workspace_id, admin_email, ws_schedule) - send_failure_notification_email(admin_name, admin_email, task_logs_count, workspace, tenant_detail, errors) + send_failure_notification_email( + admin_name, + admin_email, + task_logs_count, + workspace, + tenant_detail, + errors, + ) ws_schedule.error_count = task_logs_count ws_schedule.save() + def async_add_admins_to_workspace(workspace_id: int, current_user_id: str): fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) platform = PlatformConnector(fyle_credentials) @@ -103,8 +116,14 @@ def async_add_admins_to_workspace(workspace_id: int, current_user_id: str): for admin in admins: # Skip current user since it is already added - if current_user_id != admin['user_id']: - users.append(User(email=admin['email'], user_id=admin['user_id'], full_name=admin['full_name'])) + if current_user_id != admin["user_id"]: + users.append( + User( + email=admin["email"], + user_id=admin["user_id"], + full_name=admin["full_name"], + ) + ) if len(users): created_users = User.objects.bulk_create(users, batch_size=50) diff --git a/apps/workspaces/templates/mail_template.html b/apps/workspaces/templates/mail_template.html index 4e1aebe3..adf49bc1 100644 --- a/apps/workspaces/templates/mail_template.html +++ b/apps/workspaces/templates/mail_template.html @@ -121,7 +121,7 @@ font-style: normal; font-weight: 500; font-size: 14px; - line-height: 20px; + line-height: 20px; color: #161528;"> {{ fyle_company }} {{ xero_tenant }} diff --git a/apps/workspaces/templatetags/custom_filters.py b/apps/workspaces/templatetags/custom_filters.py index 96d619c4..ae8b6e72 100644 --- a/apps/workspaces/templatetags/custom_filters.py +++ b/apps/workspaces/templatetags/custom_filters.py @@ -2,6 +2,7 @@ register = template.Library() + @register.filter def snake_case_to_space_case(value): - return ' '.join(word.capitalize() for word in value.split('_')) + return " ".join(word.capitalize() for word in value.split("_")) diff --git a/apps/workspaces/urls.py b/apps/workspaces/urls.py index 3892e7c2..bc628e1f 100644 --- a/apps/workspaces/urls.py +++ b/apps/workspaces/urls.py @@ -1,22 +1,43 @@ -from django.urls import path, include +from django.urls import include, path -from .views import WorkspaceAdminsView, WorkspaceView, ReadyView, ConnectXeroView, GeneralSettingsView, \ - RevokeXeroConnectionView, XeroExternalSignUpsView, ExportToXeroView, LastExportDetailView +from apps.workspaces.views import ( + ConnectXeroView, + ExportToXeroView, + GeneralSettingsView, + LastExportDetailView, + ReadyView, + RevokeXeroConnectionView, + WorkspaceAdminsView, + WorkspaceView, + XeroExternalSignUpsView, +) urlpatterns = [ - path('', WorkspaceView.as_view()), - path('ready/', ReadyView.as_view()), - path('/', WorkspaceView.as_view()), - path('/connect_xero/authorization_code/', ConnectXeroView.as_view()), - path('/credentials/xero/', ConnectXeroView.as_view()), - path('/connection/xero/revoke/', RevokeXeroConnectionView.as_view()), - path('/exports/trigger/', ExportToXeroView.as_view(), name='export-to-xero'), - path('/settings/general/', GeneralSettingsView.as_view()), - path('/fyle/', include('apps.fyle.urls')), - path('/tasks/', include('apps.tasks.urls')), - path('/xero/', include('apps.xero.urls')), - path('/mappings/', include('apps.mappings.urls')), - path('/admins/', WorkspaceAdminsView.as_view(), name='admin'), - path('external_signup/', XeroExternalSignUpsView.as_view()), - path('/export_detail/', LastExportDetailView.as_view(), name='export-detail'), + path("", WorkspaceView.as_view()), + path("ready/", ReadyView.as_view()), + path("/", WorkspaceView.as_view()), + path( + "/connect_xero/authorization_code/", ConnectXeroView.as_view() + ), + path("/credentials/xero/", ConnectXeroView.as_view()), + path( + "/connection/xero/revoke/", RevokeXeroConnectionView.as_view() + ), + path( + "/exports/trigger/", + ExportToXeroView.as_view(), + name="export-to-xero", + ), + path("/settings/general/", GeneralSettingsView.as_view()), + path("/fyle/", include("apps.fyle.urls")), + path("/tasks/", include("apps.tasks.urls")), + path("/xero/", include("apps.xero.urls")), + path("/mappings/", include("apps.mappings.urls")), + path("/admins/", WorkspaceAdminsView.as_view(), name="admin"), + path("external_signup/", XeroExternalSignUpsView.as_view()), + path( + "/export_detail/", + LastExportDetailView.as_view(), + name="export-detail", + ), ] diff --git a/apps/workspaces/utils.py b/apps/workspaces/utils.py index 1c35db13..5c692cfe 100644 --- a/apps/workspaces/utils.py +++ b/apps/workspaces/utils.py @@ -1,48 +1,44 @@ -import json import base64 +import json from typing import Dict -import datetime -import requests import jwt - +import requests from django.conf import settings from django_q.models import Schedule - from future.moves.urllib.parse import urlencode - -from xerosdk import InvalidTokenError, InternalServerError, XeroSDK - from fyle_accounting_mappings.models import MappingSetting +from xerosdk import InternalServerError, InvalidTokenError, XeroSDK +from apps.fyle.models import ExpenseGroupSettings from apps.mappings.queue import schedule_auto_map_employees, schedule_tax_groups_creation -from apps.xero.queue import schedule_payment_creation, schedule_xero_objects_status_sync, schedule_reimbursements_sync - +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings +from apps.xero.queue import schedule_payment_creation, schedule_reimbursements_sync, schedule_xero_objects_status_sync from fyle_xero_api.utils import assert_valid -from .models import WorkspaceGeneralSettings, Workspace -from ..fyle.models import ExpenseGroupSettings def generate_token(authorization_code: str, redirect_uri: str = None) -> str: api_data = { - 'grant_type': 'authorization_code', - 'code': authorization_code, - 'redirect_uri': settings.XERO_REDIRECT_URI if not redirect_uri else redirect_uri + "grant_type": "authorization_code", + "code": authorization_code, + "redirect_uri": settings.XERO_REDIRECT_URI + if not redirect_uri + else redirect_uri, } - auth = '{0}:{1}'.format(settings.XERO_CLIENT_ID, settings.XERO_CLIENT_SECRET) - auth = base64.b64encode(auth.encode('utf-8')) + auth = "{0}:{1}".format(settings.XERO_CLIENT_ID, settings.XERO_CLIENT_SECRET) + auth = base64.b64encode(auth.encode("utf-8")) request_header = { - 'Accept': 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - 'Authorization': 'Basic {0}'.format( - str(auth.decode()) - ) + "Accept": "application/json", + "Content-type": "application/x-www-form-urlencoded", + "Authorization": "Basic {0}".format(str(auth.decode())), } token_url = settings.XERO_TOKEN_URI - response = requests.post(url=token_url, data=urlencode(api_data), headers=request_header) + response = requests.post( + url=token_url, data=urlencode(api_data), headers=request_header + ) return response @@ -50,27 +46,25 @@ def revoke_token(refresh_token: str) -> None: """ Revoke token """ - api_data = { - 'token': refresh_token - } + api_data = {"token": refresh_token} - auth = '{0}:{1}'.format(settings.XERO_CLIENT_ID, settings.XERO_CLIENT_SECRET) - auth = base64.b64encode(auth.encode('utf-8')) + auth = "{0}:{1}".format(settings.XERO_CLIENT_ID, settings.XERO_CLIENT_SECRET) + auth = base64.b64encode(auth.encode("utf-8")) request_header = { - 'Accept': 'application/json', - 'Content-type': 'application/x-www-form-urlencoded', - 'Authorization': 'Basic {0}'.format( - str(auth.decode()) - ) + "Accept": "application/json", + "Content-type": "application/x-www-form-urlencoded", + "Authorization": "Basic {0}".format(str(auth.decode())), } - revocation_url = settings.XERO_TOKEN_URI.replace('/token', '/revocation') + revocation_url = settings.XERO_TOKEN_URI.replace("/token", "/revocation") requests.post(url=revocation_url, data=urlencode(api_data), headers=request_header) -def generate_xero_refresh_token(authorization_code: str, redirect_uri: str=None) -> str: +def generate_xero_refresh_token( + authorization_code: str, redirect_uri: str = None +) -> str: """ Generate Xero refresh token from authorization code """ @@ -78,14 +72,15 @@ def generate_xero_refresh_token(authorization_code: str, redirect_uri: str=None) if response.status_code == 200: successful_response = json.loads(response.text) - return successful_response['refresh_token'] - + return successful_response["refresh_token"] elif response.status_code == 401: - raise InvalidTokenError('Wrong client secret or/and refresh token', response.text) + raise InvalidTokenError( + "Wrong client secret or/and refresh token", response.text + ) elif response.status_code == 500: - raise InternalServerError('Internal server error', response.text) + raise InternalServerError("Internal server error", response.text) def create_or_update_general_settings(general_settings_payload: Dict, workspace_id): @@ -96,16 +91,26 @@ def create_or_update_general_settings(general_settings_payload: Dict, workspace_ :return: """ assert_valid( - 'reimbursable_expenses_object' in general_settings_payload and general_settings_payload[ - 'reimbursable_expenses_object'], 'reimbursable_expenses_object field is blank') + "reimbursable_expenses_object" in general_settings_payload + and general_settings_payload["reimbursable_expenses_object"], + "reimbursable_expenses_object field is blank", + ) - assert_valid('auto_map_employees' in general_settings_payload, 'auto_map_employees field is missing') + assert_valid( + "auto_map_employees" in general_settings_payload, + "auto_map_employees field is missing", + ) - if general_settings_payload['auto_map_employees']: - assert_valid(general_settings_payload['auto_map_employees'] in ['EMAIL', 'NAME', 'EMPLOYEE_CODE'], - 'auto_map_employees can have only EMAIL / NAME / EMPLOYEE_CODE') + if general_settings_payload["auto_map_employees"]: + assert_valid( + general_settings_payload["auto_map_employees"] + in ["EMAIL", "NAME", "EMPLOYEE_CODE"], + "auto_map_employees can have only EMAIL / NAME / EMPLOYEE_CODE", + ) - workspace_general_settings = WorkspaceGeneralSettings.objects.filter(workspace_id=workspace_id).first() + workspace_general_settings = WorkspaceGeneralSettings.objects.filter( + workspace_id=workspace_id + ).first() workspace = Workspace.objects.filter(id=workspace_id).first() map_merchant_to_contact = True @@ -115,29 +120,47 @@ def create_or_update_general_settings(general_settings_payload: Dict, workspace_ general_settings, _ = WorkspaceGeneralSettings.objects.update_or_create( workspace_id=workspace_id, defaults={ - 'reimbursable_expenses_object': - general_settings_payload['reimbursable_expenses_object'] - if 'reimbursable_expenses_object' in general_settings_payload - and general_settings_payload['reimbursable_expenses_object'] else None, - 'corporate_credit_card_expenses_object': - general_settings_payload['corporate_credit_card_expenses_object'] - if 'corporate_credit_card_expenses_object' in general_settings_payload - and general_settings_payload['corporate_credit_card_expenses_object'] else None, - 'sync_fyle_to_xero_payments': general_settings_payload['sync_fyle_to_xero_payments'], - 'sync_xero_to_fyle_payments': general_settings_payload['sync_xero_to_fyle_payments'], - 'import_tax_codes': general_settings_payload['import_tax_codes'] if 'import_tax_codes' in general_settings_payload else False, - 'import_categories': general_settings_payload['import_categories'], - 'auto_map_employees': general_settings_payload['auto_map_employees'], - 'auto_create_destination_entity': general_settings_payload['auto_create_destination_entity'], - 'auto_create_merchant_destination_entity': general_settings_payload['auto_create_merchant_destination_entity'], - 'map_merchant_to_contact': map_merchant_to_contact, - 'change_accounting_period': general_settings_payload['change_accounting_period'], - 'charts_of_accounts': general_settings_payload['charts_of_accounts'], - 'import_customers': general_settings_payload['import_customers'] - } + "reimbursable_expenses_object": general_settings_payload[ + "reimbursable_expenses_object" + ] + if "reimbursable_expenses_object" in general_settings_payload + and general_settings_payload["reimbursable_expenses_object"] + else None, + "corporate_credit_card_expenses_object": general_settings_payload[ + "corporate_credit_card_expenses_object" + ] + if "corporate_credit_card_expenses_object" in general_settings_payload + and general_settings_payload["corporate_credit_card_expenses_object"] + else None, + "sync_fyle_to_xero_payments": general_settings_payload[ + "sync_fyle_to_xero_payments" + ], + "sync_xero_to_fyle_payments": general_settings_payload[ + "sync_xero_to_fyle_payments" + ], + "import_tax_codes": general_settings_payload["import_tax_codes"] + if "import_tax_codes" in general_settings_payload + else False, + "import_categories": general_settings_payload["import_categories"], + "auto_map_employees": general_settings_payload["auto_map_employees"], + "auto_create_destination_entity": general_settings_payload[ + "auto_create_destination_entity" + ], + "auto_create_merchant_destination_entity": general_settings_payload[ + "auto_create_merchant_destination_entity" + ], + "map_merchant_to_contact": map_merchant_to_contact, + "change_accounting_period": general_settings_payload[ + "change_accounting_period" + ], + "charts_of_accounts": general_settings_payload["charts_of_accounts"], + "import_customers": general_settings_payload["import_customers"], + }, ) if workspace_general_settings: - if set(workspace_general_settings.charts_of_accounts) != set(general_settings_payload['charts_of_accounts']): + if set(workspace_general_settings.charts_of_accounts) != set( + general_settings_payload["charts_of_accounts"] + ): workspace.xero_accounts_last_synced_at = None workspace.save() @@ -146,31 +169,37 @@ def create_or_update_general_settings(general_settings_payload: Dict, workspace_ import_to_fyle = True # General Settings exist already and have import_customers enabled and the current setting is disabled - if not general_settings.import_customers and workspace_general_settings and \ - workspace_general_settings.import_customers is True: + if ( + not general_settings.import_customers + and workspace_general_settings + and workspace_general_settings.import_customers is True + ): import_to_fyle = False update_customer_import_settings = True if general_settings.import_customers or update_customer_import_settings: # Signal would take care of syncing them to Fyle MappingSetting.objects.update_or_create( - source_field='PROJECT', + source_field="PROJECT", workspace_id=workspace_id, - destination_field='CUSTOMER', - defaults={ - 'import_to_fyle': import_to_fyle, - 'is_custom': False - } + destination_field="CUSTOMER", + defaults={"import_to_fyle": import_to_fyle, "is_custom": False}, ) - if general_settings.corporate_credit_card_expenses_object == 'BANK TRANSACTION': - expense_group_settings = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) + if general_settings.corporate_credit_card_expenses_object == "BANK TRANSACTION": + expense_group_settings = ExpenseGroupSettings.objects.get( + workspace_id=workspace_id + ) if general_settings.map_merchant_to_contact: - ccc_expense_group_fields = expense_group_settings.corporate_credit_card_expense_group_fields - ccc_expense_group_fields.append('expense_id') - expense_group_settings.corporate_credit_card_expense_group_fields = list(set(ccc_expense_group_fields)) - expense_group_settings.ccc_export_date_type = 'spent_at' + ccc_expense_group_fields = ( + expense_group_settings.corporate_credit_card_expense_group_fields + ) + ccc_expense_group_fields.append("expense_id") + expense_group_settings.corporate_credit_card_expense_group_fields = list( + set(ccc_expense_group_fields) + ) + expense_group_settings.ccc_export_date_type = "spent_at" expense_group_settings.import_card_credits = True expense_group_settings.save() @@ -179,18 +208,22 @@ def create_or_update_general_settings(general_settings_payload: Dict, workspace_ schedule_xero_objects_status_sync( sync_xero_to_fyle_payments=general_settings.sync_xero_to_fyle_payments, - workspace_id=workspace_id + workspace_id=workspace_id, ) schedule_reimbursements_sync( sync_xero_to_fyle_payments=general_settings.sync_xero_to_fyle_payments, - workspace_id=workspace_id + workspace_id=workspace_id, + ) + + schedule_auto_map_employees( + general_settings_payload["auto_map_employees"], workspace_id ) - schedule_auto_map_employees(general_settings_payload['auto_map_employees'], workspace_id) + schedule_tax_groups_creation( + import_tax_codes=general_settings.import_tax_codes, workspace_id=workspace_id + ) - schedule_tax_groups_creation(import_tax_codes=general_settings.import_tax_codes, workspace_id=workspace_id) - return general_settings @@ -202,56 +235,64 @@ def generate_xero_identity(authorization_code: str, redirect_uri: str) -> str: if response.status_code == 200: successful_response = json.loads(response.text) - decoded_jwt = jwt.decode(successful_response['id_token'], options={"verify_signature": False}) + decoded_jwt = jwt.decode( + successful_response["id_token"], options={"verify_signature": False} + ) connection = XeroSDK( base_url=settings.XERO_BASE_URL, client_id=settings.XERO_CLIENT_ID, client_secret=settings.XERO_CLIENT_SECRET, - refresh_token=successful_response['refresh_token'] + refresh_token=successful_response["refresh_token"], ) identity = { - 'user': { - 'given_name': decoded_jwt['given_name'], - 'family_name': decoded_jwt['family_name'], - 'email': decoded_jwt['email'] + "user": { + "given_name": decoded_jwt["given_name"], + "family_name": decoded_jwt["family_name"], + "email": decoded_jwt["email"], }, - 'tenants': connection.tenants.get_all() + "tenants": connection.tenants.get_all(), } # Revoke refresh token - revoke_token(successful_response['refresh_token']) + revoke_token(successful_response["refresh_token"]) return identity elif response.status_code == 400: - raise InvalidTokenError('Invalid Requests, something wrong with request params', response.text) + raise InvalidTokenError( + "Invalid Requests, something wrong with request params", response.text + ) elif response.status_code == 401: - raise InvalidTokenError('Wrong client secret or/and refresh token', response.text) + raise InvalidTokenError( + "Wrong client secret or/and refresh token", response.text + ) elif response.status_code == 500: - raise InternalServerError('Internal server error', response.text) + raise InternalServerError("Internal server error", response.text) def delete_cards_mapping_settings(workspace_general_settings: WorkspaceGeneralSettings): if not workspace_general_settings.corporate_credit_card_expenses_object: mapping_setting = MappingSetting.objects.filter( workspace_id=workspace_general_settings.workspace_id, - source_field='CORPORATE_CARD', - destination_field='BANK_ACCOUNT' + source_field="CORPORATE_CARD", + destination_field="BANK_ACCOUNT", ).first() if mapping_setting: mapping_setting.delete() -def schedule_or_delete_import_supplier_schedule(workspace_general_settings: WorkspaceGeneralSettings): +def schedule_or_delete_import_supplier_schedule( + workspace_general_settings: WorkspaceGeneralSettings, +): if not workspace_general_settings.corporate_credit_card_expenses_object: workspace_general_settings.import_suppliers_as_merchants = False workspace_general_settings.save() schedule: Schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_suppliers_as_merchants', - args='{}'.format(workspace_general_settings.workspace_id) + func="apps.mappings.tasks.auto_create_suppliers_as_merchants", + args="{}".format(workspace_general_settings.workspace_id), ).first() if schedule: diff --git a/apps/workspaces/views.py b/apps/workspaces/views.py index 78408352..c4b7c3e5 100644 --- a/apps/workspaces/views.py +++ b/apps/workspaces/views.py @@ -1,24 +1,23 @@ import logging from django.contrib.auth import get_user_model - +from fyle_rest_auth.utils import AuthUtils +from rest_framework import generics +from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import status -from rest_framework import viewsets -from rest_framework.permissions import IsAuthenticated - -from fyle_rest_auth.utils import AuthUtils - -from fyle_xero_api.utils import assert_valid -from .models import Workspace, XeroCredentials, WorkspaceGeneralSettings, LastExportDetail -from .utils import generate_xero_identity, create_or_update_general_settings -from .serializers import WorkspaceSerializer, XeroCredentialSerializer, \ - WorkSpaceGeneralSettingsSerializer, LastExportDetailSerializer -from .tasks import export_to_xero from apps.exceptions import handle_view_exceptions -from .actions import connect_xero, post_workspace, revoke_connections, get_workspace_admin -from rest_framework import generics +from apps.workspaces.actions import connect_xero, get_workspace_admin, post_workspace, revoke_connections +from apps.workspaces.models import LastExportDetail, Workspace, WorkspaceGeneralSettings, XeroCredentials +from apps.workspaces.serializers import ( + LastExportDetailSerializer, + WorkSpaceGeneralSettingsSerializer, + WorkspaceSerializer, + XeroCredentialSerializer, +) +from apps.workspaces.tasks import export_to_xero +from apps.workspaces.utils import generate_xero_identity logger = logging.getLogger(__name__) @@ -31,6 +30,7 @@ class ReadyView(generics.ListAPIView): """ Ready call """ + authentication_classes = [] permission_classes = [] @@ -39,14 +39,9 @@ def get(self, request): Ready call """ - Workspace.objects.raw('Select 1 from workspaces_workspace') + Workspace.objects.raw("Select 1 from workspaces_workspace") - return Response( - data={ - 'message': 'Ready' - }, - status=status.HTTP_200_OK - ) + return Response(data={"message": "Ready"}, status=status.HTTP_200_OK) class WorkspaceView(generics.CreateAPIView, generics.RetrieveUpdateAPIView): @@ -60,12 +55,11 @@ def post(self, request): """ Create a Workspace """ - access_token = request.META.get('HTTP_AUTHORIZATION') - workspace = post_workspace(access_token=access_token,request=request) + access_token = request.META.get("HTTP_AUTHORIZATION") + workspace = post_workspace(access_token=access_token, request=request) return Response( - data=WorkspaceSerializer(workspace).data, - status=status.HTTP_200_OK + data=WorkspaceSerializer(workspace).data, status=status.HTTP_200_OK ) def get(self, request): @@ -73,81 +67,84 @@ def get(self, request): Get workspace """ user = User.objects.get(user_id=request.user) - org_id = request.query_params.get('org_id') + org_id = request.query_params.get("org_id") workspace = Workspace.objects.filter(user__in=[user], fyle_org_id=org_id).all() return Response( data=WorkspaceSerializer(workspace, many=True).data, - status=status.HTTP_200_OK + status=status.HTTP_200_OK, ) def patch(self, request, **kwargs): """ PATCH workspace """ - workspace_instance = Workspace.objects.get(pk=kwargs['workspace_id']) + workspace_instance = Workspace.objects.get(pk=kwargs["workspace_id"]) serializer = WorkspaceSerializer( workspace_instance, data=request.data, partial=True ) if serializer.is_valid(): serializer.save() - return Response( - data=serializer.data, - status=status.HTTP_200_OK - ) + return Response(data=serializer.data, status=status.HTTP_200_OK) class ConnectXeroView(generics.CreateAPIView, generics.RetrieveAPIView): """ Xero Connect Oauth View """ + @handle_view_exceptions() def post(self, request, **kwargs): """ Post of Xero Credentials """ - - authorization_code = request.data.get('code') - redirect_uri = request.data.get('redirect_uri') - xero_credentials = connect_xero(authorization_code=authorization_code, redirect_uri=redirect_uri, workspace_id=kwargs['workspace_id']) + authorization_code = request.data.get("code") + redirect_uri = request.data.get("redirect_uri") + + xero_credentials = connect_xero( + authorization_code=authorization_code, + redirect_uri=redirect_uri, + workspace_id=kwargs["workspace_id"], + ) return Response( data=XeroCredentialSerializer(xero_credentials).data, - status=status.HTTP_200_OK + status=status.HTTP_200_OK, ) - - + @handle_view_exceptions() def get(self, request, **kwargs): """ Get Xero Credentials in Workspace """ - - xero_credentials = XeroCredentials.objects.get(workspace_id=kwargs['workspace_id'], is_expired=False, refresh_token__isnull=False) + + xero_credentials = XeroCredentials.objects.get( + workspace_id=kwargs["workspace_id"], + is_expired=False, + refresh_token__isnull=False, + ) return Response( data=XeroCredentialSerializer(xero_credentials).data, - status=status.HTTP_200_OK + status=status.HTTP_200_OK, ) - + class RevokeXeroConnectionView(generics.CreateAPIView): """ Xero Revoke Xero Connection View """ + def post(self, request, **kwargs): """ Post of Xero Credentials """ # TODO: cleanup later - merge with ConnectXeroView - revoke_connections(workspace_id=kwargs['workspace_id']) + revoke_connections(workspace_id=kwargs["workspace_id"]) return Response( - data={ - 'message': 'Revoked Xero connection' - }, - status=status.HTTP_200_OK + data={"message": "Revoked Xero connection"}, status=status.HTTP_200_OK ) @@ -155,17 +152,18 @@ class GeneralSettingsView(generics.RetrieveAPIView): """ General Settings """ - lookup_field = 'workspace_id' - lookup_url_kwarg = 'workspace_id' + + lookup_field = "workspace_id" + lookup_url_kwarg = "workspace_id" serializer_class = WorkSpaceGeneralSettingsSerializer queryset = WorkspaceGeneralSettings.objects.all() - class XeroExternalSignUpsView(generics.CreateAPIView): """ Xero External Sign Ups """ + authentication_classes = [] permission_classes = [] @@ -175,14 +173,11 @@ def post(self, request, **kwargs): Post Xero External Sign Ups """ - authorization_code = request.data.get('code') - redirect_uri = request.data.get('redirect_uri') + authorization_code = request.data.get("code") + redirect_uri = request.data.get("redirect_uri") identity = generate_xero_identity(authorization_code, redirect_uri) - return Response( - data=identity, - status=status.HTTP_200_OK - ) + return Response(data=identity, status=status.HTTP_200_OK) class ExportToXeroView(generics.CreateAPIView): @@ -191,11 +186,9 @@ class ExportToXeroView(generics.CreateAPIView): """ def post(self, request, *args, **kwargs): - export_to_xero(workspace_id=kwargs['workspace_id']) + export_to_xero(workspace_id=kwargs["workspace_id"]) - return Response( - status=status.HTTP_200_OK - ) + return Response(status=status.HTTP_200_OK) class LastExportDetailView(generics.RetrieveAPIView): @@ -203,22 +196,20 @@ class LastExportDetailView(generics.RetrieveAPIView): Last Export Details """ - lookup_field = 'workspace_id' - lookup_url_kwarg = 'workspace_id' + lookup_field = "workspace_id" + lookup_url_kwarg = "workspace_id" serializer_class = LastExportDetailSerializer - queryset = LastExportDetail.objects.filter(last_exported_at__isnull=False, total_expense_groups_count__gt=0) - + queryset = LastExportDetail.objects.filter( + last_exported_at__isnull=False, total_expense_groups_count__gt=0 + ) -class WorkspaceAdminsView(generics.ListAPIView): +class WorkspaceAdminsView(generics.ListAPIView): def get(self, request, *args, **kwargs): """ Get Admins for the workspaces """ - admin_email = get_workspace_admin(workspace_id=kwargs['workspace_id']) + admin_email = get_workspace_admin(workspace_id=kwargs["workspace_id"]) - return Response( - data=admin_email, - status=status.HTTP_200_OK - ) + return Response(data=admin_email, status=status.HTTP_200_OK) diff --git a/apps/xero/actions.py b/apps/xero/actions.py index 9e4b6956..ea3513fa 100644 --- a/apps/xero/actions.py +++ b/apps/xero/actions.py @@ -1,21 +1,25 @@ -from apps.workspaces.models import XeroCredentials, Workspace -from .utils import XeroConnector - from datetime import datetime, timezone -from apps.workspaces.models import XeroCredentials, Workspace, WorkspaceGeneralSettings -from django_q.tasks import Chain +from django_q.tasks import Chain from fyle_accounting_mappings.models import MappingSetting +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings, XeroCredentials +from apps.xero.utils import XeroConnector + + def get_xero_connector(workspace_id): - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) return XeroConnector(xero_credentials, workspace_id=workspace_id) + def sync_tenant(workspace_id): xero_connector = get_xero_connector(workspace_id=workspace_id) tenants = xero_connector.sync_tenants() return tenants + def sync_dimensions(workspace_id): workspace = Workspace.objects.get(id=workspace_id) if workspace.destination_synced_at: @@ -27,31 +31,45 @@ def sync_dimensions(workspace_id): xero_connector.sync_dimensions(workspace_id) workspace.destination_synced_at = datetime.now() - workspace.save(update_fields=['destination_synced_at']) + workspace.save(update_fields=["destination_synced_at"]) def refersh_xero_dimension(workspace_id): workspace_id = workspace_id xero_connector = get_xero_connector(workspace_id=workspace_id) - mapping_settings = MappingSetting.objects.filter(workspace_id=workspace_id, import_to_fyle=True) - workspace_general_settings: WorkspaceGeneralSettings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + mapping_settings = MappingSetting.objects.filter( + workspace_id=workspace_id, import_to_fyle=True + ) + workspace_general_settings: WorkspaceGeneralSettings = ( + WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + ) chain = Chain() for mapping_setting in mapping_settings: - if mapping_setting.source_field == 'PROJECT': + if mapping_setting.source_field == "PROJECT": # run auto_import_and_map_fyle_fields - chain.append('apps.mappings.queue.auto_import_and_map_fyle_fields', int(workspace_id)) - elif mapping_setting.source_field == 'COST_CENTER': + chain.append( + "apps.mappings.queue.auto_import_and_map_fyle_fields", int(workspace_id) + ) + elif mapping_setting.source_field == "COST_CENTER": # run auto_create_cost_center_mappings - chain.append('apps.mappings.tasks.auto_create_cost_center_mappings', int(workspace_id)) + chain.append( + "apps.mappings.tasks.auto_create_cost_center_mappings", + int(workspace_id), + ) elif mapping_setting.is_custom: # run async_auto_create_custom_field_mappings - chain.append('apps.mappings.tasks.async_auto_create_custom_field_mappings', int(workspace_id)) + chain.append( + "apps.mappings.tasks.async_auto_create_custom_field_mappings", + int(workspace_id), + ) elif workspace_general_settings.import_suppliers_as_merchants: # run auto_create_suppliers_as_merchant - chain.append('apps.mappings.tasks.auto_create_suppliers_as_merchants', workspace_id) - + chain.append( + "apps.mappings.tasks.auto_create_suppliers_as_merchants", workspace_id + ) + if chain.length() > 0: chain.run() @@ -59,4 +77,4 @@ def refersh_xero_dimension(workspace_id): workspace = Workspace.objects.get(id=workspace_id) workspace.destination_synced_at = datetime.now() - workspace.save(update_fields=['destination_synced_at']) + workspace.save(update_fields=["destination_synced_at"]) diff --git a/apps/xero/admin.py b/apps/xero/admin.py index 8c38f3f3..4fd54902 100644 --- a/apps/xero/admin.py +++ b/apps/xero/admin.py @@ -1,3 +1,3 @@ -from django.contrib import admin +from django.contrib import admin # noqa: F401 # Register your models here. diff --git a/apps/xero/apps.py b/apps/xero/apps.py index 8a86d052..13f040cb 100644 --- a/apps/xero/apps.py +++ b/apps/xero/apps.py @@ -2,4 +2,4 @@ class XeroConfig(AppConfig): - name = 'xero' + name = "xero" diff --git a/apps/xero/exceptions.py b/apps/xero/exceptions.py index 3b880f99..5ed8a9c8 100644 --- a/apps/xero/exceptions.py +++ b/apps/xero/exceptions.py @@ -1,15 +1,21 @@ +import json import logging import traceback -import json -from apps.tasks.models import TaskLog, Error -from apps.workspaces.models import XeroCredentials, FyleCredential, LastExportDetail -from fyle_xero_api.exceptions import BulkError -from xerosdk.exceptions import WrongParamsError, InvalidTokenError, NoPrivilegeError, UnsuccessfulAuthentication, XeroSDKError, RateLimitError -from apps.fyle.models import ExpenseGroup from django.db.models import Q +from xerosdk.exceptions import ( + InvalidTokenError, + NoPrivilegeError, + RateLimitError, + UnsuccessfulAuthentication, + WrongParamsError, + XeroSDKError, +) -import requests +from apps.fyle.models import ExpenseGroup +from apps.tasks.models import Error, TaskLog +from apps.workspaces.models import FyleCredential, LastExportDetail, XeroCredentials +from fyle_xero_api.exceptions import BulkError logger = logging.getLogger(__name__) logger.level = logging.INFO @@ -19,14 +25,16 @@ def update_last_export_details(workspace_id): last_export_detail = LastExportDetail.objects.get(workspace_id=workspace_id) failed_exports = TaskLog.objects.filter( - ~Q(type__in=['CREATING_PAYMENT', 'FETCHING_EXPENSES']), workspace_id=workspace_id, status__in=['FAILED', 'FATAL'] + ~Q(type__in=["CREATING_PAYMENT", "FETCHING_EXPENSES"]), + workspace_id=workspace_id, + status__in=["FAILED", "FATAL"], ).count() successful_exports = TaskLog.objects.filter( - ~Q(type__in=['CREATING_PAYMENT', 'FETCHING_EXPENSES']), + ~Q(type__in=["CREATING_PAYMENT", "FETCHING_EXPENSES"]), workspace_id=workspace_id, - status='COMPLETE', - updated_at__gt=last_export_detail.last_exported_at + status="COMPLETE", + updated_at__gt=last_export_detail.last_exported_at, ).count() last_export_detail.failed_expense_groups_count = failed_exports @@ -36,6 +44,7 @@ def update_last_export_details(workspace_id): return last_export_detail + def handle_xero_error(exception, expense_group: ExpenseGroup, task_log: TaskLog): """ Handle the xero-error and save it to Errors and TaskLogs table @@ -44,16 +53,16 @@ def handle_xero_error(exception, expense_group: ExpenseGroup, task_log: TaskLog) :params task_log: task_log :params export_type: export_type """ - if type(exception).__name__ == 'RateLimitError': + if type(exception).__name__ == "RateLimitError": logger.info(exception.message) task_log.xero_errors = [ { - 'error': { - 'Elements': [ + "error": { + "Elements": [ { - 'ValidationErrors': [ + "ValidationErrors": [ { - 'Message': 'Rate limit exceeded, integration will retry exports in a while' + "Message": "Rate limit exceeded, integration will retry exports in a while" } ] } @@ -65,11 +74,11 @@ def handle_xero_error(exception, expense_group: ExpenseGroup, task_log: TaskLog) workspace_id=expense_group.workspace_id, expense_group=expense_group, defaults={ - 'type': 'XERO_ERROR', - 'error_title': 'Rate Limit Error', - 'error_detail': 'Rate limit exceeded, integration will retry exports in a while', - 'is_resolved': False - } + "type": "XERO_ERROR", + "error_title": "Rate Limit Error", + "error_detail": "Rate limit exceeded, integration will retry exports in a while", + "is_resolved": False, + }, ) else: @@ -78,33 +87,41 @@ def handle_xero_error(exception, expense_group: ExpenseGroup, task_log: TaskLog) detail = json.dumps(exception.__dict__) detail = json.loads(detail) - all_details.append({ - 'expense_group_id': expense_group.id, - 'message': detail['message']['Message'], - 'error': detail['message'] - }) + all_details.append( + { + "expense_group_id": expense_group.id, + "message": detail["message"]["Message"], + "error": detail["message"], + } + ) - error_detail = 'Something unexcepted happen' - if 'Elements' in detail['message'] and len(detail['message']['Elements']) > 0 and\ - 'ValidationErrors' in detail['message']['Elements'][0] and len(detail['message']['Elements'][0]['ValidationErrors']) > 0 and\ - 'Message' in detail['message']['Elements'][0]['ValidationErrors'][0]: - error_detail = detail['message']['Elements'][0]['ValidationErrors'][0]['Message'] + error_detail = "Something unexcepted happen" + if ( + "Elements" in detail["message"] + and len(detail["message"]["Elements"]) > 0 + and "ValidationErrors" in detail["message"]["Elements"][0] + and len(detail["message"]["Elements"][0]["ValidationErrors"]) > 0 + and "Message" in detail["message"]["Elements"][0]["ValidationErrors"][0] + ): + error_detail = detail["message"]["Elements"][0]["ValidationErrors"][0][ + "Message" + ] Error.objects.update_or_create( workspace_id=expense_group.workspace_id, expense_group=expense_group, defaults={ - 'type': 'XERO_ERROR', - 'error_title': detail['message']['Message'], - 'error_detail': error_detail, - 'is_resolved': False - } + "type": "XERO_ERROR", + "error_title": detail["message"]["Message"], + "error_detail": error_detail, + "is_resolved": False, + }, ) task_log.xero_errors = all_details task_log.detail = None - task_log.status = 'FAILED' + task_log.status = "FAILED" task_log.save() @@ -125,46 +142,54 @@ def new_fn(*args): try: func(*args) - + except (FyleCredential.DoesNotExist, InvalidTokenError): - logger.info('Fyle credentials not found %s', workspace_id) + logger.info("Fyle credentials not found %s", workspace_id) task_log.detail = { - 'message': 'Fyle credentials do not exist in workspace' + "message": "Fyle credentials do not exist in workspace" } - task_log.status = 'FAILED' + task_log.status = "FAILED" task_log.save() - + except WrongParamsError as exception: if payment: logger.info(exception.message) detail = exception.message - task_log.status = 'FAILED' + task_log.status = "FAILED" task_log.detail = detail task_log.save() else: - handle_xero_error(exception=exception, expense_group=expense_group, task_log=task_log) - + handle_xero_error( + exception=exception, + expense_group=expense_group, + task_log=task_log, + ) + except RateLimitError as exception: - handle_xero_error(exception=exception, expense_group=expense_group, task_log=task_log) - + handle_xero_error( + exception=exception, expense_group=expense_group, task_log=task_log + ) + except (NoPrivilegeError, UnsuccessfulAuthentication) as exception: - xero_credentials = XeroCredentials.objects.filter(workspace_id=workspace_id).first() + xero_credentials = XeroCredentials.objects.filter( + workspace_id=workspace_id + ).first() xero_credentials.refresh_token = None xero_credentials.country = None xero_credentials.is_expired = True xero_credentials.save() logger.info(exception.message) - task_log.status = 'FAILED' + task_log.status = "FAILED" task_log.detail = None task_log.xero_errors = [ { - 'error': { - 'Elements': [ + "error": { + "Elements": [ { - 'ValidationErrors': [ + "ValidationErrors": [ { - 'Message': 'Xero account got disconnected, please re-connect to Xero again' + "Message": "Xero account got disconnected, please re-connect to Xero again" } ] } @@ -177,47 +202,46 @@ def new_fn(*args): except XeroCredentials.DoesNotExist: logger.info( - 'Xero Account not connected / token expired for workspace_id %s', + "Xero Account not connected / token expired for workspace_id %s", workspace_id, ) - detail = { - 'message': 'Xero Account not connected / token expired' - } + detail = {"message": "Xero Account not connected / token expired"} - task_log.status = 'FAILED' + task_log.status = "FAILED" task_log.detail = detail task_log.save() - + except XeroSDKError as exception: logger.info(exception.response) detail = exception.response - task_log.status = 'FAILED' + task_log.status = "FAILED" task_log.detail = None task_log.xero_errors = detail task_log.save() - + except BulkError as exception: logger.info(exception.response) detail = exception.response - task_log.status = 'FAILED' + task_log.status = "FAILED" task_log.detail = detail task_log.save() - + except Exception as error: error = traceback.format_exc() - task_log.detail = { - 'error': error - } - task_log.status = 'FATAL' + task_log.detail = {"error": error} + task_log.status = "FATAL" task_log.save() - logger.error('Something unexpected happened workspace_id: %s %s', - task_log.workspace_id, task_log.detail) + logger.error( + "Something unexpected happened workspace_id: %s %s", + task_log.workspace_id, + task_log.detail, + ) if not payment and args[-1] == True: update_last_export_details(workspace_id=expense_group.workspace_id) - + return new_fn - + return decorator diff --git a/apps/xero/models.py b/apps/xero/models.py index 87240475..e8bad385 100644 --- a/apps/xero/models.py +++ b/apps/xero/models.py @@ -1,89 +1,112 @@ from datetime import datetime +from typing import List -from django.db.models import JSONField from django.db import models -from fyle_accounting_mappings.models import Mapping, ExpenseAttribute, MappingSetting, DestinationAttribute -from typing import List +from django.db.models import JSONField +from fyle_accounting_mappings.models import DestinationAttribute, ExpenseAttribute, Mapping, MappingSetting -from apps.fyle.models import ExpenseGroup, Expense +from apps.fyle.models import Expense, ExpenseGroup from apps.mappings.models import GeneralMapping - from apps.workspaces.models import FyleCredential, Workspace def get_tracking_category(expense_group: ExpenseGroup, lineitem: Expense): - mapping_settings = MappingSetting.objects.filter(workspace_id=expense_group.workspace_id).all() + mapping_settings = MappingSetting.objects.filter( + workspace_id=expense_group.workspace_id + ).all() tracking_categories = [] - default_expense_attributes = ['CATEGORY', 'EMPLOYEE', 'CORPORATE_CARD', 'TAX_GROUP'] - default_destination_attributes = ['ITEM'] + default_expense_attributes = ["CATEGORY", "EMPLOYEE", "CORPORATE_CARD", "TAX_GROUP"] + default_destination_attributes = ["ITEM"] for setting in mapping_settings: - if setting.source_field not in default_expense_attributes and \ - setting.destination_field not in default_destination_attributes: - if setting.source_field == 'PROJECT': + if ( + setting.source_field not in default_expense_attributes + and setting.destination_field not in default_destination_attributes + ): + if setting.source_field == "PROJECT": source_value = lineitem.project - elif setting.source_field == 'COST_CENTER': + elif setting.source_field == "COST_CENTER": source_value = lineitem.cost_center else: attribute = ExpenseAttribute.objects.filter( attribute_type=setting.source_field, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() - source_value = lineitem.custom_properties.get(attribute.display_name, None) + source_value = lineitem.custom_properties.get( + attribute.display_name, None + ) mapping: Mapping = Mapping.objects.filter( source_type=setting.source_field, destination_type=setting.destination_field, source__value=source_value, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() if mapping: - tracking_categories.append({ - 'Name': mapping.destination.display_name, - 'Option': mapping.destination.value - }) + tracking_categories.append( + { + "Name": mapping.destination.display_name, + "Option": mapping.destination.value, + } + ) return tracking_categories def get_transaction_date(expense_group: ExpenseGroup) -> str: - if 'spent_at' in expense_group.description and expense_group.description['spent_at']: - return expense_group.description['spent_at'] - elif 'approved_at' in expense_group.description and expense_group.description['approved_at']: - return expense_group.description['approved_at'] - elif 'verified_at' in expense_group.description and expense_group.description['verified_at']: - return expense_group.description['verified_at'] - elif 'last_spent_at' in expense_group.description and expense_group.description['last_spent_at']: - return expense_group.description['last_spent_at'] - elif 'posted_at' in expense_group.description and expense_group.description['posted_at']: - return expense_group.description['posted_at'] + if ( + "spent_at" in expense_group.description + and expense_group.description["spent_at"] + ): + return expense_group.description["spent_at"] + elif ( + "approved_at" in expense_group.description + and expense_group.description["approved_at"] + ): + return expense_group.description["approved_at"] + elif ( + "verified_at" in expense_group.description + and expense_group.description["verified_at"] + ): + return expense_group.description["verified_at"] + elif ( + "last_spent_at" in expense_group.description + and expense_group.description["last_spent_at"] + ): + return expense_group.description["last_spent_at"] + elif ( + "posted_at" in expense_group.description + and expense_group.description["posted_at"] + ): + return expense_group.description["posted_at"] return datetime.now().strftime("%Y-%m-%d") def get_item_code_or_none(expense_group: ExpenseGroup, lineitem: Expense): item_setting: MappingSetting = MappingSetting.objects.filter( - workspace_id=expense_group.workspace_id, - destination_field='ITEM' + workspace_id=expense_group.workspace_id, destination_field="ITEM" ).first() item_code = None if item_setting: - if item_setting.source_field == 'PROJECT': + if item_setting.source_field == "PROJECT": source_value = lineitem.project - elif item_setting.source_field == 'COST_CENTER': + elif item_setting.source_field == "COST_CENTER": source_value = lineitem.cost_center else: - attribute = ExpenseAttribute.objects.filter(attribute_type=item_setting.source_field).first() + attribute = ExpenseAttribute.objects.filter( + attribute_type=item_setting.source_field + ).first() source_value = lineitem.custom_properties.get(attribute.display_name, None) mapping: Mapping = Mapping.objects.filter( source_type=item_setting.source_field, - destination_type='ITEM', + destination_type="ITEM", source__value=source_value, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() if mapping: @@ -94,18 +117,18 @@ def get_item_code_or_none(expense_group: ExpenseGroup, lineitem: Expense): def get_customer_id_or_none(expense_group: ExpenseGroup, lineitem: Expense): customer_setting: MappingSetting = MappingSetting.objects.filter( workspace_id=expense_group.workspace_id, - destination_field='CUSTOMER', - source_field='PROJECT' + destination_field="CUSTOMER", + source_field="PROJECT", ).first() customer_id = None if customer_setting and lineitem.billable and lineitem.project: mapping: Mapping = Mapping.objects.filter( - source_type='PROJECT', - destination_type='CUSTOMER', + source_type="PROJECT", + destination_type="CUSTOMER", source__value=lineitem.project, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() if mapping: @@ -113,31 +136,40 @@ def get_customer_id_or_none(expense_group: ExpenseGroup, lineitem: Expense): return customer_id - def get_expense_purpose(workspace_id, lineitem, category) -> str: fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) org_id = Workspace.objects.get(id=workspace_id).fyle_org_id - expense_link = '{0}/app/main/#/enterprise/view_expense/{1}?org_id={2}'.format( + expense_link = "{0}/app/main/#/enterprise/view_expense/{1}?org_id={2}".format( fyle_credentials.cluster_domain, lineitem.expense_id, org_id ) - expense_purpose = 'purpose - {0}'.format(lineitem.purpose) if lineitem.purpose else '' - spent_at = 'spent on {0}'.format(lineitem.spent_at.date()) if lineitem.spent_at else '' - vendor = '{} - '.format(lineitem.vendor) if lineitem.vendor else '' - return '{0}{1}, category - {2} {3}, report number - {4} {5} - {6}'.format( - vendor, lineitem.employee_email, category, spent_at, lineitem.claim_number, expense_purpose, expense_link + expense_purpose = ( + "purpose - {0}".format(lineitem.purpose) if lineitem.purpose else "" + ) + spent_at = ( + "spent on {0}".format(lineitem.spent_at.date()) if lineitem.spent_at else "" + ) + vendor = "{} - ".format(lineitem.vendor) if lineitem.vendor else "" + return "{0}{1}, category - {2} {3}, report number - {4} {5} - {6}".format( + vendor, + lineitem.employee_email, + category, + spent_at, + lineitem.claim_number, + expense_purpose, + expense_link, ) def get_tax_code_id_or_none(expense_group: ExpenseGroup, lineitem: Expense): tax_code = None mapping: Mapping = Mapping.objects.filter( - source_type='TAX_GROUP', - destination_type='TAX_CODE', + source_type="TAX_GROUP", + destination_type="TAX_CODE", source__source_id=lineitem.tax_group_id, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() if mapping: tax_code = mapping.destination.destination_id @@ -147,19 +179,25 @@ def get_tax_code_id_or_none(expense_group: ExpenseGroup, lineitem: Expense): class Bill(models.Model): id = models.AutoField(primary_key=True) - expense_group = models.OneToOneField(ExpenseGroup, on_delete=models.PROTECT, help_text='Expense group reference') - currency = models.CharField(max_length=255, help_text='Bill Currency') - contact_id = models.CharField(max_length=255, help_text='Xero Contact') - reference = models.CharField(max_length=255, help_text='Bill ID') - date = models.DateTimeField(help_text='Bill date') - payment_synced = models.BooleanField(help_text='Payment synced status', default=False) - paid_on_xero = models.BooleanField(help_text='Payment status in Xero', default=False) - export_id = models.CharField(max_length=255, help_text='Export ID', null=True) - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + expense_group = models.OneToOneField( + ExpenseGroup, on_delete=models.PROTECT, help_text="Expense group reference" + ) + currency = models.CharField(max_length=255, help_text="Bill Currency") + contact_id = models.CharField(max_length=255, help_text="Xero Contact") + reference = models.CharField(max_length=255, help_text="Bill ID") + date = models.DateTimeField(help_text="Bill date") + payment_synced = models.BooleanField( + help_text="Payment synced status", default=False + ) + paid_on_xero = models.BooleanField( + help_text="Payment status in Xero", default=False + ) + export_id = models.CharField(max_length=255, help_text="Export ID", null=True) + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") class Meta: - db_table = 'bills' + db_table = "bills" @staticmethod def create_bill(expense_group: ExpenseGroup): @@ -168,20 +206,20 @@ def create_bill(expense_group: ExpenseGroup): expense: Expense = expense_group.expenses.first() contact: Mapping = Mapping.objects.get( - destination_type='CONTACT', - source_type='EMPLOYEE', - source__value=description.get('employee_email'), - workspace_id=expense_group.workspace_id + destination_type="CONTACT", + source_type="EMPLOYEE", + source__value=description.get("employee_email"), + workspace_id=expense_group.workspace_id, ) bill_object, _ = Bill.objects.update_or_create( expense_group=expense_group, defaults={ - 'currency': expense.currency, - 'contact_id': contact.destination.destination_id, - 'reference': expense.claim_number, - 'date': get_transaction_date(expense_group) - } + "currency": expense.currency, + "contact_id": contact.destination.destination_id, + "reference": expense.claim_number, + "date": get_transaction_date(expense_group), + }, ) return bill_object @@ -189,20 +227,28 @@ def create_bill(expense_group: ExpenseGroup): class BillLineItem(models.Model): id = models.AutoField(primary_key=True) - expense = models.OneToOneField(Expense, on_delete=models.PROTECT, help_text='Reference to Expense') - bill = models.ForeignKey(Bill, on_delete=models.PROTECT, help_text='Reference to Bill') - tracking_categories = JSONField(null=True, help_text='Save Tracking options') - item_code = models.CharField(max_length=255, null=True, help_text='Item code') - account_id = models.CharField(max_length=255, help_text='Xero account id') - line_item_id = models.CharField(max_length=255, help_text='Xero line item id', null=True) - customer_id = models.CharField(max_length=255, help_text='Xero customer id', null=True) - description = models.TextField(help_text='Lineitem purpose') - amount = models.FloatField(help_text='Bill amount') - tax_amount = models.FloatField(null=True, help_text='Tax amount') - tax_code = models.CharField(max_length=255, help_text='Tax Group ID', null=True) + expense = models.OneToOneField( + Expense, on_delete=models.PROTECT, help_text="Reference to Expense" + ) + bill = models.ForeignKey( + Bill, on_delete=models.PROTECT, help_text="Reference to Bill" + ) + tracking_categories = JSONField(null=True, help_text="Save Tracking options") + item_code = models.CharField(max_length=255, null=True, help_text="Item code") + account_id = models.CharField(max_length=255, help_text="Xero account id") + line_item_id = models.CharField( + max_length=255, help_text="Xero line item id", null=True + ) + customer_id = models.CharField( + max_length=255, help_text="Xero customer id", null=True + ) + description = models.TextField(help_text="Lineitem purpose") + amount = models.FloatField(help_text="Bill amount") + tax_amount = models.FloatField(null=True, help_text="Tax amount") + tax_code = models.CharField(max_length=255, help_text="Tax Group ID", null=True) class Meta: - db_table = 'bill_lineitems' + db_table = "bill_lineitems" @staticmethod def create_bill_lineitems(expense_group: ExpenseGroup): @@ -212,20 +258,28 @@ def create_bill_lineitems(expense_group: ExpenseGroup): bill_lineitem_objects = [] for lineitem in expenses: - category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) else '{0} / {1}'.format( - lineitem.category, lineitem.sub_category) + category = ( + lineitem.category + if ( + lineitem.category == lineitem.sub_category + or lineitem.sub_category == None + ) + else "{0} / {1}".format(lineitem.category, lineitem.sub_category) + ) account = Mapping.objects.filter( - source_type='CATEGORY', + source_type="CATEGORY", source__value=category, - destination_type='ACCOUNT', - workspace_id=expense_group.workspace_id + destination_type="ACCOUNT", + workspace_id=expense_group.workspace_id, ).first() item_code = get_item_code_or_none(expense_group, lineitem) customer_id = get_customer_id_or_none(expense_group, lineitem) - description = get_expense_purpose(expense_group.workspace_id, lineitem, category) + description = get_expense_purpose( + expense_group.workspace_id, lineitem, category + ) tracking_categories = get_tracking_category(expense_group, lineitem) @@ -233,15 +287,17 @@ def create_bill_lineitems(expense_group: ExpenseGroup): bill=bill, expense_id=lineitem.id, defaults={ - 'tracking_categories': tracking_categories if tracking_categories else None, - 'item_code': item_code if item_code else None, - 'account_id': account.destination.destination_id, - 'description': description, - 'amount': lineitem.amount, - 'tax_code': get_tax_code_id_or_none(expense_group, lineitem), - 'tax_amount': lineitem.tax_amount, - 'customer_id': customer_id - } + "tracking_categories": tracking_categories + if tracking_categories + else None, + "item_code": item_code if item_code else None, + "account_id": account.destination.destination_id, + "description": description, + "amount": lineitem.amount, + "tax_code": get_tax_code_id_or_none(expense_group, lineitem), + "tax_amount": lineitem.tax_amount, + "customer_id": customer_id, + }, ) bill_lineitem_objects.append(lineitem_object) @@ -252,22 +308,29 @@ class BankTransaction(models.Model): """ Xero Bank Transaction """ + id = models.AutoField(primary_key=True) - expense_group = models.OneToOneField(ExpenseGroup, on_delete=models.PROTECT, help_text='Expense group reference') - contact_id = models.CharField(max_length=255, help_text='Xero Contact ID') - bank_account_code = models.CharField(max_length=255, help_text='Xero Bank Account code') - currency = models.CharField(max_length=255, help_text='Bank Transaction Currency') - reference = models.CharField(max_length=255, help_text='Bank Transaction ID') - transaction_date = models.DateField(help_text='Bank transaction date') - export_id = models.CharField(max_length=255, help_text='Export ID', null=True) - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + expense_group = models.OneToOneField( + ExpenseGroup, on_delete=models.PROTECT, help_text="Expense group reference" + ) + contact_id = models.CharField(max_length=255, help_text="Xero Contact ID") + bank_account_code = models.CharField( + max_length=255, help_text="Xero Bank Account code" + ) + currency = models.CharField(max_length=255, help_text="Bank Transaction Currency") + reference = models.CharField(max_length=255, help_text="Bank Transaction ID") + transaction_date = models.DateField(help_text="Bank transaction date") + export_id = models.CharField(max_length=255, help_text="Export ID", null=True) + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") class Meta: - db_table = 'bank_transactions' + db_table = "bank_transactions" @staticmethod - def create_bank_transaction(expense_group: ExpenseGroup, map_merchant_to_contact: bool): + def create_bank_transaction( + expense_group: ExpenseGroup, map_merchant_to_contact: bool + ): """ Create bank transaction :param expense_group: expense group @@ -278,50 +341,59 @@ def create_bank_transaction(expense_group: ExpenseGroup, map_merchant_to_contact expense: Expense = expense_group.expenses.first() if map_merchant_to_contact: - merchant = expense.vendor if expense.vendor else '' + merchant = expense.vendor if expense.vendor else "" contact_id = DestinationAttribute.objects.filter( - value__iexact=merchant, attribute_type='CONTACT', workspace_id=expense_group.workspace_id + value__iexact=merchant, + attribute_type="CONTACT", + workspace_id=expense_group.workspace_id, ).first() - if not contact_id: - contact_id = DestinationAttribute.objects.filter( - value__iexact='Credit Card Misc', workspace_id=expense_group.workspace_id).first().destination_id + contact_id = ( + DestinationAttribute.objects.filter( + value__iexact="Credit Card Misc", + workspace_id=expense_group.workspace_id, + ) + .first() + .destination_id + ) else: contact_id = contact_id.destination_id else: contact_id = Mapping.objects.get( - source_type='EMPLOYEE', - destination_type='CONTACT', - source__value=description.get('employee_email'), - workspace_id=expense_group.workspace_id + source_type="EMPLOYEE", + destination_type="CONTACT", + source__value=description.get("employee_email"), + workspace_id=expense_group.workspace_id, ).destination.destination_id bank_account_id = None bank_account = Mapping.objects.filter( - source_type='CORPORATE_CARD', - destination_type='BANK_ACCOUNT', + source_type="CORPORATE_CARD", + destination_type="BANK_ACCOUNT", source__source_id=expense.corporate_card_id, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() if bank_account: bank_account_id = bank_account.destination.destination_id if not bank_account_id: - bank_account_id = GeneralMapping.objects.get(workspace_id=expense_group.workspace_id).bank_account_id + bank_account_id = GeneralMapping.objects.get( + workspace_id=expense_group.workspace_id + ).bank_account_id bank_transaction_object, _ = BankTransaction.objects.update_or_create( expense_group=expense_group, defaults={ - 'contact_id': contact_id, - 'bank_account_code': bank_account_id, - 'currency': expense.currency, - 'reference': expense.expense_number, - 'transaction_date': get_transaction_date(expense_group), - } + "contact_id": contact_id, + "bank_account_code": bank_account_id, + "currency": expense.currency, + "reference": expense.expense_number, + "transaction_date": get_transaction_date(expense_group), + }, ) return bank_transaction_object @@ -330,24 +402,36 @@ class BankTransactionLineItem(models.Model): """ Xero Bank Transaction Lineitem """ + id = models.AutoField(primary_key=True) - expense = models.OneToOneField(Expense, on_delete=models.PROTECT, help_text='Reference to Expense') - bank_transaction = models.ForeignKey(BankTransaction, on_delete=models.PROTECT, - help_text='Reference to bank transaction') - account_id = models.CharField(max_length=255, help_text='Xero AccountCode') - line_item_id = models.CharField(max_length=255, help_text='Xero line item id', null=True) - customer_id = models.CharField(max_length=255, help_text='Xero customer id', null=True) - item_code = models.CharField(max_length=255, help_text='Xero ItemCode', null=True) - tracking_categories = JSONField(null=True, help_text='Save Tracking options') - amount = models.FloatField(help_text='Bank Transaction LineAmount') - description = models.TextField(help_text='Xero Bank Transaction LineItem description', null=True) - tax_amount = models.FloatField(null=True, help_text='Tax amount') - tax_code = models.CharField(max_length=255, help_text='Tax Group ID', null=True) - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + expense = models.OneToOneField( + Expense, on_delete=models.PROTECT, help_text="Reference to Expense" + ) + bank_transaction = models.ForeignKey( + BankTransaction, + on_delete=models.PROTECT, + help_text="Reference to bank transaction", + ) + account_id = models.CharField(max_length=255, help_text="Xero AccountCode") + line_item_id = models.CharField( + max_length=255, help_text="Xero line item id", null=True + ) + customer_id = models.CharField( + max_length=255, help_text="Xero customer id", null=True + ) + item_code = models.CharField(max_length=255, help_text="Xero ItemCode", null=True) + tracking_categories = JSONField(null=True, help_text="Save Tracking options") + amount = models.FloatField(help_text="Bank Transaction LineAmount") + description = models.TextField( + help_text="Xero Bank Transaction LineItem description", null=True + ) + tax_amount = models.FloatField(null=True, help_text="Tax amount") + tax_code = models.CharField(max_length=255, help_text="Tax Group ID", null=True) + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") class Meta: - db_table = 'bank_transaction_lineitems' + db_table = "bank_transaction_lineitems" @staticmethod def create_bank_transaction_lineitems(expense_group: ExpenseGroup): @@ -362,36 +446,51 @@ def create_bank_transaction_lineitems(expense_group: ExpenseGroup): bank_transaction_lineitem_objects = [] for lineitem in expenses: - category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) else '{0} / {1}'.format( - lineitem.category, lineitem.sub_category) + category = ( + lineitem.category + if ( + lineitem.category == lineitem.sub_category + or lineitem.sub_category == None + ) + else "{0} / {1}".format(lineitem.category, lineitem.sub_category) + ) account: Mapping = Mapping.objects.filter( - source_type='CATEGORY', - destination_type='ACCOUNT', + source_type="CATEGORY", + destination_type="ACCOUNT", source__value=category, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() item_code = get_item_code_or_none(expense_group, lineitem) customer_id = get_customer_id_or_none(expense_group, lineitem) - description = get_expense_purpose(expense_group.workspace_id, lineitem, category) + description = get_expense_purpose( + expense_group.workspace_id, lineitem, category + ) tracking_categories = get_tracking_category(expense_group, lineitem) - bank_transaction_lineitem_object, _ = BankTransactionLineItem.objects.update_or_create( + ( + bank_transaction_lineitem_object, + _, + ) = BankTransactionLineItem.objects.update_or_create( bank_transaction=bank_transaction, expense_id=lineitem.id, defaults={ - 'account_id': account.destination.destination_id if account else None, - 'item_code': item_code if item_code else None, - 'tracking_categories': tracking_categories if tracking_categories else None, - 'amount': lineitem.amount, - 'description': description, - 'tax_code': get_tax_code_id_or_none(expense_group, lineitem), - 'tax_amount': lineitem.tax_amount, - 'customer_id': customer_id - } + "account_id": account.destination.destination_id + if account + else None, + "item_code": item_code if item_code else None, + "tracking_categories": tracking_categories + if tracking_categories + else None, + "amount": lineitem.amount, + "description": description, + "tax_code": get_tax_code_id_or_none(expense_group, lineitem), + "tax_amount": lineitem.tax_amount, + "customer_id": customer_id, + }, ) bank_transaction_lineitem_objects.append(bank_transaction_lineitem_object) @@ -403,17 +502,24 @@ class Payment(models.Model): """ Xero Payments """ + id = models.AutoField(primary_key=True) - expense_group = models.OneToOneField(ExpenseGroup, on_delete=models.PROTECT, help_text='Expense group reference') - amount = models.FloatField(help_text='Amount') - workspace = models.ForeignKey(Workspace, on_delete=models.PROTECT, help_text='Workspace reference') - invoice_id = models.CharField(max_length=255, help_text='Linked Transaction ID ( Invoice ID )') - account_id = models.CharField(max_length=255, help_text='Payment Account') - created_at = models.DateTimeField(auto_now_add=True, help_text='Created at') - updated_at = models.DateTimeField(auto_now=True, help_text='Updated at') + expense_group = models.OneToOneField( + ExpenseGroup, on_delete=models.PROTECT, help_text="Expense group reference" + ) + amount = models.FloatField(help_text="Amount") + workspace = models.ForeignKey( + Workspace, on_delete=models.PROTECT, help_text="Workspace reference" + ) + invoice_id = models.CharField( + max_length=255, help_text="Linked Transaction ID ( Invoice ID )" + ) + account_id = models.CharField(max_length=255, help_text="Payment Account") + created_at = models.DateTimeField(auto_now_add=True, help_text="Created at") + updated_at = models.DateTimeField(auto_now=True, help_text="Updated at") class Meta: - db_table = 'payments' + db_table = "payments" @staticmethod def create_payment(expense_group: ExpenseGroup, invoice_id: str, account_id: str): @@ -427,10 +533,10 @@ def create_payment(expense_group: ExpenseGroup, invoice_id: str, account_id: str expense_group=expense_group, workspace=expense_group.workspace, defaults={ - 'amount': total_amount, - 'invoice_id': invoice_id, - 'account_id': account_id - } + "amount": total_amount, + "invoice_id": invoice_id, + "account_id": account_id, + }, ) return payment_object diff --git a/apps/xero/queue.py b/apps/xero/queue.py index 941ab6c6..836219ee 100644 --- a/apps/xero/queue.py +++ b/apps/xero/queue.py @@ -1,25 +1,29 @@ -from apps.mappings.models import GeneralMapping from datetime import datetime, timedelta + from django_q.models import Schedule +from apps.mappings.models import GeneralMapping + + def schedule_payment_creation(sync_fyle_to_xero_payments, workspace_id): - general_mappings: GeneralMapping = GeneralMapping.objects.filter(workspace_id=workspace_id).first() + general_mappings: GeneralMapping = GeneralMapping.objects.filter( + workspace_id=workspace_id + ).first() if general_mappings: if sync_fyle_to_xero_payments and general_mappings.payment_account_id: start_datetime = datetime.now() schedule, _ = Schedule.objects.update_or_create( - func='apps.xero.tasks.create_payment', - args='{}'.format(workspace_id), + func="apps.xero.tasks.create_payment", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': start_datetime - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": start_datetime, + }, ) if not sync_fyle_to_xero_payments: schedule: Schedule = Schedule.objects.filter( - func='apps.xero.tasks.create_payment', - args='{}'.format(workspace_id) + func="apps.xero.tasks.create_payment", args="{}".format(workspace_id) ).first() if schedule: @@ -30,18 +34,18 @@ def schedule_xero_objects_status_sync(sync_xero_to_fyle_payments, workspace_id): if sync_xero_to_fyle_payments: start_datetime = datetime.now() schedule, _ = Schedule.objects.update_or_create( - func='apps.xero.tasks.check_xero_object_status', - args='{}'.format(workspace_id), + func="apps.xero.tasks.check_xero_object_status", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': start_datetime - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": start_datetime, + }, ) else: schedule: Schedule = Schedule.objects.filter( - func='apps.xero.tasks.check_xero_object_status', - args='{}'.format(workspace_id) + func="apps.xero.tasks.check_xero_object_status", + args="{}".format(workspace_id), ).first() if schedule: @@ -52,20 +56,19 @@ def schedule_reimbursements_sync(sync_xero_to_fyle_payments, workspace_id): if sync_xero_to_fyle_payments: start_datetime = datetime.now() + timedelta(hours=12) schedule, _ = Schedule.objects.update_or_create( - func='apps.xero.tasks.process_reimbursements', - args='{}'.format(workspace_id), + func="apps.xero.tasks.process_reimbursements", + args="{}".format(workspace_id), defaults={ - 'schedule_type': Schedule.MINUTES, - 'minutes': 24 * 60, - 'next_run': start_datetime - } + "schedule_type": Schedule.MINUTES, + "minutes": 24 * 60, + "next_run": start_datetime, + }, ) else: schedule: Schedule = Schedule.objects.filter( - func='apps.xero.tasks.process_reimbursements', - args='{}'.format(workspace_id) + func="apps.xero.tasks.process_reimbursements", + args="{}".format(workspace_id), ).first() if schedule: schedule.delete() - diff --git a/apps/xero/serializers.py b/apps/xero/serializers.py index ca0d3ab7..75b895d0 100644 --- a/apps/xero/serializers.py +++ b/apps/xero/serializers.py @@ -1,32 +1,34 @@ -from rest_framework import serializers - from fyle_accounting_mappings.models import DestinationAttribute +from rest_framework import serializers -from apps.xero.models import BankTransaction, BankTransactionLineItem, Bill, BillLineItem +from apps.xero.models import BankTransactionLineItem, BillLineItem class XeroFieldSerializer(serializers.ModelSerializer): """ Xero Fields Serializer """ + class Meta: model = DestinationAttribute - fields = ['attribute_type', 'display_name'] + fields = ["attribute_type", "display_name"] class BankTransactionLineitemsSerializer(serializers.ModelSerializer): """ Xero Bank Transaction Lineitems serializer """ + class Meta: model = BankTransactionLineItem - fields = '__all__' + fields = "__all__" class BillTransactionLineitemsSerializer(serializers.ModelSerializer): """ Xero Bill Lineitems serializer """ + class Meta: model = BillLineItem - fields = '__all__' + fields = "__all__" diff --git a/apps/xero/tasks.py b/apps/xero/tasks.py index 526ac4fa..1855ec48 100644 --- a/apps/xero/tasks.py +++ b/apps/xero/tasks.py @@ -1,29 +1,25 @@ import logging import traceback -from datetime import datetime, timedelta +from datetime import datetime from time import sleep from typing import List from django.db import transaction from django.db.models import Q from django_q.tasks import Chain - -from fyle_accounting_mappings.models import Mapping, ExpenseAttribute, DestinationAttribute +from fyle_accounting_mappings.models import DestinationAttribute, ExpenseAttribute, Mapping from fyle_integrations_platform_connector import PlatformConnector +from xerosdk.exceptions import UnsuccessfulAuthentication, WrongParamsError -from xerosdk.exceptions import WrongParamsError, UnsuccessfulAuthentication - -from apps.fyle.models import ExpenseGroup, Reimbursement, Expense -from apps.tasks.models import Error +from apps.fyle.models import Expense, ExpenseGroup, Reimbursement from apps.mappings.models import GeneralMapping, TenantMapping -from apps.tasks.models import TaskLog -from apps.workspaces.models import WorkspaceGeneralSettings, XeroCredentials, FyleCredential, Workspace -from apps.xero.models import Bill, BillLineItem, BankTransaction, BankTransactionLineItem, Payment +from apps.tasks.models import Error, TaskLog +from apps.workspaces.models import FyleCredential, Workspace, WorkspaceGeneralSettings, XeroCredentials +from apps.xero.exceptions import handle_xero_exceptions +from apps.xero.models import BankTransaction, BankTransactionLineItem, Bill, BillLineItem, Payment from apps.xero.utils import XeroConnector from fyle_xero_api.exceptions import BulkError -from .exceptions import handle_xero_exceptions - logger = logging.getLogger(__name__) logger.level = logging.INFO @@ -36,10 +32,13 @@ def resolve_errors_for_exported_expense_group(expense_group: ExpenseGroup): Error.objects.filter( workspace_id=expense_group.workspace_id, expense_group=expense_group, - is_resolved=False + is_resolved=False, ).update(is_resolved=True) -def get_or_create_credit_card_contact(workspace_id: int, merchant: str, auto_create_merchant_destination_entity): + +def get_or_create_credit_card_contact( + workspace_id: int, merchant: str, auto_create_merchant_destination_entity +): """ Get or create credit card contact :param workspace_id: Workspace Id @@ -47,8 +46,10 @@ def get_or_create_credit_card_contact(workspace_id: int, merchant: str, auto_cre :return: Contact """ - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) contact = None if merchant: @@ -60,9 +61,9 @@ def get_or_create_credit_card_contact(workspace_id: int, merchant: str, auto_cre if not contact and auto_create_merchant_destination_entity: merchant = merchant else: - merchant = 'Credit Card Misc' + merchant = "Credit Card Misc" else: - merchant = 'Credit Card Misc' + merchant = "Credit Card Misc" try: contact = xero_connection.get_or_create_contact(merchant, create=True) @@ -72,7 +73,12 @@ def get_or_create_credit_card_contact(workspace_id: int, merchant: str, auto_cre return contact -def load_attachments(xero_connection: XeroConnector, ref_id: str, ref_type: str, expense_group: ExpenseGroup): +def load_attachments( + xero_connection: XeroConnector, + ref_id: str, + ref_type: str, + expense_group: ExpenseGroup, +): """ Get attachments from fyle :param xero_connection: Xero Connection @@ -81,8 +87,10 @@ def load_attachments(xero_connection: XeroConnector, ref_id: str, ref_type: str, :param expense_group: Expense group """ try: - fyle_credentials = FyleCredential.objects.get(workspace_id=expense_group.workspace_id) - file_ids = expense_group.expenses.values_list('file_ids', flat=True) + fyle_credentials = FyleCredential.objects.get( + workspace_id=expense_group.workspace_id + ) + file_ids = expense_group.expenses.values_list("file_ids", flat=True) platform = PlatformConnector(fyle_credentials) files_list = [] @@ -90,7 +98,7 @@ def load_attachments(xero_connection: XeroConnector, ref_id: str, ref_type: str, for file_id in file_ids: if file_id: for id in file_id: - file_object = {'id': id} + file_object = {"id": id} files_list.append(file_object) if files_list: @@ -101,59 +109,60 @@ def load_attachments(xero_connection: XeroConnector, ref_id: str, ref_type: str, except Exception: error = traceback.format_exc() logger.info( - 'Attachment failed for expense group id %s / workspace id %s \n Error: %s', - expense_group.id, expense_group.workspace_id, {'error': error} + "Attachment failed for expense group id %s / workspace id %s \n Error: %s", + expense_group.id, + expense_group.workspace_id, + {"error": error}, ) -def create_or_update_employee_mapping(expense_group: ExpenseGroup, xero_connection: XeroConnector, - auto_map_employees_preference: str): +def create_or_update_employee_mapping( + expense_group: ExpenseGroup, + xero_connection: XeroConnector, + auto_map_employees_preference: str, +): try: Mapping.objects.get( - destination_type='CONTACT', - source_type='EMPLOYEE', - source__value=expense_group.description.get('employee_email'), - workspace_id=expense_group.workspace_id + destination_type="CONTACT", + source_type="EMPLOYEE", + source__value=expense_group.description.get("employee_email"), + workspace_id=expense_group.workspace_id, ) - + except Mapping.DoesNotExist: source_employee = ExpenseAttribute.objects.get( workspace_id=expense_group.workspace_id, - attribute_type='EMPLOYEE', - value=expense_group.description.get('employee_email') + attribute_type="EMPLOYEE", + value=expense_group.description.get("employee_email"), ) try: - if auto_map_employees_preference == 'EMAIL': - filters = { - 'detail__email__iexact': source_employee.value - } + if auto_map_employees_preference == "EMAIL": + filters = {"detail__email__iexact": source_employee.value} - elif auto_map_employees_preference == 'NAME': - filters = { - 'value__iexact': source_employee.detail['full_name'] - } + elif auto_map_employees_preference == "NAME": + filters = {"value__iexact": source_employee.detail["full_name"]} contact = DestinationAttribute.objects.filter( - attribute_type='CONTACT', + attribute_type="CONTACT", workspace_id=expense_group.workspace_id, **filters ).first() if contact is None: contact: DestinationAttribute = xero_connection.get_or_create_contact( - contact_name=source_employee.detail['full_name'], + contact_name=source_employee.detail["full_name"], email=source_employee.value, - create=True + create=True, ) mapping = Mapping.create_or_update_mapping( - source_type='EMPLOYEE', - source_value=expense_group.description.get('employee_email'), - destination_type='CONTACT', + source_type="EMPLOYEE", + source_value=expense_group.description.get("employee_email"), + destination_type="CONTACT", destination_id=contact.destination_id, destination_value=contact.value, - workspace_id=int(expense_group.workspace_id) + workspace_id=int(expense_group.workspace_id), ) mapping.source.auto_mapped = True @@ -163,41 +172,57 @@ def create_or_update_employee_mapping(expense_group: ExpenseGroup, xero_connecti mapping.destination.save() except WrongParamsError as exception: - logger.info('Error while auto creating contact workspace_id - %s error: %s', - expense_group.workspace_id, {'error': exception.message}) + logger.info( + "Error while auto creating contact workspace_id - %s error: %s", + expense_group.workspace_id, + {"error": exception.message}, + ) @handle_xero_exceptions(payment=False) -def create_bill(expense_group_id: int, task_log_id: int, xero_connection: XeroConnector, last_export: bool): +def create_bill( + expense_group_id: int, + task_log_id: int, + xero_connection: XeroConnector, + last_export: bool, +): sleep(2) expense_group = ExpenseGroup.objects.get(id=expense_group_id) task_log = TaskLog.objects.get(id=task_log_id) - if task_log.status not in ['IN_PROGRESS', 'COMPLETE']: - task_log.status = 'IN_PROGRESS' + if task_log.status not in ["IN_PROGRESS", "COMPLETE"]: + task_log.status = "IN_PROGRESS" task_log.save() else: return - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=expense_group.workspace_id) + general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=expense_group.workspace_id + ) - if general_settings.auto_map_employees and general_settings.auto_create_destination_entity \ - and general_settings.auto_map_employees != 'EMPLOYEE_CODE': - create_or_update_employee_mapping(expense_group, xero_connection, general_settings.auto_map_employees) + if ( + general_settings.auto_map_employees + and general_settings.auto_create_destination_entity + and general_settings.auto_map_employees != "EMPLOYEE_CODE" + ): + create_or_update_employee_mapping( + expense_group, xero_connection, general_settings.auto_map_employees + ) __validate_expense_group(expense_group) with transaction.atomic(): - bill_object = Bill.create_bill(expense_group) bill_lineitems_objects = BillLineItem.create_bill_lineitems(expense_group) - created_bill = xero_connection.post_bill(bill_object, bill_lineitems_objects, general_settings) + created_bill = xero_connection.post_bill( + bill_object, bill_lineitems_objects, general_settings + ) task_log.detail = created_bill task_log.bill = bill_object task_log.xero_errors = None - task_log.status = 'COMPLETE' + task_log.status = "COMPLETE" task_log.save() @@ -209,19 +234,26 @@ def create_bill(expense_group_id: int, task_log_id: int, xero_connection: XeroCo # Assign billable expenses to customers if general_settings.import_customers: # Save parent level ID and line item level ID to corresponding exports table to make things easier during posting of linked transaction for debugging purposes - bill_object.export_id = created_bill['Invoices'][0]['InvoiceID'] + bill_object.export_id = created_bill["Invoices"][0]["InvoiceID"] bill_object.save() index = 0 for bill_lineitems_object in bill_lineitems_objects: # Sequence of lines in API response and bank_transaction_lineitems_objects will be the same, iterating over them and adding line item ID - bill_lineitems_object.line_item_id = created_bill['Invoices'][0]['LineItems'][index]['LineItemID'] + bill_lineitems_object.line_item_id = created_bill["Invoices"][0][ + "LineItems" + ][index]["LineItemID"] bill_lineitems_object.save() index += 1 attach_customer_to_export(xero_connection, task_log) - load_attachments(xero_connection, created_bill['Invoices'][0]['InvoiceID'], 'invoices', expense_group) + load_attachments( + xero_connection, + created_bill["Invoices"][0]["InvoiceID"], + "invoices", + expense_group, + ) def create_chain_and_export(chaining_attributes: list, workspace_id: int) -> None: @@ -238,19 +270,26 @@ def create_chain_and_export(chaining_attributes: list, workspace_id: int) -> Non chain = Chain() fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) - chain.append('apps.fyle.tasks.sync_dimensions', fyle_credentials) + chain.append("apps.fyle.tasks.sync_dimensions", fyle_credentials) for group in chaining_attributes: - trigger_function = 'apps.xero.tasks.create_{}'.format(group['export_type']) - chain.append(trigger_function, group['expense_group_id'], group['task_log_id'], xero_connection, group['last_export']) + trigger_function = "apps.xero.tasks.create_{}".format(group["export_type"]) + chain.append( + trigger_function, + group["expense_group_id"], + group["task_log_id"], + xero_connection, + group["last_export"], + ) if chain.length() > 1: chain.run() except UnsuccessfulAuthentication: - logger.info('Xero refresh token is invalid for workspace_id - %s', workspace_id) + logger.info("Xero refresh token is invalid for workspace_id - %s", workspace_id) except XeroCredentials.DoesNotExist: - logger.info('Xero Credentials not found for workspace_id %s',workspace_id) + logger.info("Xero Credentials not found for workspace_id %s", workspace_id) + def schedule_bills_creation(workspace_id: int, expense_group_ids: List[str]) -> list: """ @@ -262,38 +301,42 @@ def schedule_bills_creation(workspace_id: int, expense_group_ids: List[str]) -> chaining_attributes = [] if expense_group_ids: expense_groups = ExpenseGroup.objects.filter( - Q(tasklog__id__isnull=True) | ~Q(tasklog__status__in=['IN_PROGRESS', 'COMPLETE']), - workspace_id=workspace_id, id__in=expense_group_ids, bill__id__isnull=True, exported_at__isnull=True + Q(tasklog__id__isnull=True) + | ~Q(tasklog__status__in=["IN_PROGRESS", "COMPLETE"]), + workspace_id=workspace_id, + id__in=expense_group_ids, + bill__id__isnull=True, + exported_at__isnull=True, ).all() for index, expense_group in enumerate(expense_groups): task_log, _ = TaskLog.objects.get_or_create( workspace_id=expense_group.workspace_id, expense_group=expense_group, - defaults={ - 'status': 'ENQUEUED', - 'type': 'CREATING_BILL' - } + defaults={"status": "ENQUEUED", "type": "CREATING_BILL"}, ) - if task_log.status not in ['IN_PROGRESS', 'ENQUEUED']: - task_log.status = 'ENQUEUED' + if task_log.status not in ["IN_PROGRESS", "ENQUEUED"]: + task_log.status = "ENQUEUED" task_log.save() last_export = False if expense_groups.count() == index + 1: last_export = True - chaining_attributes.append({ - 'expense_group_id': expense_group.id, - 'task_log_id': task_log.id, - 'export_type': 'bill', - 'last_export': last_export - }) + chaining_attributes.append( + { + "expense_group_id": expense_group.id, + "task_log_id": task_log.id, + "export_type": "bill", + "last_export": last_export, + } + ) task_log.save() return chaining_attributes + def get_linked_transaction_object(export_instance, line_items: list): """ Get linked transaction object @@ -305,35 +348,40 @@ def get_linked_transaction_object(export_instance, line_items: list): export_id = export_instance.export_id for line in line_items: - lines.append({ - 'line_item_id': line.line_item_id, - 'customer_id': line.customer_id - }) + lines.append( + {"line_item_id": line.line_item_id, "customer_id": line.customer_id} + ) return export_id, lines + def extract_export_lines_contact_ids(task_log: TaskLog): """ Construct linked transaction payload :return: export id, lines """ # Constructing orm filter based on export type - filter = { - 'bill': task_log.bill - } if task_log.type == 'CREATING_BILL' else { - 'bank_transaction': task_log.bank_transaction - } + filter = ( + {"bill": task_log.bill} + if task_log.type == "CREATING_BILL" + else {"bank_transaction": task_log.bank_transaction} + ) # Customer ID is mandatory to create linked transaction - filter['customer_id__isnull'] = False + filter["customer_id__isnull"] = False export_id, lines = get_linked_transaction_object( - export_instance=task_log.bill if task_log.type == 'CREATING_BILL' else task_log.bank_transaction, - line_items = BillLineItem.objects.filter(**filter) if task_log.type == 'CREATING_BILL' else BankTransactionLineItem.objects.filter(**filter), + export_instance=task_log.bill + if task_log.type == "CREATING_BILL" + else task_log.bank_transaction, + line_items=BillLineItem.objects.filter(**filter) + if task_log.type == "CREATING_BILL" + else BankTransactionLineItem.objects.filter(**filter), ) return export_id, lines + def attach_customer_to_export(xero_connection: XeroConnector, task_log: TaskLog): """ Attach customer to export @@ -347,56 +395,78 @@ def attach_customer_to_export(xero_connection: XeroConnector, task_log: TaskLog) try: # Linked transaction payload data = { - 'SourceTransactionID': export_id, - 'SourceLineItemID': item['line_item_id'], - 'ContactID': item['customer_id'] + "SourceTransactionID": export_id, + "SourceLineItemID": item["line_item_id"], + "ContactID": item["customer_id"], } xero_connection.connection.linked_transactions.post(data) except Exception as exception: # Silently ignoring the error, since the export should be already created - logger.info('Something unexpected happened during attaching customer to export', exception) + logger.info( + "Something unexpected happened during attaching customer to export", + exception, + ) @handle_xero_exceptions(payment=False) -def create_bank_transaction(expense_group_id: int, task_log_id: int, xero_connection: XeroConnector, last_export: bool): +def create_bank_transaction( + expense_group_id: int, + task_log_id: int, + xero_connection: XeroConnector, + last_export: bool, +): sleep(2) expense_group = ExpenseGroup.objects.get(id=expense_group_id) task_log = TaskLog.objects.get(id=task_log_id) - if task_log.status not in ['IN_PROGRESS', 'COMPLETE']: - task_log.status = 'IN_PROGRESS' + if task_log.status not in ["IN_PROGRESS", "COMPLETE"]: + task_log.status = "IN_PROGRESS" task_log.save() else: return - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=expense_group.workspace_id) + general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=expense_group.workspace_id + ) if not general_settings.map_merchant_to_contact: - if general_settings.auto_map_employees and general_settings.auto_create_destination_entity \ - and general_settings.auto_map_employees != 'EMPLOYEE_CODE': - create_or_update_employee_mapping(expense_group, xero_connection, general_settings.auto_map_employees) + if ( + general_settings.auto_map_employees + and general_settings.auto_create_destination_entity + and general_settings.auto_map_employees != "EMPLOYEE_CODE" + ): + create_or_update_employee_mapping( + expense_group, xero_connection, general_settings.auto_map_employees + ) else: merchant = expense_group.expenses.first().vendor - get_or_create_credit_card_contact(expense_group.workspace_id, merchant, general_settings.auto_create_merchant_destination_entity) + get_or_create_credit_card_contact( + expense_group.workspace_id, + merchant, + general_settings.auto_create_merchant_destination_entity, + ) __validate_expense_group(expense_group) with transaction.atomic(): + bank_transaction_object = BankTransaction.create_bank_transaction( + expense_group, general_settings.map_merchant_to_contact + ) - bank_transaction_object = BankTransaction.create_bank_transaction(expense_group, general_settings.map_merchant_to_contact) - - bank_transaction_lineitems_objects = BankTransactionLineItem.create_bank_transaction_lineitems( - expense_group + bank_transaction_lineitems_objects = ( + BankTransactionLineItem.create_bank_transaction_lineitems(expense_group) ) created_bank_transaction = xero_connection.post_bank_transaction( - bank_transaction_object, bank_transaction_lineitems_objects, general_settings + bank_transaction_object, + bank_transaction_lineitems_objects, + general_settings, ) task_log.detail = created_bank_transaction task_log.bank_transaction = bank_transaction_object task_log.xero_errors = None - task_log.status = 'COMPLETE' + task_log.status = "COMPLETE" task_log.save() @@ -408,23 +478,35 @@ def create_bank_transaction(expense_group_id: int, task_log_id: int, xero_connec # Assign billable expenses to customers if general_settings.import_customers: # Save parent level ID and line item level ID to corresponding exports table to make things easier during posting of linked transaction for debugging purposes - bank_transaction_object.export_id = created_bank_transaction['BankTransactions'][0]['BankTransactionID'] + bank_transaction_object.export_id = created_bank_transaction[ + "BankTransactions" + ][0]["BankTransactionID"] bank_transaction_object.save() index = 0 for bank_transaction_lineitems_object in bank_transaction_lineitems_objects: # Sequence of lines in API response and bank_transaction_lineitems_objects will be the same, iterating over them and adding line item ID - bank_transaction_lineitems_object.line_item_id = created_bank_transaction['BankTransactions'][0]['LineItems'][index]['LineItemID'] + bank_transaction_lineitems_object.line_item_id = ( + created_bank_transaction["BankTransactions"][0]["LineItems"][index][ + "LineItemID" + ] + ) bank_transaction_lineitems_object.save() index += 1 - attach_customer_to_export(xero_connection, task_log) + attach_customer_to_export(xero_connection, task_log) - load_attachments(xero_connection, created_bank_transaction['BankTransactions'][0]['BankTransactionID'], - 'banktransactions', expense_group) + load_attachments( + xero_connection, + created_bank_transaction["BankTransactions"][0]["BankTransactionID"], + "banktransactions", + expense_group, + ) -def schedule_bank_transaction_creation(workspace_id: int, expense_group_ids: List[str]) -> list: +def schedule_bank_transaction_creation( + workspace_id: int, expense_group_ids: List[str] +) -> list: """ Schedule bank transaction creation :param expense_group_ids: List of expense group ids @@ -434,33 +516,36 @@ def schedule_bank_transaction_creation(workspace_id: int, expense_group_ids: Lis chaining_attributes = [] if expense_group_ids: expense_groups = ExpenseGroup.objects.filter( - Q(tasklog__id__isnull=True) | ~Q(tasklog__status__in=['IN_PROGRESS', 'COMPLETE']), - workspace_id=workspace_id, id__in=expense_group_ids, banktransaction__id__isnull=True, exported_at__isnull=True + Q(tasklog__id__isnull=True) + | ~Q(tasklog__status__in=["IN_PROGRESS", "COMPLETE"]), + workspace_id=workspace_id, + id__in=expense_group_ids, + banktransaction__id__isnull=True, + exported_at__isnull=True, ).all() for index, expense_group in enumerate(expense_groups): task_log, _ = TaskLog.objects.get_or_create( workspace_id=expense_group.workspace_id, expense_group=expense_group, - defaults={ - 'status': 'ENQUEUED', - 'type': 'CREATING_BANK_TRANSACTION' - } + defaults={"status": "ENQUEUED", "type": "CREATING_BANK_TRANSACTION"}, ) - if task_log.status not in ['IN_PROGRESS', 'ENQUEUED']: - task_log.status = 'ENQUEUED' + if task_log.status not in ["IN_PROGRESS", "ENQUEUED"]: + task_log.status = "ENQUEUED" task_log.save() last_export = False if expense_groups.count() == index + 1: last_export = True - chaining_attributes.append({ - 'expense_group_id': expense_group.id, - 'task_log_id': task_log.id, - 'export_type': 'bank_transaction', - 'last_export': last_export - }) + chaining_attributes.append( + { + "expense_group_id": expense_group.id, + "task_log_id": task_log.id, + "export_type": "bank_transaction", + "last_export": last_export, + } + ) task_log.save() @@ -472,150 +557,174 @@ def __validate_expense_group(expense_group: ExpenseGroup): row = 0 general_settings: WorkspaceGeneralSettings = WorkspaceGeneralSettings.objects.get( - workspace_id=expense_group.workspace_id) - general_mapping = GeneralMapping.objects.filter(workspace_id=expense_group.workspace_id).first() + workspace_id=expense_group.workspace_id + ) + general_mapping = GeneralMapping.objects.filter( + workspace_id=expense_group.workspace_id + ).first() if general_settings.corporate_credit_card_expenses_object: - if not general_mapping: - bulk_errors.append({ - 'row': None, - 'expense_group_id': expense_group.id, - 'value': 'bank account', - 'type': 'General Mapping', - 'message': 'General mapping not found' - }) - - if not (general_settings.corporate_credit_card_expenses_object == 'BANK TRANSACTION' - and general_settings.map_merchant_to_contact and expense_group.fund_source == 'CCC'): - + bulk_errors.append( + { + "row": None, + "expense_group_id": expense_group.id, + "value": "bank account", + "type": "General Mapping", + "message": "General mapping not found", + } + ) + + if not ( + general_settings.corporate_credit_card_expenses_object == "BANK TRANSACTION" + and general_settings.map_merchant_to_contact + and expense_group.fund_source == "CCC" + ): employee_attribute = ExpenseAttribute.objects.filter( - value=expense_group.description.get('employee_email'), + value=expense_group.description.get("employee_email"), workspace_id=expense_group.workspace_id, - attribute_type='EMPLOYEE' + attribute_type="EMPLOYEE", ).first() try: Mapping.objects.get( - destination_type='CONTACT', - source_type='EMPLOYEE', + destination_type="CONTACT", + source_type="EMPLOYEE", source=employee_attribute, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ) except Mapping.DoesNotExist: - bulk_errors.append({ - 'row': None, - 'expense_group_id': expense_group.id, - 'value': expense_group.description.get('employee_email'), - 'type': 'Employee Mapping', - 'message': 'Employee mapping not found' - }) + bulk_errors.append( + { + "row": None, + "expense_group_id": expense_group.id, + "value": expense_group.description.get("employee_email"), + "type": "Employee Mapping", + "message": "Employee mapping not found", + } + ) if employee_attribute: Error.objects.update_or_create( workspace_id=expense_group.workspace_id, expense_attribute=employee_attribute, defaults={ - 'type': 'EMPLOYEE_MAPPING', - 'error_title': employee_attribute.value, - 'error_detail': 'Employee mapping is missing', - 'is_resolved': False - } + "type": "EMPLOYEE_MAPPING", + "error_title": employee_attribute.value, + "error_detail": "Employee mapping is missing", + "is_resolved": False, + }, ) if general_settings.import_tax_codes: if not general_mapping: - bulk_errors.append({ - 'row': None, - 'expense_group_id': expense_group.id, - 'value': 'Default Tax Code', - 'type': 'General Mapping', - 'message': 'General mapping not found' - }) - elif not (general_mapping.default_tax_code_id or general_mapping.default_tax_code_name): - bulk_errors.append({ - 'row': None, - 'expense_group_id': expense_group.id, - 'value': 'Default Tax Code', - 'type': 'General Mapping', - 'message': 'Default Tax Code not found' - }) + bulk_errors.append( + { + "row": None, + "expense_group_id": expense_group.id, + "value": "Default Tax Code", + "type": "General Mapping", + "message": "General mapping not found", + } + ) + elif not ( + general_mapping.default_tax_code_id or general_mapping.default_tax_code_name + ): + bulk_errors.append( + { + "row": None, + "expense_group_id": expense_group.id, + "value": "Default Tax Code", + "type": "General Mapping", + "message": "Default Tax Code not found", + } + ) expenses = expense_group.expenses.all() for lineitem in expenses: - category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) else '{0} / {1}'.format( - lineitem.category, lineitem.sub_category) + category = ( + lineitem.category + if ( + lineitem.category == lineitem.sub_category + or lineitem.sub_category == None + ) + else "{0} / {1}".format(lineitem.category, lineitem.sub_category) + ) category_attribute = ExpenseAttribute.objects.filter( value=category, workspace_id=expense_group.workspace_id, - attribute_type='CATEGORY' + attribute_type="CATEGORY", ).first() account = Mapping.objects.filter( - source_type='CATEGORY', + source_type="CATEGORY", source=category_attribute, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() if not account: - bulk_errors.append({ - 'row': row, - 'expense_group_id': expense_group.id, - 'value': category, - 'type': 'Category Mapping', - 'message': 'Category Mapping not found' - }) + bulk_errors.append( + { + "row": row, + "expense_group_id": expense_group.id, + "value": category, + "type": "Category Mapping", + "message": "Category Mapping not found", + } + ) if category_attribute: Error.objects.update_or_create( workspace_id=expense_group.workspace_id, expense_attribute=category_attribute, defaults={ - 'type': 'CATEGORY_MAPPING', - 'error_title': category_attribute.value, - 'error_detail': 'Category mapping is missing', - 'is_resolved': False - } + "type": "CATEGORY_MAPPING", + "error_title": category_attribute.value, + "error_detail": "Category mapping is missing", + "is_resolved": False, + }, ) row = row + 1 if bulk_errors: - raise BulkError('Mappings are missing', bulk_errors) + raise BulkError("Mappings are missing", bulk_errors) def check_expenses_reimbursement_status(expenses): all_expenses_paid = True for expense in expenses: - reimbursement = Reimbursement.objects.filter(settlement_id=expense.settlement_id).first() + reimbursement = Reimbursement.objects.filter( + settlement_id=expense.settlement_id + ).first() - if reimbursement.state != 'COMPLETE': + if reimbursement.state != "COMPLETE": all_expenses_paid = False return all_expenses_paid @handle_xero_exceptions(payment=True) -def process_payments(bill: Bill, workspace_id:int, task_log: TaskLog, general_mappings): +def process_payments( + bill: Bill, workspace_id: int, task_log: TaskLog, general_mappings +): xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id) xero_connection = XeroConnector(xero_credentials, workspace_id) with transaction.atomic(): xero_object_task_log = TaskLog.objects.get(expense_group=bill.expense_group) - invoice_id = xero_object_task_log.detail['Invoices'][0]['InvoiceID'] + invoice_id = xero_object_task_log.detail["Invoices"][0]["InvoiceID"] payment_object = Payment.create_payment( expense_group=bill.expense_group, invoice_id=invoice_id, - account_id=general_mappings.payment_account_id + account_id=general_mappings.payment_account_id, ) - created_payment = xero_connection.post_payment( - payment_object - ) + created_payment = xero_connection.post_payment(payment_object) bill.payment_synced = True bill.paid_on_xero = True @@ -624,7 +733,7 @@ def process_payments(bill: Bill, workspace_id:int, task_log: TaskLog, general_ma task_log.detail = created_payment task_log.payment = payment_object task_log.xero_errors = None - task_log.status = 'COMPLETE' + task_log.status = "COMPLETE" task_log.save() @@ -636,25 +745,28 @@ def create_payment(workspace_id): platform.reimbursements.sync() bills: List[Bill] = Bill.objects.filter( - payment_synced=False, expense_group__workspace_id=workspace_id, - expense_group__fund_source='PERSONAL').all() + payment_synced=False, + expense_group__workspace_id=workspace_id, + expense_group__fund_source="PERSONAL", + ).all() - general_mappings: GeneralMapping = GeneralMapping.objects.get(workspace_id=workspace_id) + general_mappings: GeneralMapping = GeneralMapping.objects.get( + workspace_id=workspace_id + ) for bill in bills: - expense_group_reimbursement_status = check_expenses_reimbursement_status(bill.expense_group.expenses.all()) + expense_group_reimbursement_status = check_expenses_reimbursement_status( + bill.expense_group.expenses.all() + ) if expense_group_reimbursement_status: task_log, _ = TaskLog.objects.update_or_create( workspace_id=workspace_id, - task_id='PAYMENT_{}'.format(bill.expense_group.id), - defaults={ - 'status': 'IN_PROGRESS', - 'type': 'CREATING_PAYMENT' - } + task_id="PAYMENT_{}".format(bill.expense_group.id), + defaults={"status": "IN_PROGRESS", "type": "CREATING_PAYMENT"}, ) - - process_payments(bill,workspace_id,task_log, general_mappings) + + process_payments(bill, workspace_id, task_log, general_mappings) def get_all_xero_bill_ids(xero_objects): @@ -666,8 +778,8 @@ def get_all_xero_bill_ids(xero_objects): for task_log in task_logs: xero_objects_details[task_log.expense_group.id] = { - 'expense_group': task_log.expense_group, - 'bill_id': task_log.detail['Invoices'][0]['InvoiceID'] + "expense_group": task_log.expense_group, + "bill_id": task_log.detail["Invoices"][0]["InvoiceID"], } return xero_objects_details @@ -682,16 +794,18 @@ def check_xero_object_status(workspace_id): bills = Bill.objects.filter( expense_group__workspace_id=workspace_id, paid_on_xero=False, - expense_group__fund_source='PERSONAL' + expense_group__fund_source="PERSONAL", ).all() if bills: bill_id_map = get_all_xero_bill_ids(bills) for bill in bills: - bill_object = xero_connection.get_bill(bill_id_map[bill.expense_group.id]['bill_id']) + bill_object = xero_connection.get_bill( + bill_id_map[bill.expense_group.id]["bill_id"] + ) - if bill_object['Invoices'][0]['Status'] == 'PAID': + if bill_object["Invoices"][0]["Status"] == "PAID": line_items = BillLineItem.objects.filter(bill_id=bill.id) for line_item in line_items: expense = line_item.expense @@ -704,13 +818,13 @@ def check_xero_object_status(workspace_id): except XeroCredentials.DoesNotExist: logger.info( - 'Xero Credentials not found for workspace_id %s', + "Xero Credentials not found for workspace_id %s", workspace_id, ) except UnsuccessfulAuthentication: logger.info( - 'Xero refresh token expired for workspace_id %s', + "Xero refresh token expired for workspace_id %s", workspace_id, ) @@ -721,13 +835,17 @@ def process_reimbursements(workspace_id): platform = PlatformConnector(fyle_credentials) platform.reimbursements.sync() - reimbursements = Reimbursement.objects.filter(state='PENDING', workspace_id=workspace_id).all() + reimbursements = Reimbursement.objects.filter( + state="PENDING", workspace_id=workspace_id + ).all() reimbursement_ids = [] if reimbursements: for reimbursement in reimbursements: - expenses = Expense.objects.filter(settlement_id=reimbursement.settlement_id, fund_source='PERSONAL').all() + expenses = Expense.objects.filter( + settlement_id=reimbursement.settlement_id, fund_source="PERSONAL" + ).all() paid_expenses = expenses.filter(paid_on_xero=True) all_expense_paid = False @@ -740,7 +858,7 @@ def process_reimbursements(workspace_id): if reimbursement_ids: reimbursements_list = [] for reimbursement_id in reimbursement_ids: - reimbursement_object = {'id': reimbursement_id} + reimbursement_object = {"id": reimbursement_id} reimbursements_list.append(reimbursement_object) platform.reimbursements.bulk_post_reimbursements(reimbursements_list) @@ -759,30 +877,31 @@ def create_missing_currency(workspace_id: int): tenant_mapping = TenantMapping.objects.get(workspace_id=workspace_id) xero_connection.connection.set_tenant_id(tenant_mapping.tenant_id) - currencies = xero_connection.connection.currencies.get_all()['Currencies'] + currencies = xero_connection.connection.currencies.get_all()["Currencies"] fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) platform = PlatformConnector(fyle_credentials) my_profile = platform.connection.v1beta.spender.my_profile.get() - fyle_currency = my_profile['data']['org']['currency'] + fyle_currency = my_profile["data"]["org"]["currency"] - existing_currency = list(filter(lambda currency: currency['Code'] == fyle_currency, currencies)) + existing_currency = list( + filter(lambda currency: currency["Code"] == fyle_currency, currencies) + ) if not existing_currency: - xero_connection.connection.currencies.post(data={ - 'Code': fyle_currency, - 'Description': fyle_currency - }) - logger.info('Created missing currency %s in Xero', fyle_currency) + xero_connection.connection.currencies.post( + data={"Code": fyle_currency, "Description": fyle_currency} + ) + logger.info("Created missing currency %s in Xero", fyle_currency) except UnsuccessfulAuthentication: logger.info( - 'Xero refresh token expired for workspace_id %s', + "Xero refresh token expired for workspace_id %s", workspace_id, ) except Exception as exception: - logger.exception('Error creating currency in Xero', exception) + logger.exception("Error creating currency in Xero", exception) def update_xero_short_code(workspace_id: int): @@ -797,19 +916,19 @@ def update_xero_short_code(workspace_id: int): tenant_mapping = TenantMapping.objects.get(workspace_id=workspace_id) xero_connection.connection.set_tenant_id(tenant_mapping.tenant_id) - short_code = xero_connection.connection.organisations.get_all()[0]['ShortCode'] + short_code = xero_connection.connection.organisations.get_all()[0]["ShortCode"] workspace = Workspace.objects.get(pk=workspace_id) workspace.xero_short_code = short_code workspace.save() - logger.info('Updated Xero short code') + logger.info("Updated Xero short code") except UnsuccessfulAuthentication: logger.info( - 'Xero refresh token expired for workspace_id %s', + "Xero refresh token expired for workspace_id %s", workspace_id, ) except Exception as exception: - logger.exception('Error updating Xero short code', exception) + logger.exception("Error updating Xero short code", exception) diff --git a/apps/xero/urls.py b/apps/xero/urls.py index 5b6e4d22..42a79c43 100644 --- a/apps/xero/urls.py +++ b/apps/xero/urls.py @@ -1,13 +1,19 @@ from django.urls import path -from .views import TenantView, XeroFieldsView, TokenHealthView, SyncXeroDimensionView, \ - RefreshXeroDimensionView, DestinationAttributesView +from apps.xero.views import ( + DestinationAttributesView, + RefreshXeroDimensionView, + SyncXeroDimensionView, + TenantView, + TokenHealthView, + XeroFieldsView, +) urlpatterns = [ - path('tenants/', TenantView.as_view()), - path('xero_fields/', XeroFieldsView.as_view()), - path('token_health/', TokenHealthView.as_view()), - path('sync_dimensions/', SyncXeroDimensionView.as_view()), - path('refresh_dimensions/', RefreshXeroDimensionView.as_view()), - path('destination_attributes/', DestinationAttributesView.as_view()) + path("tenants/", TenantView.as_view()), + path("xero_fields/", XeroFieldsView.as_view()), + path("token_health/", TokenHealthView.as_view()), + path("sync_dimensions/", SyncXeroDimensionView.as_view()), + path("refresh_dimensions/", RefreshXeroDimensionView.as_view()), + path("destination_attributes/", DestinationAttributesView.as_view()), ] diff --git a/apps/xero/utils.py b/apps/xero/utils.py index 788997d9..43ac9887 100644 --- a/apps/xero/utils.py +++ b/apps/xero/utils.py @@ -1,40 +1,41 @@ -import os -import ast import base64 import json import logging -from datetime import timedelta, datetime - -from django.conf import settings -from typing import List, Dict +from datetime import datetime, timedelta +from typing import Dict, List import unidecode - +from fyle_accounting_mappings.models import DestinationAttribute from xerosdk import XeroSDK from xerosdk.exceptions import WrongParamsError +from apps.mappings.models import GeneralMapping, TenantMapping +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings, XeroCredentials +from apps.xero.models import BankTransaction, BankTransactionLineItem, Bill, BillLineItem, Payment from fyle_xero_api import settings -from apps.mappings.models import TenantMapping -from apps.workspaces.models import XeroCredentials, WorkspaceGeneralSettings, Workspace -from fyle_accounting_mappings.models import DestinationAttribute -from apps.mappings.models import GeneralMapping -from apps.xero.models import Bill, BillLineItem, BankTransaction, BankTransactionLineItem, Payment logger = logging.getLogger(__name__) -CHARTS_OF_ACCOUNTS = ['EXPENSE', 'ASSET', 'EQUITY', 'LIABILITY', 'REVENUE'] +CHARTS_OF_ACCOUNTS = ["EXPENSE", "ASSET", "EQUITY", "LIABILITY", "REVENUE"] def format_updated_at(updated_at): - return datetime.strftime(updated_at, '%Y-%m-%dT%H:%M:%S') + return datetime.strftime(updated_at, "%Y-%m-%dT%H:%M:%S") def get_last_synced_at(workspace_id: int, attribute_type: str): - latest_synced_record = DestinationAttribute.objects.filter( - workspace_id=workspace_id, - attribute_type=attribute_type - ).order_by('-updated_at').first() - updated_at = format_updated_at(latest_synced_record.updated_at) if latest_synced_record else None + latest_synced_record = ( + DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type=attribute_type + ) + .order_by("-updated_at") + .first() + ) + updated_at = ( + format_updated_at(latest_synced_record.updated_at) + if latest_synced_record + else None + ) return updated_at @@ -54,7 +55,7 @@ def __init__(self, credentials_object: XeroCredentials, workspace_id: int): base_url=base_url, client_id=client_id, client_secret=client_secret, - refresh_token=refresh_token + refresh_token=refresh_token, ) self.workspace_id = workspace_id @@ -62,21 +63,21 @@ def __init__(self, credentials_object: XeroCredentials, workspace_id: int): credentials_object.refresh_token = self.connection.refresh_token credentials_object.save() - def get_suppliers(self): tenant_mapping = TenantMapping.objects.get(workspace_id=self.workspace_id) self.connection.set_tenant_id(tenant_mapping.tenant_id) suppliers_generator = self.connection.contacts.list_all_generator() - merchant_names : List[str] = [] + merchant_names: List[str] = [] for suppliers in suppliers_generator: - for supplier in suppliers['Contacts']: - if supplier['IsSupplier'] and supplier['ContactStatus'] == 'ACTIVE': - merchant_names.append(supplier['Name']) + for supplier in suppliers["Contacts"]: + if supplier["IsSupplier"] and supplier["ContactStatus"] == "ACTIVE": + merchant_names.append(supplier["Name"]) return merchant_names - - def get_or_create_contact(self, contact_name: str, email: str = None, create: bool = False): + def get_or_create_contact( + self, contact_name: str, email: str = None, create: bool = False + ): """ Call xero api to get or create contact :param email: email for contact user @@ -87,9 +88,11 @@ def get_or_create_contact(self, contact_name: str, email: str = None, create: bo tenant_mapping = TenantMapping.objects.get(workspace_id=self.workspace_id) self.connection.set_tenant_id(tenant_mapping.tenant_id) - contact_name = contact_name.replace('#', '%23') # Replace '#' with %23 - contact_name = contact_name.replace('"', '') # remove double quotes from merchant name - contact_name = contact_name.replace('&', '') # remove & merchant name + contact_name = contact_name.replace("#", "%23") # Replace '#' with %23 + contact_name = contact_name.replace( + '"', "" + ) # remove double quotes from merchant name + contact_name = contact_name.replace("&", "") # remove & merchant name contact = self.connection.contacts.search_contact_by_contact_name(contact_name) @@ -121,34 +124,38 @@ def sync_tenants(self): tenant_attributes = [] for tenant in tenants: - tenant_attributes.append({ - 'attribute_type': 'TENANT', - 'display_name': 'Tenant', - 'value': tenant['tenantName'], - 'destination_id': tenant['tenantId'] - }) - - tenant_attributes = DestinationAttribute.bulk_create_or_update_destination_attributes( - tenant_attributes, 'TENANT', self.workspace_id, True) - return tenant_attributes + tenant_attributes.append( + { + "attribute_type": "TENANT", + "display_name": "Tenant", + "value": tenant["tenantName"], + "destination_id": tenant["tenantId"], + } + ) + tenant_attributes = ( + DestinationAttribute.bulk_create_or_update_destination_attributes( + tenant_attributes, "TENANT", self.workspace_id, True + ) + ) + return tenant_attributes def get_tax_inclusive_amount(self, amount, default_tax_code_id): - tax_attribute = DestinationAttribute.objects.filter( - destination_id=default_tax_code_id, - attribute_type='TAX_CODE', - workspace_id=self.workspace_id + destination_id=default_tax_code_id, + attribute_type="TAX_CODE", + workspace_id=self.workspace_id, ).first() - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=self.workspace_id) + general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=self.workspace_id + ) tax_inclusive_amount = amount if tax_attribute and general_settings.import_tax_codes: - tax_rate = float((tax_attribute.detail['tax_rate']) / 100) - tax_amount = round((amount - (amount / ( tax_rate + 1))), 2) + tax_rate = float((tax_attribute.detail["tax_rate"]) / 100) + tax_amount = round((amount - (amount / (tax_rate + 1))), 2) tax_inclusive_amount = round((amount - tax_amount), 2) return tax_inclusive_amount - def sync_tax_codes(self): """ Get Tax Codes @@ -156,25 +163,30 @@ def sync_tax_codes(self): tenant_mapping = TenantMapping.objects.get(workspace_id=self.workspace_id) self.connection.set_tenant_id(tenant_mapping.tenant_id) - tax_codes = self.connection.tax_rates.get_all()['TaxRates'] + tax_codes = self.connection.tax_rates.get_all()["TaxRates"] tax_attributes = [] for tax_code in tax_codes: - effective_tax_rate = tax_code['EffectiveRate'] + effective_tax_rate = tax_code["EffectiveRate"] if effective_tax_rate >= 0: - tax_attributes.append({ - 'attribute_type': 'TAX_CODE', - 'display_name': 'Tax Code', - 'value': '{0} @{1}%'.format(tax_code['Name'], effective_tax_rate), - 'destination_id': tax_code['TaxType'], - 'detail': { - 'tax_rate': effective_tax_rate, - 'tax_refs': tax_code['TaxComponents'] + tax_attributes.append( + { + "attribute_type": "TAX_CODE", + "display_name": "Tax Code", + "value": "{0} @{1}%".format( + tax_code["Name"], effective_tax_rate + ), + "destination_id": tax_code["TaxType"], + "detail": { + "tax_rate": effective_tax_rate, + "tax_refs": tax_code["TaxComponents"], + }, } - }) + ) DestinationAttribute.bulk_create_or_update_destination_attributes( - tax_attributes, 'TAX_CODE', self.workspace_id, True) + tax_attributes, "TAX_CODE", self.workspace_id, True + ) return [] @@ -188,51 +200,57 @@ def sync_accounts(self): workspace = Workspace.objects.filter(id=self.workspace_id).first() - updated_at = get_last_synced_at(self.workspace_id, 'ACCOUNT') + updated_at = get_last_synced_at(self.workspace_id, "ACCOUNT") if not workspace.xero_accounts_last_synced_at: updated_at = None - accounts = self.connection.accounts.get_all( - modified_after=updated_at - )['Accounts'] + accounts = self.connection.accounts.get_all(modified_after=updated_at)[ + "Accounts" + ] - account_attributes = { - 'bank_account': [], - 'account': [] - } + account_attributes = {"bank_account": [], "account": []} for account in accounts: detail = { - 'account_type': account['Class'], - 'enable_payments_to_account': account['EnablePaymentsToAccount'], - 'active': True if account['Status'] == 'ACTIVE' else False, + "account_type": account["Class"], + "enable_payments_to_account": account["EnablePaymentsToAccount"], + "active": True if account["Status"] == "ACTIVE" else False, } - if account['Type'] == 'BANK': - account_attributes['bank_account'].append({ - 'attribute_type': 'BANK_ACCOUNT', - 'display_name': 'Bank Account', - 'value': unidecode.unidecode(u'{0}'.format(account['Name'])).replace('/', '-'), - 'destination_id': account['AccountID'], - 'active': True if account['Status'] == 'ACTIVE' else False, - 'detail': detail - }) - - elif account['Class'] in CHARTS_OF_ACCOUNTS: - account_attributes['account'].append({ - 'attribute_type': 'ACCOUNT', - 'display_name': 'Account', - 'value': unidecode.unidecode(u'{0}'.format(account['Name'])).replace('/', '-'), - 'destination_id': account['Code'], - 'active': True if account['Status'] == 'ACTIVE' else False, - 'detail': detail - }) + if account["Type"] == "BANK": + account_attributes["bank_account"].append( + { + "attribute_type": "BANK_ACCOUNT", + "display_name": "Bank Account", + "value": unidecode.unidecode( + "{0}".format(account["Name"]) + ).replace("/", "-"), + "destination_id": account["AccountID"], + "active": True if account["Status"] == "ACTIVE" else False, + "detail": detail, + } + ) + + elif account["Class"] in CHARTS_OF_ACCOUNTS: + account_attributes["account"].append( + { + "attribute_type": "ACCOUNT", + "display_name": "Account", + "value": unidecode.unidecode( + "{0}".format(account["Name"]) + ).replace("/", "-"), + "destination_id": account["Code"], + "active": True if account["Status"] == "ACTIVE" else False, + "detail": detail, + } + ) for attribute_type, account_attribute in account_attributes.items(): if account_attribute: DestinationAttribute.bulk_create_or_update_destination_attributes( - account_attribute, attribute_type.upper(), self.workspace_id, True) + account_attribute, attribute_type.upper(), self.workspace_id, True + ) workspace.xero_accounts_last_synced_at = datetime.now() workspace.save() @@ -247,27 +265,34 @@ def sync_contacts(self): self.connection.set_tenant_id(tenant_mapping.tenant_id) - updated_at = get_last_synced_at(self.workspace_id, 'CONTACT') + updated_at = get_last_synced_at(self.workspace_id, "CONTACT") - contacts_generator = self.connection.contacts.list_all_generator(modified_after=updated_at) + contacts_generator = self.connection.contacts.list_all_generator( + modified_after=updated_at + ) for contacts in contacts_generator: contact_attributes = [] - for contact in contacts['Contacts']: + for contact in contacts["Contacts"]: detail = { - 'email': contact['EmailAddress'] if 'EmailAddress' in contact else None + "email": contact["EmailAddress"] + if "EmailAddress" in contact + else None } - contact_attributes.append({ - 'attribute_type': 'CONTACT', - 'display_name': 'Contact', - 'value': contact['Name'], - 'destination_id': contact['ContactID'], - 'detail': detail - }) + contact_attributes.append( + { + "attribute_type": "CONTACT", + "display_name": "Contact", + "value": contact["Name"], + "destination_id": contact["ContactID"], + "detail": detail, + } + ) DestinationAttribute.bulk_create_or_update_destination_attributes( - contact_attributes, 'CONTACT', self.workspace_id, True) + contact_attributes, "CONTACT", self.workspace_id, True + ) return [] @@ -282,51 +307,64 @@ def sync_customers(self): customers_generator = self.connection.contacts.list_all_generator() customer_attributes = [] - destination_attributes = DestinationAttribute.objects.filter(workspace_id=self.workspace_id, - attribute_type= 'CUSTOMER', display_name='Customer').values('destination_id', 'value', 'detail') + destination_attributes = DestinationAttribute.objects.filter( + workspace_id=self.workspace_id, + attribute_type="CUSTOMER", + display_name="Customer", + ).values("destination_id", "value", "detail") disabled_fields_map = {} for destination_attribute in destination_attributes: - disabled_fields_map[destination_attribute['destination_id']] = { - 'value': destination_attribute['value'], - 'detail': destination_attribute['detail'] + disabled_fields_map[destination_attribute["destination_id"]] = { + "value": destination_attribute["value"], + "detail": destination_attribute["detail"], } - for customers in customers_generator: - - for customer in customers['Contacts']: - if customer['IsCustomer']: - customer_attributes.append({ - 'attribute_type': 'CUSTOMER', - 'display_name': 'Customer', - 'value': customer['Name'], - 'destination_id': customer['ContactID'], - 'detail': { - 'email': customer['EmailAddress'] if 'EmailAddress' in customer else None - }, - 'active': True if customer['ContactStatus'] == 'ACTIVE' else False - }) - - if customer['ContactStatus'] == 'ACTIVE' and customer['ContactID'] in disabled_fields_map: - disabled_fields_map.pop(customer['ContactID']) + for customer in customers["Contacts"]: + if customer["IsCustomer"]: + customer_attributes.append( + { + "attribute_type": "CUSTOMER", + "display_name": "Customer", + "value": customer["Name"], + "destination_id": customer["ContactID"], + "detail": { + "email": customer["EmailAddress"] + if "EmailAddress" in customer + else None + }, + "active": True + if customer["ContactStatus"] == "ACTIVE" + else False, + } + ) + + if ( + customer["ContactStatus"] == "ACTIVE" + and customer["ContactID"] in disabled_fields_map + ): + disabled_fields_map.pop(customer["ContactID"]) # For setting active to False # During the initial run we only pull in the active ones. # In the concurrent runs we get all the destination_attributes and store it in disable_field_map check if in the SDK call we get status = Active or not . # If yes then we pop the item from the disable_field_map else we set the active = True. # This should take care of delete as well as inactive case since we are checking the status=Active case. for destination_id in disabled_fields_map: - customer_attributes.append({ - 'attribute_type': 'CUSTOMER', - 'display_name': 'customer', - 'value': disabled_fields_map[destination_id]['value'], - 'destination_id': destination_id, - 'active': False, - 'detail': disabled_fields_map[destination_id]['detail'] - }) + customer_attributes.append( + { + "attribute_type": "CUSTOMER", + "display_name": "customer", + "value": disabled_fields_map[destination_id]["value"], + "destination_id": destination_id, + "active": False, + "detail": disabled_fields_map[destination_id]["detail"], + } + ) DestinationAttribute.bulk_create_or_update_destination_attributes( - customer_attributes, 'CUSTOMER', self.workspace_id, True) + customer_attributes, "CUSTOMER", self.workspace_id, True + ) return [] @@ -338,24 +376,36 @@ def sync_tracking_categories(self): self.connection.set_tenant_id(tenant_mapping.tenant_id) - tracking_categories = self.connection.tracking_categories.get_all()['TrackingCategories'] + tracking_categories = self.connection.tracking_categories.get_all()[ + "TrackingCategories" + ] for tracking_category in tracking_categories: tracking_category_attributes = [] - for option in tracking_category['Options']: - if tracking_category['Name'].lower() == 'customer': - tracking_category['Name'] = '{}-TC'.format(tracking_category['Name']) - - tracking_category_attributes.append({ - 'attribute_type': tracking_category['Name'].upper().replace(' ', '_'), - 'display_name': tracking_category['Name'], - 'value': option['Name'], - 'destination_id': option['TrackingOptionID'] - }) + for option in tracking_category["Options"]: + if tracking_category["Name"].lower() == "customer": + tracking_category["Name"] = "{}-TC".format( + tracking_category["Name"] + ) + + tracking_category_attributes.append( + { + "attribute_type": tracking_category["Name"] + .upper() + .replace(" ", "_"), + "display_name": tracking_category["Name"], + "value": option["Name"], + "destination_id": option["TrackingOptionID"], + } + ) DestinationAttribute.bulk_create_or_update_destination_attributes( - tracking_category_attributes, tracking_category['Name'].upper().replace(' ', '_'), self.workspace_id, True) + tracking_category_attributes, + tracking_category["Name"].upper().replace(" ", "_"), + self.workspace_id, + True, + ) return [] @@ -367,38 +417,45 @@ def sync_items(self): self.connection.set_tenant_id(tenant_mapping.tenant_id) - updated_at = get_last_synced_at(self.workspace_id, 'ITEM') + updated_at = get_last_synced_at(self.workspace_id, "ITEM") - items = self.connection.items.get_all(modified_after=updated_at)['Items'] + items = self.connection.items.get_all(modified_after=updated_at)["Items"] item_attributes = [] for item in items: - item_attributes.append({ - 'attribute_type': 'ITEM', - 'display_name': 'Item', - 'value': item['Code'], - 'destination_id': item['ItemID'] - }) + item_attributes.append( + { + "attribute_type": "ITEM", + "display_name": "Item", + "value": item["Code"], + "destination_id": item["ItemID"], + } + ) DestinationAttribute.bulk_create_or_update_destination_attributes( - item_attributes, 'ITEM', self.workspace_id, True) + item_attributes, "ITEM", self.workspace_id, True + ) return [] def create_contact_destination_attribute(self, contact): - created_contact = DestinationAttribute.create_or_update_destination_attribute({ - 'attribute_type': 'CONTACT', - 'display_name': 'Contact', - 'value': contact['Name'], - 'destination_id': contact['ContactID'], - 'detail': { - 'email': contact['EmailAddress'] if 'EmailAddress' in contact else None - } - }, self.workspace_id) + created_contact = DestinationAttribute.create_or_update_destination_attribute( + { + "attribute_type": "CONTACT", + "display_name": "Contact", + "value": contact["Name"], + "destination_id": contact["ContactID"], + "detail": { + "email": contact["EmailAddress"] + if "EmailAddress" in contact + else None + }, + }, + self.workspace_id, + ) return created_contact def sync_dimensions(self, workspace_id: str): - try: self.sync_accounts() except Exception as exception: @@ -440,19 +497,24 @@ def post_contact(self, contact_name: str, email: str): self.connection.set_tenant_id(tenant_mapping.tenant_id) contact = { - 'Name': contact_name, - 'FirstName': contact_name.split(' ')[0], - 'LastName': contact_name.split(' ')[-1] - if len(contact_name.split(' ')) > 1 else '', - 'EmailAddress': email + "Name": contact_name, + "FirstName": contact_name.split(" ")[0], + "LastName": contact_name.split(" ")[-1] + if len(contact_name.split(" ")) > 1 + else "", + "EmailAddress": email, } - created_contact = self.connection.contacts.post(contact)['Contacts'][0] + created_contact = self.connection.contacts.post(contact)["Contacts"][0] return created_contact - - def __construct_bill_lineitems(self, bill_lineitems: List[BillLineItem], general_mappings: GeneralMapping, general_settings: WorkspaceGeneralSettings) -> List[Dict]: + def __construct_bill_lineitems( + self, + bill_lineitems: List[BillLineItem], + general_mappings: GeneralMapping, + general_settings: WorkspaceGeneralSettings, + ) -> List[Dict]: """ Create bill line items :return: constructed line items @@ -460,12 +522,13 @@ def __construct_bill_lineitems(self, bill_lineitems: List[BillLineItem], general lines = [] for line in bill_lineitems: - unit_amount = line.amount if line.tax_code: unit_amount = line.amount - line.tax_amount elif general_mappings: - unit_amount = self.get_tax_inclusive_amount(line.amount, general_mappings.default_tax_code_id) + unit_amount = self.get_tax_inclusive_amount( + line.amount, general_mappings.default_tax_code_id + ) tax_type = None if line.tax_code and line.tax_amount: @@ -477,17 +540,25 @@ def __construct_bill_lineitems(self, bill_lineitems: List[BillLineItem], general if line.tax_code and line.tax_amount is not None: tax_amount = line.tax_amount elif general_mappings: - tax_amount = round(line.amount - self.get_tax_inclusive_amount(line.amount, general_mappings.default_tax_code_id), 2) + tax_amount = round( + line.amount + - self.get_tax_inclusive_amount( + line.amount, general_mappings.default_tax_code_id + ), + 2, + ) line = { - 'Description': line.description, - 'Quantity': '1', - 'UnitAmount': unit_amount, - 'AccountCode': line.account_id, - 'ItemCode': line.item_code if line.item_code else None, - 'Tracking': line.tracking_categories if line.tracking_categories else None, - 'TaxType': tax_type, - 'TaxAmount': tax_amount, + "Description": line.description, + "Quantity": "1", + "UnitAmount": unit_amount, + "AccountCode": line.account_id, + "ItemCode": line.item_code if line.item_code else None, + "Tracking": line.tracking_categories + if line.tracking_categories + else None, + "TaxType": tax_type, + "TaxAmount": tax_amount, } lines.append(line) @@ -498,29 +569,44 @@ def __construct_bill(self, bill: Bill, bill_lineitems: List[BillLineItem]) -> Di Create a bill :return: constructed bill """ - general_mappings = GeneralMapping.objects.filter(workspace_id=self.workspace_id).first() - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=self.workspace_id) + general_mappings = GeneralMapping.objects.filter( + workspace_id=self.workspace_id + ).first() + general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=self.workspace_id + ) workspace = bill.expense_group.workspace bill_payload = { - 'Type': 'ACCPAY', - 'Contact': { - 'ContactID': bill.contact_id - }, - 'Url': '{}/app/admin/#/reports/{}?org_id={}'.format(settings.FYLE_APP_URL, bill_lineitems[0].expense.report_id, workspace.fyle_org_id), - 'LineAmountTypes': 'Exclusive' if general_settings.import_tax_codes else 'NoTax', - 'Reference': bill.reference, - 'InvoiceNumber': bill.reference, - 'Date': bill.date, - 'DueDate': (datetime.now() + timedelta(days=14)).strftime('%Y-%m-%d'), - 'CurrencyCode': bill.currency, - 'Status': 'AUTHORISED', - 'LineItems': self.__construct_bill_lineitems(bill_lineitems, general_mappings, general_settings) + "Type": "ACCPAY", + "Contact": {"ContactID": bill.contact_id}, + "Url": "{}/app/admin/#/reports/{}?org_id={}".format( + settings.FYLE_APP_URL, + bill_lineitems[0].expense.report_id, + workspace.fyle_org_id, + ), + "LineAmountTypes": "Exclusive" + if general_settings.import_tax_codes + else "NoTax", + "Reference": bill.reference, + "InvoiceNumber": bill.reference, + "Date": bill.date, + "DueDate": (datetime.now() + timedelta(days=14)).strftime("%Y-%m-%d"), + "CurrencyCode": bill.currency, + "Status": "AUTHORISED", + "LineItems": self.__construct_bill_lineitems( + bill_lineitems, general_mappings, general_settings + ), } return bill_payload - def post_bill(self, bill: Bill, bill_lineitems: List[BillLineItem], general_settings: WorkspaceGeneralSettings): + def post_bill( + self, + bill: Bill, + bill_lineitems: List[BillLineItem], + general_settings: WorkspaceGeneralSettings, + ): """ Post vendor bills to Xero """ @@ -537,17 +623,30 @@ def post_bill(self, bill: Bill, bill_lineitems: List[BillLineItem], general_sett detail = json.dumps(exception.__dict__) detail = json.loads(detail) - if detail['message']['Elements']: - if general_settings.change_accounting_period and 'The document date cannot be before the end of year lock date' in detail['message']['Elements'][0]['ValidationErrors'][0]['Message']: - first_day_of_month = datetime.today().date().replace(day=1).strftime('%Y-%m-%d') + if detail["message"]["Elements"]: + if ( + general_settings.change_accounting_period + and "The document date cannot be before the end of year lock date" + in detail["message"]["Elements"][0]["ValidationErrors"][0][ + "Message" + ] + ): + first_day_of_month = ( + datetime.today().date().replace(day=1).strftime("%Y-%m-%d") + ) bills_payload = self.__construct_bill(bill, bill_lineitems) - bills_payload['Date'] = first_day_of_month + bills_payload["Date"] = first_day_of_month created_bill = self.connection.invoices.post(bills_payload) return created_bill else: raise - - def __construct_bank_transaction_lineitems(self, bank_transaction_lineitems: List[BankTransactionLineItem], general_mappings: GeneralMapping, general_settings: WorkspaceGeneralSettings) -> List[Dict]: + + def __construct_bank_transaction_lineitems( + self, + bank_transaction_lineitems: List[BankTransactionLineItem], + general_mappings: GeneralMapping, + general_settings: WorkspaceGeneralSettings, + ) -> List[Dict]: """ Create bank transaction line items :return: constructed line items @@ -555,93 +654,129 @@ def __construct_bank_transaction_lineitems(self, bank_transaction_lineitems: Lis lines = [] for line in bank_transaction_lineitems: - unit_amount = line.amount if line.tax_code: unit_amount = line.amount - line.tax_amount elif general_mappings: - unit_amount = self.get_tax_inclusive_amount(line.amount, general_mappings.default_tax_code_id) + unit_amount = self.get_tax_inclusive_amount( + line.amount, general_mappings.default_tax_code_id + ) tax_type = None - if (line.tax_code and line.tax_amount is not None): + if line.tax_code and line.tax_amount is not None: tax_type = line.tax_code elif general_settings.import_tax_codes and general_mappings != None: tax_type = general_mappings.default_tax_code_id line = { - 'Description': line.description, - 'Quantity': '1', - 'UnitAmount': abs(unit_amount), - 'AccountCode': line.account_id, - 'ItemCode': line.item_code if line.item_code else None, - 'Tracking': line.tracking_categories if line.tracking_categories else None, - 'TaxType': tax_type, + "Description": line.description, + "Quantity": "1", + "UnitAmount": abs(unit_amount), + "AccountCode": line.account_id, + "ItemCode": line.item_code if line.item_code else None, + "Tracking": line.tracking_categories + if line.tracking_categories + else None, + "TaxType": tax_type, } lines.append(line) return lines - def __construct_bank_transaction(self, bank_transaction: BankTransaction, - bank_transaction_lineitems: List[BankTransactionLineItem]) -> Dict: + def __construct_bank_transaction( + self, + bank_transaction: BankTransaction, + bank_transaction_lineitems: List[BankTransactionLineItem], + ) -> Dict: """ Create a bank transaction :return: constructed bank transaction """ - general_mappings = GeneralMapping.objects.filter(workspace_id=self.workspace_id).first() - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=self.workspace_id) + general_mappings = GeneralMapping.objects.filter( + workspace_id=self.workspace_id + ).first() + general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=self.workspace_id + ) workspace = bank_transaction.expense_group.workspace - + bank_transaction_payload = { - 'Type': 'SPEND', - 'Contact': { - 'ContactID': bank_transaction.contact_id - }, - 'BankAccount': { - 'AccountID': bank_transaction.bank_account_code - }, - 'Url': '{}/app/admin/#/view_expense/{}?org_id={}'.format(settings.FYLE_APP_URL, bank_transaction_lineitems[0].expense.expense_id, workspace.fyle_org_id), - 'LineAmountTypes': 'Exclusive' if general_settings.import_tax_codes else 'NoTax', - 'Reference': bank_transaction.reference, - 'Date': bank_transaction.transaction_date, - 'CurrencyCode': bank_transaction.currency, - 'Status': 'AUTHORISED', - 'LineItems': self.__construct_bank_transaction_lineitems(bank_transaction_lineitems, general_mappings, general_settings) + "Type": "SPEND", + "Contact": {"ContactID": bank_transaction.contact_id}, + "BankAccount": {"AccountID": bank_transaction.bank_account_code}, + "Url": "{}/app/admin/#/view_expense/{}?org_id={}".format( + settings.FYLE_APP_URL, + bank_transaction_lineitems[0].expense.expense_id, + workspace.fyle_org_id, + ), + "LineAmountTypes": "Exclusive" + if general_settings.import_tax_codes + else "NoTax", + "Reference": bank_transaction.reference, + "Date": bank_transaction.transaction_date, + "CurrencyCode": bank_transaction.currency, + "Status": "AUTHORISED", + "LineItems": self.__construct_bank_transaction_lineitems( + bank_transaction_lineitems, general_mappings, general_settings + ), } if bank_transaction_lineitems[0].amount < 0: - bank_transaction_payload['Type'] = 'RECEIVE' + bank_transaction_payload["Type"] = "RECEIVE" return bank_transaction_payload - def post_bank_transaction(self, bank_transaction: BankTransaction, - bank_transaction_lineitems: List[BankTransactionLineItem], general_settings: WorkspaceGeneralSettings): + def post_bank_transaction( + self, + bank_transaction: BankTransaction, + bank_transaction_lineitems: List[BankTransactionLineItem], + general_settings: WorkspaceGeneralSettings, + ): """ Post bank transactions to Xero """ - + tenant_mapping = TenantMapping.objects.get(workspace_id=self.workspace_id) self.connection.set_tenant_id(tenant_mapping.tenant_id) try: - bank_transaction_payload = self.__construct_bank_transaction(bank_transaction, bank_transaction_lineitems) - created_bank_transaction = self.connection.bank_transactions.post(bank_transaction_payload) + bank_transaction_payload = self.__construct_bank_transaction( + bank_transaction, bank_transaction_lineitems + ) + created_bank_transaction = self.connection.bank_transactions.post( + bank_transaction_payload + ) return created_bank_transaction - + except WrongParamsError as exception: detail = json.dumps(exception.__dict__) detail = json.loads(detail) - if detail['message']['Elements']: - if general_settings.change_accounting_period and 'The document date cannot be before the end of year lock date' in detail['message']['Elements'][0]['ValidationErrors'][0]['Message']: - first_day_of_month = datetime.today().date().replace(day=1).strftime('%Y-%m-%d') - bank_transaction_payload = self.__construct_bank_transaction(bank_transaction, bank_transaction_lineitems) - bank_transaction_payload['Date'] = first_day_of_month - bank_transaction_payload = self.connection.bank_transactions.post(bank_transaction_payload) + if detail["message"]["Elements"]: + if ( + general_settings.change_accounting_period + and "The document date cannot be before the end of year lock date" + in detail["message"]["Elements"][0]["ValidationErrors"][0][ + "Message" + ] + ): + first_day_of_month = ( + datetime.today().date().replace(day=1).strftime("%Y-%m-%d") + ) + bank_transaction_payload = self.__construct_bank_transaction( + bank_transaction, bank_transaction_lineitems + ) + bank_transaction_payload["Date"] = first_day_of_month + bank_transaction_payload = self.connection.bank_transactions.post( + bank_transaction_payload + ) return bank_transaction_payload else: raise - def post_attachments(self, ref_id: str, ref_type: str, attachments: List[Dict]) -> List: + def post_attachments( + self, ref_id: str, ref_type: str, attachments: List[Dict] + ) -> List: """ Link attachments to objects Xero :param ref_id: object id @@ -654,9 +789,9 @@ def post_attachments(self, ref_id: str, ref_type: str, attachments: List[Dict]) for attachment in attachments: response = self.connection.attachments.post_attachment( endpoint=ref_type, - filename='{0}_{1}'.format(attachment['id'], attachment['name']), - data=base64.b64decode(attachment['download_url']), - guid=ref_id + filename="{0}_{1}".format(attachment["id"], attachment["name"]), + data=base64.b64decode(attachment["download_url"]), + guid=ref_id, ) responses.append(response) @@ -671,15 +806,11 @@ def __construct_bill_payment(payment: Payment) -> Dict: :return: constructed bill payment """ payment_payload = { - 'Payments': [ + "Payments": [ { - 'Invoice': { - 'InvoiceId': payment.invoice_id - }, - 'Account': { - 'AccountId': payment.account_id - }, - 'Amount': payment.amount + "Invoice": {"InvoiceId": payment.invoice_id}, + "Account": {"AccountId": payment.account_id}, + "Amount": payment.amount, } ] } diff --git a/apps/xero/views.py b/apps/xero/views.py index 216297d6..9f536b52 100644 --- a/apps/xero/views.py +++ b/apps/xero/views.py @@ -1,21 +1,16 @@ -from datetime import datetime, timezone - from django.db.models import Q +from django_filters.rest_framework import DjangoFilterBackend +from fyle_accounting_mappings.models import DestinationAttribute +from fyle_accounting_mappings.serializers import DestinationAttributeSerializer from rest_framework import generics from rest_framework.response import Response from rest_framework.views import status -from fyle_accounting_mappings.models import DestinationAttribute -from fyle_accounting_mappings.serializers import DestinationAttributeSerializer - -from django_q.tasks import Chain - -from .serializers import XeroFieldSerializer from apps.exceptions import handle_view_exceptions - -from .actions import get_xero_connector, sync_tenant, sync_dimensions, refersh_xero_dimension +from apps.xero.actions import get_xero_connector, refersh_xero_dimension, sync_dimensions, sync_tenant +from apps.xero.serializers import XeroFieldSerializer from fyle_xero_api.utils import LookupFieldMixin -from django_filters.rest_framework import DjangoFilterBackend + class TokenHealthView(generics.RetrieveAPIView): """ @@ -24,26 +19,22 @@ class TokenHealthView(generics.RetrieveAPIView): @handle_view_exceptions() def get(self, request, *args, **kwargs): - - get_xero_connector(workspace_id = self.kwargs['workspace_id']) + get_xero_connector(workspace_id=self.kwargs["workspace_id"]) - return Response( - status=status.HTTP_200_OK - ) + return Response(status=status.HTTP_200_OK) class TenantView(LookupFieldMixin, generics.ListCreateAPIView): """ Tenant view """ + queryset = DestinationAttribute.objects.all() serializer_class = DestinationAttributeSerializer filter_backends = (DjangoFilterBackend,) pagination_class = None - filterset_fields = { - 'attribute_type': {'exact'} - } - ordering_fields = ('value',) + filterset_fields = {"attribute_type": {"exact"}} + ordering_fields = ("value",) @handle_view_exceptions() def post(self, request, *args, **kwargs): @@ -51,11 +42,11 @@ def post(self, request, *args, **kwargs): Get tenants from Xero """ - tenants = sync_tenant(workspace_id=self.kwargs['workspace_id']) + tenants = sync_tenant(workspace_id=self.kwargs["workspace_id"]) return Response( data=self.serializer_class(tenants, many=True).data, - status=status.HTTP_200_OK + status=status.HTTP_200_OK, ) @@ -64,11 +55,19 @@ class XeroFieldsView(generics.ListAPIView): serializer_class = XeroFieldSerializer def get_queryset(self): - attributes = DestinationAttribute.objects.filter( - ~Q(attribute_type='CONTACT') & ~Q(attribute_type='ACCOUNT') & - ~Q(attribute_type='TENANT') & ~Q(attribute_type='BANK_ACCOUNT') & ~Q(attribute_type='TAX_CODE') & ~Q(attribute_type='CUSTOMER'), - workspace_id=self.kwargs['workspace_id'] - ).values('attribute_type', 'display_name').distinct() + attributes = ( + DestinationAttribute.objects.filter( + ~Q(attribute_type="CONTACT") + & ~Q(attribute_type="ACCOUNT") + & ~Q(attribute_type="TENANT") + & ~Q(attribute_type="BANK_ACCOUNT") + & ~Q(attribute_type="TAX_CODE") + & ~Q(attribute_type="CUSTOMER"), + workspace_id=self.kwargs["workspace_id"], + ) + .values("attribute_type", "display_name") + .distinct() + ) return attributes @@ -84,11 +83,9 @@ def post(self, request, *args, **kwargs): Sync Data From Xero """ - sync_dimensions(workspace_id=self.kwargs['workspace_id']) - - return Response( - status=status.HTTP_200_OK - ) + sync_dimensions(workspace_id=self.kwargs["workspace_id"]) + + return Response(status=status.HTTP_200_OK) class RefreshXeroDimensionView(generics.ListCreateAPIView): @@ -102,11 +99,9 @@ def post(self, request, *args, **kwargs): Sync data from Xero """ - refersh_xero_dimension(workspace_id=self.kwargs['workspace_id']) + refersh_xero_dimension(workspace_id=self.kwargs["workspace_id"]) - return Response( - status=status.HTTP_200_OK - ) + return Response(status=status.HTTP_200_OK) class DestinationAttributesView(LookupFieldMixin, generics.ListAPIView): @@ -118,5 +113,5 @@ class DestinationAttributesView(LookupFieldMixin, generics.ListAPIView): serializer_class = DestinationAttributeSerializer filter_backends = (DjangoFilterBackend,) pagination_class = None - filterset_fields = {'attribute_type': {'exact', 'in'}, 'active': {'exact'}} - ordering_fields = ('value',) + filterset_fields = {"attribute_type": {"exact", "in"}, "active": {"exact"}} + ordering_fields = ("value",) diff --git a/bandit.yaml b/bandit.yaml new file mode 100644 index 00000000..747084d5 --- /dev/null +++ b/bandit.yaml @@ -0,0 +1 @@ +exclude_dirs: ['./venv', './.venv'] diff --git a/codecov.yml b/codecov.yml index c8dac6b1..b994fe73 100644 --- a/codecov.yml +++ b/codecov.yml @@ -14,4 +14,4 @@ coverage: #code coverage range - 98.0 round: down github_checks: - annotations: false \ No newline at end of file + annotations: false diff --git a/docker-compose-pipeline.yml b/docker-compose-pipeline.yml index d54603a3..eefda2b7 100644 --- a/docker-compose-pipeline.yml +++ b/docker-compose-pipeline.yml @@ -2,9 +2,9 @@ version: '3.7' services: api: - build: + build: context: ./ - args: + args: CI: ENABLED entrypoint: bash run.sh restart: unless-stopped @@ -12,7 +12,7 @@ services: - ./:/fyle-xero-api depends_on: - db - environment: + environment: SECRET_KEY: thisisthedjangosecretkey ALLOWED_HOSTS: "*" DEBUG: "False" @@ -32,7 +32,7 @@ services: XERO_TOKEN_URI: ${XERO_TOKEN_URI} db: image: "postgres:15" - environment: + environment: POSTGRES_DB: dummy POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres @@ -42,4 +42,4 @@ services: volumes: api: - data: \ No newline at end of file + data: diff --git a/docker-compose.yml.template b/docker-compose.yml.template index 53556c77..a70c0b3d 100644 --- a/docker-compose.yml.template +++ b/docker-compose.yml.template @@ -11,7 +11,7 @@ services: - 8000:8000 depends_on: - db - environment: + environment: SECRET_KEY: thisisthedjangosecretkey ALLOWED_HOSTS: "*" DEBUG: "False" @@ -39,7 +39,7 @@ services: depends_on: - db - api - environment: + environment: SECRET_KEY: thisisthedjangosecretkey ALLOWED_HOSTS: "*" DEBUG: "False" @@ -59,7 +59,7 @@ services: db: image: "postgres:15" - environment: + environment: POSTGRES_PASSWORD: postgres volumes: - data:/var/lib/postgresql/data/ @@ -67,4 +67,4 @@ services: volumes: api: - data: \ No newline at end of file + data: diff --git a/fyle_xero_api/asgi.py b/fyle_xero_api/asgi.py index 0ee97ac5..9d2cb721 100644 --- a/fyle_xero_api/asgi.py +++ b/fyle_xero_api/asgi.py @@ -11,6 +11,6 @@ from django.core.asgi import get_asgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fyle_xero_api.settings') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fyle_xero_api.settings") application = get_asgi_application() diff --git a/fyle_xero_api/cache_router.py b/fyle_xero_api/cache_router.py index 83d64fa3..4f7c81b0 100644 --- a/fyle_xero_api/cache_router.py +++ b/fyle_xero_api/cache_router.py @@ -1,9 +1,9 @@ app_to_database = { - 'django_cache': 'cache_db', + "django_cache": "cache_db", } -class CacheRouter: +class CacheRouter: def db_for_read(self, model, **hints): return app_to_database.get(model._meta.app_label, None) diff --git a/fyle_xero_api/logging_middleware.py b/fyle_xero_api/logging_middleware.py index 1e9c7812..9fb5391b 100644 --- a/fyle_xero_api/logging_middleware.py +++ b/fyle_xero_api/logging_middleware.py @@ -1,14 +1,13 @@ import logging import traceback -from django.http import HttpResponse from django.conf import settings +from django.http import HttpResponse logger = logging.getLogger(__name__) class ErrorHandlerMiddleware: - def __init__(self, get_response): self.get_response = get_response @@ -19,10 +18,10 @@ def process_exception(self, request, exception): if not settings.DEBUG: if exception: message = { - 'url': request.build_absolute_uri(), - 'error': repr(exception), - 'traceback': traceback.format_exc() + "url": request.build_absolute_uri(), + "error": repr(exception), + "traceback": traceback.format_exc(), } - logger.error(str(message).replace('\n', '')) + logger.error(str(message).replace("\n", "")) return HttpResponse("Error processing the request.", status=500) diff --git a/fyle_xero_api/sentry.py b/fyle_xero_api/sentry.py index f31803c5..4e3b205e 100644 --- a/fyle_xero_api/sentry.py +++ b/fyle_xero_api/sentry.py @@ -1,48 +1,49 @@ import os +import gevent import sentry_sdk - from sentry_sdk.integrations.django import DjangoIntegration -import gevent -class Sentry: +class Sentry: @staticmethod def init(): sentry_sdk.init( - dsn=os.environ.get('SENTRY_DSN'), + dsn=os.environ.get("SENTRY_DSN"), send_default_pii=True, integrations=[DjangoIntegration()], - environment=os.environ.get('SENTRY_ENV'), + environment=os.environ.get("SENTRY_ENV"), traces_sampler=Sentry.traces_sampler, attach_stacktrace=True, before_send=Sentry.before_send, - request_bodies='small', - in_app_include=['apps.users', - 'apps.workspaces', - 'apps.mappings', - 'apps.fyle', - 'apps.xero', - 'apps.tasks', - 'fyle_rest_auth', - 'fyle_accounting_mappings'], + request_bodies="small", + in_app_include=[ + "apps.users", + "apps.workspaces", + "apps.mappings", + "apps.fyle", + "apps.xero", + "apps.tasks", + "fyle_rest_auth", + "fyle_accounting_mappings", + ], ) @staticmethod def traces_sampler(sampling_context): # avoiding ready APIs in performance tracing - if sampling_context.get('wsgi_environ') is not None: - if 'ready/' in sampling_context['wsgi_environ']['PATH_INFO']: + if sampling_context.get("wsgi_environ") is not None: + if "ready/" in sampling_context["wsgi_environ"]["PATH_INFO"]: return 0 return 1 @staticmethod def before_send(event, hint): - if 'exc_info' in hint: - exc_value= hint['exc_info'] + if "exc_info" in hint: + exc_value = hint["exc_info"] if isinstance(exc_value, (gevent.GreenletExit)): return None - elif exc_value.args[0] in ['Error: 502']: + elif exc_value.args[0] in ["Error: 502"]: return None return event diff --git a/fyle_xero_api/settings.py b/fyle_xero_api/settings.py index e0862012..7ce2a5c3 100644 --- a/fyle_xero_api/settings.py +++ b/fyle_xero_api/settings.py @@ -9,12 +9,12 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.2/ref/settings/ """ -import sys import os +import sys import dj_database_url -from .sentry import Sentry +from fyle_xero_api.sentry import Sentry # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -24,184 +24,171 @@ # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.environ.get('SECRET_KEY') +SECRET_KEY = os.environ.get("SECRET_KEY") # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True if os.environ.get('DEBUG') == 'True' else False +DEBUG = True if os.environ.get("DEBUG") == "True" else False -ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS').split(',') +ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS").split(",") # Application definition INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", # Installed Apps - 'rest_framework', - 'corsheaders', - 'fyle_rest_auth', - 'fyle_accounting_mappings', - + "rest_framework", + "corsheaders", + "fyle_rest_auth", + "fyle_accounting_mappings", # User Created Apps - 'apps.users', - 'apps.workspaces', - 'apps.fyle', - 'apps.tasks', - 'apps.mappings', - 'apps.xero', - 'django_q', + "apps.users", + "apps.workspaces", + "apps.fyle", + "apps.tasks", + "apps.mappings", + "apps.xero", + "django_q", ] MIDDLEWARE = [ - 'request_logging.middleware.LoggingMiddleware', - 'fyle_xero_api.logging_middleware.ErrorHandlerMiddleware', - 'corsheaders.middleware.CorsMiddleware', - 'django.middleware.common.CommonMiddleware', - 'corsheaders.middleware.CorsPostCsrfMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', + "request_logging.middleware.LoggingMiddleware", + "fyle_xero_api.logging_middleware.ErrorHandlerMiddleware", + "corsheaders.middleware.CorsMiddleware", + "django.middleware.common.CommonMiddleware", + "corsheaders.middleware.CorsPostCsrfMiddleware", + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", ] -ROOT_URLCONF = 'fyle_xero_api.urls' +ROOT_URLCONF = "fyle_xero_api.urls" APPEND_SLASH = False -AUTH_USER_MODEL = 'users.User' +AUTH_USER_MODEL = "users.User" TEMPLATES = [ { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", ], }, }, ] FYLE_REST_AUTH_SERIALIZERS = { - 'USER_DETAILS_SERIALIZER': 'apps.users.serializers.UserSerializer' + "USER_DETAILS_SERIALIZER": "apps.users.serializers.UserSerializer" } REST_FRAMEWORK = { - 'DEFAULT_PERMISSION_CLASSES': ( - 'rest_framework.permissions.IsAuthenticated', - 'apps.workspaces.permissions.WorkspacePermissions' + "DEFAULT_PERMISSION_CLASSES": ( + "rest_framework.permissions.IsAuthenticated", + "apps.workspaces.permissions.WorkspacePermissions", ), - 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], - 'DEFAULT_AUTHENTICATION_CLASSES': ( - 'fyle_rest_auth.authentication.FyleJWTAuthentication', + "DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"], + "DEFAULT_AUTHENTICATION_CLASSES": ( + "fyle_rest_auth.authentication.FyleJWTAuthentication", ), - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', - 'PAGE_SIZE': 100 + "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", + "PAGE_SIZE": 100, } -WSGI_APPLICATION = 'fyle_xero_api.wsgi.application' +WSGI_APPLICATION = "fyle_xero_api.wsgi.application" -SERVICE_NAME = os.environ.get('SERVICE_NAME') +SERVICE_NAME = os.environ.get("SERVICE_NAME") Q_CLUSTER = { - 'name': 'fyle_xero_api', - 'save_limit': 0, - 'retry': 14400, - 'timeout': 3600, - 'catch_up': False, - 'workers': 4, + "name": "fyle_xero_api", + "save_limit": 0, + "retry": 14400, + "timeout": 3600, + "catch_up": False, + "workers": 4, # How many tasks are kept in memory by a single cluster. # Helps balance the workload and the memory overhead of each individual cluster - 'queue_limit': 10, - 'cached': False, - 'orm': 'default', - 'ack_failures': True, - 'poll': 1, - 'max_attempts': 1, - 'attempt_count': 1, + "queue_limit": 10, + "cached": False, + "orm": "default", + "ack_failures": True, + "poll": 1, + "max_attempts": 1, + "attempt_count": 1, # The number of tasks a worker will process before recycling. # Useful to release memory resources on a regular basis. - 'recycle': 50, + "recycle": 50, # The maximum resident set size in kilobytes before a worker will recycle and release resources. # Useful for limiting memory usage. - 'max_rss': 100000 # 100mb + "max_rss": 100000, # 100mb } LOGGING = { - 'version': 1, - 'disable_existing_loggers': True, - 'formatters': { - 'verbose': { - 'format': '{levelname} %s {asctime} {module} {message} ' % SERVICE_NAME, - 'style': '{', + "version": 1, + "disable_existing_loggers": True, + "formatters": { + "verbose": { + "format": "{levelname} %s {asctime} {module} {message} " % SERVICE_NAME, + "style": "{", }, - 'requests': { - 'format': 'request {levelname} %s {asctime} {message}' % SERVICE_NAME, - 'style': '{' - } - }, - 'handlers': { - 'debug_logs': { - 'class': 'logging.StreamHandler', - 'stream': sys.stdout, - 'formatter': 'verbose' - }, - 'request_logs': { - 'class': 'logging.StreamHandler', - 'stream': sys.stdout, - 'formatter': 'requests' + "requests": { + "format": "request {levelname} %s {asctime} {message}" % SERVICE_NAME, + "style": "{", }, }, - 'loggers': { - 'django': { - 'handlers': ['request_logs'], - 'propagate': True, + "handlers": { + "debug_logs": { + "class": "logging.StreamHandler", + "stream": sys.stdout, + "formatter": "verbose", }, - 'django.request': { - 'handlers': ['request_logs'], - 'propagate': False + "request_logs": { + "class": "logging.StreamHandler", + "stream": sys.stdout, + "formatter": "requests", }, - 'fyle_xero_api': { - 'handlers': ['debug_logs'], - 'level': 'ERROR', - 'propagate': False + }, + "loggers": { + "django": { + "handlers": ["request_logs"], + "propagate": True, }, - 'apps': { - 'handlers': ['debug_logs'], - 'level': 'ERROR', - 'propagate': False + "django.request": {"handlers": ["request_logs"], "propagate": False}, + "fyle_xero_api": { + "handlers": ["debug_logs"], + "level": "ERROR", + "propagate": False, }, - 'django_q': { - 'handlers': ['debug_logs'], - 'propagate': True, + "apps": {"handlers": ["debug_logs"], "level": "ERROR", "propagate": False}, + "django_q": { + "handlers": ["debug_logs"], + "propagate": True, }, - 'fyle_integrations_platform_connector': { - 'handlers': ['debug_logs'], - 'propagate': True, + "fyle_integrations_platform_connector": { + "handlers": ["debug_logs"], + "propagate": True, }, - 'gunicorn': { - 'handlers': ['request_logs'], - 'level': 'INFO', - 'propagate': False - } - } + "gunicorn": {"handlers": ["request_logs"], "level": "INFO", "propagate": False}, + }, } CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', - 'LOCATION': 'auth_cache', + "default": { + "BACKEND": "django.core.cache.backends.db.DatabaseCache", + "LOCATION": "auth_cache", } } @@ -209,38 +196,35 @@ # Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases # Defaulting django engine for qcluster -if len(sys.argv) > 0 and sys.argv[1] == 'qcluster': - DATABASES = { - 'default': dj_database_url.config() - } +if len(sys.argv) > 0 and sys.argv[1] == "qcluster": + DATABASES = {"default": dj_database_url.config()} else: DATABASES = { - 'default': dj_database_url.config(engine='django_db_geventpool.backends.postgresql_psycopg2') + "default": dj_database_url.config( + engine="django_db_geventpool.backends.postgresql_psycopg2" + ) } -DATABASES['cache_db'] = { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': 'cache.db' -} +DATABASES["cache_db"] = {"ENGINE": "django.db.backends.sqlite3", "NAME": "cache.db"} -DATABASE_ROUTERS = ['fyle_xero_api.cache_router.CacheRouter'] +DATABASE_ROUTERS = ["fyle_xero_api.cache_router.CacheRouter"] # Password validation # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] @@ -248,9 +232,9 @@ # Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = "en-us" -TIME_ZONE = 'UTC' +TIME_ZONE = "UTC" USE_I18N = True @@ -262,32 +246,32 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ -STATIC_URL = '/static/' +STATIC_URL = "/static/" # Fyle Settings -API_URL = os.environ.get('API_URL') -FYLE_TOKEN_URI = os.environ.get('FYLE_TOKEN_URI') -FYLE_CLIENT_ID = os.environ.get('FYLE_CLIENT_ID') -FYLE_CLIENT_SECRET = os.environ.get('FYLE_CLIENT_SECRET') -FYLE_BASE_URL = os.environ.get('FYLE_BASE_URL') -FYLE_APP_URL = os.environ.get('FYLE_APP_URL') -XERO_APP_URL = os.environ.get('APP_URL') +API_URL = os.environ.get("API_URL") +FYLE_TOKEN_URI = os.environ.get("FYLE_TOKEN_URI") +FYLE_CLIENT_ID = os.environ.get("FYLE_CLIENT_ID") +FYLE_CLIENT_SECRET = os.environ.get("FYLE_CLIENT_SECRET") +FYLE_BASE_URL = os.environ.get("FYLE_BASE_URL") +FYLE_APP_URL = os.environ.get("FYLE_APP_URL") +XERO_APP_URL = os.environ.get("APP_URL") # XERO Settings -XERO_BASE_URL = os.environ.get('XERO_BASE_URL') -XERO_CLIENT_ID = os.environ.get('XERO_CLIENT_ID') -XERO_CLIENT_SECRET = os.environ.get('XERO_CLIENT_SECRET') -XERO_REDIRECT_URI = os.environ.get('XERO_REDIRECT_URI') -XERO_TOKEN_URI = os.environ.get('XERO_TOKEN_URI') +XERO_BASE_URL = os.environ.get("XERO_BASE_URL") +XERO_CLIENT_ID = os.environ.get("XERO_CLIENT_ID") +XERO_CLIENT_SECRET = os.environ.get("XERO_CLIENT_SECRET") +XERO_REDIRECT_URI = os.environ.get("XERO_REDIRECT_URI") +XERO_TOKEN_URI = os.environ.get("XERO_TOKEN_URI") # Sendgrid Settings -SENDGRID_SANDBOX_MODE_IN_DEBUG=False +SENDGRID_SANDBOX_MODE_IN_DEBUG = False -SENDGRID_API_KEY = os.environ.get('SENDGRID_KEY') -EMAIL = os.environ.get('SENDGRID_EMAIL') -EMAIL_BACKEND = 'sendgrid_backend.SendgridBackend' +SENDGRID_API_KEY = os.environ.get("SENDGRID_KEY") +EMAIL = os.environ.get("SENDGRID_EMAIL") +EMAIL_BACKEND = "sendgrid_backend.SendgridBackend" # Cache Settings @@ -298,8 +282,4 @@ # Sentry Sentry.init() -CORS_ALLOW_HEADERS = [ - 'sentry-trace', - 'authorization', - 'content-type' -] +CORS_ALLOW_HEADERS = ["sentry-trace", "authorization", "content-type"] diff --git a/fyle_xero_api/tests/settings.py b/fyle_xero_api/tests/settings.py index 3705aac7..2c24d461 100644 --- a/fyle_xero_api/tests/settings.py +++ b/fyle_xero_api/tests/settings.py @@ -9,8 +9,8 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.2/ref/settings/ """ -import sys import os +import sys import dj_database_url @@ -22,169 +22,160 @@ # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.environ.get('SECRET_KEY') +SECRET_KEY = os.environ.get("SECRET_KEY") # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True if os.environ.get('DEBUG') == 'True' else False +DEBUG = True if os.environ.get("DEBUG") == "True" else False -ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS').split(',') +ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS").split(",") # Application definition INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", # Installed Apps - 'rest_framework', - 'corsheaders', - 'fyle_rest_auth', - 'fyle_accounting_mappings', - + "rest_framework", + "corsheaders", + "fyle_rest_auth", + "fyle_accounting_mappings", # User Created Apps - 'apps.users', - 'apps.workspaces', - 'apps.fyle', - 'apps.tasks', - 'apps.mappings', - 'apps.xero', - 'django_q' + "apps.users", + "apps.workspaces", + "apps.fyle", + "apps.tasks", + "apps.mappings", + "apps.xero", + "django_q", ] MIDDLEWARE = [ - 'fyle_xero_api.logging_middleware.ErrorHandlerMiddleware', - 'corsheaders.middleware.CorsMiddleware', - 'django.middleware.common.CommonMiddleware', - 'corsheaders.middleware.CorsPostCsrfMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', + "fyle_xero_api.logging_middleware.ErrorHandlerMiddleware", + "corsheaders.middleware.CorsMiddleware", + "django.middleware.common.CommonMiddleware", + "corsheaders.middleware.CorsPostCsrfMiddleware", + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", ] -ROOT_URLCONF = 'fyle_xero_api.urls' +ROOT_URLCONF = "fyle_xero_api.urls" APPEND_SLASH = False -AUTH_USER_MODEL = 'users.User' +AUTH_USER_MODEL = "users.User" TEMPLATES = [ { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", ], }, }, ] FYLE_REST_AUTH_SERIALIZERS = { - 'USER_DETAILS_SERIALIZER': 'apps.users.serializers.UserSerializer' + "USER_DETAILS_SERIALIZER": "apps.users.serializers.UserSerializer" } REST_FRAMEWORK = { - 'DEFAULT_PERMISSION_CLASSES': ( - 'rest_framework.permissions.IsAuthenticated', - 'apps.workspaces.permissions.WorkspacePermissions' + "DEFAULT_PERMISSION_CLASSES": ( + "rest_framework.permissions.IsAuthenticated", + "apps.workspaces.permissions.WorkspacePermissions", ), - 'DEFAULT_AUTHENTICATION_CLASSES': ( - 'fyle_rest_auth.authentication.FyleJWTAuthentication', + "DEFAULT_AUTHENTICATION_CLASSES": ( + "fyle_rest_auth.authentication.FyleJWTAuthentication", ), - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', - 'PAGE_SIZE': 100 + "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", + "PAGE_SIZE": 100, } -WSGI_APPLICATION = 'fyle_xero_api.wsgi.application' +WSGI_APPLICATION = "fyle_xero_api.wsgi.application" -SERVICE_NAME = os.environ.get('SERVICE_NAME') +SERVICE_NAME = os.environ.get("SERVICE_NAME") Q_CLUSTER = { - 'name': 'fyle_xero_api', - 'save_limit': 0, - 'retry': 14400, - 'timeout': 3600, - 'catch_up': False, - 'workers': 4, - 'queue_limit': 50, - 'cached': False, - 'orm': 'default', - 'ack_failures': True, - 'poll': 1, - 'max_attempts': 1, - 'attempt_count': 1 + "name": "fyle_xero_api", + "save_limit": 0, + "retry": 14400, + "timeout": 3600, + "catch_up": False, + "workers": 4, + "queue_limit": 50, + "cached": False, + "orm": "default", + "ack_failures": True, + "poll": 1, + "max_attempts": 1, + "attempt_count": 1, } LOGGING = { - 'version': 1, - 'disable_existing_loggers': True, - 'formatters': { - 'verbose': { - 'format': '{levelname} %s {asctime} {module} {message} ' % SERVICE_NAME, - 'style': '{', - }, - 'requests': { - 'format': 'request {levelname} %s {asctime} {message}' % SERVICE_NAME, - 'style': '{' - } - }, - 'handlers': { - 'debug_logs': { - 'class': 'logging.StreamHandler', - 'stream': sys.stdout, - 'formatter': 'verbose' + "version": 1, + "disable_existing_loggers": True, + "formatters": { + "verbose": { + "format": "{levelname} %s {asctime} {module} {message} " % SERVICE_NAME, + "style": "{", }, - 'request_logs': { - 'class': 'logging.StreamHandler', - 'stream': sys.stdout, - 'formatter': 'requests' + "requests": { + "format": "request {levelname} %s {asctime} {message}" % SERVICE_NAME, + "style": "{", }, }, - 'loggers': { - 'django': { - 'handlers': ['request_logs'], - 'propagate': True, + "handlers": { + "debug_logs": { + "class": "logging.StreamHandler", + "stream": sys.stdout, + "formatter": "verbose", }, - 'django.request': { - 'handlers': ['request_logs'], - 'propagate': False + "request_logs": { + "class": "logging.StreamHandler", + "stream": sys.stdout, + "formatter": "requests", }, - 'fyle_xero_api': { - 'handlers': ['debug_logs'], - 'level': 'ERROR', - 'propagate': False + }, + "loggers": { + "django": { + "handlers": ["request_logs"], + "propagate": True, }, - 'apps': { - 'handlers': ['debug_logs'], - 'level': 'ERROR', - 'propagate': False + "django.request": {"handlers": ["request_logs"], "propagate": False}, + "fyle_xero_api": { + "handlers": ["debug_logs"], + "level": "ERROR", + "propagate": False, }, - 'django_q': { - 'handlers': ['debug_logs'], - 'propagate': True, + "apps": {"handlers": ["debug_logs"], "level": "ERROR", "propagate": False}, + "django_q": { + "handlers": ["debug_logs"], + "propagate": True, }, - 'fyle_integrations_platform_connector': { - 'handlers': ['debug_logs'], - 'propagate': True, + "fyle_integrations_platform_connector": { + "handlers": ["debug_logs"], + "propagate": True, }, - } + }, } CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', - 'LOCATION': 'auth_cache', + "default": { + "BACKEND": "django.core.cache.backends.db.DatabaseCache", + "LOCATION": "auth_cache", } } @@ -192,22 +183,20 @@ # Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases -if os.environ.get('DATABASE_URL', ''): - DATABASES = { - 'default': dj_database_url.config() - } +if os.environ.get("DATABASE_URL", ""): + DATABASES = {"default": dj_database_url.config()} else: DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'OPTIONS': { - 'options': '-c search_path={0}'.format(os.environ.get('DB_SCHEMA')) + "default": { + "ENGINE": "django.db.backends.postgresql_psycopg2", + "OPTIONS": { + "options": "-c search_path={0}".format(os.environ.get("DB_SCHEMA")) }, - 'NAME': os.environ.get('DB_NAME'), - 'USER': os.environ.get('DB_USER'), - 'PASSWORD': os.environ.get('DB_PASSWORD'), - 'HOST': os.environ.get('DB_HOST'), - 'PORT': os.environ.get('DB_PORT'), + "NAME": os.environ.get("DB_NAME"), + "USER": os.environ.get("DB_USER"), + "PASSWORD": os.environ.get("DB_PASSWORD"), + "HOST": os.environ.get("DB_HOST"), + "PORT": os.environ.get("DB_PORT"), } } @@ -224,16 +213,16 @@ AUTH_PASSWORD_VALIDATORS = [ { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] @@ -241,9 +230,9 @@ # Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = "en-us" -TIME_ZONE = 'UTC' +TIME_ZONE = "UTC" USE_I18N = True @@ -255,41 +244,36 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ -STATIC_URL = '/static/' +STATIC_URL = "/static/" # Fyle Settings -API_URL = os.environ.get('API_URL') -FYLE_TOKEN_URI = os.environ.get('FYLE_TOKEN_URI') -FYLE_CLIENT_ID = os.environ.get('FYLE_CLIENT_ID') -FYLE_CLIENT_SECRET = os.environ.get('FYLE_CLIENT_SECRET') -FYLE_BASE_URL = os.environ.get('FYLE_BASE_URL') -FYLE_APP_URL = os.environ.get('FYLE_APP_URL') -FYLE_REFRESH_TOKEN = os.environ.get('FYLE_REFRESH_TOKEN') -FYLE_SERVER_URL = os.environ.get('FYLE_SERVER_URL') -XERO_APP_URL = os.environ.get('APP_URL') +API_URL = os.environ.get("API_URL") +FYLE_TOKEN_URI = os.environ.get("FYLE_TOKEN_URI") +FYLE_CLIENT_ID = os.environ.get("FYLE_CLIENT_ID") +FYLE_CLIENT_SECRET = os.environ.get("FYLE_CLIENT_SECRET") +FYLE_BASE_URL = os.environ.get("FYLE_BASE_URL") +FYLE_APP_URL = os.environ.get("FYLE_APP_URL") +FYLE_REFRESH_TOKEN = os.environ.get("FYLE_REFRESH_TOKEN") +FYLE_SERVER_URL = os.environ.get("FYLE_SERVER_URL") +XERO_APP_URL = os.environ.get("APP_URL") # XERO Settings -XERO_BASE_URL = os.environ.get('XERO_BASE_URL') -XERO_CLIENT_ID = os.environ.get('XERO_CLIENT_ID') -XERO_CLIENT_SECRET = os.environ.get('XERO_CLIENT_SECRET') -XERO_REDIRECT_URI = os.environ.get('XERO_REDIRECT_URI') -XERO_TOKEN_URI = os.environ.get('XERO_TOKEN_URI') +XERO_BASE_URL = os.environ.get("XERO_BASE_URL") +XERO_CLIENT_ID = os.environ.get("XERO_CLIENT_ID") +XERO_CLIENT_SECRET = os.environ.get("XERO_CLIENT_SECRET") +XERO_REDIRECT_URI = os.environ.get("XERO_REDIRECT_URI") +XERO_TOKEN_URI = os.environ.get("XERO_TOKEN_URI") # Cache Settings CACHE_EXPIRY = 3600 CORS_ORIGIN_ALLOW_ALL = True -CORS_ALLOW_HEADERS = [ - 'sentry-trace', - 'authorization', - 'content-type' -] +CORS_ALLOW_HEADERS = ["sentry-trace", "authorization", "content-type"] # Sendgrid Settings -SENDGRID_SANDBOX_MODE_IN_DEBUG=False - -SENDGRID_API_KEY = os.environ.get('SENDGRID_KEY') -EMAIL = os.environ.get('SENDGRID_EMAIL') -EMAIL_BACKEND = 'sendgrid_backend.SendgridBackend' +SENDGRID_SANDBOX_MODE_IN_DEBUG = False +SENDGRID_API_KEY = os.environ.get("SENDGRID_KEY") +EMAIL = os.environ.get("SENDGRID_EMAIL") +EMAIL_BACKEND = "sendgrid_backend.SendgridBackend" diff --git a/fyle_xero_api/urls.py b/fyle_xero_api/urls.py index 5b6fced0..83581472 100644 --- a/fyle_xero_api/urls.py +++ b/fyle_xero_api/urls.py @@ -14,12 +14,12 @@ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path, include +from django.urls import include, path urlpatterns = [ - path('admin/', admin.site.urls), - path('api/auth/', include('fyle_rest_auth.urls')), - path('api/workspaces/', include('apps.workspaces.urls')), - path('api/v2/workspaces/', include('apps.workspaces.apis.urls')), - path('api/user/', include('apps.users.urls')) + path("admin/", admin.site.urls), + path("api/auth/", include("fyle_rest_auth.urls")), + path("api/workspaces/", include("apps.workspaces.urls")), + path("api/v2/workspaces/", include("apps.workspaces.apis.urls")), + path("api/user/", include("apps.users.urls")), ] diff --git a/fyle_xero_api/utils.py b/fyle_xero_api/utils.py index 9ac40aeb..a256ab38 100644 --- a/fyle_xero_api/utils.py +++ b/fyle_xero_api/utils.py @@ -1,5 +1,5 @@ -from rest_framework.views import Response from rest_framework.serializers import ValidationError +from rest_framework.views import Response def assert_valid(condition: bool, message: str) -> Response or None: @@ -10,13 +10,11 @@ def assert_valid(condition: bool, message: str) -> Response or None: :return: Response or None """ if not condition: - raise ValidationError(detail={ - 'message': message - }) + raise ValidationError(detail={"message": message}) class LookupFieldMixin: - lookup_field = 'workspace_id' + lookup_field = "workspace_id" def filter_queryset(self, queryset): if self.lookup_field in self.kwargs: diff --git a/fyle_xero_api/wsgi.py b/fyle_xero_api/wsgi.py index e6073f1c..da6780fe 100644 --- a/fyle_xero_api/wsgi.py +++ b/fyle_xero_api/wsgi.py @@ -11,6 +11,6 @@ from django.core.wsgi import get_wsgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fyle_xero_api.settings') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fyle_xero_api.settings") application = get_wsgi_application() diff --git a/get-pip.py b/get-pip.py index 4609c70e..71630627 100644 --- a/get-pip.py +++ b/get-pip.py @@ -28,18 +28,20 @@ message_parts = [ "This script does not work on Python {}.{}".format(*this_python), "The minimum supported Python version is {}.{}.".format(*min_version), - "Please use https://bootstrap.pypa.io/pip/{}.{}/get-pip.py instead.".format(*this_python), + "Please use https://bootstrap.pypa.io/pip/{}.{}/get-pip.py instead.".format( + *this_python + ), ] print("ERROR: " + " ".join(message_parts)) sys.exit(1) +import argparse +import importlib import os.path import pkgutil import shutil import tempfile -import argparse -import importlib from base64 import b85decode @@ -113,6 +115,7 @@ def bootstrap(tmpdir): # Execute the included pip and use it to install the latest pip and # setuptools from PyPI from pip._internal.cli.main import main as pip_entry_point + args = determine_pip_install_arguments() sys.exit(pip_entry_point(args)) diff --git a/gunicorn_config.py b/gunicorn_config.py index 570375e0..3cf48a3b 100644 --- a/gunicorn_config.py +++ b/gunicorn_config.py @@ -1,44 +1,45 @@ import os + from psycogreen.gevent import patch_psycopg # https://docs.gunicorn.org/en/stable/settings.html port_number = 8000 -bind = '0.0.0.0:{0}'.format(port_number) -proc_name = 'fyle_xero_api' +bind = "0.0.0.0:{0}".format(port_number) +proc_name = "fyle_xero_api" # The maximum number of pending connections. -backlog = int(os.environ.get('GUNICORN_BACKLOG', 2048)) +backlog = int(os.environ.get("GUNICORN_BACKLOG", 2048)) # The number of worker processes for handling requests. -workers = int(os.environ.get('GUNICORN_NUMBER_WORKERS', 2)) +workers = int(os.environ.get("GUNICORN_NUMBER_WORKERS", 2)) # Workers silent for more than this many seconds are killed and restarted. -timeout = int(os.environ.get('GUNICORN_WORKER_TIMEOUT', 60)) +timeout = int(os.environ.get("GUNICORN_WORKER_TIMEOUT", 60)) # The number of seconds to wait for requests on a Keep-Alive connection. -keepalive = int(os.environ.get('GUNICORN_KEEPALIVE', 2)) +keepalive = int(os.environ.get("GUNICORN_KEEPALIVE", 2)) # The maximum number of simultaneous clients. -worker_connections = int(os.environ.get('GUNICORN_WORKER_CONNECTIONS', 1000)) +worker_connections = int(os.environ.get("GUNICORN_WORKER_CONNECTIONS", 1000)) # The granularity of Error log outputs. -loglevel = os.environ.get('GUNICORN_LOG _LEVEL', 'debug') +loglevel = os.environ.get("GUNICORN_LOG _LEVEL", "debug") # The type of workers to use. -worker_class = os.environ.get('GUNICORN_WORKER_CLASS', 'gevent') +worker_class = os.environ.get("GUNICORN_WORKER_CLASS", "gevent") # The number of worker threads for handling requests. -threads = int(os.environ.get('GUNICORN_NUMBER_WORKER_THREADS', 1)) +threads = int(os.environ.get("GUNICORN_NUMBER_WORKER_THREADS", 1)) # The maximum number of requests a worker will process before restarting. -max_requests = int(os.environ.get('GUNICORN_MAX_REQUESTS', 20)) +max_requests = int(os.environ.get("GUNICORN_MAX_REQUESTS", 20)) # The jitter causes the restart per worker to be randomized by randint(0, max_requests_jitter). -max_requests_jitter = int(os.environ.get('GUNICORN_MAX_REQUESTS_JITTER', 20)) +max_requests_jitter = int(os.environ.get("GUNICORN_MAX_REQUESTS_JITTER", 20)) # Timeout for graceful workers restart. -graceful_timeout = int(os.environ.get('GUNICORN_WORKER_GRACEFUL_TIMEOUT', 5)) +graceful_timeout = int(os.environ.get("GUNICORN_WORKER_GRACEFUL_TIMEOUT", 5)) # Restart workers when code changes. reload = True @@ -58,8 +59,8 @@ group = None tmp_upload_dir = None -errorlog = '-' -accesslog = '-' +errorlog = "-" +accesslog = "-" access_log_format = '%({X-Real-IP}i)s - - - %(t)s "%(r)s" "%(f)s" "%(a)s" %({X-Request-Id}i)s %(L)s %(b)s %(s)s' @@ -84,17 +85,16 @@ def worker_int(worker): worker.log.info("worker received INT or QUIT signal") # get traceback info - import threading import sys + import threading import traceback + id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) code = [] for thread_id, stack in sys._current_frames().items(): - code.append("\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), - thread_id)) + code.append("\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id)) for filename, line_no, name, line in traceback.extract_stack(stack): - code.append('File: "%s", line %d, in %s' % (filename, - line_no, name)) + code.append('File: "%s", line %d, in %s' % (filename, line_no, name)) if line: code.append(" %s" % (line.strip())) worker.log.debug("\n".join(code)) @@ -115,8 +115,12 @@ def worker_exit(server, worker): def nworkers_changed(server, new_value, old_value): - server.log.info("server: nworkers_changed is called with new_value: %s old_value: %s", new_value, old_value) + server.log.info( + "server: nworkers_changed is called with new_value: %s old_value: %s", + new_value, + old_value, + ) def on_exit(server): - server.log.info("server: on_exit is called") \ No newline at end of file + server.log.info("server: on_exit is called") diff --git a/manage.py b/manage.py index 358c29fb..f59cc196 100755 --- a/manage.py +++ b/manage.py @@ -5,7 +5,7 @@ def main(): - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fyle_xero_api.settings') + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fyle_xero_api.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: @@ -17,5 +17,5 @@ def main(): execute_from_command_line(sys.argv) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/scripts/python/001_fill_xero_and_fyle_currency.py b/scripts/python/001_fill_xero_and_fyle_currency.py index 52970cce..b7f4d0e6 100644 --- a/scripts/python/001_fill_xero_and_fyle_currency.py +++ b/scripts/python/001_fill_xero_and_fyle_currency.py @@ -1,10 +1,11 @@ -from apps.workspaces.models import Workspace +from time import sleep + +from django.db.models import Q +from fyle_integrations_platform_connector import PlatformConnector + from apps.fyle.models import Expense +from apps.workspaces.models import FyleCredential, Workspace, XeroCredentials from apps.xero.utils import XeroConnector -from apps.workspaces.models import XeroCredentials, FyleCredential -from fyle_integrations_platform_connector import PlatformConnector -from django.db.models import Q -from time import sleep workspaces = Workspace.objects.filter(Q(fyle_currency=None) | Q(xero_currency=None)).all() @@ -22,7 +23,7 @@ fyle_currency = my_profile['data']['org']['currency'] workspace.fyle_currency = fyle_currency print('Updated', workspace.id) - except Exception as e: + except Exception as e: # noqa F841 print("Some error occured") if workspace.xero_currency == None: try: @@ -33,6 +34,6 @@ company_info = xero_connector.get_organisations()[0] workspace.xero_currency = company_info['BaseCurrency'] print('Updated', xero_credentials.workspace_id) - except Exception as e: + except Exception as e: # noqa F841 print("Some error occured") workspace.save() diff --git a/scripts/python/add-admins-to-users.py b/scripts/python/add-admins-to-users.py index 00632f18..d8e9c986 100644 --- a/scripts/python/add-admins-to-users.py +++ b/scripts/python/add-admins-to-users.py @@ -1,12 +1,13 @@ from time import sleep -from fyle_integrations_platform_connector import PlatformConnector + from django.db.models import Q +from fyle_integrations_platform_connector import PlatformConnector -from apps.workspaces.models import FyleCredential, Workspace from apps.users.models import User +from apps.workspaces.models import FyleCredential, Workspace workspaces = Workspace.objects.filter( - ~Q(name__icontains='fyle for') & ~Q(name__icontains='test') + ~Q(name__icontains="fyle for") & ~Q(name__icontains="test") ) for workspace in workspaces: @@ -17,16 +18,22 @@ platform = PlatformConnector(fyle_credentials) users = [] admins = platform.employees.get_admins() - existing_user_ids = User.objects.values_list('user_id', flat=True) + existing_user_ids = User.objects.values_list("user_id", flat=True) for admin in admins: # Skip already existing users - if admin['user_id'] not in existing_user_ids: - users.append(User(email=admin['email'], user_id=admin['user_id'], full_name=admin['full_name'])) + if admin["user_id"] not in existing_user_ids: + users.append( + User( + email=admin["email"], + user_id=admin["user_id"], + full_name=admin["full_name"], + ) + ) if len(users): created_users = User.objects.bulk_create(users, batch_size=50) workspace = Workspace.objects.get(id=workspace_id) for user in created_users: workspace.user.add(user) - print('Updated for workspace - ', workspace.name) + print("Updated for workspace - ", workspace.name) except Exception as e: - print(e, e.__dict__, '\n\n', workspace.name, workspace.fyle_org_id) + print(e, e.__dict__, "\n\n", workspace.name, workspace.fyle_org_id) diff --git a/scripts/python/merge-category-project-import-tasks.py b/scripts/python/merge-category-project-import-tasks.py index 73ded2c2..d98bd046 100644 --- a/scripts/python/merge-category-project-import-tasks.py +++ b/scripts/python/merge-category-project-import-tasks.py @@ -1,31 +1,44 @@ -from django.db.models import Count from django.db import transaction +from django.db.models import Count from django_q.models import Schedule # TODO: take a backup of the schedules table before running this script # grouping by workspace_id -existing_import_enabled_schedules = Schedule.objects.filter( - func__in=['apps.mappings.tasks.auto_create_category_mappings', 'apps.mappings.tasks.auto_create_project_mappings'] -).values('args').annotate(workspace_id=Count('args')) +existing_import_enabled_schedules = ( + Schedule.objects.filter( + func__in=[ + "apps.mappings.tasks.auto_create_category_mappings", + "apps.mappings.tasks.auto_create_project_mappings", + ] + ) + .values("args") + .annotate(workspace_id=Count("args")) +) try: # Create new schedules and delete the old ones in a transaction block with transaction.atomic(): for schedule in existing_import_enabled_schedules: - is_new_schedule_created = Schedule.objects.filter(func='apps.mappings.tasks.auto_import_and_map_fyle_fields', args=schedule['args']).count() + is_new_schedule_created = Schedule.objects.filter( + func="apps.mappings.tasks.auto_import_and_map_fyle_fields", + args=schedule["args"], + ).count() if is_new_schedule_created == 0: - first_schedule = Schedule.objects.filter(args=schedule['args']).first() + first_schedule = Schedule.objects.filter(args=schedule["args"]).first() Schedule.objects.create( - func='apps.mappings.tasks.auto_import_and_map_fyle_fields', - args=schedule['args'], - schedule_type= Schedule.MINUTES, + func="apps.mappings.tasks.auto_import_and_map_fyle_fields", + args=schedule["args"], + schedule_type=Schedule.MINUTES, minutes=24 * 60, - next_run=first_schedule.next_run + next_run=first_schedule.next_run, ) # Delete the old schedules Schedule.objects.filter( - func__in=['apps.mappings.tasks.auto_create_category_mappings', 'apps.mappings.tasks.auto_create_project_mappings'] + func__in=[ + "apps.mappings.tasks.auto_create_category_mappings", + "apps.mappings.tasks.auto_create_project_mappings", + ] ).delete() except Exception as e: print(e) diff --git a/tests/conftest.py b/tests/conftest.py index 48cbb44d..4c879938 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,20 +1,21 @@ import os from datetime import datetime, timezone from unittest import mock + import pytest -from rest_framework.test import APIClient -from fyle_rest_auth.models import AuthToken, User from fyle.platform import Platform +from fyle_rest_auth.models import AuthToken, User +from rest_framework.test import APIClient from apps.fyle.helpers import get_access_token from apps.fyle.models import ExpenseGroupSettings from apps.workspaces.models import Workspace, WorkspaceGeneralSettings from fyle_xero_api.tests import settings -from .test_fyle.fixtures import data as fyle_data +from tests.test_fyle.fixtures import data as fyle_data def pytest_configure(): - os.system('sh ./tests/sql_fixtures/reset_db_fixtures/reset_db.sh') + os.system("sh ./tests/sql_fixtures/reset_db_fixtures/reset_db.sh") @pytest.fixture @@ -24,33 +25,33 @@ def api_client(): @pytest.fixture(scope="session", autouse=True) def default_session_fixture(request): - patched_1 = mock.patch('xerosdk.XeroSDK.refresh_access_token') + patched_1 = mock.patch("xerosdk.XeroSDK.refresh_access_token") patched_1.__enter__() patched_2 = mock.patch( - 'fyle_rest_auth.authentication.get_fyle_admin', - return_value=fyle_data['get_my_profile'] + "fyle_rest_auth.authentication.get_fyle_admin", + return_value=fyle_data["get_my_profile"], ) patched_2.__enter__() patched_3 = mock.patch( - 'fyle.platform.internals.auth.Auth.update_access_token', - return_value='asnfalsnkflanskflansfklsan' + "fyle.platform.internals.auth.Auth.update_access_token", + return_value="asnfalsnkflanskflansfklsan", ) patched_3.__enter__() patched_4 = mock.patch( - 'apps.fyle.helpers.post_request', + "apps.fyle.helpers.post_request", return_value={ - 'access_token': 'easnfkjo12233.asnfaosnfa.absfjoabsfjk', - 'cluster_domain': 'https://staging.fyle.tech' - } + "access_token": "easnfkjo12233.asnfaosnfa.absfjoabsfjk", + "cluster_domain": "https://staging.fyle.tech", + }, ) patched_4.__enter__() patched_5 = mock.patch( - 'fyle.platform.apis.v1beta.spender.MyProfile.get', - return_value=fyle_data['get_my_profile'] + "fyle.platform.apis.v1beta.spender.MyProfile.get", + return_value=fyle_data["get_my_profile"], ) patched_5.__enter__() @@ -80,39 +81,41 @@ def test_connection(db): client_id=client_id, client_secret=client_secret, refresh_token=refresh_token, - server_url=server_url + server_url=server_url, ) access_token = get_access_token(refresh_token) fyle_connection.access_token = access_token - user_profile = fyle_connection.v1beta.spender.my_profile.get()['data'] + user_profile = fyle_connection.v1beta.spender.my_profile.get()["data"] user = User( - password='', last_login=datetime.now(tz=timezone.utc), id=1, email=user_profile['user']['email'], - user_id=user_profile['user_id'], full_name='', active='t', staff='f', admin='t' + password="", + last_login=datetime.now(tz=timezone.utc), + id=1, + email=user_profile["user"]["email"], + user_id=user_profile["user_id"], + full_name="", + active="t", + staff="f", + admin="t", ) user.save() - auth_token = AuthToken( - id=1, - refresh_token=refresh_token, - user=user - ) + auth_token = AuthToken(id=1, refresh_token=refresh_token, user=user) auth_token.save() workspace = Workspace.objects.create( - name='Test Workspace 2', - fyle_org_id='fyle_org_id_dummy', - fyle_currency='USD', - xero_currency='USD', - app_version='v2', - xero_short_code='xero_short_code_dummy', - onboarding_state='COMPLETE' + name="Test Workspace 2", + fyle_org_id="fyle_org_id_dummy", + fyle_currency="USD", + xero_currency="USD", + app_version="v2", + xero_short_code="xero_short_code_dummy", + onboarding_state="COMPLETE", ) workspace.user.add(user) WorkspaceGeneralSettings.objects.create( - workspace=workspace, - reimbursable_expenses_object='BILL' + workspace=workspace, reimbursable_expenses_object="BILL" ) ExpenseGroupSettings.objects.create(workspace=workspace) diff --git a/tests/helper.py b/tests/helper.py index dd1ea238..6cff20f1 100644 --- a/tests/helper.py +++ b/tests/helper.py @@ -1,7 +1,8 @@ import json from os import path -def dict_compare_keys(d1, d2, key_path=''): + +def dict_compare_keys(d1, d2, key_path=""): """ Compare two dicts recursively and see if dict1 has any keys that dict2 does not Returns: list of key paths @@ -13,24 +14,25 @@ def dict_compare_keys(d1, d2, key_path=''): return res for k in d1: if k not in d2: - missing_key_path = f'{key_path}->{k}' + missing_key_path = f"{key_path}->{k}" res.append(missing_key_path) else: if isinstance(d1[k], dict): - key_path1 = f'{key_path}->{k}' + key_path1 = f"{key_path}->{k}" res1 = dict_compare_keys(d1[k], d2[k], key_path1) res = res + res1 elif isinstance(d1[k], list): - key_path1 = f'{key_path}->{k}[0]' + key_path1 = f"{key_path}->{k}[0]" dv1 = d1[k][0] if len(d1[k]) > 0 else None dv2 = d2[k][0] if len(d2[k]) > 0 else None res1 = dict_compare_keys(dv1, dv2, key_path1) res = res + res1 return res + def get_response_dict(filename): basepath = path.dirname(__file__) filepath = path.join(basepath, filename) - mock_json = open(filepath, 'r').read() + mock_json = open(filepath, "r").read() mock_dict = json.loads(mock_json) return mock_dict diff --git a/tests/sql_fixtures/migration_fixtures/create_migration.sh b/tests/sql_fixtures/migration_fixtures/create_migration.sh index a6212053..28df82e6 100644 --- a/tests/sql_fixtures/migration_fixtures/create_migration.sh +++ b/tests/sql_fixtures/migration_fixtures/create_migration.sh @@ -24,4 +24,3 @@ done # creating a dump of the new fixture PGPASSWORD=postgres pg_dump -U postgres -h db -d test_xero_db > tests/sql_fixtures/reset_db_fixtures/reset_db.sql - diff --git a/tests/test_fyle/conftest.py b/tests/test_fyle/conftest.py index 1ca9d2ed..035000fc 100644 --- a/tests/test_fyle/conftest.py +++ b/tests/test_fyle/conftest.py @@ -1,34 +1,34 @@ from datetime import datetime, timezone + import pytest + from apps.fyle.models import ExpenseGroupSettings from apps.workspaces.models import Workspace @pytest.fixture def create_temp_workspace(db): - workspace = Workspace.objects.create( id=98, - name = 'Fyle for Testing', - fyle_org_id = 'Testing', - xero_short_code = 'erfg', - last_synced_at = None, - source_synced_at = None, - destination_synced_at = None, - xero_accounts_last_synced_at = None, - created_at = datetime.now(tz=timezone.utc), - updated_at = datetime.now(tz=timezone.utc) + name="Fyle for Testing", + fyle_org_id="Testing", + xero_short_code="erfg", + last_synced_at=None, + source_synced_at=None, + destination_synced_at=None, + xero_accounts_last_synced_at=None, + created_at=datetime.now(tz=timezone.utc), + updated_at=datetime.now(tz=timezone.utc), ) workspace.save() - + ExpenseGroupSettings.objects.create( - reimbursable_expense_group_fields='{employee_email,report_id,claim_number,fund_source}', - corporate_credit_card_expense_group_fields='{fund_source,employee_email,claim_number,expense_id,report_id}', - reimbursable_expense_state='PAYMENT PROCESSING', - ccc_expense_state='PAYMENT_PROCESSING', + reimbursable_expense_group_fields="{employee_email,report_id,claim_number,fund_source}", + corporate_credit_card_expense_group_fields="{fund_source,employee_email,claim_number,expense_id,report_id}", + reimbursable_expense_state="PAYMENT PROCESSING", + ccc_expense_state="PAYMENT_PROCESSING", workspace_id=98, - reimbursable_export_date_type='current_date', - ccc_export_date_type='spent_at' + reimbursable_export_date_type="current_date", + ccc_export_date_type="spent_at", ) - \ No newline at end of file diff --git a/tests/test_fyle/fixtures.py b/tests/test_fyle/fixtures.py index 9d72b185..300b32d2 100644 --- a/tests/test_fyle/fixtures.py +++ b/tests/test_fyle/fixtures.py @@ -1,84 +1,84 @@ data = { "expenses": [ { - 'id': 'tx4ziVSAyIsv', - 'employee_email': 'jhonsnow@fyle.in', - 'employee_name': None, - 'category': 'Accounts Payable', - 'sub_category': 'Accounts Payable', - 'project': 'Aaron Abbott', - 'project_id': 263589, - 'expense_number': 'E/2021/12/T/3', - 'org_id': 'orsO0VW86WLQ', - 'claim_number': 'C/2021/12/R/2', - 'amount': 150, - 'tax_amount': 0, - 'tax_group_id': 'tgWdIdEwcKlK', - 'settled_at': '2021-12-23T07:16:17.034079+00:00', - 'currency': 'USD', - 'foreign_amount': None, - 'foreign_currency': None, - 'settlement_id': 'seteYqkAfuWOS', - 'reimbursable': True, - 'billable': False, - 'state': 'PAID', - 'vendor': None, - 'cost_center': None, - 'corporate_card_id': None, - 'purpose': None, - 'report_id': 'rpqaDywYdbbw', - 'file_ids': [], - 'spent_at': '2021-12-22T07:30:26.289842+00:00', - 'approved_at': '2021-12-22T07:30:26.289842+00:00', - 'posted_at': '2021-12-22T07:30:26.289842+00:00', - 'expense_created_at': '2021-12-23T07:14:13.990650+00:00', - 'expense_updated_at': '2021-12-27T05:26:43.954470+00:00', - 'source_account_type': 'PERSONAL_CASH_ACCOUNT', - 'verified_at': None, - 'custom_properties': { - 'Vehicle Type': '', - 'Fyle Categories': '', + "id": "tx4ziVSAyIsv", + "employee_email": "jhonsnow@fyle.in", + "employee_name": None, + "category": "Accounts Payable", + "sub_category": "Accounts Payable", + "project": "Aaron Abbott", + "project_id": 263589, + "expense_number": "E/2021/12/T/3", + "org_id": "orsO0VW86WLQ", + "claim_number": "C/2021/12/R/2", + "amount": 150, + "tax_amount": 0, + "tax_group_id": "tgWdIdEwcKlK", + "settled_at": "2021-12-23T07:16:17.034079+00:00", + "currency": "USD", + "foreign_amount": None, + "foreign_currency": None, + "settlement_id": "seteYqkAfuWOS", + "reimbursable": True, + "billable": False, + "state": "PAID", + "vendor": None, + "cost_center": None, + "corporate_card_id": None, + "purpose": None, + "report_id": "rpqaDywYdbbw", + "file_ids": [], + "spent_at": "2021-12-22T07:30:26.289842+00:00", + "approved_at": "2021-12-22T07:30:26.289842+00:00", + "posted_at": "2021-12-22T07:30:26.289842+00:00", + "expense_created_at": "2021-12-23T07:14:13.990650+00:00", + "expense_updated_at": "2021-12-27T05:26:43.954470+00:00", + "source_account_type": "PERSONAL_CASH_ACCOUNT", + "verified_at": None, + "custom_properties": { + "Vehicle Type": "", + "Fyle Categories": "", }, }, ], "eliminated_expenses": [ { - 'id': 'tx6wOnBVaumk', - 'employee_email': 'jhonsnow@fyle.in', - 'category': 'Accounts Payable', - 'sub_category': 'Accounts Payable', - 'project': 'Aaron Abbott', - 'project_id': 263589, - 'expense_number': 'E/2021/12/T/3', - 'org_id': 'orsO0VW86WLQ', - 'claim_number': 'C/2021/12/R/2', - 'amount': 150, - 'tax_amount': 0, - 'tax_group_id': 'tgWdIdEwcKlK', - 'settled_at': '2020-12-23T07:16:17.034079+00:00', - 'currency': 'USD', - 'foreign_amount': None, - 'foreign_currency': None, - 'settlement_id': 'seteYqkAfuWOS', - 'reimbursable': True, - 'billable': False, - 'state': 'PAID', - 'vendor': None, - 'cost_center': None, - 'corporate_card_id': None, - 'purpose': None, - 'report_id': 'rpqaDywYdbbw', - 'file_ids': [], - 'spent_at': '2020-12-22T07:30:26.289842+00:00', - 'approved_at': '2020-12-22T07:30:26.289842+00:00', - 'posted_at': '2021-12-22T07:30:26.289842+00:00', - 'expense_created_at': '2020-12-23T07:14:13.990650+00:00', - 'expense_updated_at': '2020-12-27T05:26:43.954470+00:00', - 'source_account_type': 'PERSONAL_CASH_ACCOUNT', - 'verified_at': None, - 'custom_properties': { - 'Vehicle Type': '', - 'Fyle Categories': '', + "id": "tx6wOnBVaumk", + "employee_email": "jhonsnow@fyle.in", + "category": "Accounts Payable", + "sub_category": "Accounts Payable", + "project": "Aaron Abbott", + "project_id": 263589, + "expense_number": "E/2021/12/T/3", + "org_id": "orsO0VW86WLQ", + "claim_number": "C/2021/12/R/2", + "amount": 150, + "tax_amount": 0, + "tax_group_id": "tgWdIdEwcKlK", + "settled_at": "2020-12-23T07:16:17.034079+00:00", + "currency": "USD", + "foreign_amount": None, + "foreign_currency": None, + "settlement_id": "seteYqkAfuWOS", + "reimbursable": True, + "billable": False, + "state": "PAID", + "vendor": None, + "cost_center": None, + "corporate_card_id": None, + "purpose": None, + "report_id": "rpqaDywYdbbw", + "file_ids": [], + "spent_at": "2020-12-22T07:30:26.289842+00:00", + "approved_at": "2020-12-22T07:30:26.289842+00:00", + "posted_at": "2021-12-22T07:30:26.289842+00:00", + "expense_created_at": "2020-12-23T07:14:13.990650+00:00", + "expense_updated_at": "2020-12-27T05:26:43.954470+00:00", + "source_account_type": "PERSONAL_CASH_ACCOUNT", + "verified_at": None, + "custom_properties": { + "Vehicle Type": "", + "Fyle Categories": "", }, } ], @@ -110,15 +110,15 @@ "employee_email", "report_id", "claim_number", - "fund_source" + "fund_source", ], "corporate_credit_card_expense_group_fields": [ "employee_email", "report_id", "claim_number", - "fund_source" + "fund_source", ], - "expense_state": 'PAYMENT_PROCESSING', + "expense_state": "PAYMENT_PROCESSING", "ccc_expense_state": "PAYMENT_PROCESSING", "reimbursable_expense_state": "PAYMENT_PROCESSING", "reimbursable_export_date_type": "current_date", @@ -126,50 +126,41 @@ "import_card_credits": "false", "created_at": "2021-11-15T08:46:16.069944Z", "updated_at": "2021-11-15T08:46:16.069986Z", - "workspace": 1 + "workspace": 1, }, - 'reimbursements': [ - { - 'amount': 76, - 'code': None, - 'created_at': '2022-01-20T16:30:44.584100', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'id': 'reimgCW1Og0BcM', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orsO0VW86WLQ', - 'paid_at': None, - 'purpose': 'C/2022/01/R/2;Ashwin', - 'reimbursement_number': 'P/2022/01/R/2', - 'settlement_id': 'setgCxsr2vTmZ', - 'updated_at': '2022-01-20T16:30:44.584100', - 'user_id': 'usqywo0f3nBY', + "reimbursements": [ + { + "amount": 76, + "code": None, + "created_at": "2022-01-20T16:30:44.584100", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "id": "reimgCW1Og0BcM", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orsO0VW86WLQ", + "paid_at": None, + "purpose": "C/2022/01/R/2;Ashwin", + "reimbursement_number": "P/2022/01/R/2", + "settlement_id": "setgCxsr2vTmZ", + "updated_at": "2022-01-20T16:30:44.584100", + "user_id": "usqywo0f3nBY", } ], - 'expense_group_settings_payload': { - 'reimbursable_expense_group_fields': ['claim_number'], - 'corporate_credit_card_expense_group_fields': ['claim_number'], - 'expense_state': 'PAYMENT_PROCESSING', - 'reimbursable_expense_state': 'PAYMENT_PROCESSING', - 'ccc_expense_state': 'PAYMENT_PROCESSING', - 'reimbursable_export_date_type': 'spent_at', - 'ccc_export_date_type': 'spent_at', + "expense_group_settings_payload": { + "reimbursable_expense_group_fields": ["claim_number"], + "corporate_credit_card_expense_group_fields": ["claim_number"], + "expense_state": "PAYMENT_PROCESSING", + "reimbursable_expense_state": "PAYMENT_PROCESSING", + "ccc_expense_state": "PAYMENT_PROCESSING", + "reimbursable_export_date_type": "spent_at", + "ccc_export_date_type": "spent_at", }, "expense_fields_response": [ - { - "attribute_type": "COST_CENTER", - "display_name": "Cost Center" - }, - { - "attribute_type": "PROJECT", - "display_name": "Project" - }, - { - "attribute_type": "CLASS", - "display_name": "Class" - } + {"attribute_type": "COST_CENTER", "display_name": "Cost Center"}, + {"attribute_type": "PROJECT", "display_name": "Project"}, + {"attribute_type": "CLASS", "display_name": "Class"}, ], "cost_centers_view": [ { @@ -184,7 +175,7 @@ "detail": None, "created_at": "2022-08-02T20:25:10.752731Z", "updated_at": "2022-08-02T20:25:10.752760Z", - "workspace": 1 + "workspace": 1, } ], "categories_view": [ @@ -200,7 +191,7 @@ "detail": None, "created_at": "2022-08-02T20:25:06.664182Z", "updated_at": "2022-08-02T20:25:06.664205Z", - "workspace": 1 + "workspace": 1, } ], "employee_view": [ @@ -220,11 +211,11 @@ "department": None, "department_id": None, "employee_code": None, - "department_code": None + "department_code": None, }, "created_at": "2022-08-02T20:25:06.274482Z", "updated_at": "2022-08-02T20:25:06.274511Z", - "workspace": 1 + "workspace": 1, } ], "project_view": [ @@ -240,49257 +231,49581 @@ "detail": None, "created_at": "2022-08-02T20:25:07.837942Z", "updated_at": "2022-08-02T20:25:07.837969Z", - "workspace": 1 + "workspace": 1, } ], "expense_group_id_response": { - "id":1, - "expenses":[ + "id": 1, + "expenses": [ { - "id":1, - "employee_email":"ashwin.t@fyle.in", + "id": 1, + "employee_email": "ashwin.t@fyle.in", "employee_name": None, - "category":"Food", - "sub_category":"None", - "project":"None", - "expense_id":"txaaVBj3yKGW", - "org_id":"orPJvXuoLqvJ", - "expense_number":"E/2022/06/T/4", - "claim_number":"C/2022/06/R/2", - "amount":1.0, - "currency":"USD", - "foreign_amount":"None", - "foreign_currency":"None", - "settlement_id":"setrunCck8hLH", - "reimbursable":True, - "state":"PAYMENT_PROCESSING", - "vendor":"None", - "cost_center":"None", - "corporate_card_id":"None", - "purpose":"None", - "report_id":"rp9EvDF8Umk6", - "billable":False, - "file_ids":[ - - ], - "spent_at":"2022-06-27T17:00:00Z", - "posted_at":"2022-06-27T17:00:00Z", - "approved_at":"2022-06-27T09:06:52.951000Z", - "expense_created_at":"2022-06-27T09:06:13.135764Z", - "expense_updated_at":"2022-06-27T09:08:23.340321Z", - "created_at":"2022-08-02T20:26:22.810330Z", - "updated_at":"2022-08-02T20:26:22.810363Z", - "fund_source":"PERSONAL", - "verified_at":"None", - "custom_properties":{ - "Card":"", - "Killua":"", - "Classes":"", - "avc_123":"None", - "New Field":"", - "Multi field":"", - "Testing This":"", - "abc in [123]":"None", - "Postman Field":"", - "Netsuite Class":"" - }, - "paid_on_xero":False, - "tax_amount":"None", - "tax_group_id":"None" + "category": "Food", + "sub_category": "None", + "project": "None", + "expense_id": "txaaVBj3yKGW", + "org_id": "orPJvXuoLqvJ", + "expense_number": "E/2022/06/T/4", + "claim_number": "C/2022/06/R/2", + "amount": 1.0, + "currency": "USD", + "foreign_amount": "None", + "foreign_currency": "None", + "settlement_id": "setrunCck8hLH", + "reimbursable": True, + "state": "PAYMENT_PROCESSING", + "vendor": "None", + "cost_center": "None", + "corporate_card_id": "None", + "purpose": "None", + "report_id": "rp9EvDF8Umk6", + "billable": False, + "file_ids": [], + "spent_at": "2022-06-27T17:00:00Z", + "posted_at": "2022-06-27T17:00:00Z", + "approved_at": "2022-06-27T09:06:52.951000Z", + "expense_created_at": "2022-06-27T09:06:13.135764Z", + "expense_updated_at": "2022-06-27T09:08:23.340321Z", + "created_at": "2022-08-02T20:26:22.810330Z", + "updated_at": "2022-08-02T20:26:22.810363Z", + "fund_source": "PERSONAL", + "verified_at": "None", + "custom_properties": { + "Card": "", + "Killua": "", + "Classes": "", + "avc_123": "None", + "New Field": "", + "Multi field": "", + "Testing This": "", + "abc in [123]": "None", + "Postman Field": "", + "Netsuite Class": "", + }, + "paid_on_xero": False, + "tax_amount": "None", + "tax_group_id": "None", } ], - "fund_source":"PERSONAL", - "response_logs":"None", - "description":{ - "report_id":"rp9EvDF8Umk6", - "fund_source":"PERSONAL", - "claim_number":"C/2022/06/R/2", - "employee_email":"ashwin.t@fyle.in" + "fund_source": "PERSONAL", + "response_logs": "None", + "description": { + "report_id": "rp9EvDF8Umk6", + "fund_source": "PERSONAL", + "claim_number": "C/2022/06/R/2", + "employee_email": "ashwin.t@fyle.in", }, "employee_name": None, - "created_at":"2022-08-02T20:26:22.939437Z", - "exported_at":"2022-08-02T20:27:52.017417Z", - "updated_at":"2022-08-02T20:27:52.017711Z", - "workspace":1 + "created_at": "2022-08-02T20:26:22.939437Z", + "exported_at": "2022-08-02T20:27:52.017417Z", + "updated_at": "2022-08-02T20:27:52.017711Z", + "workspace": 1, }, "expense_group_by_id_expenses_response": { - "id":1, - "expenses":[ + "id": 1, + "expenses": [ { - "id":1, - "employee_email":"ashwin.t@fyle.in", - "category":"Food", - "sub_category":"None", + "id": 1, + "employee_email": "ashwin.t@fyle.in", + "category": "Food", + "sub_category": "None", "employee_name": None, - "project":"None", - "expense_id":"txaaVBj3yKGW", - "org_id":"orPJvXuoLqvJ", - "expense_number":"E/2022/06/T/4", - "claim_number":"C/2022/06/R/2", - "amount":1.0, - "currency":"USD", - "foreign_amount":"None", - "foreign_currency":"None", - "settlement_id":"setrunCck8hLH", - "reimbursable":True, - "state":"PAYMENT_PROCESSING", - "vendor":"None", - "cost_center":"None", - "corporate_card_id":"None", - "purpose":"None", - "report_id":"rp9EvDF8Umk6", - "billable":False, - "file_ids":[ - - ], - "spent_at":"2022-06-27T17:00:00Z", - "posted_at":"2022-06-27T17:00:00Z", - "approved_at":"2022-06-27T09:06:52.951000Z", - "expense_created_at":"2022-06-27T09:06:13.135764Z", - "expense_updated_at":"2022-06-27T09:08:23.340321Z", - "created_at":"2022-08-02T20:26:22.810330Z", - "updated_at":"2022-08-02T20:26:22.810363Z", - "fund_source":"PERSONAL", - "verified_at":"None", - "custom_properties":{ - "Card":"", - "Killua":"", - "Classes":"", - "avc_123":"None", - "New Field":"", - "Multi field":"", - "Testing This":"", - "abc in [123]":"None", - "Postman Field":"", - "Netsuite Class":"" - }, - "paid_on_xero":False, - "tax_amount":"None", - "tax_group_id":"None" + "project": "None", + "expense_id": "txaaVBj3yKGW", + "org_id": "orPJvXuoLqvJ", + "expense_number": "E/2022/06/T/4", + "claim_number": "C/2022/06/R/2", + "amount": 1.0, + "currency": "USD", + "foreign_amount": "None", + "foreign_currency": "None", + "settlement_id": "setrunCck8hLH", + "reimbursable": True, + "state": "PAYMENT_PROCESSING", + "vendor": "None", + "cost_center": "None", + "corporate_card_id": "None", + "purpose": "None", + "report_id": "rp9EvDF8Umk6", + "billable": False, + "file_ids": [], + "spent_at": "2022-06-27T17:00:00Z", + "posted_at": "2022-06-27T17:00:00Z", + "approved_at": "2022-06-27T09:06:52.951000Z", + "expense_created_at": "2022-06-27T09:06:13.135764Z", + "expense_updated_at": "2022-06-27T09:08:23.340321Z", + "created_at": "2022-08-02T20:26:22.810330Z", + "updated_at": "2022-08-02T20:26:22.810363Z", + "fund_source": "PERSONAL", + "verified_at": "None", + "custom_properties": { + "Card": "", + "Killua": "", + "Classes": "", + "avc_123": "None", + "New Field": "", + "Multi field": "", + "Testing This": "", + "abc in [123]": "None", + "Postman Field": "", + "Netsuite Class": "", + }, + "paid_on_xero": False, + "tax_amount": "None", + "tax_group_id": "None", } ], - "fund_source":"PERSONAL", - "response_logs":"None", - "description":{ - "report_id":"rp9EvDF8Umk6", - "fund_source":"PERSONAL", - "claim_number":"C/2022/06/R/2", - "employee_email":"ashwin.t@fyle.in" + "fund_source": "PERSONAL", + "response_logs": "None", + "description": { + "report_id": "rp9EvDF8Umk6", + "fund_source": "PERSONAL", + "claim_number": "C/2022/06/R/2", + "employee_email": "ashwin.t@fyle.in", }, - "employee_name":None, - "created_at":"2022-08-02T20:26:22.939437Z", - "exported_at":"2022-08-02T20:27:52.017417Z", - "updated_at":"2022-08-02T20:27:52.017711Z", - "workspace":1 + "employee_name": None, + "created_at": "2022-08-02T20:26:22.939437Z", + "exported_at": "2022-08-02T20:27:52.017417Z", + "updated_at": "2022-08-02T20:27:52.017711Z", + "workspace": 1, }, - 'get_my_profile': { - 'data': { - 'org': { - 'currency': 'USD', - 'domain': 'fyleforqvd.com', - 'id': 'orNoatdUnm1w', - 'name': 'Fyle For MS Dynamics Demo', + "get_my_profile": { + "data": { + "org": { + "currency": "USD", + "domain": "fyleforqvd.com", + "id": "orNoatdUnm1w", + "name": "Fyle For MS Dynamics Demo", }, - 'org_id': 'orNoatdUnm1w', - 'roles': [ - 'FYLER', - 'VERIFIER', - 'PAYMENT_PROCESSOR', - 'FINANCE', - 'ADMIN', - 'AUDITOR', + "org_id": "orNoatdUnm1w", + "roles": [ + "FYLER", + "VERIFIER", + "PAYMENT_PROCESSOR", + "FINANCE", + "ADMIN", + "AUDITOR", ], - 'user': { - 'email': 'ashwin.t@fyle.in', - 'full_name': 'Joanna', - 'id': 'usqywo0f3nBY' + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", }, - 'user_id': 'usqywo0f3nBY', + "user_id": "usqywo0f3nBY", } }, - 'get_exsisting_org': { - 'data': { - 'org': { - 'currency': 'USD', - 'domain': 'fyleforqvd.com', - 'id': 'orPJvXuoLqvJ', - 'name': 'Fyle For MS Dynamics Demo', + "get_exsisting_org": { + "data": { + "org": { + "currency": "USD", + "domain": "fyleforqvd.com", + "id": "orPJvXuoLqvJ", + "name": "Fyle For MS Dynamics Demo", }, - 'org_id': 'orPJvXuoLqvJ', - 'roles': [ - 'FYLER', - 'VERIFIER', - 'PAYMENT_PROCESSOR', - 'FINANCE', - 'ADMIN', - 'AUDITOR', + "org_id": "orPJvXuoLqvJ", + "roles": [ + "FYLER", + "VERIFIER", + "PAYMENT_PROCESSOR", + "FINANCE", + "ADMIN", + "AUDITOR", ], - 'user': { - 'email': 'ashwin.t@fyle.in', - 'full_name': 'Joanna', - 'id': 'usqywo0f3nBY' + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", }, - 'user_id': 'usqywo0f3nBY', + "user_id": "usqywo0f3nBY", } }, - 'get_all_employees': [{'data': [ - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [ - 6580, - 6581, - 6582, - 6583, - 6584, - 6585, - 9305, - 6586, - 9306, - 6587, - 9307, - 6588, - 9308, - 6589, - 9309, - ], - 'cost_centers': [ - {'code': '38594', 'id': 6580, 'name': 'Sales and Cross'}, - {'code': '48163', 'id': 6581, 'name': 'Treasury'}, - {'code': '00207', 'id': 6582, 'name': 'Administration'}, - {'code': '14530', 'id': 6583, 'name': 'OPS & Retail'}, - {'code': '52111', 'id': 6584, 'name': 'Head'}, - {'code': '35260', 'id': 6585, 'name': 'Office'}, - {'code': None, 'id': 9305, 'name': 'Avenged Sevenfold'}, - {'code': '62958', 'id': 6586, 'name': 'Sales'}, - {'code': None, 'id': 9306, 'name': 'Lamb of God'}, - {'code': '77240', 'id': 6587, 'name': 'Corporate'}, - {'code': None, 'id': 9307, 'name': 'Megadeth'}, - {'code': '30868', 'id': 6588, 'name': 'Internal'}, - {'code': None, 'id': 9308, 'name': 'Metallica'}, - {'code': '82758', 'id': 6589, 'name': 'F & A'}, - {'code': None, 'id': 9309, 'name': 'Opeth'}, - ], - 'created_at': '2020-10-22T07:56:10.136000+00:00', - 'custom_fields': [{'name': 'Custom Field 1', 'value': None}], - 'department': None, - 'department_id': None, - 'has_accepted_invite': True, - 'id': 'ouJSY9XI9s9k', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [], - 'per_diem_rates': [], - 'project_ids': [], - 'projects': [], - 'roles': [ - 'FYLER', - 'VERIFIER', - 'PAYMENT_PROCESSOR', - 'FINANCE', - 'ADMIN', - 'AUDITOR', - ], - 'special_email': 'receipts+ashwin_t_gs2r@fyle.ai', - 'title': None, - 'updated_at': '2021-10-26T15:16:15.898098+00:00', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna', - 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'has_accepted_invite': True, - 'id': 'ouBnHryuMUmD', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4235], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4235, - 'name': 'Per Diem 4', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user6_u51m@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:47.333023+00:00', - 'user': {'email': 'user6@fyleforqvd.com', - 'full_name': 'Victor Martinez', 'id': 'usuycevSQL2z'}, - 'user_id': 'usuycevSQL2z', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'has_accepted_invite': True, - 'id': 'ouFo7ij9y58X', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4240], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4240, - 'name': 'Per Diem 9', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user3_b2by@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:36.492784+00:00', - 'user': {'email': 'user3@fyleforqvd.com', - 'full_name': 'Natalie Pope', 'id': 'usZU7tBgtPVH'}, - 'user_id': 'usZU7tBgtPVH', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'has_accepted_invite': True, - 'id': 'oug6iN9ulsQ4', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4238], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4238, - 'name': 'Per Diem 7', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user7_2afv@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:50.979511+00:00', - 'user': {'email': 'user7@fyleforqvd.com', - 'full_name': 'James Taylor', 'id': 'ushzyZgwhV7M'}, - 'user_id': 'ushzyZgwhV7M', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptKnXW9hkeEk', - 'name': 'Department 4', - 'sub_department': None, - }, - 'department_id': 'deptKnXW9hkeEk', - 'has_accepted_invite': True, - 'id': 'ouHbIBdnWJZP', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4233], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4233, - 'name': 'Per Diem 2', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user9_crom@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:56.822462+00:00', - 'user': {'email': 'user9@fyleforqvd.com', - 'full_name': 'Justin Glass', 'id': 'us5qnHSldfcB'}, - 'user_id': 'us5qnHSldfcB', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [9309], - 'cost_centers': [{'code': None, 'id': 9309, 'name': 'Opeth'}], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [{'name': 'Custom Field 1', 'value': None}], - 'department': { - 'code': None, - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'has_accepted_invite': True, - 'id': 'ouHoRakEut14', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4237], - 'per_diem_rates': [{'code': None, 'id': 4237, - 'name': 'Per Diem 6'}], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user2_eu4p@fyle.ai', - 'title': None, - 'updated_at': '2021-10-26T15:18:46.637079+00:00', - 'user': {'email': 'user2@fyleforqvd.com', - 'full_name': 'Brian Foster', 'id': 'usn71kjcQibs'}, - 'user_id': 'usn71kjcQibs', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'has_accepted_invite': True, - 'id': 'oupCGhU3azOj', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4239], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4239, - 'name': 'Per Diem 8', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user10_x3b2@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:26.955561+00:00', - 'user': {'email': 'user10@fyleforqvd.com', - 'full_name': 'Matthew Estrada', 'id': 'usiUCyQYp2N2'}, - 'user_id': 'usiUCyQYp2N2', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'has_accepted_invite': True, - 'id': 'ourWIYik4Igq', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4241], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4241, - 'name': 'Per Diem 10', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user1_emqc@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:30.585282+00:00', - 'user': {'email': 'user1@fyleforqvd.com', - 'full_name': 'Joshua Wood', 'id': 'usenjNn1QU1A'}, - 'user_id': 'usenjNn1QU1A', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'has_accepted_invite': True, - 'id': 'ouuRl5RWIiBi', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4234], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4234, - 'name': 'Per Diem 3', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user8_pfz5@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:53.170844+00:00', - 'user': {'email': 'user8@fyleforqvd.com', - 'full_name': 'Jessica Lane', 'id': 'use1hqDbsybg'}, - 'user_id': 'use1hqDbsybg', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'has_accepted_invite': True, - 'id': 'ouuS57oGeQ2M', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4241], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4241, - 'name': 'Per Diem 10', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user5_wv6o@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:45.126324+00:00', - 'user': {'email': 'user5@fyleforqvd.com', - 'full_name': 'Chris Curtis', 'id': 'us49CBDOfTLC'}, - 'user_id': 'us49CBDOfTLC', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:15.569081+00:00', - 'custom_fields': [], - 'department': { - 'code': None, - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'has_accepted_invite': True, - 'id': 'ouydH1D1p8yA', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4235], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4235, - 'name': 'Per Diem 4', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER'], - 'special_email': 'receipts+user4_ghod@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:40.122000+00:00', - 'user': {'email': 'user4@fyleforqvd.com', - 'full_name': 'Samantha Washington', - 'id': 'us5LYztuG20F'}, - 'user_id': 'us5LYztuG20F', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:07.958000+00:00', - 'custom_fields': [], - 'department': None, - 'department_id': None, - 'has_accepted_invite': True, - 'id': 'ouI4K0DWCGYO', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4236], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4236, - 'name': 'Per Diem 5', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER', 'ADMIN'], - 'special_email': 'receipts+admin1_w2yr@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:19.956236+00:00', - 'user': {'email': 'admin1@fyleforqvd.com', - 'full_name': 'Theresa Brown', 'id': 'us6bdTBqx1iZ'}, - 'user_id': 'us6bdTBqx1iZ', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:05:03.438000+00:00', - 'custom_fields': [], - 'department': None, - 'department_id': None, - 'has_accepted_invite': True, - 'id': 'ouvJSNFPBQLx', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4238], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4238, - 'name': 'Per Diem 7', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['FYLER', 'APPROVER'], - 'special_email': 'receipts+approver1_rtpj@fyle.ai', - 'title': None, - 'updated_at': '2020-09-02T08:05:12.248218+00:00', - 'user': {'email': 'approver1@fyleforqvd.com', - 'full_name': 'Ryan Gallagher', 'id': 'us3o3Yl7A5Uq'}, - 'user_id': 'us3o3Yl7A5Uq', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'branch_account': None, - 'branch_ifsc': None, - 'business_unit': None, - 'code': None, - 'cost_center_ids': [], - 'cost_centers': [], - 'created_at': '2020-09-02T08:04:53.569000+00:00', - 'custom_fields': [], - 'department': None, - 'department_id': None, - 'has_accepted_invite': True, - 'id': 'ouJLbStuUtWs', - 'is_enabled': True, - 'joined_at': None, - 'level': None, - 'level_id': None, - 'location': None, - 'mileage_rate_ids': [], - 'mileage_rates': [], - 'mobile': None, - 'org_id': 'orNoatdUnm1w', - 'per_diem_rate_ids': [4240], - 'per_diem_rates': [{ - 'code': None, - 'currency': 'USD', - 'id': 4240, - 'name': 'Per Diem 9', - }], - 'project_ids': [], - 'projects': [], - 'roles': ['OWNER', 'FYLER', 'ADMIN', 'HOD'], - 'special_email': 'receipts+owner_fxz2@fyle.ai', - 'title': 'Admin', - 'updated_at': '2020-09-02T08:06:16.947670+00:00', - 'user': {'email': 'owner@fyleforqvd.com', - 'full_name': 'Fyle For Quickbooks v4 Demo', - 'id': 'usJunSVNaFGE'}, - 'user_id': 'usJunSVNaFGE', - }, - ]}], - 'get_all_categories': # !/usr/bin/python + "get_all_employees": [ + { + "data": [ + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [ + 6580, + 6581, + 6582, + 6583, + 6584, + 6585, + 9305, + 6586, + 9306, + 6587, + 9307, + 6588, + 9308, + 6589, + 9309, + ], + "cost_centers": [ + {"code": "38594", "id": 6580, "name": "Sales and Cross"}, + {"code": "48163", "id": 6581, "name": "Treasury"}, + {"code": "00207", "id": 6582, "name": "Administration"}, + {"code": "14530", "id": 6583, "name": "OPS & Retail"}, + {"code": "52111", "id": 6584, "name": "Head"}, + {"code": "35260", "id": 6585, "name": "Office"}, + {"code": None, "id": 9305, "name": "Avenged Sevenfold"}, + {"code": "62958", "id": 6586, "name": "Sales"}, + {"code": None, "id": 9306, "name": "Lamb of God"}, + {"code": "77240", "id": 6587, "name": "Corporate"}, + {"code": None, "id": 9307, "name": "Megadeth"}, + {"code": "30868", "id": 6588, "name": "Internal"}, + {"code": None, "id": 9308, "name": "Metallica"}, + {"code": "82758", "id": 6589, "name": "F & A"}, + {"code": None, "id": 9309, "name": "Opeth"}, + ], + "created_at": "2020-10-22T07:56:10.136000+00:00", + "custom_fields": [{"name": "Custom Field 1", "value": None}], + "department": None, + "department_id": None, + "has_accepted_invite": True, + "id": "ouJSY9XI9s9k", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [], + "per_diem_rates": [], + "project_ids": [], + "projects": [], + "roles": [ + "FYLER", + "VERIFIER", + "PAYMENT_PROCESSOR", + "FINANCE", + "ADMIN", + "AUDITOR", + ], + "special_email": "receipts+ashwin_t_gs2r@fyle.ai", + "title": None, + "updated_at": "2021-10-26T15:16:15.898098+00:00", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "has_accepted_invite": True, + "id": "ouBnHryuMUmD", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4235], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4235, + "name": "Per Diem 4", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user6_u51m@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:47.333023+00:00", + "user": { + "email": "user6@fyleforqvd.com", + "full_name": "Victor Martinez", + "id": "usuycevSQL2z", + }, + "user_id": "usuycevSQL2z", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "has_accepted_invite": True, + "id": "ouFo7ij9y58X", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4240], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4240, + "name": "Per Diem 9", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user3_b2by@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:36.492784+00:00", + "user": { + "email": "user3@fyleforqvd.com", + "full_name": "Natalie Pope", + "id": "usZU7tBgtPVH", + }, + "user_id": "usZU7tBgtPVH", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "has_accepted_invite": True, + "id": "oug6iN9ulsQ4", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4238], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4238, + "name": "Per Diem 7", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user7_2afv@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:50.979511+00:00", + "user": { + "email": "user7@fyleforqvd.com", + "full_name": "James Taylor", + "id": "ushzyZgwhV7M", + }, + "user_id": "ushzyZgwhV7M", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptKnXW9hkeEk", + "name": "Department 4", + "sub_department": None, + }, + "department_id": "deptKnXW9hkeEk", + "has_accepted_invite": True, + "id": "ouHbIBdnWJZP", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4233], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4233, + "name": "Per Diem 2", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user9_crom@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:56.822462+00:00", + "user": { + "email": "user9@fyleforqvd.com", + "full_name": "Justin Glass", + "id": "us5qnHSldfcB", + }, + "user_id": "us5qnHSldfcB", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [9309], + "cost_centers": [{"code": None, "id": 9309, "name": "Opeth"}], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [{"name": "Custom Field 1", "value": None}], + "department": { + "code": None, + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "has_accepted_invite": True, + "id": "ouHoRakEut14", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4237], + "per_diem_rates": [ + {"code": None, "id": 4237, "name": "Per Diem 6"} + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user2_eu4p@fyle.ai", + "title": None, + "updated_at": "2021-10-26T15:18:46.637079+00:00", + "user": { + "email": "user2@fyleforqvd.com", + "full_name": "Brian Foster", + "id": "usn71kjcQibs", + }, + "user_id": "usn71kjcQibs", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "has_accepted_invite": True, + "id": "oupCGhU3azOj", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4239], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4239, + "name": "Per Diem 8", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user10_x3b2@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:26.955561+00:00", + "user": { + "email": "user10@fyleforqvd.com", + "full_name": "Matthew Estrada", + "id": "usiUCyQYp2N2", + }, + "user_id": "usiUCyQYp2N2", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "has_accepted_invite": True, + "id": "ourWIYik4Igq", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4241], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4241, + "name": "Per Diem 10", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user1_emqc@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:30.585282+00:00", + "user": { + "email": "user1@fyleforqvd.com", + "full_name": "Joshua Wood", + "id": "usenjNn1QU1A", + }, + "user_id": "usenjNn1QU1A", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "has_accepted_invite": True, + "id": "ouuRl5RWIiBi", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4234], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4234, + "name": "Per Diem 3", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user8_pfz5@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:53.170844+00:00", + "user": { + "email": "user8@fyleforqvd.com", + "full_name": "Jessica Lane", + "id": "use1hqDbsybg", + }, + "user_id": "use1hqDbsybg", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "has_accepted_invite": True, + "id": "ouuS57oGeQ2M", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4241], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4241, + "name": "Per Diem 10", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user5_wv6o@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:45.126324+00:00", + "user": { + "email": "user5@fyleforqvd.com", + "full_name": "Chris Curtis", + "id": "us49CBDOfTLC", + }, + "user_id": "us49CBDOfTLC", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:15.569081+00:00", + "custom_fields": [], + "department": { + "code": None, + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "has_accepted_invite": True, + "id": "ouydH1D1p8yA", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4235], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4235, + "name": "Per Diem 4", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER"], + "special_email": "receipts+user4_ghod@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:40.122000+00:00", + "user": { + "email": "user4@fyleforqvd.com", + "full_name": "Samantha Washington", + "id": "us5LYztuG20F", + }, + "user_id": "us5LYztuG20F", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:07.958000+00:00", + "custom_fields": [], + "department": None, + "department_id": None, + "has_accepted_invite": True, + "id": "ouI4K0DWCGYO", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4236], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4236, + "name": "Per Diem 5", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER", "ADMIN"], + "special_email": "receipts+admin1_w2yr@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:19.956236+00:00", + "user": { + "email": "admin1@fyleforqvd.com", + "full_name": "Theresa Brown", + "id": "us6bdTBqx1iZ", + }, + "user_id": "us6bdTBqx1iZ", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:05:03.438000+00:00", + "custom_fields": [], + "department": None, + "department_id": None, + "has_accepted_invite": True, + "id": "ouvJSNFPBQLx", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4238], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4238, + "name": "Per Diem 7", + } + ], + "project_ids": [], + "projects": [], + "roles": ["FYLER", "APPROVER"], + "special_email": "receipts+approver1_rtpj@fyle.ai", + "title": None, + "updated_at": "2020-09-02T08:05:12.248218+00:00", + "user": { + "email": "approver1@fyleforqvd.com", + "full_name": "Ryan Gallagher", + "id": "us3o3Yl7A5Uq", + }, + "user_id": "us3o3Yl7A5Uq", + }, + { + "approver_user_ids": [], + "approver_users": [], + "branch_account": None, + "branch_ifsc": None, + "business_unit": None, + "code": None, + "cost_center_ids": [], + "cost_centers": [], + "created_at": "2020-09-02T08:04:53.569000+00:00", + "custom_fields": [], + "department": None, + "department_id": None, + "has_accepted_invite": True, + "id": "ouJLbStuUtWs", + "is_enabled": True, + "joined_at": None, + "level": None, + "level_id": None, + "location": None, + "mileage_rate_ids": [], + "mileage_rates": [], + "mobile": None, + "org_id": "orNoatdUnm1w", + "per_diem_rate_ids": [4240], + "per_diem_rates": [ + { + "code": None, + "currency": "USD", + "id": 4240, + "name": "Per Diem 9", + } + ], + "project_ids": [], + "projects": [], + "roles": ["OWNER", "FYLER", "ADMIN", "HOD"], + "special_email": "receipts+owner_fxz2@fyle.ai", + "title": "Admin", + "updated_at": "2020-09-02T08:06:16.947670+00:00", + "user": { + "email": "owner@fyleforqvd.com", + "full_name": "Fyle For Quickbooks v4 Demo", + "id": "usJunSVNaFGE", + }, + "user_id": "usJunSVNaFGE", + }, + ] + } + ], + "get_all_categories": # !/usr/bin/python # -*- coding: utf-8 -*- - [{'data': [ - { - 'code': '16200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Patents & Licenses', - 'id': 207983, - 'is_enabled': True, - 'name': 'Patents & Licenses', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '50100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Sales', - 'id': 207984, - 'is_enabled': True, - 'name': 'COGS - Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60110', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Employee Benefits', - 'id': 207985, - 'is_enabled': True, - 'name': 'Employee Benefits', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60120', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Commission', - 'id': 207986, - 'is_enabled': True, - 'name': 'Commission', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Rent', - 'id': 207987, - 'is_enabled': True, - 'name': 'Rent', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '50300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Subcontractors', - 'id': 207988, - 'is_enabled': True, - 'name': 'COGS - Subcontractors', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40800-101', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Usage - Unbilled', - 'id': 207989, - 'is_enabled': True, - 'name': 'Contract Usage - Unbilled', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40800-102', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Usage - Billed', - 'id': 207990, - 'is_enabled': True, - 'name': 'Contract Usage - Billed', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40600-101', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Subscriptions - Unbilled', - 'id': 207991, - 'is_enabled': True, - 'name': 'Contract Subscriptions - Unbilled', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'OE Subscriptions', - 'id': 207992, - 'is_enabled': True, - 'name': 'OE Subscriptions', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40600', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Subscriptions', - 'id': 207993, - 'is_enabled': True, - 'name': 'Contract Subscriptions', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40800', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Usage', - 'id': 207994, - 'is_enabled': True, - 'name': 'Contract Usage', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40600-102', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Subscriptions - Billed', - 'id': 207995, - 'is_enabled': True, - 'name': 'Contract Subscriptions - Billed', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40800-103', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Usage - Paid', - 'id': 207996, - 'is_enabled': True, - 'name': 'Contract Usage - Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40600-103', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Subscriptions - Paid', - 'id': 207997, - 'is_enabled': True, - 'name': 'Contract Subscriptions - Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40700-102', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Services - Billed', - 'id': 207998, - 'is_enabled': True, - 'name': 'Contract Services - Billed', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Revenue - Services', - 'id': 207999, - 'is_enabled': True, - 'name': 'Revenue - Services', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Revenue - Subcontractors', - 'id': 208000, - 'is_enabled': True, - 'name': 'Revenue - Subcontractors', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40700-103', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Services - Paid', - 'id': 208001, - 'is_enabled': True, - 'name': 'Contract Services - Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Revenue - Reimbursed Expenses', - 'id': 208002, - 'is_enabled': True, - 'name': 'Revenue - Reimbursed Expenses', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40700', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Services', - 'id': 208003, - 'is_enabled': True, - 'name': 'Contract Services', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40700-101', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Services - Unbilled', - 'id': 208004, - 'is_enabled': True, - 'name': 'Contract Services - Unbilled', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60150', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Spot Bonus', - 'id': 208005, - 'is_enabled': True, - 'name': 'Spot Bonus', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '36000', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'CTA', - 'id': 208006, - 'is_enabled': True, - 'name': 'CTA', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '50900', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Other', - 'id': 208007, - 'is_enabled': True, - 'name': 'COGS - Other', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '14100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Prepaid Insurance', - 'id': 208008, - 'is_enabled': True, - 'name': 'Prepaid Insurance', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '14200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Prepaid Rent', - 'id': 208009, - 'is_enabled': True, - 'name': 'Prepaid Rent', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '14300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Prepaid Other', - 'id': 208010, - 'is_enabled': True, - 'name': 'Prepaid Other', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20600', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Accrued Expense', - 'id': 208011, - 'is_enabled': True, - 'name': 'Accrued Expense', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20680', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Inventory - GRNI', - 'id': 208012, - 'is_enabled': True, - 'name': 'Inventory - GRNI', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20650', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Accrued Payroll Tax Payable', - 'id': 208013, - 'is_enabled': True, - 'name': 'Accrued Payroll Tax Payable', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20610', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Accr. Sales Tax Payable', - 'id': 208014, - 'is_enabled': True, - 'name': 'Accr. Sales Tax Payable', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60660', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Other G&A', - 'id': 208015, - 'is_enabled': True, - 'name': 'Other G&A', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Currency Gain-Loss', - 'id': 208016, - 'is_enabled': True, - 'name': 'Currency Gain-Loss', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60220', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Telecommunications', - 'id': 208017, - 'is_enabled': True, - 'name': 'Telecommunications', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '13500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Valuation Reserves', - 'id': 208018, - 'is_enabled': True, - 'name': 'Valuation Reserves', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '16100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Goodwill', - 'id': 208019, - 'is_enabled': True, - 'name': 'Goodwill', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60360', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Printing and Reproduction', - 'id': 208020, - 'is_enabled': True, - 'name': 'Printing and Reproduction', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Notes Payable', - 'id': 208021, - 'is_enabled': True, - 'name': 'Notes Payable', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Long Term Debt', - 'id': 208022, - 'is_enabled': True, - 'name': 'Long Term Debt', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '30310', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Unrealized Currency Gain and Loss', - 'id': 208023, - 'is_enabled': True, - 'name': 'Unrealized Currency Gain and Loss', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60510', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Trade Shows and Exhibits', - 'id': 208024, - 'is_enabled': True, - 'name': 'Trade Shows and Exhibits', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Marketing and Advertising', - 'id': 208025, - 'is_enabled': True, - 'name': 'Marketing and Advertising', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60350', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Postage and Delivery', - 'id': 208026, - 'is_enabled': True, - 'name': 'Postage and Delivery', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60410', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Professional Fees Expense', - 'id': 208027, - 'is_enabled': True, - 'name': 'Professional Fees Expense', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60320', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Repairs and Maintenance', - 'id': 208028, - 'is_enabled': True, - 'name': 'Repairs and Maintenance', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Salaries and Wages', - 'id': 208029, - 'is_enabled': True, - 'name': 'Salaries and Wages', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '80500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Gain for Sale of an Asset', - 'id': 208030, - 'is_enabled': True, - 'name': 'Gain for Sale of an Asset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '80400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Dividends', - 'id': 208031, - 'is_enabled': True, - 'name': 'Dividends', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Cash', - 'id': 208032, - 'is_enabled': True, - 'name': 'Cash', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10040', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Checking 4 - Bank Of Canada', - 'id': 208033, - 'is_enabled': True, - 'name': 'Checking 4 - Bank Of Canada', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10050', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Checking 5 - Bank Of England', - 'id': 208034, - 'is_enabled': True, - 'name': 'Checking 5 - Bank Of England', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10060', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Checking 6 - Bank Of Australia', - 'id': 208035, - 'is_enabled': True, - 'name': 'Checking 6 - Bank Of Australia', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10070', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Checking 7 - Bank Of South Africa', - 'id': 208036, - 'is_enabled': True, - 'name': 'Checking 7 - Bank Of South Africa', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10010', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Checking 1 - SVB', - 'id': 208037, - 'is_enabled': True, - 'name': 'Checking 1 - SVB', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10020', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Checking 2 - SVB', - 'id': 208038, - 'is_enabled': True, - 'name': 'Checking 2 - SVB', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10030', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Checking 3 - SVB', - 'id': 208039, - 'is_enabled': True, - 'name': 'Checking 3 - SVB', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900-400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due from Entity 400', - 'id': 208040, - 'is_enabled': True, - 'name': 'Due from Entity 400', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900-700', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due from Entity 700', - 'id': 208041, - 'is_enabled': True, - 'name': 'Due from Entity 700', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900-600', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due from Entity 600', - 'id': 208042, - 'is_enabled': True, - 'name': 'Due from Entity 600', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900-500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due from Entity 500', - 'id': 208043, - 'is_enabled': True, - 'name': 'Due from Entity 500', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900-200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due from Entity 200', - 'id': 208044, - 'is_enabled': True, - 'name': 'Due from Entity 200', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900-300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due from Entity 300', - 'id': 208045, - 'is_enabled': True, - 'name': 'Due from Entity 300', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Intercompany Receivables', - 'id': 208046, - 'is_enabled': True, - 'name': 'Intercompany Receivables', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12701-200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Unbilled AR - Contract Services', - 'id': 208047, - 'is_enabled': True, - 'name': 'Unbilled AR - Contract Services', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12701-300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Unbilled AR - Contract Usage', - 'id': 208048, - 'is_enabled': True, - 'name': 'Unbilled AR - Contract Usage', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '17710-001', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Deferred Expense - Commission', - 'id': 208049, - 'is_enabled': True, - 'name': 'Deferred Expense - Commission', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '17710-002', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Deferred Expense - Royalty', - 'id': 208050, - 'is_enabled': True, - 'name': 'Deferred Expense - Royalty', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12620', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Tax Receivable', - 'id': 208051, - 'is_enabled': True, - 'name': 'Tax Receivable', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '17710', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Deferred Expense', - 'id': 208052, - 'is_enabled': True, - 'name': 'Deferred Expense', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12701-100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Unbilled AR - Contract Subscriptions', - 'id': 208053, - 'is_enabled': True, - 'name': 'Unbilled AR - Contract Subscriptions', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12600', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'WIP (Labor Only)', - 'id': 208054, - 'is_enabled': True, - 'name': 'WIP (Labor Only)', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12701', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Unbilled AR', - 'id': 208055, - 'is_enabled': True, - 'name': 'Unbilled AR', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '15110', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Buildings Accm. Depr.', - 'id': 208056, - 'is_enabled': True, - 'name': 'Buildings Accm. Depr.', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '16300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Capitalized Software Costs', - 'id': 208057, - 'is_enabled': True, - 'name': 'Capitalized Software Costs', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '15100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Buildings', - 'id': 208058, - 'is_enabled': True, - 'name': 'Buildings', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-101', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Subscriptions - Unbilled', - 'id': 208059, - 'is_enabled': True, - 'name': 'DR - Contract Subscriptions - Unbilled', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-301', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Usage - Unbilled', - 'id': 208060, - 'is_enabled': True, - 'name': 'DR - Contract Usage - Unbilled', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-102', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Subscriptions - Billed', - 'id': 208061, - 'is_enabled': True, - 'name': 'DR - Contract Subscriptions - Billed', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-202', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Services - Billed', - 'id': 208062, - 'is_enabled': True, - 'name': 'DR - Contract Services - Billed', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-302', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Usage - Billed', - 'id': 208063, - 'is_enabled': True, - 'name': 'DR - Contract Usage - Billed', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-303', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Usage - Paid', - 'id': 208064, - 'is_enabled': True, - 'name': 'DR - Contract Usage - Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-203', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Services - Paid', - 'id': 208065, - 'is_enabled': True, - 'name': 'DR - Contract Services - Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-103', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Subscriptions - Paid', - 'id': 208066, - 'is_enabled': True, - 'name': 'DR - Contract Subscriptions - Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701-201', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'DR - Contract Services - Unbilled', - 'id': 208067, - 'is_enabled': True, - 'name': 'DR - Contract Services - Unbilled', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20702', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Deferred Revenue Contra', - 'id': 208068, - 'is_enabled': True, - 'name': 'Deferred Revenue Contra', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20701', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Deferred Revenue', - 'id': 208069, - 'is_enabled': True, - 'name': 'Deferred Revenue', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900-700', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due to Entity 700', - 'id': 208070, - 'is_enabled': True, - 'name': 'Due to Entity 700', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900-500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due to Entity 500', - 'id': 208071, - 'is_enabled': True, - 'name': 'Due to Entity 500', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900-400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due to Entity 400', - 'id': 208072, - 'is_enabled': True, - 'name': 'Due to Entity 400', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900-600', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due to Entity 600', - 'id': 208073, - 'is_enabled': True, - 'name': 'Due to Entity 600', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900-300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due to Entity 300', - 'id': 208074, - 'is_enabled': True, - 'name': 'Due to Entity 300', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900-100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due to Entity 100', - 'id': 208075, - 'is_enabled': True, - 'name': 'Due to Entity 100', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900-200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due to Entity 200', - 'id': 208076, - 'is_enabled': True, - 'name': 'Due to Entity 200', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20900', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Intercompany Payables', - 'id': 208077, - 'is_enabled': True, - 'name': 'Intercompany Payables', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '80200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Interest Income', - 'id': 208078, - 'is_enabled': True, - 'name': 'Interest Income', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Journal Entry Rounding', - 'id': 208079, - 'is_enabled': True, - 'name': 'Journal Entry Rounding', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Intercompany Professional Fees', - 'id': 208080, - 'is_enabled': True, - 'name': 'Intercompany Professional Fees', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '30300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Accumulated OCI', - 'id': 208081, - 'is_enabled': True, - 'name': 'Accumulated OCI', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '40900', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Revenue - Other', - 'id': 208082, - 'is_enabled': True, - 'name': 'Revenue - Other', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60140', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Employee Deductions', - 'id': 208083, - 'is_enabled': True, - 'name': 'Employee Deductions', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60130', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Payroll Taxes', - 'id': 208084, - 'is_enabled': True, - 'name': 'Payroll Taxes', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60620', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Other Taxes', - 'id': 208085, - 'is_enabled': True, - 'name': 'Other Taxes', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60610', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Excise Tax', - 'id': 208086, - 'is_enabled': True, - 'name': 'Excise Tax', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '13400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Reserved Inventory', - 'id': 208087, - 'is_enabled': True, - 'name': 'Reserved Inventory', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '13200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Goods in Transit', - 'id': 208088, - 'is_enabled': True, - 'name': 'Goods in Transit', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '13100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Inventory', - 'id': 208089, - 'is_enabled': True, - 'name': 'Inventory', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '13900', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Inventory - Other', - 'id': 208090, - 'is_enabled': True, - 'name': 'Inventory - Other', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '16900', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Other Intangible Assets', - 'id': 208091, - 'is_enabled': True, - 'name': 'Other Intangible Assets', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '17000', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Other Assets', - 'id': 208092, - 'is_enabled': True, - 'name': 'Other Assets', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20500', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Credit Card Offset', - 'id': 208093, - 'is_enabled': True, - 'name': 'Credit Card Offset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '20620', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Sales Tax Payable', - 'id': 208094, - 'is_enabled': True, - 'name': 'Sales Tax Payable', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '30100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Common Stock', - 'id': 208095, - 'is_enabled': True, - 'name': 'Common Stock', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '30200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Preferred Stock', - 'id': 208096, - 'is_enabled': True, - 'name': 'Preferred Stock', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '35000', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Retained Earnings', - 'id': 208097, - 'is_enabled': True, - 'name': 'Retained Earnings', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '50200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Materials', - 'id': 208098, - 'is_enabled': True, - 'name': 'COGS - Materials', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70303', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Paid Time Off', - 'id': 208099, - 'is_enabled': True, - 'name': 'Paid Time Off', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70300', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Indirect Labor', - 'id': 208100, - 'is_enabled': True, - 'name': 'Indirect Labor', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70301', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Holiday', - 'id': 208101, - 'is_enabled': True, - 'name': 'Holiday', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60700', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Company Credit Card Offset', - 'id': 208102, - 'is_enabled': True, - 'name': 'Company Credit Card Offset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Other Expense', - 'id': 208103, - 'is_enabled': True, - 'name': 'Other Expense', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70302', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Professional Development', - 'id': 208104, - 'is_enabled': True, - 'name': 'Professional Development', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70304', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Indirect Labor Offset', - 'id': 208105, - 'is_enabled': True, - 'name': 'Indirect Labor Offset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '80100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Other Income', - 'id': 208106, - 'is_enabled': True, - 'name': 'Other Income', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12710', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'AR - Retainage', - 'id': 208107, - 'is_enabled': True, - 'name': 'AR - Retainage', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51708', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Billable Overtime Hours', - 'id': 208108, - 'is_enabled': True, - 'name': 'Billable Overtime Hours', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51709', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Non-Billable Overtime Hours', - 'id': 208109, - 'is_enabled': True, - 'name': 'Non-Billable Overtime Hours', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51701', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Billable Hours', - 'id': 208110, - 'is_enabled': True, - 'name': 'Billable Hours', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51711', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Labor Cost Variance', - 'id': 208111, - 'is_enabled': True, - 'name': 'Labor Cost Variance', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51710', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Labor Cost Offset', - 'id': 208112, - 'is_enabled': True, - 'name': 'Labor Cost Offset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51702', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Non-Billable Hours', - 'id': 208113, - 'is_enabled': True, - 'name': 'Non-Billable Hours', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51703', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Burden on Projects', - 'id': 208114, - 'is_enabled': True, - 'name': 'COGS - Burden on Projects', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51704', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Overhead on Projects', - 'id': 208115, - 'is_enabled': True, - 'name': 'COGS - Overhead on Projects', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51705', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - G&A on Projects', - 'id': 208116, - 'is_enabled': True, - 'name': 'COGS - G&A on Projects', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51706', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Indirect Projects Costs Offset', - 'id': 208117, - 'is_enabled': True, - 'name': 'COGS - Indirect Projects Costs Offset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '51707', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'COGS - Reimbursed Expenses', - 'id': 208118, - 'is_enabled': True, - 'name': 'COGS - Reimbursed Expenses', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Software and Licenses', - 'id': 208119, - 'is_enabled': True, - 'name': 'Software and Licenses', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90006', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Downgrade', - 'id': 208120, - 'is_enabled': True, - 'name': 'Downgrade', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '50400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Royalty Expense', - 'id': 208121, - 'is_enabled': True, - 'name': 'Contract Royalty Expense', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '60160', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Contract Commission', - 'id': 208122, - 'is_enabled': True, - 'name': 'Contract Commission', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90009', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'CMRR Offset', - 'id': 208123, - 'is_enabled': True, - 'name': 'CMRR Offset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90002', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'CMRR New', - 'id': 208124, - 'is_enabled': True, - 'name': 'CMRR New', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90003', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'CMRR Add-On', - 'id': 208125, - 'is_enabled': True, - 'name': 'CMRR Add-On', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90004', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Renewal Upgrade', - 'id': 208126, - 'is_enabled': True, - 'name': 'Renewal Upgrade', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90005', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Renewal Downgrade', - 'id': 208127, - 'is_enabled': True, - 'name': 'Renewal Downgrade', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90007', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'CMRR Churn', - 'id': 208128, - 'is_enabled': True, - 'name': 'CMRR Churn', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90008', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'CMRR Renewal', - 'id': 208129, - 'is_enabled': True, - 'name': 'CMRR Renewal', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90000', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Potential Billings', - 'id': 208130, - 'is_enabled': True, - 'name': 'Potential Billings', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '90001', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Potential Billings Offset', - 'id': 208131, - 'is_enabled': True, - 'name': 'Potential Billings Offset', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '70600', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Elimination Adjustment', - 'id': 208132, - 'is_enabled': True, - 'name': 'Elimination Adjustment', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12610', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Transactor Clearing', - 'id': 208133, - 'is_enabled': True, - 'name': 'Transactor Clearing', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10200', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Cash Equivalents', - 'id': 208134, - 'is_enabled': True, - 'name': 'Cash Equivalents', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '10400', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Investments and Securities', - 'id': 208135, - 'is_enabled': True, - 'name': 'Investments and Securities', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12900-100', - 'created_at': '2022-08-12T16:50:53.658771+00:00', - 'display_name': 'Due from Entity 100', - 'id': 208136, - 'is_enabled': True, - 'name': 'Due from Entity 100', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '36', - 'created_at': '2022-05-06T07:03:30.124944+00:00', - 'display_name': 'UK Expense Category', - 'id': 192456, - 'is_enabled': True, - 'name': 'UK Expense Category', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-06T07:03:30.124944+00:00', - }, - { - 'code': '37', - 'created_at': '2022-05-06T07:03:30.124944+00:00', - 'display_name': 'New Aus', - 'id': 192457, - 'is_enabled': True, - 'name': 'New Aus', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-06T07:03:30.124944+00:00', - }, - { - 'code': '38', - 'created_at': '2022-05-06T07:03:30.124944+00:00', - 'display_name': 'Final Aus Category', - 'id': 192458, - 'is_enabled': True, - 'name': 'Final Aus Category', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-06T07:03:30.124944+00:00', - }, - { - 'code': '40', - 'created_at': '2022-05-06T07:03:30.124944+00:00', - 'display_name': 'Nilesh Pant', - 'id': 192459, - 'is_enabled': True, - 'name': 'Nilesh Pant', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-06T07:03:30.124944+00:00', - }, - { - 'code': '36', - 'created_at': '2022-05-05T08:27:28.316187+00:00', - 'display_name': 'UK Expense Category / ', - 'id': 192359, - 'is_enabled': True, - 'name': 'UK Expense Category', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': ' ', - 'system_category': None, - 'updated_at': '2022-05-05T08:27:28.316187+00:00', - }, - { - 'code': '37', - 'created_at': '2022-05-05T08:27:28.316187+00:00', - 'display_name': 'New Aus / ', - 'id': 192360, - 'is_enabled': True, - 'name': 'New Aus', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': ' ', - 'system_category': None, - 'updated_at': '2022-05-05T08:27:28.316187+00:00', - }, - { - 'code': '38', - 'created_at': '2022-05-05T08:27:28.316187+00:00', - 'display_name': 'Final Aus Category / ', - 'id': 192361, - 'is_enabled': True, - 'name': 'Final Aus Category', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': ' ', - 'system_category': None, - 'updated_at': '2022-05-05T08:27:28.316187+00:00', - }, - { - 'code': '40', - 'created_at': '2022-05-05T08:27:28.316187+00:00', - 'display_name': 'Nilesh Pant / ', - 'id': 192362, - 'is_enabled': True, - 'name': 'Nilesh Pant', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [], - 'sub_category': ' ', - 'system_category': None, - 'updated_at': '2022-05-05T08:27:28.316187+00:00', - }, - { - 'code': 'XYZ XYZXYZ XYZ', - 'created_at': '2021-12-15T10:41:02.645588+00:00', - 'display_name': 'XYZ XYZ / ', - 'id': 164759, - 'is_enabled': True, - 'name': 'XYZ XYZ', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 290929, - 290932, - 290928, - 290931, - 290930, - 290067, - 290069, - 290084, - 291035, - 290065, - 290068, - ], - 'sub_category': '', - 'system_category': 'Others', - 'updated_at': '2021-12-15T10:41:02.645588+00:00', - }, - { - 'code': 'asjkhasd2', - 'created_at': '2021-12-15T10:40:01.221856+00:00', - 'display_name': 'Platform3 Single POST Category - 199 / ', - 'id': 164757, - 'is_enabled': True, - 'name': 'Platform3 Single POST Category - 199', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 290084, - 290069, - 290067, - 290068, - 290065, - 291035, - 290931, - 290928, - 290930, - 290929, - 290932, - ], - 'sub_category': '', - 'system_category': None, - 'updated_at': '2021-12-15T10:40:01.221856+00:00', - }, - { - 'code': 'C12342', - 'created_at': '2021-12-15T10:40:00.583460+00:00', - 'display_name': 'Engine2 / Turbo charged2', - 'id': 164756, - 'is_enabled': True, - 'name': 'Engine2', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 290930, - 290929, - 290932, - 290931, - 290928, - 291035, - 290068, - 290069, - 290084, - 290067, - 290065, - ], - 'sub_category': 'Turbo charged2', - 'system_category': 'Others', - 'updated_at': '2021-12-15T10:40:00.583460+00:00', - }, - { - 'code': 'asjkhasd2', - 'created_at': '2021-12-15T10:39:36.910635+00:00', - 'display_name': 'Platform2 Single POST Category - 199 / ', - 'id': 164755, - 'is_enabled': True, - 'name': 'Platform2 Single POST Category - 199', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 290069, - 290067, - 290084, - 290068, - 290065, - 291035, - 290932, - 290928, - 290931, - 290929, - 290930, - ], - 'sub_category': '', - 'system_category': None, - 'updated_at': '2021-12-15T10:39:36.910635+00:00', - }, - { - 'code': 'asjkhasd', - 'created_at': '2021-12-15T08:41:04.181338+00:00', - 'display_name': 'Platform Single POST Category - 199 / ', - 'id': 164748, - 'is_enabled': True, - 'name': 'Platform Single POST Category - 199', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 290928, - 290931, - 290932, - 290930, - 290929, - 290068, - 291035, - 290069, - 290084, - 290065, - 290067, - ], - 'sub_category': '', - 'system_category': None, - 'updated_at': '2021-12-15T08:41:04.181338+00:00', - }, - { - 'code': '33', - 'created_at': '2021-09-29T10:46:33.242256+00:00', - 'display_name': 'New Category', - 'id': 157577, - 'is_enabled': True, - 'name': 'New Category', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280168, - 280216, - 279703, - 279857, - 148860, - 280042, - 279772, - 279963, - 149153, - 280079, - 280654, - 279876, - 279969, - 279900, - 279820, - 280009, - 279728, - 279765, - 280078, - 280190, - 280049, - 279713, - 279873, - 279837, - 280128, - 280119, - 279962, - 280170, - 280213, - 280010, - 279885, - 279902, - 280129, - 280526, - 280194, - 279804, - 280217, - 279776, - 279734, - 280163, - 156013, - 280077, - 280003, - 149151, - 279879, - 279961, - 279823, - 280189, - 279896, - 280011, - 279727, - 279773, - 279840, - 279923, - 280130, - 280525, - 279800, - 279872, - 280085, - 279777, - 279960, - 149169, - 148874, - 280076, - 279928, - 279903, - 279819, - 279970, - 279878, - 280131, - 280502, - 279854, - 280218, - 280012, - 279726, - 280118, - 280188, - 279805, - 279959, - 280674, - 279750, - 148871, - 279832, - 279971, - 155997, - 280002, - 280132, - 279778, - 280075, - 279841, - 279871, - 279762, - 279958, - 280195, - 279901, - 280117, - 279904, - 280169, - 280389, - 280013, - 279725, - 280086, - 280074, - 279818, - 280133, - 280501, - 279735, - 279824, - 280219, - 280187, - 280291, - 279889, - 280014, - 279715, - 279779, - 279957, - 280212, - 279853, - 155987, - 280073, - 279769, - 280134, - 280497, - 155996, - 279780, - 280001, - 279842, - 279870, - 279956, - 280675, - 280041, - 279935, - 279905, - 279972, - 280015, - 279724, - 279817, - 279744, - 280087, - 290067, - 280072, - 280186, - 149155, - 279985, - 279926, - 280222, - 155986, - 279761, - 280135, - 280496, - 280116, - 280164, - 279955, - 279906, - 280196, - 279856, - 280136, - 280016, - 279723, - 279880, - 280071, - 279836, - 279781, - 279954, - 280676, - 279869, - 280029, - 280185, - 279973, - 156009, - 290068, - 280137, - 280464, - 279736, - 280017, - 280000, - 148890, - 279782, - 280223, - 279953, - 280070, - 280115, - 280263, - 279907, - 279816, - 279719, - 246836, - 279760, - 155991, - 280088, - 280138, - 280463, - 280100, - 280018, - 148870, - 279843, - 290069, - 280184, - 279868, - 280211, - 279825, - 279783, - 280069, - 279952, - 279895, - 280139, - 279974, - 280019, - 279718, - 280097, - 279951, - 280114, - 280238, - 280224, - 279737, - 280037, - 279999, - 149161, - 279908, - 280068, - 280751, - 279815, - 280140, - 149168, - 279991, - 280445, - 280089, - 280239, - 280183, - 280197, - 280203, - 279844, - 279867, - 148880, - 279784, - 279950, - 280141, - 279975, - 280020, - 279717, - 279759, - 280444, - 279887, - 280067, - 279768, - 279785, - 279949, - 280113, - 280228, - 279921, - 280121, - 156001, - 279720, - 156003, - 279909, - 279814, - 279881, - 280021, - 279716, - 280066, - 279835, - 280182, - 280204, - 280142, - 280436, - 279894, - 279845, - 279866, - 279998, - 279786, - 279948, - 280022, - 279924, - 280206, - 155985, - 279910, - 279976, - 149173, - 280143, - 280065, - 279758, - 290065, - 280210, - 279947, - 280229, - 156012, - 279803, - 280112, - 280125, - 280181, - 156026, - 280101, - 280144, - 280435, - 280090, - 280023, - 279714, - 280198, - 279787, - 149157, - 279946, - 280064, - 279738, - 279997, - 280145, - 279865, - 279749, - 279826, - 279911, - 279813, - 280431, - 280048, - 279893, - 279764, - 280024, - 279712, - 279788, - 279945, - 279882, - 280230, - 280063, - 280180, - 280091, - 148231, - 279988, - 280146, - 149156, - 280420, - 149148, - 279789, - 280111, - 148864, - 279944, - 279748, - 279922, - 280025, - 279977, - 279846, - 279711, - 280062, - 279864, - 279756, - 280151, - 279984, - 279912, - 279812, - 279721, - 279739, - 280026, - 279996, - 280147, - 280179, - 279987, - 279834, - 280231, - 279943, - 148888, - 279978, - 280098, - 280148, - 280061, - 280110, - 280419, - 280104, - 280209, - 279790, - 279942, - 156027, - 148861, - 280199, - 280043, - 280149, - 156023, - 280244, - 279847, - 279863, - 280092, - 280220, - 280027, - 279710, - 148865, - 279913, - 280416, - 279811, - 280167, - 148883, - 280178, - 280060, - 148858, - 279827, - 279986, - 279892, - 280232, - 279791, - 280150, - 156000, - 279763, - 280028, - 279709, - 280059, - 279941, - 279883, - 279914, - 280415, - 279979, - 279755, - 280221, - 279792, - 279848, - 279862, - 279740, - 280177, - 279995, - 156008, - 280152, - 280030, - 279708, - 280058, - 280109, - 279940, - 279939, - 280046, - 280153, - 280093, - 280233, - 280406, - 155993, - 279802, - 156007, - 155999, - 279915, - 280031, - 279810, - 279980, - 280205, - 149165, - 279793, - 280057, - 280200, - 279855, - 280176, - 148875, - 280154, - 279938, - 280208, - 280032, - 279707, - 280405, - 279861, - 279754, - 280099, - 280108, - 279994, - 149146, - 280155, - 280056, - 279794, - 279937, - 280234, - 279852, - 279831, - 280225, - 279828, - 279916, - 279809, - 279751, - 148879, - 280094, - 280401, - 279891, - 280175, - 280166, - 280033, - 279706, - 280055, - 280102, - 279743, - 279993, - 279849, - 280156, - 279795, - 279860, - 279742, - 149164, - 279936, - 280107, - 280157, - 279934, - 149167, - 280397, - 279925, - 279981, - 280034, - 279722, - 279741, - 280226, - 279884, - 280235, - 280054, - 279833, - 279917, - 279808, - 279886, - 279753, - 280035, - 279705, - 280174, - 279990, - 156021, - 280201, - 279796, - 280095, - 155989, - 280158, - 279933, - 279850, - 279859, - 148886, - 280393, - 279982, - 279757, - 279888, - 279918, - 280053, - 280044, - 280159, - 280207, - 280227, - 279927, - 280106, - 279830, - 279797, - 280173, - 280236, - 280036, - 279702, - 279932, - 279745, - 148227, - 280052, - 279992, - 280392, - 149163, - 280160, - 279798, - 279931, - 280320, - 279890, - 280038, - 279701, - 280051, - 149175, - 279851, - 279858, - 280096, - 279919, - 279807, - 149158, - 280161, - 279983, - 280391, - 280103, - 280172, - 279752, - 279930, - 280105, - 280237, - 279989, - 290084, - 279799, - 155995, - 280162, - 279929, - 279746, - 280039, - 280050, - 279747, - 280202, - 280390, - 280243, - 156005, - 279829, - 280040, - 279700, - 279920, - 279806, - 280262, - 279732, - 279767, - 279967, - 280589, - 280005, - 279838, - 279704, - 280045, - 279801, - 280122, - 280082, - 279875, - 280214, - 279898, - 279822, - 156024, - 280047, - 280193, - 280123, - 279966, - 280006, - 279774, - 280192, - 280083, - 149159, - 280081, - 155992, - 280124, - 279770, - 280215, - 291035, - 279965, - 280590, - 280007, - 279731, - 279968, - 280165, - 279766, - 279775, - 279730, - 279899, - 279821, - 280120, - 280171, - 279839, - 279874, - 279877, - 280126, - 279733, - 149172, - 280080, - 280191, - 280004, - 280550, - 279771, - 280388, - 280008, - 279729, - 279897, - 279964, - 280127, - 280549, - 280084, - 280344, - 280265, - 280499, - 280357, - 280425, - 148872, - 290929, - 280747, - 280330, - 148889, - 280599, - 280245, - 280489, - 280249, - 280661, - 280331, - 290931, - 280428, - 148866, - 280520, - 280299, - 280596, - 280660, - 280432, - 280653, - 280733, - 280576, - 280698, - 280434, - 148877, - 280260, - 280584, - 280510, - 280461, - 280602, - 156010, - 280622, - 280385, - 280276, - 280536, - 280314, - 280691, - 280492, - 280447, - 280740, - 280332, - 280565, - 280678, - 280285, - 280458, - 280734, - 280343, - 280573, - 280478, - 280500, - 280686, - 280543, - 280572, - 280666, - 280617, - 280519, - 280288, - 280363, - 280546, - 149166, - 155984, - 280727, - 280342, - 280411, - 280456, - 280273, - 280669, - 280600, - 280695, - 148862, - 280566, - 280704, - 280640, - 280620, - 280732, - 149150, - 148224, - 280439, - 280626, - 155988, - 280607, - 280712, - 280287, - 280315, - 280353, - 280427, - 280534, - 280300, - 280581, - 280559, - 280558, - 280264, - 280375, - 280248, - 280670, - 280378, - 148859, - 280423, - 280455, - 280387, - 280518, - 155998, - 280555, - 148230, - 280303, - 280574, - 148873, - 156011, - 280321, - 280707, - 280593, - 280612, - 280511, - 280364, - 280539, - 280755, - 280289, - 280761, - 280449, - 280429, - 156028, - 280446, - 280284, - 280672, - 280283, - 280745, - 280742, - 280341, - 280333, - 280722, - 280687, - 280649, - 280739, - 280334, - 280430, - 280588, - 280759, - 280544, - 280517, - 280352, - 280340, - 290932, - 254109, - 280326, - 149143, - 148881, - 280325, - 280417, - 280690, - 280408, - 280706, - 280270, - 280569, - 280381, - 280472, - 280541, - 148863, - 280503, - 280719, - 280442, - 280616, - 280467, - 155990, - 280512, - 148887, - 280563, - 280552, - 280280, - 280305, - 280644, - 280339, - 280358, - 280246, - 280302, - 280454, - 280557, - 280648, - 280592, - 280749, - 280516, - 280513, - 280296, - 280468, - 149162, - 280360, - 280545, - 280277, - 280306, - 280630, - 280426, - 280610, - 280335, - 280711, - 280591, - 280309, - 280667, - 280721, - 280671, - 280718, - 280476, - 280275, - 280371, - 280394, - 148225, - 280724, - 280310, - 280597, - 280477, - 280716, - 280641, - 280564, - 280379, - 280700, - 280471, - 280365, - 280338, - 280624, - 280351, - 280399, - 280457, - 280611, - 280736, - 280336, - 156002, - 280729, - 280688, - 280488, - 280689, - 280356, - 280613, - 148222, - 280758, - 280746, - 280301, - 280741, - 280515, - 280286, - 280380, - 280579, - 280400, - 280635, - 280571, - 148876, - 149147, - 280312, - 280450, - 280259, - 280418, - 280542, - 280514, - 280627, - 280650, - 280567, - 280725, - 280386, - 156018, - 148228, - 280247, - 280313, - 280618, - 280337, - 280258, - 280726, - 280322, - 280532, - 280561, - 149144, - 149174, - 280268, - 280638, - 280404, - 280495, - 280366, - 280504, - 280583, - 280580, - 280665, - 280757, - 156004, - 280255, - 280359, - 280606, - 280680, - 280554, - 280459, - 280585, - 280677, - 280663, - 280424, - 280266, - 280491, - 280717, - 280697, - 280754, - 280487, - 156016, - 280619, - 148878, - 280282, - 156014, - 280251, - 280715, - 280528, - 156025, - 280710, - 280484, - 280367, - 280762, - 149171, - 280267, - 149145, - 156019, - 280643, - 280752, - 280481, - 280533, - 280694, - 280368, - 280636, - 280568, - 280701, - 280629, - 280438, - 280311, - 148868, - 280679, - 280498, - 280350, - 280319, - 280753, - 280639, - 280384, - 156015, - 280548, - 280370, - 280414, - 280529, - 280730, - 280316, - 280604, - 280293, - 280748, - 280256, - 148229, - 280486, - 280493, - 280551, - 280658, - 280578, - 280349, - 149152, - 280577, - 280633, - 280556, - 280664, - 280480, - 280323, - 280261, - 280562, - 280682, - 280625, - 280473, - 280505, - 156022, - 280421, - 280485, - 290928, - 280763, - 280696, - 280646, - 280369, - 280317, - 280623, - 280702, - 280738, - 280530, - 280448, - 280681, - 280376, - 280659, - 280506, - 280240, - 280460, - 162016, - 280361, - 280250, - 280631, - 280453, - 280537, - 280651, - 280595, - 280297, - 280656, - 280570, - 280655, - 280474, - 280750, - 280348, - 280628, - 280281, - 280535, - 280410, - 280355, - 280693, - 280402, - 280713, - 280409, - 280452, - 280254, - 280269, - 280294, - 280272, - 280252, - 280744, - 280441, - 280290, - 280412, - 280586, - 280714, - 280652, - 280605, - 280547, - 280470, - 280657, - 156020, - 280538, - 148882, - 280440, - 280684, - 290930, - 280523, - 280673, - 280662, - 280396, - 280383, - 280274, - 280637, - 280527, - 280298, - 280483, - 280632, - 280253, - 280374, - 280327, - 280735, - 155994, - 280507, - 280699, - 280522, - 148226, - 280708, - 280560, - 280347, - 280760, - 148869, - 148867, - 280278, - 280608, - 280582, - 149154, - 280362, - 149170, - 280318, - 280609, - 280469, - 280372, - 280756, - 280508, - 280373, - 280475, - 280709, - 280422, - 280692, - 280531, - 280324, - 280407, - 280354, - 280601, - 280308, - 280377, - 280437, - 280242, - 280346, - 280720, - 280465, - 280328, - 280621, - 280292, - 280737, - 280443, - 280413, - 280594, - 148885, - 280257, - 280668, - 280451, - 148223, - 280598, - 280743, - 280279, - 280683, - 280723, - 149160, - 280241, - 280271, - 280614, - 280615, - 280587, - 280295, - 280575, - 280329, - 280494, - 280345, - 280703, - 156006, - 280705, - 280553, - 280490, - 148884, - 280509, - 280647, - 280304, - 280307, - 280685, - 280403, - 280521, - 280634, - 280603, - 280524, - 280731, - 280466, - 280433, - 280482, - 280642, - 280398, - 280479, - 149149, - 280395, - 280382, - 280728, - 280645, - 280540, - 280462, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:49:03.508375+00:00', - }, - { - 'code': '34', - 'created_at': '2021-09-29T10:46:33.242256+00:00', - 'display_name': 'Aus Category', - 'id': 157578, - 'is_enabled': True, - 'name': 'Aus Category', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280257, - 280462, - 280385, - 148881, - 280677, - 280741, - 280311, - 280561, - 280494, - 280552, - 280622, - 280308, - 280440, - 280268, - 280697, - 280373, - 280312, - 280253, - 280421, - 280294, - 280583, - 280357, - 280439, - 280749, - 280759, - 280644, - 280283, - 280567, - 280356, - 280404, - 280241, - 156019, - 280528, - 280495, - 280671, - 148866, - 148878, - 280628, - 280447, - 280498, - 280551, - 280556, - 280696, - 280403, - 280453, - 280355, - 280252, - 280662, - 280656, - 280537, - 280374, - 280760, - 280395, - 280354, - 280723, - 280422, - 280465, - 280295, - 280731, - 280647, - 280708, - 280499, - 280634, - 280326, - 280569, - 280353, - 280733, - 280500, - 280695, - 280712, - 280584, - 280761, - 280352, - 149143, - 280503, - 280532, - 280319, - 280375, - 280531, - 280296, - 280325, - 280718, - 280351, - 148228, - 280423, - 280724, - 149147, - 280571, - 280258, - 148222, - 280438, - 280704, - 280504, - 280665, - 280694, - 156016, - 280585, - 280748, - 280424, - 280619, - 280251, - 280481, - 280762, - 280643, - 280414, - 280316, - 280730, - 280721, - 280350, - 280604, - 280548, - 280473, - 280726, - 280577, - 280349, - 280480, - 149152, - 280455, - 280505, - 280763, - 280323, - 280452, - 280738, - 280506, - 280250, - 280376, - 280297, - 280348, - 280402, - 280693, - 280429, - 148229, - 280564, - 280290, - 280347, - 280441, - 280547, - 280586, - 148882, - 280601, - 280298, - 280274, - 280278, - 148869, - 280507, - 148226, - 280609, - 280346, - 149170, - 280413, - 280470, - 280508, - 280692, - 280437, - 280562, - 280377, - 280535, - 280451, - 148885, - 280743, - 280276, - 280286, - 149160, - 280318, - 280587, - 280345, - 280615, - 280655, - 280705, - 280509, - 280669, - 280603, - 280539, - 280479, - 280642, - 280324, - 280265, - 280344, - 280747, - 149149, - 280425, - 290931, - 280249, - 280598, - 280299, - 280576, - 155988, - 280540, - 280510, - 280653, - 280691, - 280287, - 280478, - 156010, - 280343, - 280273, - 280666, - 280546, - 280572, - 280342, - 280566, - 280315, - 280456, - 280620, - 280626, - 156011, - 280607, - 280300, - 280248, - 280466, - 280378, - 280573, - 155998, - 148873, - 280672, - 280511, - 280289, - 156028, - 280284, - 280341, - 280739, - 280588, - 280340, - 290932, - 280716, - 280472, - 280690, - 280307, - 280270, - 280394, - 280706, - 280512, - 155990, - 280339, - 280467, - 280719, - 280557, - 280513, - 280545, - 280711, - 280591, - 280641, - 280426, - 280477, - 148225, - 156022, - 280446, - 280338, - 280681, - 280379, - 280611, - 280689, - 280400, - 280613, - 280746, - 280301, - 280541, - 280635, - 280450, - 280670, - 280259, - 280457, - 280514, - 280715, - 156018, - 280337, - 280247, - 280650, - 148876, - 280599, - 280725, - 280386, - 280306, - 280380, - 280515, - 280688, - 156014, - 280729, - 280310, - 280336, - 280673, - 156002, - 280399, - 280476, - 280335, - 280667, - 280471, - 280277, - 280612, - 149162, - 280468, - 280516, - 280592, - 280648, - 280302, - 280246, - 280610, - 148863, - 280442, - 280563, - 280275, - 280305, - 280517, - 280544, - 280381, - 280334, - 280687, - 280722, - 280745, - 280559, - 280449, - 280333, - 280280, - 280649, - 148859, - 280321, - 280303, - 148230, - 280707, - 280264, - 280518, - 280288, - 148224, - 280600, - 280427, - 149150, - 280593, - 280640, - 280558, - 155984, - 280411, - 280519, - 280543, - 280412, - 280686, - 280565, - 280285, - 280625, - 280332, - 290929, - 280740, - 280602, - 280260, - 280434, - 280534, - 148877, - 280520, - 280331, - 280660, - 280661, - 280245, - 148889, - 280428, - 280330, - 280560, - 280728, - 280536, - 280398, - 280433, - 280382, - 280530, - 280387, - 280521, - 280685, - 280575, - 280304, - 156006, - 280329, - 280432, - 280271, - 280683, - 280313, - 280396, - 280594, - 280328, - 280621, - 280668, - 280538, - 280475, - 280443, - 280632, - 280242, - 280720, - 149154, - 280469, - 280527, - 280608, - 148867, - 280522, - 155994, - 280327, - 280523, - 280684, - 280383, - 280272, - 280657, - 280281, - 280637, - 156020, - 280409, - 280714, - 280744, - 280524, - 280474, - 280742, - 280570, - 280651, - 280410, - 280533, - 162016, - 280460, - 280595, - 280631, - 280709, - 280659, - 280369, - 290928, - 280702, - 280682, - 280646, - 280485, - 280633, - 280417, - 280256, - 280529, - 280658, - 280568, - 280370, - 280486, - 280679, - 280753, - 280368, - 280701, - 280710, - 280752, - 149145, - 280606, - 280367, - 280384, - 280240, - 280484, - 156025, - 280317, - 280487, - 280754, - 280266, - 280663, - 280554, - 280717, - 156004, - 280680, - 280255, - 280542, - 280596, - 149144, - 148872, - 280267, - 280366, - 280322, - 149174, - 280282, - 280618, - 280627, - 280580, - 280418, - 280579, - 280261, - 280488, - 280736, - 280365, - 280638, - 148887, - 280700, - 280454, - 280371, - 280408, - 280309, - 280755, - 280574, - 280364, - 280555, - 280732, - 280458, - 149166, - 280581, - 280363, - 280678, - 280616, - 148862, - 280489, - 280645, - 280461, - 280430, - 280279, - 280623, - 280652, - 280490, - 280553, - 280407, - 280292, - 280597, - 280703, - 148223, - 280756, - 280727, - 280362, - 254109, - 280483, - 280699, - 280713, - 280254, - 280750, - 280269, - 280361, - 280734, - 280578, - 280459, - 280293, - 156015, - 148884, - 280629, - 280636, - 280491, - 280482, - 280757, - 280360, - 280617, - 148868, - 280492, - 280698, - 280639, - 280314, - 290930, - 280614, - 280737, - 280582, - 280605, - 280372, - 280630, - 280493, - 280359, - 280735, - 149171, - 280448, - 280664, - 280758, - 280624, - 280358, - 280201, - 148858, - 156027, - 279942, - 280225, - 279790, - 279831, - 280209, - 279766, - 279828, - 280419, - 280104, - 280061, - 279876, - 279916, - 279809, - 279773, - 280148, - 280110, - 279727, - 148879, - 279978, - 148888, - 279943, - 280231, - 279834, - 280094, - 280401, - 280011, - 280179, - 279891, - 280147, - 279996, - 280175, - 279775, - 279987, - 280026, - 279739, - 279721, - 280033, - 279706, - 279812, - 280055, - 279923, - 279912, - 280151, - 279896, - 279756, - 279864, - 280166, - 280098, - 280062, - 280102, - 279711, - 280654, - 279743, - 279993, - 279846, - 279977, - 279922, - 280025, - 279944, - 279849, - 279789, - 148864, - 279748, - 280189, - 280156, - 280111, - 149148, - 280045, - 279795, - 279936, - 279860, - 280079, - 280420, - 279899, - 279988, - 149156, - 280146, - 148231, - 279742, - 149164, - 280107, - 279821, - 280091, - 280180, - 280063, - 280165, - 280157, - 279934, - 279823, - 279925, - 280230, - 279882, - 279945, - 279832, - 149167, - 280397, - 279961, - 279788, - 279712, - 280024, - 279764, - 279730, - 279981, - 279741, - 280431, - 279893, - 279879, - 279722, - 279826, - 279749, - 279813, - 280226, - 279911, - 279865, - 279884, - 280145, - 279997, - 280235, - 280034, - 280054, - 279738, - 280064, - 279946, - 279833, - 149151, - 279787, - 149157, - 279917, - 280198, - 290065, - 279714, - 279808, - 280120, - 280023, - 280101, - 280090, - 280435, - 279753, - 280144, - 280181, - 280125, - 280035, - 279705, - 280112, - 156012, - 280174, - 280171, - 156026, - 279803, - 279990, - 280229, - 280048, - 280044, - 279947, - 280210, - 156021, - 280003, - 280065, - 280143, - 279758, - 148861, - 149173, - 279976, - 279924, - 279910, - 279796, - 155985, - 280095, - 280206, - 280022, - 279948, - 279786, - 279776, - 280158, - 279933, - 279998, - 279866, - 148886, - 279845, - 280436, - 279850, - 279859, - 149153, - 280142, - 279894, - 279839, - 156001, - 280204, - 280182, - 279835, - 280066, - 280393, - 279716, - 155989, - 280021, - 279881, - 279814, - 279982, - 279757, - 279874, - 279963, - 279909, - 156003, - 279918, - 280053, - 279734, - 279720, - 280121, - 279888, - 280228, - 280113, - 280163, - 280106, - 279949, - 279785, - 280239, - 280077, - 280159, - 280207, - 279921, - 279768, - 280067, - 280227, - 280444, - 279759, - 279830, - 156013, - 279887, - 279717, - 279804, - 279797, - 280173, - 280020, - 279975, - 280141, - 279950, - 280217, - 280236, - 279784, - 148880, - 279867, - 279877, - 280036, - 279702, - 279844, - 280197, - 280183, - 280089, - 279932, - 280445, - 280140, - 280169, - 149168, - 280751, - 280126, - 280068, - 279815, - 148227, - 279908, - 149161, - 279745, - 279991, - 280052, - 279999, - 280037, - 279992, - 280194, - 279737, - 280392, - 280127, - 280224, - 280114, - 280097, - 279951, - 279927, - 279718, - 280019, - 279974, - 280170, - 280160, - 149163, - 280139, - 279895, - 279952, - 279798, - 279931, - 280526, - 279890, - 279825, - 280069, - 279783, - 149172, - 280038, - 279701, - 279868, - 280051, - 280184, - 280080, - 290069, - 280211, - 279843, - 149175, - 280320, - 280018, - 148870, - 280100, - 280463, - 279772, - 279851, - 279858, - 279885, - 280088, - 280138, - 280263, - 279760, - 280129, - 279919, - 279807, - 155991, - 246836, - 279719, - 280096, - 149158, - 279816, - 279902, - 279907, - 280115, - 280070, - 279733, - 280161, - 279973, - 280168, - 280103, - 280223, - 280391, - 279953, - 279782, - 280388, - 279983, - 280172, - 280191, - 280000, - 280203, - 279752, - 148860, - 280017, - 279930, - 279736, - 156009, - 280464, - 280137, - 280105, - 280010, - 290068, - 280185, - 280029, - 280676, - 280213, - 280237, - 279869, - 279857, - 279954, - 279801, - 279781, - 290084, - 279962, - 279989, - 280071, - 279836, - 279880, - 279723, - 280004, - 279799, - 280016, - 280196, - 280136, - 155995, - 280162, - 279929, - 280042, - 279906, - 280164, - 279955, - 280116, - 279746, - 279853, - 279747, - 280496, - 280135, - 280039, - 280050, - 280550, - 279761, - 155986, - 280119, - 280202, - 280222, - 149155, - 280390, - 280072, - 280186, - 280087, - 280128, - 280243, - 156005, - 290067, - 279817, - 279905, - 279744, - 279837, - 148890, - 279724, - 280015, - 280040, - 279700, - 279873, - 279926, - 279920, - 279806, - 279972, - 280041, - 279935, - 279713, - 280549, - 279732, - 155996, - 280675, - 279956, - 280084, - 279767, - 279967, - 280190, - 280589, - 279870, - 280005, - 279842, - 279829, - 279780, - 280001, - 279838, - 279704, - 280049, - 279735, - 279985, - 280497, - 280134, - 280078, - 279769, - 280073, - 155987, - 280122, - 280212, - 279957, - 280082, - 279703, - 279779, - 279856, - 279715, - 279875, - 280008, - 280014, - 280291, - 279889, - 280187, - 280214, - 280219, - 279824, - 279898, - 279822, - 279729, - 280501, - 280133, - 279818, - 280086, - 280074, - 279725, - 279728, - 280013, - 156024, - 279904, - 280389, - 280123, - 279966, - 280009, - 148871, - 280117, - 280193, - 279774, - 279901, - 280195, - 279958, - 280006, - 279897, - 279805, - 280047, - 280192, - 279871, - 279841, - 279778, - 279750, - 280132, - 280002, - 155997, - 279762, - 279765, - 280083, - 279971, - 280075, - 149159, - 280081, - 279771, - 280674, - 279959, - 280188, - 155992, - 280118, - 280124, - 279726, - 280012, - 280218, - 279878, - 279964, - 280502, - 280131, - 279854, - 279970, - 279819, - 280216, - 280215, - 291035, - 279903, - 279928, - 280076, - 148874, - 279770, - 279965, - 279969, - 149169, - 279802, - 155999, - 156007, - 279751, - 155993, - 280406, - 280031, - 280233, - 279915, - 279810, - 280262, - 280093, - 280153, - 279939, - 279940, - 280058, - 279708, - 279820, - 280590, - 280030, - 280109, - 280085, - 149165, - 279980, - 280152, - 280205, - 279984, - 156008, - 280046, - 279793, - 280057, - 279995, - 280177, - 279960, - 280200, - 279938, - 280176, - 279740, - 279862, - 279848, - 279792, - 280221, - 280208, - 279777, - 279755, - 279979, - 279800, - 280154, - 279872, - 279883, - 280415, - 148875, - 279914, - 280059, - 280007, - 280032, - 279707, - 279709, - 280028, - 279763, - 280405, - 279861, - 280150, - 156000, - 279941, - 279754, - 279731, - 280099, - 279791, - 280232, - 279892, - 279827, - 279986, - 280108, - 280525, - 279855, - 279994, - 280060, - 280178, - 156023, - 148883, - 279811, - 149146, - 280416, - 279913, - 148865, - 280130, - 280155, - 280056, - 279710, - 280027, - 280043, - 279886, - 280092, - 280220, - 279840, - 279794, - 279937, - 279900, - 280167, - 279863, - 279847, - 280238, - 280149, - 279968, - 280234, - 279852, - 280199, - 280244, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:49:03.508375+00:00', - }, - { - 'code': '35', - 'created_at': '2021-09-29T10:46:33.242256+00:00', - 'display_name': 'Travel - Automobile', - 'id': 157579, - 'is_enabled': True, - 'name': 'Travel - Automobile', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280129, - 279794, - 279760, - 280590, - 280389, - 279919, - 279807, - 156000, - 279902, - 280117, - 156024, - 246836, - 279793, - 279719, - 280193, - 149175, - 280096, - 149158, - 279901, - 279774, - 280057, - 279816, - 279907, - 280232, - 155991, - 280103, - 280195, - 279800, - 280070, - 280115, - 279900, - 279958, - 148861, - 280161, - 156027, - 280244, - 279973, - 279942, - 279766, - 279889, - 280225, - 279790, - 279995, - 279725, - 280211, - 279843, - 279792, - 280013, - 279805, - 280018, - 280152, - 279927, - 279728, - 279968, - 148870, - 280088, - 279904, - 279941, - 280463, - 279876, - 148871, - 279851, - 279858, - 280009, - 156008, - 280123, - 280138, - 280263, - 279966, - 280100, - 280168, - 279791, - 280320, - 280006, - 279801, - 280223, - 280155, - 279891, - 280209, - 279733, - 279831, - 280419, - 280148, - 280391, - 280177, - 280004, - 280205, - 279916, - 279809, - 279953, - 279782, - 280061, - 280192, - 279740, - 280110, - 280216, - 279978, - 148879, - 280172, - 279727, - 279750, - 148888, - 279938, - 279871, - 280231, - 280000, - 279943, - 280011, - 279736, - 280017, - 280094, - 280401, - 279841, - 279983, - 279834, - 279752, - 280179, - 280147, - 280056, - 280654, - 279778, - 280175, - 279930, - 280200, - 279996, - 279775, - 280010, - 280026, - 156009, - 279987, - 279739, - 280047, - 279721, - 280132, - 148858, - 279892, - 280033, - 279706, - 280464, - 279773, - 279749, - 280137, - 279812, - 279912, - 280055, - 279960, - 280104, - 280151, - 280105, - 280002, - 279864, - 290068, - 279922, - 280176, - 155997, - 280062, - 279827, - 279711, - 280185, - 280029, - 279743, - 279993, - 280102, - 280025, - 279762, - 279846, - 280676, - 279756, - 280166, - 279896, - 279977, - 279777, - 279937, - 280083, - 280237, - 279944, - 279789, - 279823, - 155992, - 279849, - 279869, - 148864, - 279971, - 279840, - 279802, - 280674, - 280213, - 280156, - 280044, - 279954, - 279748, - 280111, - 149148, - 279781, - 279862, - 280189, - 279795, - 279936, - 279860, - 279988, - 280420, - 290084, - 280146, - 280075, - 279899, - 279925, - 279821, - 279765, - 149156, - 279848, - 149159, - 280071, - 280081, - 149164, - 280107, - 279836, - 279880, - 148231, - 279742, - 280091, - 280108, - 279715, - 280167, - 279723, - 280221, - 280157, - 279934, - 279710, - 279799, - 280016, - 280180, - 280230, - 279959, - 280098, - 279882, - 280196, - 279989, - 279945, - 280046, - 280136, - 149167, - 280397, - 280188, - 279853, - 279788, - 279906, - 280063, - 148860, - 279741, - 279712, - 280024, - 280208, - 155995, - 279764, - 279962, - 279879, - 279771, - 280169, - 280162, - 290065, - 279929, - 280027, - 279893, - 280118, - 280079, - 279964, - 279832, - 279826, - 280164, - 280043, - 280124, - 279923, - 279747, - 280226, - 279722, - 279813, - 279911, - 279955, - 279772, - 279865, - 280170, - 279994, - 280431, - 280145, - 279726, - 280116, - 279997, - 279885, - 280012, - 280235, - 279755, - 280034, - 279705, - 280054, - 280218, - 280171, - 279738, - 280496, - 280135, - 280064, - 279884, - 280203, - 279979, - 279833, - 280550, - 279878, - 279946, - 279787, - 280039, - 149157, - 280050, - 280120, - 280149, - 279917, - 280198, - 279986, - 280090, - 280101, - 279714, - 280023, - 279808, - 155986, - 280222, - 280549, - 280234, - 280502, - 280202, - 280042, - 280435, - 279981, - 279753, - 280144, - 280131, - 279857, - 280154, - 279990, - 280390, - 280181, - 280125, - 280060, - 149151, - 280128, - 280035, - 149155, - 279856, - 280087, - 280112, - 155996, - 280174, - 279854, - 280072, - 156012, - 279970, - 280186, - 280229, - 279883, - 279803, - 279820, - 279947, - 280143, - 279924, - 148865, - 280165, - 280210, - 156021, - 280243, - 280065, - 280119, - 280525, - 279758, - 280163, - 156005, - 280201, - 279976, - 149173, - 290067, - 280215, - 279910, - 279817, - 156026, - 279961, - 279905, - 279796, - 155985, - 149153, - 291035, - 280022, - 280415, - 279776, - 280206, - 279969, - 279948, - 279786, - 279724, - 280015, - 279819, - 280158, - 279933, - 279837, - 279804, - 279903, - 279998, - 280040, - 279866, - 280095, - 148886, - 279700, - 279845, - 280178, - 156001, - 280239, - 280003, - 148890, - 279850, - 279859, - 279914, - 280041, - 280436, - 280142, - 279761, - 279873, - 279894, - 280076, - 279920, - 279806, - 148874, - 280182, - 279713, - 280204, - 279828, - 279972, - 280393, - 156023, - 279839, - 280066, - 279835, - 279926, - 279716, - 280021, - 279881, - 279855, - 155989, - 279935, - 279770, - 280048, - 280675, - 279874, - 279965, - 279814, - 280106, - 279757, - 280238, - 148883, - 279909, - 279732, - 279928, - 156003, - 280032, - 279720, - 279734, - 149169, - 280053, - 279707, - 280199, - 279767, - 280121, - 279967, - 280228, - 155999, - 280007, - 280589, - 280113, - 279886, - 279918, - 280190, - 279956, - 280207, - 279888, - 279949, - 279785, - 280059, - 279870, - 279842, - 280005, - 280159, - 280092, - 280077, - 279897, - 279830, - 155993, - 279709, - 280067, - 279768, - 156013, - 279780, - 280227, - 280085, - 280444, - 280028, - 280001, - 279730, - 279963, - 280388, - 279759, - 280031, - 279704, - 279717, - 280406, - 279852, - 279797, - 279932, - 280173, - 279735, - 280217, - 280020, - 280233, - 279887, - 279975, - 280130, - 280141, - 279751, - 279921, - 279829, - 279950, - 279784, - 280497, - 280134, - 280236, - 280093, - 280049, - 148880, - 148875, - 279867, - 279844, - 279744, - 279915, - 280036, - 279702, - 280122, - 280194, - 279769, - 280197, - 279810, - 280089, - 280073, - 280183, - 279982, - 155987, - 279863, - 280084, - 280045, - 280140, - 280078, - 279763, - 280212, - 149168, - 280751, - 279984, - 279957, - 279779, - 280068, - 280082, - 279815, - 279908, - 280126, - 280153, - 148227, - 280405, - 149161, - 149146, - 156007, - 279745, - 279992, - 279939, - 280052, - 280014, - 279877, - 279991, - 279838, - 280037, - 279875, - 279746, - 279872, - 279861, - 279999, - 279737, - 280058, - 280097, - 280224, - 280392, - 279811, - 280291, - 279824, - 279731, - 280150, - 280214, - 279951, - 279708, - 280008, - 279718, - 280019, - 280219, - 280262, - 280114, - 279974, - 280030, - 280445, - 280139, - 279985, - 280220, - 280160, - 280187, - 149163, - 279890, - 279729, - 280416, - 279898, - 279895, - 279825, - 280191, - 279822, - 279798, - 279931, - 279913, - 280099, - 280526, - 149165, - 280127, - 280501, - 280133, - 280069, - 279952, - 279783, - 279847, - 279980, - 279818, - 280038, - 279701, - 280086, - 149172, - 279754, - 280051, - 280109, - 280080, - 279868, - 279703, - 290069, - 280074, - 279940, - 280184, - 280265, - 280678, - 280642, - 280382, - 156019, - 280603, - 280734, - 280521, - 280685, - 280749, - 280479, - 280632, - 280575, - 280705, - 290930, - 280325, - 280509, - 280353, - 280304, - 280615, - 280634, - 156006, - 280329, - 280673, - 280345, - 280411, - 280587, - 280489, - 149160, - 280721, - 148862, - 280747, - 280499, - 280396, - 280645, - 280271, - 280614, - 280536, - 280538, - 148885, - 155988, - 280647, - 280594, - 280328, - 280624, - 280313, - 280683, - 280377, - 280475, - 280281, - 280451, - 280279, - 280621, - 148868, - 280540, - 280750, - 280461, - 280357, - 280494, - 280470, - 280242, - 280622, - 280562, - 280692, - 280508, - 280443, - 280459, - 280527, - 280437, - 149154, - 280465, - 149170, - 280268, - 280490, - 280346, - 280413, - 280720, - 280553, - 280469, - 148226, - 280583, - 280245, - 280552, - 280249, - 280560, - 148889, - 280695, - 280492, - 280425, - 280428, - 280330, - 149166, - 290931, - 280698, - 149149, - 280625, - 280728, - 280581, - 280433, - 280363, - 280758, - 280535, - 280318, - 280500, - 280344, - 148867, - 280608, - 280715, - 280507, - 280731, - 280522, - 280668, - 280407, - 155994, - 280327, - 280295, - 280274, - 280298, - 148869, - 280657, - 280272, - 280278, - 148882, - 280539, - 280430, - 280523, - 280684, - 280422, - 280586, - 280532, - 280294, - 280537, - 280312, - 280383, - 280292, - 280441, - 280533, - 280439, - 280409, - 280727, - 280744, - 156020, - 280714, - 280358, - 280547, - 280601, - 280723, - 280458, - 280669, - 280347, - 280290, - 280354, - 280474, - 280699, - 148866, - 280693, - 280323, - 280348, - 162016, - 280297, - 280664, - 280570, - 280651, - 280756, - 280276, - 280703, - 280582, - 280376, - 280410, - 280483, - 280402, - 280250, - 280506, - 280362, - 280460, - 280359, - 280760, - 280605, - 280738, - 280561, - 280455, - 280682, - 280659, - 280452, - 280253, - 156022, - 280374, - 280713, - 280656, - 156025, - 280646, - 280616, - 280763, - 280286, - 280505, - 280737, - 280485, - 280619, - 280702, - 280726, - 280529, - 149152, - 280480, - 148223, - 280633, - 280569, - 280631, - 280417, - 280595, - 280349, - 280564, - 280577, - 280256, - 280252, - 254109, - 280710, - 280254, - 280369, - 280652, - 148881, - 280568, - 156011, - 280548, - 280604, - 280662, - 280319, - 280752, - 280639, - 280350, - 280404, - 280486, - 280531, - 280679, - 280372, - 280753, - 280368, - 280355, - 280701, - 280269, - 280730, - 280361, - 280677, - 280309, - 280609, - 290928, - 280473, - 280643, - 280762, - 280606, - 280308, - 280367, - 280556, - 280743, - 280542, - 280658, - 280403, - 280484, - 280578, - 280638, - 280240, - 280316, - 280696, - 280424, - 280373, - 280251, - 280481, - 280447, - 280487, - 280266, - 280628, - 149144, - 148222, - 280412, - 156004, - 280585, - 280551, - 280663, - 280554, - 280448, - 280748, - 280754, - 280293, - 280717, - 148872, - 156015, - 280742, - 280493, - 280680, - 280704, - 280384, - 280255, - 280498, - 280694, - 280440, - 280665, - 280241, - 149145, - 280326, - 280317, - 280596, - 280597, - 280322, - 280655, - 280337, - 280247, - 280741, - 156018, - 280504, - 280541, - 280259, - 280514, - 280310, - 148876, - 280366, - 280635, - 156014, - 280453, - 156016, - 280306, - 280670, - 280258, - 280446, - 280611, - 280725, - 280257, - 280450, - 280301, - 280438, - 280515, - 280746, - 280729, - 280688, - 280629, - 280689, - 280423, - 280380, - 280612, - 149174, - 280636, - 280336, - 280571, - 280400, - 280482, - 280476, - 280399, - 280379, - 280618, - 156002, - 280739, - 280627, - 280637, - 280613, - 280338, - 280335, - 148225, - 280277, - 280426, - 280641, - 280591, - 280282, - 280667, - 280477, - 280557, - 280579, - 280267, - 280711, - 280599, - 280545, - 280386, - 280471, - 280513, - 280724, - 149147, - 148878, - 280467, - 280580, - 280516, - 280574, - 280592, - 149162, - 280719, - 280697, - 280468, - 280491, - 280246, - 280414, - 280706, - 280457, - 280648, - 280339, - 280462, - 155990, - 280302, - 280512, - 280432, - 280610, - 290932, - 148228, - 148863, - 280334, - 280395, - 280442, - 280488, - 280387, - 280270, - 280370, - 280690, - 280340, - 280495, - 280517, - 280544, - 280418, - 280588, - 280559, - 280314, - 280722, - 280563, - 280381, - 280365, - 280716, - 280687, - 280311, - 280305, - 280745, - 280351, - 280449, - 280736, - 280307, - 280757, - 280333, - 280454, - 280284, - 280681, - 280341, - 148887, - 280511, - 280394, - 280617, - 280289, - 280700, - 280360, - 280472, - 280264, - 148873, - 280718, - 148230, - 280261, - 155998, - 280600, - 280385, - 280707, - 280288, - 280296, - 280573, - 280630, - 280518, - 280378, - 280375, - 148224, - 280280, - 280466, - 280248, - 280503, - 280456, - 280300, - 280408, - 280607, - 280626, - 280356, - 280620, - 280283, - 149150, - 149143, - 280593, - 280640, - 280275, - 280650, - 280649, - 156028, - 280427, - 280524, - 280352, - 280572, - 280342, - 280759, - 155984, - 280546, - 280761, - 280666, - 280708, - 280519, - 280543, - 149171, - 148859, - 280755, - 148884, - 280565, - 280686, - 280732, - 280566, - 280343, - 290929, - 156010, - 280567, - 280364, - 280644, - 280285, - 280315, - 280332, - 280429, - 280653, - 280273, - 280691, - 280598, - 280623, - 280584, - 280602, - 280528, - 280510, - 280740, - 280478, - 280434, - 280421, - 280398, - 280303, - 280530, - 280555, - 280260, - 280733, - 280321, - 280709, - 148877, - 280331, - 280672, - 280558, - 280534, - 280661, - 280299, - 280287, - 280735, - 280520, - 280671, - 280712, - 280576, - 280324, - 280660, - 280371, - 148229, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:49:03.508375+00:00', - }, - { - 'code': '1', - 'created_at': '2021-08-11T08:14:36.942235+00:00', - 'display_name': 'Cellular Phone', - 'id': 147870, - 'is_enabled': True, - 'name': 'Cellular Phone', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280130, - 280006, - 280088, - 279901, - 279987, - 279760, - 279816, - 280049, - 246836, - 279968, - 279966, - 280180, - 279962, - 280133, - 280103, - 279807, - 279907, - 149158, - 280115, - 280216, - 279904, - 280091, - 280161, - 280070, - 280009, - 279978, - 280123, - 280063, - 279961, - 280086, - 279988, - 280171, - 280013, - 280167, - 279701, - 279953, - 280223, - 280000, - 280391, - 148858, - 280193, - 279703, - 279782, - 280172, - 280208, - 279725, - 280017, - 280464, - 279930, - 279729, - 280214, - 279822, - 280107, - 279989, - 290068, - 280230, - 280074, - 279752, - 279852, - 280028, - 280117, - 279735, - 279799, - 280137, - 279736, - 280185, - 280237, - 156027, - 279818, - 279751, - 149148, - 280128, - 280029, - 279794, - 279973, - 279869, - 280262, - 280263, - 279938, - 280550, - 279836, - 156009, - 279954, - 279837, - 280105, - 280046, - 155995, - 280501, - 280389, - 280239, - 279824, - 149167, - 280071, - 279746, - 280097, - 280496, - 279723, - 279788, - 280219, - 279882, - 290084, - 280016, - 279764, - 279898, - 279712, - 279880, - 279728, - 280676, - 280202, - 279943, - 280187, - 156024, - 279875, - 279709, - 279805, - 280162, - 280163, - 279715, - 280136, - 280014, - 148875, - 279873, - 279906, - 280196, - 280116, - 280082, - 279955, - 149153, - 279929, - 279781, - 280045, - 280397, - 279761, - 279779, - 279981, - 279772, - 280039, - 280024, - 280135, - 280122, - 279984, - 280004, - 155986, - 280072, - 280050, - 149172, - 279957, - 280222, - 280164, - 149155, - 279804, - 156005, - 280186, - 280190, - 279893, - 280212, - 280243, - 290067, - 279913, - 155987, - 280059, - 280390, - 279829, - 279817, - 280170, - 279967, - 280225, - 280099, - 280087, - 279747, - 279724, - 280120, - 279763, - 280073, - 279889, - 280291, - 280040, - 279767, - 279920, - 280034, - 280134, - 280431, - 280168, - 280015, - 280027, - 280005, - 280226, - 290065, - 279905, - 279704, - 280078, - 279972, - 279935, - 279813, - 280497, - 280234, - 280008, - 279732, - 279941, - 279884, - 279820, - 279956, - 280675, - 279769, - 280041, - 279780, - 279979, - 280001, - 279870, - 279765, - 148879, - 279838, - 280589, - 279713, - 279842, - 280231, - 279883, - 279996, - 279879, - 279865, - 279914, - 279911, - 279872, - 280056, - 279826, - 279997, - 280235, - 280145, - 279828, - 280032, - 279775, - 280003, - 279749, - 280064, - 279821, - 279856, - 280415, - 280179, - 280054, - 279946, - 280401, - 279834, - 280244, - 149151, - 279986, - 279917, - 149157, - 280044, - 280549, - 279738, - 280092, - 280154, - 280079, - 279803, - 156008, - 279710, - 279787, - 279744, - 280206, - 280221, - 280199, - 280435, - 280198, - 279934, - 279741, - 280048, - 279792, - 279711, - 279714, - 279766, - 280023, - 279722, - 279840, - 279808, - 280026, - 279755, - 279833, - 279848, - 280033, - 280144, - 280090, - 279921, - 280112, - 280176, - 280147, - 280181, - 279885, - 280035, - 280125, - 279812, - 279862, - 280011, - 279877, - 148861, - 279758, - 156012, - 279855, - 280057, - 279927, - 280007, - 279839, - 280174, - 279994, - 280177, - 156000, - 280229, - 280101, - 279806, - 280210, - 279753, - 279947, - 280201, - 279847, - 279925, - 279857, - 279793, - 280152, - 280149, - 155989, - 280065, - 280077, - 280143, - 279706, - 280525, - 280200, - 279912, - 280098, - 279995, - 156021, - 280095, - 280102, - 280030, - 279721, - 149173, - 279796, - 279910, - 279976, - 279756, - 149165, - 148860, - 279874, - 280238, - 280084, - 148865, - 279998, - 280022, - 280104, - 280058, - 148883, - 279960, - 279948, - 280158, - 279786, - 279790, - 279733, - 280204, - 279866, - 280055, - 279940, - 280169, - 279896, - 280109, - 280093, - 279980, - 279850, - 279845, - 155985, - 279894, - 156013, - 279891, - 279965, - 280436, - 280142, - 280209, - 280153, - 279864, - 279859, - 279888, - 279835, - 279810, - 279743, - 280108, - 279939, - 280182, - 279933, - 279811, - 279924, - 155999, - 280126, - 280233, - 149146, - 148886, - 280066, - 279982, - 279708, - 280151, - 279716, - 280393, - 279705, - 280021, - 279801, - 279814, - 279918, - 156003, - 279942, - 279991, - 279909, - 280217, - 279739, - 155993, - 280031, - 156007, - 279748, - 280121, - 148874, - 280166, - 280406, - 279853, - 280203, - 279937, - 280155, - 279720, - 280113, - 280053, - 280205, - 279915, - 280419, - 280228, - 279887, - 279823, - 279757, - 279759, - 291035, - 280062, - 279949, - 279745, - 280654, - 280159, - 279963, - 279800, - 280076, - 279785, - 279768, - 279881, - 279731, - 280060, - 149169, - 279970, - 280175, - 280227, - 280067, - 279776, - 279903, - 279773, - 280444, - 280207, - 280047, - 279797, - 279827, - 279717, - 280020, - 279969, - 280320, - 279922, - 280094, - 279819, - 280194, - 280156, - 280141, - 279846, - 279849, - 279975, - 279923, - 279878, - 279916, - 280236, - 148880, - 280012, - 280025, - 279950, - 280215, - 280106, - 280178, - 279754, - 280131, - 279977, - 280526, - 279784, - 279876, - 280590, - 279899, - 279774, - 156023, - 280111, - 280036, - 279831, - 279867, - 279771, - 279844, - 280218, - 279863, - 280173, - 280183, - 280445, - 280416, - 279770, - 280089, - 280085, - 279730, - 155992, - 279802, - 279932, - 279897, - 149168, - 279830, - 279944, - 279726, - 280080, - 280165, - 280197, - 279993, - 148890, - 279815, - 279742, - 280068, - 279707, - 280118, - 280127, - 279778, - 280061, - 148227, - 279908, - 280081, - 279702, - 149161, - 279985, - 149164, - 280188, - 279854, - 280751, - 280674, - 280189, - 279999, - 148864, - 156001, - 280140, - 279902, - 280052, - 280232, - 280037, - 279990, - 280213, - 279718, - 279900, - 148871, - 280148, - 279992, - 280224, - 279789, - 279737, - 280114, - 155996, - 279959, - 280042, - 279795, - 279971, - 280043, - 279951, - 280392, - 149175, - 149163, - 280132, - 280019, - 280420, - 280160, - 149159, - 279700, - 279974, - 280139, - 280405, - 280124, - 279895, - 279798, - 155991, - 279860, - 155997, - 279952, - 280220, - 280069, - 280010, - 279892, - 280038, - 279783, - 280211, - 280110, - 279791, - 280502, - 280083, - 279926, - 280100, - 279727, - 279964, - 148231, - 279868, - 149156, - 279777, - 280184, - 290069, - 280146, - 280075, - 279936, - 280002, - 279928, - 279841, - 280157, - 280051, - 279931, - 279861, - 279890, - 280192, - 279945, - 279983, - 280129, - 279843, - 279825, - 279740, - 279871, - 279919, - 148870, - 280096, - 280191, - 280388, - 280018, - 279886, - 279851, - 280463, - 279734, - 279858, - 279809, - 279958, - 156026, - 148888, - 279762, - 280195, - 280150, - 280119, - 279750, - 279719, - 279832, - 280138, - 280458, - 280272, - 280709, - 280286, - 280559, - 148229, - 280742, - 280394, - 280471, - 280470, - 280395, - 280573, - 148884, - 280715, - 280741, - 162016, - 280710, - 280396, - 280560, - 280469, - 280569, - 280398, - 280308, - 280264, - 280660, - 280319, - 280285, - 280728, - 280411, - 280740, - 280399, - 280468, - 280650, - 280400, - 280711, - 155988, - 280443, - 280467, - 280284, - 280739, - 280265, - 280615, - 280538, - 280609, - 280572, - 280402, - 280466, - 149152, - 280738, - 156016, - 280571, - 280712, - 280403, - 280465, - 280735, - 280524, - 280404, - 280638, - 280561, - 280462, - 280283, - 280459, - 280434, - 280737, - 280240, - 280407, - 280713, - 280408, - 280461, - 280736, - 280266, - 280282, - 290928, - 280651, - 156011, - 280267, - 280659, - 280681, - 280610, - 280570, - 280409, - 280714, - 280721, - 280460, - 280410, - 156020, - 280534, - 280639, - 254109, - 280305, - 280601, - 280326, - 280542, - 280595, - 280327, - 280684, - 280523, - 280522, - 149154, - 280242, - 155994, - 280328, - 280621, - 280432, - 280720, - 280668, - 280594, - 280329, - 280536, - 280685, - 148224, - 280271, - 280521, - 280304, - 156006, - 280330, - 280565, - 280331, - 280245, - 280309, - 280623, - 280520, - 280722, - 148877, - 280428, - 280613, - 280602, - 280332, - 280640, - 280686, - 280543, - 155984, - 280672, - 280519, - 149150, - 148230, - 280446, - 280427, - 280729, - 280442, - 280518, - 280277, - 280669, - 280449, - 280537, - 280303, - 280593, - 280333, - 280334, - 280687, - 280275, - 280310, - 280544, - 280517, - 148863, - 280246, - 280302, - 280516, - 280592, - 280335, - 280667, - 280336, - 156002, - 280688, - 280337, - 280515, - 280725, - 280450, - 290931, - 148876, - 280247, - 280514, - 156018, - 280635, - 280276, - 280563, - 280689, - 280301, - 280641, - 280338, - 280545, - 280597, - 280611, - 148225, - 280313, - 280591, - 280513, - 280339, - 155990, - 280340, - 280315, - 280690, - 280433, - 280512, - 280341, - 290932, - 280270, - 280588, - 148873, - 280546, - 280273, - 280426, - 280566, - 280437, - 280248, - 280626, - 280511, - 280300, - 155998, - 149149, - 280719, - 280342, - 280343, - 280691, - 280666, - 156010, - 280603, - 280249, - 280441, - 280653, - 280620, - 280299, - 280344, - 280510, - 280637, - 280274, - 280425, - 280278, - 280727, - 280642, - 280345, - 280451, - 280726, - 280509, - 149160, - 280587, - 148885, - 280346, - 149170, - 280692, - 280508, - 280347, - 280507, - 280298, - 280673, - 280532, - 148226, - 280598, - 280547, - 280586, - 280452, - 280438, - 280348, - 280316, - 280693, - 280250, - 280506, - 280297, - 280505, - 280763, - 280349, - 280724, - 280562, - 280321, - 280447, - 148882, - 290930, - 280730, - 280622, - 280350, - 280604, - 280548, - 280643, - 280694, - 280251, - 280619, - 280762, - 280504, - 280351, - 280439, - 280424, - 148228, - 149147, - 280585, - 280352, - 280665, - 280296, - 280503, - 280723, - 280718, - 280761, - 280353, - 280695, - 280500, - 280656, - 280423, - 280731, - 280440, - 280584, - 148867, - 280499, - 156019, - 280634, - 280295, - 280354, - 280551, - 280535, - 280760, - 280671, - 280307, - 280453, - 280530, - 280355, - 280252, - 148878, - 280696, - 280498, - 280422, - 280567, - 156022, - 280540, - 280356, - 280495, - 280644, - 280759, - 280357, - 280253, - 280294, - 280697, - 280552, - 280636, - 280421, - 280494, - 280583, - 149171, - 280625, - 148881, - 280358, - 280758, - 280664, - 280359, - 280279, - 280605, - 280614, - 280600, - 280493, - 280312, - 280582, - 280360, - 280698, - 148862, - 280492, - 148222, - 149144, - 280454, - 280491, - 280757, - 156015, - 280293, - 280361, - 280322, - 280624, - 280254, - 280362, - 280699, - 280645, - 280612, - 280269, - 280756, - 280553, - 280490, - 280292, - 280732, - 149145, - 280363, - 280489, - 149166, - 280364, - 280581, - 280448, - 280755, - 148887, - 148223, - 280700, - 280365, - 280554, - 280488, - 280366, - 280627, - 280618, - 280655, - 280418, - 280568, - 280682, - 280606, - 280658, - 280529, - 280255, - 280680, - 280580, - 280663, - 280487, - 280317, - 148872, - 280717, - 280754, - 280367, - 280368, - 280701, - 280679, - 280753, - 280256, - 280486, - 280646, - 280369, - 280702, - 280485, - 280370, - 280752, - 280484, - 149174, - 156004, - 280579, - 280596, - 156025, - 280633, - 280629, - 280371, - 280318, - 280555, - 280678, - 280323, - 280417, - 280703, - 280483, - 280750, - 280617, - 280430, - 280652, - 280733, - 280578, - 280455, - 280528, - 280372, - 280373, - 280257, - 280482, - 280677, - 280749, - 280374, - 280556, - 280324, - 280268, - 280531, - 280541, - 280662, - 280647, - 280375, - 280704, - 149143, - 280258, - 280481, - 280311, - 280748, - 280480, - 280376, - 280577, - 280290, - 280306, - 280414, - 280705, - 148869, - 280377, - 148866, - 280479, - 280314, - 280456, - 280630, - 280747, - 280241, - 280478, - 280607, - 280378, - 280557, - 280289, - 280576, - 280379, - 280706, - 280539, - 280259, - 280477, - 280429, - 280716, - 280746, - 280380, - 280683, - 149162, - 280280, - 280527, - 280476, - 280648, - 280381, - 280745, - 280707, - 280558, - 280288, - 280382, - 280260, - 148889, - 280661, - 280631, - 280657, - 280575, - 280608, - 280475, - 280383, - 280564, - 290929, - 280474, - 156028, - 280744, - 280413, - 280734, - 280599, - 280384, - 280533, - 148868, - 280708, - 280385, - 280628, - 280473, - 280457, - 148859, - 280743, - 280472, - 280287, - 280386, - 280649, - 280574, - 280670, - 280261, - 280616, - 280325, - 280412, - 280632, - 280281, - 156014, - 280387, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.252512+00:00', - }, - { - 'code': '4', - 'created_at': '2021-08-11T08:14:36.942235+00:00', - 'display_name': 'Integration Test Account', - 'id': 147871, - 'is_enabled': True, - 'name': 'Integration Test Account', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280690, - 280655, - 280432, - 280613, - 280276, - 280727, - 280447, - 280430, - 280448, - 280429, - 280657, - 148884, - 280728, - 280321, - 156011, - 280720, - 280271, - 280428, - 280565, - 280427, - 280729, - 280449, - 280277, - 280669, - 280450, - 280563, - 280611, - 280270, - 280426, - 280566, - 280719, - 280653, - 280425, - 280278, - 280451, - 280452, - 280562, - 148882, - 280673, - 280730, - 280424, - 280718, - 280423, - 280731, - 280422, - 280597, - 280453, - 280567, - 280421, - 149171, - 280614, - 280279, - 280629, - 280269, - 280732, - 280454, - 280418, - 280568, - 280658, - 280717, - 156025, - 280417, - 280652, - 280455, - 280268, - 280733, - 280414, - 280531, - 280456, - 280716, - 280413, - 280280, - 280631, - 290929, - 280734, - 280457, - 280412, - 280281, - 280458, - 280715, - 280411, - 155988, - 280569, - 280735, - 280459, - 280267, - 280410, - 156020, - 280460, - 280714, - 280681, - 280409, - 280570, - 280610, - 280659, - 280651, - 290928, - 280282, - 280266, - 280736, - 280534, - 280408, - 280461, - 280713, - 280407, - 280737, - 280283, - 280638, - 280462, - 280561, - 280404, - 280465, - 280403, - 280712, - 280571, - 156016, - 280738, - 149152, - 280402, - 280466, - 280609, - 280572, - 280615, - 280265, - 280739, - 280284, - 280467, - 280711, - 280400, - 280650, - 280319, - 280468, - 280399, - 280740, - 280285, - 280660, - 280264, - 280398, - 280240, - 280308, - 280469, - 280560, - 280396, - 280710, - 162016, - 280741, - 280395, - 280470, - 280573, - 280471, - 280394, - 280742, - 148229, - 280559, - 280286, - 280709, - 280387, - 280632, - 280670, - 280616, - 280261, - 280574, - 280649, - 280386, - 280533, - 280287, - 280472, - 280743, - 280473, - 280628, - 280385, - 280708, - 148868, - 280384, - 280744, - 280474, - 280383, - 156028, - 280475, - 280608, - 280661, - 280575, - 148889, - 280260, - 280382, - 280288, - 280539, - 280558, - 280707, - 280745, - 280381, - 280648, - 149162, - 280476, - 280380, - 280746, - 280477, - 280259, - 280379, - 280706, - 280576, - 280289, - 280557, - 280378, - 280607, - 280478, - 280747, - 280479, - 280377, - 148869, - 280705, - 280290, - 148866, - 280241, - 280376, - 280577, - 280480, - 280748, - 280481, - 280258, - 280311, - 149143, - 280704, - 280375, - 280647, - 280662, - 280556, - 280374, - 280749, - 280677, - 280373, - 280257, - 280372, - 280482, - 280578, - 280617, - 280750, - 280483, - 280703, - 280318, - 280678, - 280555, - 280371, - 280633, - 280579, - 149174, - 156004, - 280484, - 280752, - 280370, - 280536, - 280485, - 280702, - 280369, - 280646, - 280486, - 280256, - 280753, - 280679, - 280701, - 280317, - 280368, - 280367, - 280754, - 280487, - 280663, - 280680, - 280255, - 280606, - 280580, - 280366, - 280618, - 280627, - 280488, - 280554, - 280365, - 280700, - 148887, - 280755, - 280581, - 280364, - 148223, - 149166, - 280489, - 280363, - 280292, - 280490, - 280553, - 280756, - 280645, - 280699, - 280362, - 280254, - 280361, - 280624, - 280293, - 156015, - 280757, - 149144, - 280491, - 280492, - 280698, - 280360, - 280582, - 280493, - 280605, - 280359, - 280312, - 280664, - 280758, - 280358, - 148881, - 280583, - 280494, - 280552, - 280697, - 280294, - 280253, - 280357, - 280759, - 280644, - 280495, - 280356, - 148878, - 280498, - 280551, - 280696, - 280540, - 280252, - 280355, - 280760, - 156019, - 280354, - 280295, - 280634, - 280499, - 280584, - 280500, - 280695, - 148222, - 280353, - 280761, - 280503, - 280296, - 280535, - 280352, - 149147, - 280665, - 148228, - 280351, - 280504, - 280585, - 280762, - 280619, - 280251, - 280694, - 280643, - 280548, - 280604, - 280350, - 280349, - 280763, - 280505, - 280297, - 280506, - 280250, - 280316, - 280532, - 280693, - 280348, - 280586, - 148867, - 280547, - 148226, - 280298, - 280598, - 280507, - 280347, - 280508, - 280692, - 149170, - 280346, - 148885, - 280587, - 149160, - 280509, - 280345, - 280603, - 280642, - 280344, - 280299, - 280637, - 280620, - 280249, - 156010, - 280510, - 280666, - 280691, - 280343, - 280342, - 280626, - 280300, - 155998, - 280248, - 280511, - 280546, - 148873, - 280341, - 280588, - 280315, - 280512, - 280340, - 155990, - 280339, - 280513, - 280591, - 148225, - 280545, - 280313, - 280641, - 280338, - 280301, - 280689, - 280635, - 280514, - 156018, - 280247, - 148876, - 280515, - 280337, - 280688, - 156002, - 280336, - 280667, - 280335, - 280592, - 280516, - 280302, - 280246, - 148863, - 280672, - 280310, - 280517, - 280544, - 280687, - 280314, - 280334, - 280333, - 280593, - 280303, - 280518, - 148230, - 149150, - 280519, - 155984, - 280543, - 280686, - 280640, - 280332, - 280602, - 148877, - 280600, - 280520, - 280331, - 280245, - 280309, - 280330, - 156006, - 280304, - 280521, - 280685, - 280329, - 280623, - 280594, - 280668, - 280621, - 280328, - 280242, - 155994, - 149154, - 280522, - 280327, - 280523, - 280684, - 280595, - 280542, - 280639, - 280326, - 280601, - 280305, - 254109, - 280524, - 280538, - 280599, - 156014, - 280325, - 148859, - 280527, - 280683, - 280306, - 280541, - 280324, - 280323, - 280528, - 280596, - 148872, - 280529, - 280682, - 149145, - 280322, - 280625, - 148862, - 280530, - 280636, - 280307, - 156022, - 280671, - 280440, - 280656, - 280439, - 280723, - 280724, - 280622, - 280438, - 280274, - 280441, - 149149, - 280437, - 280273, - 280537, - 290932, - 290931, - 280725, - 280275, - 280442, - 280722, - 148224, - 280434, - 280443, - 280272, - 280433, - 280564, - 280630, - 290930, - 280726, - 280446, - 280721, - 280612, - 280006, - 280130, - 280234, - 156023, - 148861, - 280092, - 279847, - 280108, - 279863, - 279731, - 280220, - 279794, - 280046, - 279913, - 280027, - 280056, - 279710, - 280104, - 280166, - 280525, - 279994, - 148865, - 148883, - 149146, - 279811, - 280099, - 280155, - 279773, - 280060, - 279827, - 280178, - 279805, - 280416, - 279754, - 280167, - 279707, - 280085, - 280232, - 279892, - 280405, - 279791, - 279740, - 279861, - 280150, - 279777, - 280028, - 280079, - 279938, - 279709, - 280059, - 148875, - 279763, - 279872, - 279941, - 279979, - 280244, - 279883, - 279914, - 280032, - 280208, - 280415, - 279986, - 279834, - 280098, - 280154, - 156008, - 280221, - 279722, - 279792, - 279755, - 279848, - 280176, - 279862, - 156000, - 280007, - 280057, - 280177, - 279793, - 279995, - 280152, - 280200, - 279855, - 148858, - 280030, - 149165, - 279856, - 279960, - 280058, - 280102, - 279980, - 279968, - 279940, - 280109, - 280093, - 280048, - 280153, - 279810, - 279939, - 279965, - 280233, - 279708, - 280031, - 155993, - 156007, - 280406, - 280205, - 148874, - 155999, - 279915, - 291035, - 280076, - 149169, - 279923, - 279970, - 279903, - 280590, - 279819, - 279969, - 280215, - 279853, - 279878, - 280012, - 279885, - 279730, - 280131, - 280047, - 280165, - 279876, - 280218, - 279770, - 280216, - 155992, - 279726, - 279897, - 280118, - 279854, - 279778, - 280188, - 280674, - 280081, - 279959, - 148871, - 279900, - 149159, - 279971, - 280132, - 280124, - 155997, - 279700, - 280169, - 280083, - 280502, - 280002, - 279774, - 155996, - 279964, - 280075, - 279928, - 279841, - 279703, - 280192, - 279871, - 279958, - 279832, - 279762, - 280195, - 279901, - 279966, - 279904, - 280123, - 280117, - 280009, - 280086, - 280013, - 280193, - 279725, - 279729, - 280074, - 280214, - 279818, - 280389, - 279735, - 280133, - 279822, - 280501, - 279824, - 279898, - 280219, - 279728, - 156024, - 280187, - 279875, - 280014, - 279715, - 280082, - 279779, - 279765, - 280122, - 279957, - 280212, - 279889, - 155987, - 280291, - 279967, - 280073, - 279767, - 280134, - 280078, - 280005, - 280497, - 279704, - 280163, - 279769, - 279780, - 279838, - 280001, - 280041, - 279842, - 280589, - 280008, - 279870, - 279820, - 279956, - 280675, - 279935, - 279713, - 279732, - 279972, - 279905, - 279806, - 279920, - 280015, - 280040, - 279724, - 280087, - 279747, - 279829, - 279817, - 280044, - 280243, - 290067, - 156005, - 280190, - 280390, - 280186, - 280388, - 149155, - 280168, - 280222, - 280072, - 280050, - 155986, - 280164, - 280135, - 280004, - 290065, - 280039, - 279761, - 279781, - 280202, - 279873, - 279955, - 279929, - 280116, - 280196, - 279906, - 280136, - 280103, - 280162, - 280676, - 279880, - 280016, - 279744, - 279772, - 279804, - 279723, - 279801, - 290084, - 280496, - 280262, - 279746, - 280071, - 280097, - 280042, - 279837, - 155995, - 279954, - 279836, - 280105, - 156009, - 279869, - 280263, - 280029, - 280237, - 280128, - 280185, - 279973, - 279736, - 280137, - 279799, - 279989, - 290068, - 280550, - 279752, - 280464, - 279930, - 280017, - 280049, - 280172, - 280239, - 279782, - 280391, - 280000, - 280223, - 279771, - 279953, - 279701, - 280161, - 280070, - 148890, - 280115, - 279907, - 149158, - 279750, - 279962, - 279807, - 246836, - 279816, - 280119, - 279760, - 280088, - 279719, - 280138, - 279858, - 279851, - 280463, - 279734, - 280096, - 280018, - 279919, - 279926, - 148870, - 279825, - 279843, - 279983, - 279890, - 280129, - 279931, - 280051, - 290069, - 280184, - 280100, - 280191, - 279868, - 280084, - 280211, - 279783, - 280038, - 280069, - 155991, - 279798, - 280010, - 279952, - 279895, - 279985, - 280139, - 279974, - 280160, - 149175, - 280019, - 149163, - 279951, - 280392, - 280114, - 279737, - 280224, - 280213, - 279718, - 279992, - 280037, - 280052, - 279999, - 280751, - 149161, - 279902, - 279990, - 279908, - 279702, - 148227, - 279886, - 280068, - 280549, - 280171, - 279815, - 280197, - 156001, - 280140, - 280320, - 149168, - 280080, - 280089, - 279932, - 280445, - 279745, - 279852, - 279830, - 280183, - 280173, - 279844, - 280036, - 279867, - 280526, - 279831, - 148880, - 279784, - 280236, - 279950, - 279975, - 280141, - 280106, - 280194, - 280020, - 279717, - 279797, - 279963, - 280207, - 280444, - 280227, - 280067, - 279776, - 279768, - 279759, - 279785, - 280159, - 279949, - 279887, - 279757, - 280113, - 280228, - 279823, - 280121, - 280053, - 280217, - 279720, - 279991, - 279909, - 279881, - 156003, - 279918, - 279814, - 280126, - 279742, - 280021, - 279982, - 280393, - 279716, - 280066, - 279888, - 148886, - 280182, - 279835, - 280142, - 279859, - 148860, - 280436, - 279850, - 279894, - 279924, - 155985, - 280204, - 279845, - 156013, - 279933, - 279866, - 280203, - 279786, - 280158, - 279948, - 279998, - 280022, - 155989, - 279976, - 279910, - 279796, - 149173, - 280077, - 280095, - 280045, - 280143, - 156021, - 279874, - 280065, - 280206, - 280201, - 279947, - 279753, - 280210, - 279921, - 280229, - 279839, - 280174, - 279758, - 279705, - 156012, - 280101, - 279877, - 280125, - 280120, - 280035, - 280181, - 280112, - 280090, - 280144, - 279925, - 279808, - 280023, - 279833, - 280654, - 279714, - 280198, - 279803, - 280435, - 279934, - 279787, - 279738, - 149157, - 149151, - 279917, - 279741, - 279946, - 280054, - 280064, - 280003, - 279749, - 280145, - 279821, - 280235, - 279997, - 279911, - 279865, - 279826, - 279879, - 279884, - 279813, - 280226, - 280034, - 280431, - 279857, - 149172, - 279893, - 280024, - 279766, - 279981, - 279712, - 279984, - 279764, - 279882, - 280397, - 279788, - 156026, - 279961, - 149167, - 280230, - 280107, - 280063, - 279988, - 149148, - 279922, - 280180, - 280091, - 279945, - 280157, - 149153, - 280146, - 279936, - 149156, - 148231, - 279860, - 280420, - 279795, - 279789, - 149164, - 280189, - 148864, - 279993, - 279849, - 279944, - 279899, - 280111, - 279977, - 280025, - 279751, - 279846, - 280156, - 279748, - 279743, - 280062, - 279739, - 280175, - 280151, - 279733, - 279864, - 279896, - 280055, - 279756, - 279721, - 280043, - 279912, - 279800, - 279706, - 279812, - 280011, - 280147, - 280033, - 280026, - 279891, - 279711, - 280401, - 280179, - 279775, - 280238, - 279996, - 280231, - 280127, - 279943, - 279987, - 279978, - 148888, - 148879, - 279727, - 280094, - 279809, - 280148, - 280061, - 279916, - 280419, - 279840, - 279927, - 280209, - 279790, - 279937, - 279802, - 279828, - 156027, - 280110, - 280225, - 279942, - 280199, - 280170, - 280149, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.252512+00:00', - }, - { - 'code': '5', - 'created_at': '2021-08-11T08:14:36.942235+00:00', - 'display_name': 'Travelling Charges', - 'id': 147872, - 'is_enabled': True, - 'name': 'Travelling Charges', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280036, - 279812, - 279733, - 280526, - 148231, - 279867, - 280206, - 280200, - 280525, - 280143, - 280178, - 280654, - 279770, - 156021, - 280019, - 279721, - 279876, - 280065, - 279830, - 280075, - 280103, - 279874, - 280152, - 280191, - 280201, - 280148, - 148880, - 156001, - 149163, - 279995, - 279793, - 279839, - 280232, - 279947, - 279993, - 279968, - 279784, - 280210, - 279790, - 280147, - 290069, - 280033, - 280131, - 280057, - 280011, - 280229, - 279816, - 280129, - 279753, - 280177, - 279913, - 280236, - 279758, - 280174, - 280051, - 280171, - 280138, - 279950, - 279760, - 156012, - 280012, - 279831, - 280026, - 279928, - 279705, - 279878, - 279805, - 279748, - 279975, - 280101, - 279862, - 280184, - 280125, - 279951, - 280215, - 279791, - 280035, - 280238, - 280141, - 280170, - 280112, - 279971, - 280181, - 279937, - 280176, - 279789, - 280392, - 156023, - 279819, - 279846, - 280106, - 279891, - 280090, - 280003, - 279848, - 279900, - 280144, - 279762, - 280120, - 280114, - 279922, - 156000, - 279755, - 280020, - 149159, - 280194, - 280173, - 279710, - 279808, - 279777, - 279919, - 280023, - 280189, - 279797, - 279737, - 280213, - 279833, - 279717, - 280018, - 279730, - 279714, - 280156, - 279792, - 279722, - 280590, - 149164, - 279751, - 279803, - 279863, - 280435, - 279996, - 280224, - 280221, - 280167, - 280198, - 280207, - 155996, - 280043, - 279934, - 279868, - 156008, - 280444, - 279787, - 279892, - 149151, - 279903, - 280163, - 280154, - 280401, - 148871, - 280227, - 279775, - 149157, - 279743, - 279774, - 279718, - 279917, - 280179, - 280067, - 279925, - 279828, - 279979, - 279896, - 279946, - 280002, - 280388, - 279970, - 279738, - 279741, - 279964, - 280415, - 149169, - 280064, - 280211, - 279885, - 280085, - 279768, - 279992, - 280054, - 280056, - 279711, - 279958, - 280235, - 280208, - 279759, - 279749, - 280032, - 279860, - 280145, - 279887, - 279997, - 280083, - 279834, - 280007, - 280674, - 279785, - 280199, - 279750, - 279914, - 280076, - 280159, - 280099, - 279911, - 280037, - 279985, - 279821, - 280127, - 279865, - 279959, - 279986, - 279949, - 280060, - 279826, - 291035, - 279883, - 280048, - 280052, - 280001, - 279884, - 279842, - 279901, - 280062, - 280097, - 279936, - 279847, - 280589, - 280113, - 149153, - 279870, - 280081, - 279915, - 280041, - 279780, - 279838, - 279999, - 279856, - 280228, - 279783, - 279879, - 148870, - 279956, - 279757, - 148874, - 280320, - 279813, - 280675, - 279858, - 279704, - 279767, - 279719, - 279769, - 155999, - 280497, - 280231, - 279935, - 148864, - 279941, - 280226, - 279732, - 156007, - 279994, - 279972, - 280121, - 280005, - 280751, - 279905, - 155993, - 279713, - 280419, - 280053, - 279739, - 279806, - 280225, - 279720, - 279920, - 280034, - 280188, - 280134, - 156026, - 280015, - 280175, - 280078, - 280042, - 280038, - 280040, - 280096, - 279909, - 280073, - 280217, - 279724, - 149161, - 279871, - 280166, - 279967, - 279899, - 280087, - 280031, - 279829, - 280431, - 279811, - 280094, - 156003, - 279897, - 279817, - 148875, - 280084, - 279969, - 279918, - 279927, - 280100, - 279857, - 280190, - 279747, - 155987, - 280406, - 280243, - 280027, - 280291, - 280061, - 290067, - 279852, - 279908, - 280126, - 280069, - 156005, - 279893, - 279814, - 279902, - 279742, - 280212, - 280420, - 280186, - 280059, - 279881, - 279982, - 280390, - 148227, - 280008, - 279851, - 279778, - 149155, - 279864, - 279849, - 279981, - 148861, - 280021, - 155991, - 279889, - 279872, - 280222, - 279776, - 279801, - 280262, - 279957, - 280072, - 280068, - 279888, - 148858, - 280050, - 279771, - 279843, - 155986, - 280024, - 279820, - 280118, - 280502, - 280122, - 279716, - 279798, - 279708, - 279943, - 280135, - 280393, - 279942, - 279800, - 280039, - 279965, - 279707, - 279745, - 279779, - 280164, - 280066, - 279761, - 149146, - 279763, - 280082, - 280202, - 279765, - 280405, - 280233, - 279873, - 280195, - 280205, - 279815, - 279715, - 279712, - 279944, - 279955, - 280104, - 279952, - 279709, - 280116, - 279987, - 280045, - 280168, - 279734, - 149156, - 279929, - 280182, - 279764, - 279906, - 280151, - 280014, - 279810, - 148886, - 280196, - 279835, - 279832, - 280004, - 279923, - 155997, - 280136, - 280197, - 279754, - 280153, - 280162, - 279916, - 279875, - 280187, - 280140, - 279794, - 279773, - 280047, - 279882, - 279880, - 279744, - 280142, - 279984, - 280130, - 280192, - 280016, - 148860, - 279854, - 280044, - 279859, - 280111, - 280219, - 280046, - 279726, - 279723, - 279978, - 279898, - 279788, - 280010, - 279840, - 280239, - 290084, - 280496, - 280436, - 279728, - 149168, - 280093, - 280397, - 279746, - 280169, - 280204, - 279824, - 279837, - 279855, - 280071, - 280092, - 279894, - 149167, - 279961, - 279850, - 279836, - 279756, - 290065, - 279781, - 279895, - 148883, - 155995, - 279945, - 279939, - 280416, - 280501, - 280055, - 148865, - 279954, - 280165, - 280216, - 155992, - 279731, - 279822, - 279845, - 280676, - 279825, - 280108, - 279938, - 156024, - 279703, - 279799, - 280049, - 279886, - 279869, - 280102, - 280209, - 156009, - 156013, - 280237, - 280133, - 280028, - 280089, - 280098, - 280029, - 279866, - 279735, - 148888, - 279818, - 279827, - 280105, - 280230, - 279940, - 280185, - 279932, - 155985, - 280463, - 279823, - 279973, - 279933, - 280128, - 279729, - 279924, - 280080, - 280124, - 280445, - 280137, - 279802, - 279989, - 279772, - 280107, - 280214, - 280234, - 279786, - 280389, - 280074, - 280079, - 290068, - 280139, - 279700, - 280158, - 279912, - 279752, - 280109, - 280220, - 149175, - 279804, - 279948, - 280464, - 280063, - 280086, - 279727, - 279736, - 280263, - 279977, - 280550, - 279930, - 279890, - 280088, - 279861, - 280017, - 280160, - 279998, - 280549, - 279725, - 148879, - 280172, - 149148, - 279990, - 280058, - 149172, - 280022, - 280146, - 279877, - 279782, - 280183, - 155989, - 280193, - 280110, - 280391, - 279795, - 279980, - 280000, - 280157, - 279921, - 279991, - 279960, - 279766, - 280223, - 280218, - 279974, - 280095, - 279983, - 279963, - 149165, - 279953, - 280180, - 280025, - 148890, - 280013, - 156027, - 279701, - 279976, - 280161, - 280150, - 280009, - 279702, - 280070, - 279988, - 279926, - 279706, - 279904, - 280119, - 279910, - 280123, - 280115, - 280091, - 279931, - 279809, - 280117, - 279796, - 279907, - 279844, - 280132, - 279740, - 149158, - 280006, - 280077, - 279962, - 280149, - 279841, - 280244, - 280203, - 279807, - 279966, - 280030, - 246836, - 280155, - 149173, - 279853, - 280283, - 280257, - 280664, - 280671, - 280359, - 280462, - 280493, - 280614, - 280605, - 280582, - 280395, - 280372, - 280307, - 280455, - 280385, - 280596, - 280482, - 280533, - 280360, - 280639, - 280578, - 280655, - 280652, - 280698, - 280617, - 280737, - 280492, - 280279, - 280624, - 280757, - 280491, - 280459, - 156015, - 280293, - 280636, - 280629, - 280407, - 280361, - 280750, - 280715, - 149144, - 280254, - 280318, - 280530, - 290930, - 280483, - 280524, - 280699, - 280362, - 280269, - 280645, - 280756, - 280553, - 280632, - 280703, - 148872, - 280490, - 280708, - 280292, - 280417, - 280732, - 280678, - 280638, - 280489, - 148223, - 280363, - 149166, - 280581, - 148862, - 280364, - 280657, - 280555, - 280755, - 280713, - 280454, - 148887, - 280700, - 148868, - 280371, - 280321, - 280430, - 280461, - 280365, - 280554, - 156025, - 280529, - 280579, - 280742, - 280488, - 280322, - 280627, - 280618, - 280418, - 280366, - 280240, - 149174, - 280580, - 280606, - 280412, - 280658, - 156004, - 280542, - 280255, - 280680, - 280663, - 280487, - 280630, - 280717, - 280408, - 280484, - 280736, - 280754, - 149145, - 280568, - 280367, - 280266, - 280752, - 280282, - 280368, - 280701, - 280679, - 280448, - 280753, - 290928, - 280370, - 280721, - 280317, - 280682, - 280256, - 280486, - 280633, - 280485, - 280646, - 280369, - 280702, - 280741, - 280384, - 280267, - 280734, - 280651, - 280527, - 280744, - 280659, - 280460, - 280616, - 280474, - 156014, - 280570, - 280595, - 280409, - 280728, - 280410, - 280714, - 280681, - 156020, - 280684, - 280523, - 280281, - 280383, - 280327, - 290929, - 280522, - 155994, - 280433, - 280538, - 280608, - 149154, - 280710, - 280637, - 280475, - 162016, - 280242, - 280328, - 280621, - 280720, - 280559, - 280631, - 280668, - 280261, - 280594, - 280539, - 280443, - 280575, - 280396, - 280329, - 280271, - 280685, - 280521, - 280309, - 280304, - 156006, - 280330, - 280709, - 148889, - 280308, - 280432, - 280612, - 280245, - 280661, - 280394, - 280434, - 280331, - 280520, - 280428, - 148877, - 280565, - 280602, - 280560, - 280260, - 280683, - 280600, - 280332, - 280469, - 280382, - 280640, - 280686, - 148224, - 280543, - 280288, - 280398, - 280519, - 280429, - 155984, - 149150, - 280285, - 280558, - 280540, - 280427, - 280599, - 148230, - 280518, - 156022, - 280729, - 280303, - 280574, - 280707, - 280449, - 280593, - 280536, - 280722, - 280264, - 280745, - 280660, - 280333, - 280334, - 280687, - 280277, - 280544, - 280517, - 156011, - 280381, - 148863, - 280310, - 280246, - 280302, - 280442, - 280411, - 280648, - 280306, - 280458, - 280563, - 280516, - 280592, - 280649, - 149162, - 280740, - 280613, - 280280, - 280335, - 280476, - 280399, - 280667, - 280336, - 156002, - 280275, - 280688, - 280515, - 280672, - 280468, - 280380, - 280337, - 280413, - 280531, - 280450, - 148876, - 280716, - 280247, - 280477, - 280650, - 156018, - 280514, - 280725, - 280610, - 280259, - 280635, - 280670, - 156028, - 280746, - 280386, - 280313, - 280669, - 280689, - 280301, - 280338, - 280641, - 280286, - 290931, - 280611, - 148225, - 280591, - 280545, - 280513, - 280314, - 280400, - 280557, - 280379, - 280339, - 155990, - 280340, - 280690, - 280325, - 280706, - 280319, - 280512, - 280305, - 280588, - 280287, - 280270, - 280541, - 280576, - 290932, - 280341, - 280289, - 280711, - 148867, - 148873, - 280315, - 280426, - 280276, - 280546, - 280511, - 148229, - 155998, - 280566, - 280248, - 280471, - 280378, - 254109, - 280446, - 280300, - 280273, - 280626, - 280472, - 280607, - 280573, - 280620, - 280719, - 280342, - 280666, - 280478, - 280467, - 280343, - 280691, - 280510, - 155988, - 156010, - 280537, - 280653, - 280456, - 280249, - 280747, - 280284, - 280299, - 280344, - 280425, - 148884, - 280278, - 280479, - 280739, - 280642, - 280603, - 149149, - 280345, - 280509, - 280451, - 280572, - 280587, - 149160, - 148885, - 280437, - 280346, - 149170, - 280265, - 280377, - 280692, - 280508, - 280598, - 280622, - 280457, - 148869, - 280466, - 280347, - 280507, - 280298, - 280705, - 280324, - 148226, - 280743, - 280414, - 280547, - 280290, - 280470, - 280586, - 280452, - 280441, - 280693, - 280615, - 280348, - 148882, - 280241, - 280250, - 280506, - 280601, - 280376, - 280316, - 280297, - 280274, - 280577, - 280569, - 280532, - 280505, - 280763, - 280480, - 280609, - 280625, - 280562, - 280727, - 280402, - 280349, - 280730, - 280350, - 148866, - 280438, - 280473, - 280748, - 280387, - 280604, - 280548, - 280694, - 280323, - 280481, - 280738, - 280643, - 280251, - 280619, - 280762, - 280585, - 149152, - 280535, - 280504, - 280424, - 280351, - 148228, - 280326, - 280258, - 280665, - 149147, - 280352, - 280296, - 280724, - 280503, - 280718, - 148222, - 156016, - 149143, - 280761, - 280447, - 280353, - 280695, - 280571, - 280704, - 280500, - 280423, - 280311, - 280712, - 280375, - 280528, - 280584, - 280731, - 280499, - 280723, - 280634, - 280403, - 280295, - 280647, - 280354, - 280465, - 280760, - 280726, - 280422, - 280623, - 280733, - 280453, - 280662, - 280735, - 156019, - 280252, - 280355, - 280696, - 280656, - 280551, - 280404, - 280556, - 280272, - 280268, - 280498, - 280564, - 280374, - 148878, - 280628, - 280567, - 280495, - 280439, - 280749, - 280356, - 148859, - 280644, - 280759, - 280357, - 280253, - 280294, - 280697, - 280421, - 280552, - 280494, - 280673, - 280677, - 280561, - 280583, - 280597, - 148881, - 280440, - 280534, - 280373, - 149171, - 280312, - 280358, - 280758, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.252512+00:00', - }, - { - 'code': '7', - 'created_at': '2021-08-11T08:14:36.942235+00:00', - 'display_name': 'expense category', - 'id': 147873, - 'is_enabled': True, - 'name': 'expense category', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 148230, - 280387, - 280533, - 280458, - 280709, - 280286, - 280524, - 280616, - 280261, - 280412, - 280632, - 280649, - 280386, - 280325, - 280457, - 148884, - 280472, - 280287, - 280743, - 280473, - 280628, - 280385, - 148859, - 148868, - 280539, - 280708, - 280734, - 280574, - 280384, - 280527, - 280474, - 280744, - 280383, - 280608, - 290929, - 280475, - 280631, - 280531, - 280575, - 280683, - 148889, - 280661, - 280260, - 280382, - 280288, - 280558, - 280536, - 280707, - 280429, - 280745, - 280381, - 280648, - 280280, - 149162, - 280306, - 280476, - 280380, - 280477, - 280259, - 280716, - 280746, - 280379, - 280557, - 280706, - 280541, - 156028, - 280240, - 280289, - 280576, - 280378, - 280607, - 280309, - 280478, - 280456, - 280747, - 280413, - 280479, - 280705, - 280377, - 280324, - 148869, - 280318, - 280290, - 280414, - 280376, - 280577, - 280480, - 280241, - 280323, - 280748, - 280481, - 148866, - 280258, - 149143, - 280704, - 280375, - 280647, - 280733, - 280311, - 280662, - 280556, - 280528, - 280374, - 280268, - 280749, - 280677, - 280373, - 280257, - 280455, - 280372, - 156022, - 280482, - 280596, - 280617, - 280578, - 280652, - 280750, - 280483, - 280703, - 148872, - 280678, - 280555, - 280417, - 280371, - 280448, - 280673, - 280579, - 149174, - 156025, - 156004, - 254109, - 280484, - 280529, - 280752, - 280370, - 280702, - 280658, - 280369, - 280485, - 280646, - 280633, - 280317, - 280682, - 280486, - 280256, - 280753, - 280679, - 280701, - 280368, - 280568, - 280367, - 149145, - 280717, - 280487, - 280754, - 280321, - 280663, - 280680, - 280606, - 280255, - 280580, - 280366, - 280618, - 280627, - 280322, - 280418, - 149144, - 280488, - 280554, - 280630, - 280365, - 280700, - 148887, - 280430, - 280454, - 280755, - 290930, - 280364, - 280581, - 148862, - 149166, - 280363, - 280732, - 280489, - 280645, - 148223, - 280490, - 280553, - 280292, - 280756, - 280362, - 280699, - 280269, - 280254, - 280530, - 280361, - 280629, - 280293, - 156015, - 280636, - 280491, - 280757, - 280279, - 280492, - 280698, - 280360, - 280624, - 280307, - 280582, - 280605, - 280614, - 280493, - 280727, - 280597, - 280359, - 280671, - 280664, - 280758, - 280358, - 280655, - 149171, - 148881, - 280440, - 280312, - 280494, - 280552, - 280583, - 280697, - 280421, - 280294, - 280253, - 280357, - 280759, - 280644, - 280439, - 280356, - 280495, - 280567, - 148878, - 280498, - 280551, - 280696, - 280656, - 156019, - 280355, - 280252, - 280453, - 280760, - 280422, - 280354, - 280295, - 280723, - 280634, - 280731, - 280499, - 280726, - 280584, - 280500, - 280695, - 280423, - 280447, - 280353, - 280761, - 280352, - 280503, - 280718, - 280296, - 148222, - 280724, - 280351, - 149147, - 280665, - 148228, - 280424, - 280504, - 280585, - 280619, - 280251, - 280762, - 280643, - 280535, - 280694, - 280532, - 280350, - 280548, - 280438, - 280604, - 280730, - 280349, - 280562, - 280316, - 280505, - 280763, - 280297, - 280274, - 280506, - 280250, - 280348, - 280693, - 280452, - 280441, - 280586, - 280547, - 148882, - 148226, - 280298, - 280507, - 280347, - 280278, - 280508, - 280692, - 280598, - 149170, - 280346, - 280437, - 148885, - 280537, - 280451, - 149160, - 280587, - 280345, - 280314, - 280509, - 280603, - 149149, - 280642, - 280425, - 280344, - 280249, - 280299, - 280653, - 156010, - 280510, - 280691, - 280343, - 280666, - 280546, - 280342, - 280620, - 280626, - 280273, - 280566, - 280300, - 280248, - 280276, - 280315, - 155998, - 148873, - 280446, - 280511, - 280426, - 280669, - 280341, - 290932, - 280588, - 280270, - 280512, - 280690, - 280340, - 280719, - 155990, - 280339, - 280513, - 280545, - 280672, - 280591, - 148225, - 290931, - 280641, - 280338, - 280611, - 280622, - 280301, - 280689, - 280635, - 280313, - 280514, - 280725, - 156018, - 280247, - 280450, - 148876, - 280337, - 280515, - 280688, - 156002, - 280336, - 280275, - 280729, - 280667, - 280335, - 280613, - 280592, - 280310, - 280277, - 280516, - 280302, - 280246, - 280442, - 280563, - 148863, - 148867, - 280517, - 280544, - 280334, - 280687, - 280722, - 280333, - 280449, - 280593, - 280303, - 280518, - 280427, - 149150, - 280640, - 148224, - 155984, - 280519, - 280543, - 280686, - 280612, - 280600, - 280625, - 280332, - 280565, - 280602, - 280540, - 148877, - 280434, - 280520, - 280428, - 280331, - 280245, - 280330, - 156006, - 280304, - 280521, - 280685, - 280271, - 280329, - 280432, - 280594, - 280443, - 280668, - 280621, - 280328, - 280720, - 280242, - 280433, - 149154, - 155994, - 280637, - 280522, - 280327, - 280523, - 280684, - 156020, - 280714, - 280657, - 280409, - 280410, - 280595, - 280570, - 280681, - 280460, - 280659, - 280651, - 290928, - 280267, - 280282, - 280266, - 280736, - 280542, - 280408, - 280638, - 280272, - 280461, - 280407, - 280713, - 280459, - 280737, - 280639, - 280462, - 280283, - 280561, - 280735, - 280404, - 280465, - 280403, - 280712, - 280569, - 280326, - 280571, - 280534, - 156016, - 149152, - 280738, - 280402, - 280319, - 280609, - 280601, - 280615, - 280466, - 280265, - 280572, - 280739, - 155988, - 280284, - 280467, - 280711, - 280400, - 280599, - 280650, - 156011, - 280610, - 280399, - 280305, - 280468, - 280740, - 280411, - 280264, - 280285, - 280660, - 280398, - 280728, - 280469, - 280560, - 280396, - 280538, - 162016, - 280710, - 280281, - 280308, - 280721, - 280741, - 280395, - 280715, - 280623, - 280470, - 280573, - 280564, - 280471, - 280559, - 280394, - 156014, - 280742, - 148229, - 280670, - 279807, - 279897, - 280096, - 279816, - 280220, - 279901, - 279754, - 279760, - 280107, - 280405, - 155991, - 280388, - 279719, - 156023, - 280195, - 148231, - 280138, - 280088, - 279766, - 279858, - 279851, - 279958, - 280463, - 279964, - 280006, - 280146, - 280100, - 279899, - 280018, - 279762, - 279937, - 148870, - 279936, - 279774, - 280192, - 279871, - 149156, - 279843, - 279820, - 280044, - 280225, - 279841, - 279791, - 149164, - 279931, - 290069, - 279804, - 280184, - 280075, - 280051, - 279701, - 279868, - 280148, - 280211, - 280002, - 279825, - 280213, - 279801, - 279783, - 279885, - 280038, - 280420, - 280132, - 149175, - 280069, - 280083, - 279890, - 279798, - 279860, - 279952, - 279795, - 155997, - 279895, - 149148, - 280189, - 280139, - 280010, - 280160, - 280124, - 280239, - 279974, - 280127, - 280232, - 280097, - 279742, - 280019, - 149163, - 279832, - 280191, - 279900, - 279971, - 280129, - 279951, - 279809, - 280114, - 279789, - 149159, - 148871, - 279922, - 280224, - 279916, - 280392, - 279718, - 279730, - 280081, - 280111, - 279737, - 280320, - 279992, - 280674, - 279927, - 280037, - 279959, - 279999, - 280052, - 279703, - 280061, - 279778, - 280045, - 279969, - 280188, - 148864, - 149161, - 279892, - 280099, - 280103, - 279908, - 148227, - 279849, - 279902, - 280068, - 280199, - 280751, - 279750, - 279745, - 279944, - 279815, - 280502, - 280118, - 155992, - 280092, - 280140, - 279963, - 149168, - 279726, - 280012, - 279827, - 279932, - 280445, - 280110, - 279876, - 279991, - 280089, - 280080, - 149172, - 279748, - 280108, - 280183, - 280218, - 280197, - 280526, - 279854, - 280025, - 279844, - 279805, - 279702, - 280036, - 279867, - 279770, - 279977, - 149153, - 148880, - 280098, - 280131, - 279784, - 279878, - 280236, - 279993, - 279950, - 280156, - 279975, - 279831, - 280178, - 280141, - 279928, - 279830, - 280106, - 279819, - 280215, - 279846, - 280020, - 280173, - 279797, - 280194, - 279717, - 279896, - 279903, - 279759, - 279733, - 280444, - 279743, - 280227, - 280042, - 280067, - 279970, - 279887, - 280207, - 279711, - 279768, - 280159, - 149169, - 279863, - 280590, - 279773, - 279785, - 280076, - 291035, - 280126, - 279949, - 280062, - 280549, - 148874, - 279915, - 280113, - 280419, - 280046, - 280060, - 280228, - 279994, - 156001, - 155999, - 280163, - 156007, - 280121, - 279720, - 155993, - 280244, - 280053, - 279918, - 279965, - 156003, - 280217, - 279909, - 279757, - 279982, - 279814, - 280234, - 280406, - 280654, - 279881, - 279864, - 279888, - 280031, - 280021, - 279708, - 280167, - 279984, - 279776, - 279716, - 279739, - 280393, - 148860, - 280066, - 280233, - 279828, - 279835, - 279810, - 279802, - 280182, - 280151, - 148886, - 279921, - 280153, - 279734, - 280093, - 280142, - 148883, - 280204, - 279859, - 279850, - 280436, - 279756, - 279894, - 280209, - 279939, - 279800, - 279845, - 280205, - 279866, - 280048, - 279940, - 155985, - 279933, - 156013, - 279811, - 279786, - 280169, - 280158, - 279877, - 279948, - 279912, - 280109, - 279924, - 279998, - 280055, - 280022, - 155989, - 149146, - 280058, - 280171, - 279980, - 280095, - 279796, - 280104, - 280206, - 279960, - 279910, - 280077, - 280416, - 280030, - 279976, - 279990, - 149173, - 279812, - 149165, - 279847, - 279886, - 279855, - 280143, - 279706, - 156021, - 280065, - 279721, - 280152, - 280201, - 280033, - 279874, - 279839, - 280210, - 279947, - 279913, - 279793, - 279995, - 280057, - 280229, - 279790, - 279758, - 280102, - 280174, - 148865, - 280177, - 156012, - 279840, - 280200, - 280176, - 279705, - 280026, - 279740, - 280112, - 280011, - 280125, - 280149, - 280035, - 279862, - 280181, - 280101, - 280525, - 148875, - 279777, - 280003, - 279848, - 280175, - 280144, - 279753, - 280155, - 279755, - 279803, - 280090, - 280120, - 279996, - 280023, - 279792, - 279808, - 280147, - 279833, - 279775, - 279714, - 279891, - 279923, - 280221, - 280435, - 279710, - 279722, - 280198, - 149151, - 156008, - 280166, - 279787, - 156000, - 279934, - 280154, - 280085, - 149157, - 280179, - 279917, - 279979, - 279946, - 280079, - 279938, - 280208, - 148861, - 280064, - 280401, - 280415, - 279738, - 280056, - 280054, - 280235, - 279997, - 279834, - 280145, - 280094, - 279741, - 156026, - 279914, - 279749, - 279883, - 280043, - 279884, - 279925, - 279865, - 279731, - 279821, - 279987, - 279826, - 279911, - 280027, - 279842, - 280001, - 280005, - 280170, - 279986, - 279870, - 280226, - 279780, - 279838, - 280589, - 279767, - 279956, - 279813, - 279704, - 280041, - 280675, - 279856, - 279769, - 279935, - 280497, - 280231, - 279732, - 279941, - 279905, - 280034, - 279972, - 279713, - 279806, - 279920, - 280134, - 280015, - 280040, - 279942, - 279967, - 279724, - 279879, - 280073, - 280078, - 280431, - 279829, - 280262, - 280203, - 279817, - 280216, - 280087, - 280190, - 155987, - 279751, - 280243, - 279893, - 290067, - 280291, - 279747, - 156005, - 148858, - 280072, - 279727, - 280186, - 280212, - 279744, - 280390, - 279981, - 149155, - 279857, - 280008, - 280122, - 280059, - 280047, - 280222, - 279771, - 280032, - 279957, - 279943, - 155986, - 280024, - 280050, - 279761, - 279926, - 280082, - 280135, - 280039, - 279707, - 279852, - 279779, - 280202, - 280164, - 279873, - 280116, - 279715, - 279763, - 279712, - 279955, - 279889, - 279875, - 279765, - 279764, - 280014, - 279906, - 279929, - 155995, - 280196, - 280049, - 280084, - 280130, - 280136, - 279709, - 280162, - 279872, - 280187, - 280168, - 280219, - 280496, - 280016, - 279882, - 279746, - 279799, - 279723, - 279788, - 279880, - 279837, - 279961, - 279824, - 290084, - 280397, - 280071, - 149167, - 279898, - 279836, - 279985, - 279781, - 279945, - 279728, - 279853, - 280501, - 279954, - 279794, - 279822, - 279968, - 280676, - 155996, - 279729, - 279869, - 280028, - 280133, - 280237, - 279735, - 280029, - 279989, - 280185, - 280230, - 279818, - 156009, - 279973, - 280007, - 280128, - 280214, - 148888, - 280105, - 280165, - 156024, - 280157, - 290068, - 280137, - 279861, - 280063, - 290065, - 280074, - 280086, - 280464, - 279736, - 279930, - 280389, - 280017, - 156027, - 279752, - 280172, - 280550, - 280000, - 279772, - 279725, - 280150, - 279782, - 280119, - 279978, - 280391, - 280263, - 280193, - 148890, - 280009, - 280223, - 280180, - 279983, - 280004, - 279953, - 280013, - 280161, - 280070, - 279904, - 148879, - 280115, - 280123, - 279966, - 280091, - 279907, - 279962, - 149158, - 280238, - 280117, - 279823, - 246836, - 279988, - 279700, - 279919, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.252512+00:00', - }, - { - 'code': '217', - 'created_at': '2021-08-10T06:17:45.487347+00:00', - 'display_name': 'GST Paid', - 'id': 147708, - 'is_enabled': True, - 'name': 'GST Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280671, - 280609, - 280417, - 280312, - 280615, - 280446, - 280247, - 280563, - 280524, - 280499, - 280572, - 280673, - 148876, - 280326, - 280337, - 148884, - 280402, - 280582, - 156002, - 280652, - 280466, - 280607, - 280584, - 280403, - 280688, - 280667, - 254109, - 280733, - 280705, - 280336, - 280358, - 280310, - 280268, - 156016, - 280553, - 280542, - 149152, - 280335, - 280441, - 280738, - 280592, - 280684, - 280516, - 280434, - 280712, - 280290, - 280319, - 280599, - 280487, - 280571, - 280443, - 280583, - 280302, - 280414, - 280517, - 280561, - 280500, - 280595, - 148863, - 280533, - 280404, - 280327, - 280465, - 280456, - 280701, - 280368, - 280377, - 280726, - 280283, - 280246, - 280280, - 280716, - 280462, - 290930, - 280334, - 280687, - 280523, - 280605, - 280737, - 280277, - 280544, - 149154, - 280713, - 280333, - 280613, - 280407, - 148869, - 280432, - 280593, - 280631, - 280695, - 280303, - 280292, - 290929, - 280408, - 280757, - 280518, - 280461, - 280564, - 280540, - 280413, - 280657, - 148230, - 149150, - 280266, - 280479, - 280242, - 280437, - 280681, - 280519, - 280353, - 155984, - 280305, - 280761, - 280282, - 280756, - 280734, - 280747, - 280736, - 280522, - 280651, - 280640, - 290928, - 280578, - 280457, - 280490, - 280686, - 155994, - 280503, - 280610, - 156015, - 280458, - 280659, - 280332, - 280543, - 280328, - 280296, - 280602, - 148877, - 280412, - 280309, - 280728, - 280409, - 280520, - 280714, - 280367, - 280621, - 280665, - 280570, - 280378, - 280668, - 280410, - 280555, - 280429, - 280331, - 280460, - 280245, - 280363, - 156020, - 280281, - 280272, - 280330, - 156006, - 280267, - 280478, - 280715, - 280569, - 280459, - 280270, - 280638, - 280329, - 280663, - 280735, - 280304, - 280594, - 280314, - 280521, - 280489, - 280535, - 280685, - 280257, - 155988, - 280411, - 280352, - 280585, - 280450, - 280557, - 280723, - 280754, - 149147, - 280491, - 280360, - 280289, - 280601, - 280699, - 280484, - 280706, - 280625, - 280294, - 280664, - 280379, - 280485, - 280311, - 280580, - 148228, - 280504, - 280373, - 280273, - 280259, - 280364, - 280746, - 290932, - 149166, - 148223, - 280351, - 280619, - 280762, - 149149, - 280451, - 280680, - 280380, - 280617, - 280477, - 280488, - 280581, - 280648, - 280251, - 280697, - 149162, - 280370, - 280755, - 280703, - 280476, - 280643, - 280606, - 280694, - 280365, - 280493, - 280548, - 148887, - 280677, - 280576, - 280449, - 148866, - 280350, - 280505, - 280316, - 280255, - 280381, - 148222, - 280763, - 280700, - 280558, - 280253, - 280702, - 280618, - 280707, - 280482, - 280745, - 280729, - 280297, - 280630, - 280506, - 280366, - 280357, - 280382, - 280554, - 280759, - 280241, - 280604, - 280250, - 280447, - 280698, - 280288, - 290931, - 280349, - 280278, - 280317, - 280670, - 280260, - 280724, - 148889, - 280725, - 280552, - 280348, - 280439, - 280369, - 280575, - 280693, - 280586, - 280612, - 148226, - 280749, - 280383, - 280425, - 280608, - 280293, - 280678, - 280475, - 280492, - 280653, - 280547, - 280661, - 280427, - 280298, - 280644, - 280656, - 280507, - 280440, - 280495, - 156028, - 280744, - 280359, - 156022, - 280452, - 280647, - 280347, - 280508, - 280752, - 280384, - 280758, - 280474, - 280276, - 148882, - 280361, - 280692, - 149170, - 280598, - 280708, - 280636, - 280374, - 148868, - 280346, - 280730, - 148885, - 149160, - 280275, - 280385, - 280556, - 280534, - 280587, - 148867, - 280628, - 280371, - 280597, - 280254, - 280473, - 280530, - 280727, - 280743, - 280614, - 280509, - 280562, - 280486, - 280666, - 280321, - 280662, - 280566, - 280494, - 280287, - 280424, - 280345, - 280510, - 280472, - 280356, - 280442, - 280386, - 280295, - 148862, - 280322, - 280620, - 280637, - 280344, - 280642, - 280721, - 280649, - 149144, - 280718, - 156010, - 280299, - 280720, - 280709, - 280426, - 280423, - 156019, - 280387, - 280498, - 280669, - 280307, - 280261, - 280375, - 149145, - 280731, - 280372, - 280632, - 280719, - 280249, - 280704, - 280616, - 280682, - 280603, - 280672, - 280646, - 280529, - 280286, - 280622, - 280453, - 280362, - 280691, - 280422, - 280559, - 280574, - 280343, - 148872, - 148229, - 280428, - 280596, - 149143, - 280742, - 280511, - 280323, - 280342, - 155998, - 156004, - 280394, - 280567, - 280539, - 280611, - 148878, - 280471, - 280240, - 280300, - 280624, - 280454, - 280537, - 280395, - 280258, - 280528, - 280324, - 149171, - 280470, - 280633, - 280626, - 280753, - 280573, - 280248, - 280588, - 280696, - 280541, - 148873, - 280722, - 280710, - 280279, - 280645, - 280741, - 280313, - 162016, - 280481, - 280483, - 280318, - 280546, - 280421, - 280448, - 280683, - 280341, - 280512, - 280271, - 280396, - 280306, - 280560, - 280748, - 280536, - 280732, - 280256, - 148881, - 280690, - 280274, - 280398, - 280269, - 280308, - 280469, - 280355, - 280340, - 155990, - 280760, - 280527, - 280264, - 280658, - 280565, - 280285, - 148859, - 280591, - 280532, - 280623, - 280660, - 280513, - 280627, - 280740, - 280418, - 280325, - 280252, - 280339, - 280438, - 280679, - 280399, - 280376, - 280600, - 148225, - 280538, - 280468, - 280568, - 280650, - 280545, - 280480, - 280717, - 280750, - 280641, - 280301, - 280400, - 280551, - 156014, - 280315, - 280514, - 280711, - 280639, - 280579, - 280467, - 156011, - 280455, - 280284, - 280635, - 156025, - 280689, - 149174, - 156018, - 280430, - 280577, - 280739, - 280515, - 280433, - 148224, - 280265, - 280354, - 280629, - 280655, - 280338, - 280634, - 280531, - 280496, - 279925, - 280262, - 280166, - 279802, - 279856, - 279922, - 279926, - 279805, - 280388, - 280165, - 280170, - 279927, - 279921, - 280244, - 279801, - 280164, - 280389, - 279928, - 279800, - 280163, - 280171, - 279806, - 279920, - 280390, - 280243, - 279929, - 280162, - 279799, - 279930, - 280391, - 280172, - 280161, - 279807, - 279919, - 279931, - 279798, - 280160, - 280392, - 279932, - 280173, - 279797, - 280227, - 280159, - 280042, - 279918, - 280393, - 279933, - 279808, - 280158, - 279796, - 280174, - 279934, - 279917, - 280226, - 280397, - 280157, - 279936, - 280156, - 279795, - 280175, - 280401, - 279809, - 279916, - 279937, - 280225, - 280155, - 279794, - 280405, - 279938, - 280176, - 280154, - 279793, - 279939, - 279810, - 279915, - 280406, - 280153, - 279940, - 280152, - 280177, - 280221, - 279792, - 280415, - 279914, - 279941, - 280150, - 279791, - 280416, - 280178, - 279811, - 279913, - 156026, - 280220, - 280149, - 279942, - 280419, - 280148, - 279855, - 279943, - 279790, - 280179, - 279944, - 279812, - 279912, - 280147, - 280151, - 279789, - 280420, - 280146, - 279945, - 280180, - 279788, - 280431, - 279813, - 279911, - 280145, - 279946, - 280435, - 280144, - 280181, - 280125, - 279947, - 279787, - 280143, - 279910, - 279948, - 279786, - 280436, - 280182, - 279814, - 280142, - 279909, - 280121, - 279949, - 279785, - 280444, - 280141, - 279950, - 280183, - 280445, - 279815, - 279908, - 280140, - 280037, - 279951, - 279784, - 280139, - 279952, - 280184, - 279783, - 280463, - 290065, - 280138, - 279816, - 279907, - 279953, - 279782, - 280464, - 280137, - 156001, - 280185, - 280029, - 279954, - 280136, - 279906, - 279955, - 279781, - 280135, - 280186, - 279817, - 279905, - 279935, - 279956, - 279780, - 280497, - 280134, - 279957, - 279779, - 280187, - 280501, - 279818, - 279904, - 279901, - 280133, - 279958, - 280502, - 280132, - 279959, - 280188, - 279778, - 280239, - 280131, - 279819, - 279903, - 279960, - 279777, - 280525, - 280130, - 280189, - 279961, - 279879, - 279776, - 280526, - 279902, - 280129, - 279962, - 280549, - 280128, - 280190, - 279820, - 279900, - 279876, - 279963, - 279772, - 280127, - 279964, - 280550, - 280191, - 279771, - 280126, - 279821, - 279899, - 279965, - 291035, - 279770, - 279853, - 280124, - 280192, - 279775, - 279966, - 280123, - 279822, - 279898, - 279967, - 280589, - 279767, - 280122, - 280193, - 279968, - 279774, - 280590, - 279766, - 280120, - 279897, - 279969, - 280654, - 280119, - 280194, - 279823, - 279896, - 279773, - 279765, - 279970, - 280118, - 280674, - 279971, - 279762, - 280047, - 280195, - 280117, - 279824, - 280291, - 280675, - 279972, - 279761, - 280116, - 280676, - 280196, - 279769, - 279973, - 280115, - 279760, - 279825, - 279895, - 279974, - 280114, - 280751, - 280197, - 279975, - 279768, - 279759, - 280113, - 279894, - 155985, - 279976, - 279758, - 280112, - 280198, - 279826, - 279893, - 279764, - 149148, - 279977, - 280111, - 279756, - 279978, - 280199, - 280110, - 156023, - 279979, - 279827, - 279892, - 279755, - 280109, - 156007, - 279980, - 280200, - 279763, - 280108, - 279754, - 149164, - 279828, - 279891, - 280107, - 279981, - 279753, - 280201, - 279982, - 279757, - 280106, - 149163, - 279890, - 279983, - 279752, - 280105, - 156005, - 280202, - 279829, - 279889, - 279744, - 279984, - 280104, - 279751, - 149175, - 280103, - 280203, - 279985, - 279750, - 279986, - 279852, - 279830, - 279888, - 280102, - 148861, - 279987, - 279749, - 280044, - 280204, - 279742, - 280101, - 155991, - 279831, - 279887, - 280100, - 279988, - 279748, - 148875, - 280205, - 280099, - 279741, - 279989, - 279747, - 279886, - 280098, - 279990, - 156000, - 280206, - 279991, - 280097, - 279832, - 279885, - 279730, - 279746, - 149158, - 280096, - 279992, - 280207, - 279745, - 148886, - 280095, - 279833, - 279884, - 279993, - 279743, - 280094, - 279994, - 280208, - 279722, - 155999, - 279995, - 280093, - 279834, - 279883, - 279740, - 148865, - 280092, - 148858, - 280209, - 279996, - 279721, - 279739, - 148231, - 280091, - 279882, - 279997, - 279738, - 280090, - 280210, - 279998, - 279835, - 279720, - 279881, - 148880, - 280089, - 279999, - 279737, - 280211, - 148870, - 280088, - 280000, - 279836, - 279880, - 279736, - 149155, - 280087, - 280001, - 280212, - 279715, - 279735, - 280086, - 280002, - 149169, - 279837, - 279878, - 280085, - 280003, - 280213, - 279734, - 279713, - 148860, - 280084, - 280004, - 279877, - 279733, - 155992, - 280083, - 280214, - 280005, - 279732, - 279838, - 279704, - 279875, - 280082, - 280006, - 149159, - 280081, - 280215, - 280007, - 280238, - 279731, - 149172, - 279839, - 279874, - 280080, - 280008, - 279729, - 280216, - 279703, - 149153, - 280079, - 280009, - 279728, - 280078, - 279840, - 279873, - 155996, - 280010, - 280217, - 156013, - 280077, - 149151, - 280011, - 279727, - 279872, - 148874, - 280076, - 280012, - 280218, - 279726, - 148871, - 279841, - 155997, - 279871, - 280075, - 280013, - 280074, - 280219, - 280014, - 279725, - 155987, - 280073, - 279842, - 279870, - 280015, - 290067, - 279724, - 280222, - 155986, - 280072, - 280016, - 290068, - 279723, - 280071, - 279843, - 279869, - 280017, - 280223, - 280070, - 246836, - 290069, - 280018, - 279719, - 279868, - 280069, - 280019, - 280224, - 279718, - 149161, - 280068, - 149168, - 279844, - 279867, - 280020, - 279717, - 280067, - 280228, - 156003, - 280021, - 280066, - 279845, - 279866, - 280022, - 279716, - 149173, - 280043, - 280229, - 280065, - 156012, - 280023, - 279714, - 279857, - 149157, - 280064, - 279865, - 280024, - 279712, - 280230, - 280063, - 149156, - 148864, - 280025, - 279846, - 280062, - 279864, - 280026, - 279711, - 280231, - 148888, - 280061, - 280027, - 156027, - 279847, - 279863, - 148883, - 279710, - 280060, - 280232, - 280028, - 280059, - 279709, - 156008, - 279848, - 279862, - 280030, - 280058, - 280233, - 155993, - 280031, - 149165, - 279708, - 280057, - 280032, - 279861, - 149146, - 279707, - 280234, - 280056, - 148879, - 280033, - 280055, - 279849, - 279706, - 279860, - 149167, - 280034, - 280235, - 280054, - 280035, - 155989, - 156021, - 280046, - 279850, - 279859, - 279705, - 280053, - 280036, - 280236, - 148227, - 279702, - 280052, - 280038, - 279851, - 279858, - 280051, - 279701, - 280237, - 155995, - 290084, - 280039, - 280050, - 280040, - 156024, - 279700, - 280049, - 279854, - 280041, - 156009, - 280048, - 148890, - 280045, - 280168, - 279804, - 279923, - 280263, - 279924, - 279803, - 280167, - 280320, - 280169, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.315817+00:00', - }, - { - 'code': '219', - 'created_at': '2021-08-10T06:17:45.487347+00:00', - 'display_name': 'LCT Paid', - 'id': 147709, - 'is_enabled': True, - 'name': 'LCT Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 279926, - 279899, - 279980, - 280140, - 280674, - 155999, - 149169, - 279908, - 279999, - 280045, - 280114, - 280549, - 280031, - 280751, - 280039, - 279915, - 280406, - 279800, - 279991, - 155993, - 280188, - 279887, - 148871, - 149161, - 279804, - 156007, - 279971, - 280068, - 280109, - 279922, - 279995, - 280197, - 279733, - 280233, - 279815, - 280202, - 280153, - 279940, - 280205, - 280089, - 280119, - 280093, - 149168, - 280389, - 280445, - 279844, - 280194, - 279975, - 280058, - 156005, - 279867, - 280183, - 279747, - 279755, - 280105, - 280204, - 279969, - 148880, - 279950, - 280030, - 280141, - 280162, - 280152, - 280177, - 290084, - 280020, - 279856, - 279862, - 279775, - 279717, - 279959, - 156000, - 279881, - 279965, - 279848, - 280167, - 280067, - 280132, - 156008, - 279731, - 279924, - 279746, - 280221, - 280444, - 279923, - 279834, - 279841, - 279785, - 155997, - 279792, - 280415, - 280008, - 280100, - 279768, - 279709, - 279749, - 155995, - 279914, - 279759, - 279949, - 280502, - 279883, - 279941, - 279962, - 280228, - 279886, - 280121, - 280059, - 280237, - 280103, - 280002, - 279720, - 279909, - 279734, - 280028, - 279892, - 148858, - 156003, - 279799, - 280150, - 279752, - 280021, - 280004, - 279740, - 279814, - 279871, - 280066, - 280102, - 280182, - 280239, - 279791, - 279835, - 279930, - 280232, - 280416, - 280007, - 280142, - 280178, - 280041, - 280113, - 280060, - 280391, - 280127, - 280436, - 280172, - 279827, - 279786, - 280129, - 279979, - 279811, - 279762, - 279845, - 148865, - 280195, - 280206, - 279894, - 155985, - 279958, - 148883, - 279710, - 279701, - 279852, - 279866, - 291035, - 279913, - 279863, - 280133, - 280022, - 279998, - 149158, - 279716, - 279948, - 279876, - 280092, - 279847, - 279976, - 280075, - 280220, - 156026, - 279910, - 280010, - 149173, - 279901, - 156023, - 280110, - 279902, - 280143, - 280161, - 280149, - 279807, - 279942, - 279806, - 280065, - 148875, - 279787, - 280213, - 280199, - 156027, - 280051, - 280229, - 280104, - 279897, - 280210, - 280027, - 280209, - 279904, - 279947, - 280013, - 280125, - 279858, - 279790, - 279855, - 280419, - 280590, - 279758, - 280061, - 280086, - 156012, - 280043, - 279725, - 280148, - 279943, - 280550, - 279744, - 280112, - 279989, - 148888, - 280198, - 279996, - 280074, - 280181, - 280090, - 279984, - 279774, - 280231, - 280144, - 280096, - 280179, - 279851, - 280023, - 279944, - 280117, - 279711, - 280654, - 279714, - 280435, - 280168, - 280026, - 279802, - 149157, - 279812, - 279735, - 279738, - 280064, - 155996, - 148861, - 279946, - 279983, - 279721, - 280145, - 279919, - 279911, - 279890, - 279978, - 279756, - 279900, - 280203, - 279997, - 279912, - 279826, - 279818, - 280147, - 279864, - 279824, - 279988, - 280062, - 279931, - 279865, - 280215, - 279813, - 279889, - 279739, - 280501, - 279857, - 280526, - 279846, - 280431, - 280038, - 279788, - 280388, - 280025, - 279987, - 279893, - 280111, - 155992, - 280024, - 279798, - 280151, - 280219, - 279712, - 279803, - 280191, - 148864, - 279882, - 280160, - 279977, - 280392, - 279789, - 280420, - 279776, - 280230, - 148231, - 280217, - 279764, - 149148, - 149156, - 280014, - 279921, - 280091, - 279992, - 280146, - 279945, - 279823, - 279748, - 280063, - 280180, - 279715, - 279750, - 279932, - 279703, - 280187, - 280052, - 279770, - 279779, - 279702, - 280081, - 279957, - 280134, - 280009, - 148227, - 280173, - 155987, - 279854, - 149163, - 156013, - 280164, - 280106, - 280080, - 280212, - 279986, - 280291, - 280073, - 149159, - 280236, - 280077, - 280036, - 280207, - 279879, - 280497, - 280098, - 279780, - 280124, - 279797, - 279805, - 280192, - 280227, - 279842, - 279700, - 279830, - 280001, - 280003, - 279745, - 279985, - 280159, - 279801, - 279757, - 279728, - 280675, - 156009, - 280053, - 280083, - 279870, - 279956, - 279713, - 279918, - 280042, - 280393, - 279964, - 149151, - 279705, - 279966, - 279935, - 279972, - 279933, - 279771, - 280097, - 279961, - 279982, - 279853, - 279905, - 148886, - 280006, - 280015, - 149175, - 290067, - 280320, - 279859, - 279874, - 280087, - 279724, - 280189, - 279850, - 280262, - 279817, - 280163, - 280158, - 280186, - 279968, - 280078, - 280135, - 280130, - 280095, - 280011, - 156021, - 279820, - 280222, - 149155, - 280123, - 155989, - 279796, - 279990, - 155986, - 279822, - 280201, - 279963, - 279753, - 279896, - 279781, - 279727, - 280174, - 280170, - 279761, - 280072, - 280214, - 280035, - 279808, - 279885, - 148890, - 279833, - 280525, - 280169, - 279955, - 280116, - 279934, - 279925, - 280676, - 280054, - 280048, - 280196, - 280046, - 279906, - 280082, - 280235, - 279736, - 279840, - 279917, - 279777, - 280136, - 280085, - 279884, - 280263, - 279769, - 279875, - 280016, - 279729, - 280034, - 279877, - 280226, - 280397, - 280193, - 279872, - 279880, - 280122, - 279981, - 290068, - 280107, - 280171, - 279723, - 280084, - 280496, - 148874, - 149167, - 280071, - 280076, - 280157, - 279936, - 279773, - 279836, - 279860, - 279839, - 279954, - 280029, - 279898, - 279891, - 279706, - 279993, - 279967, - 279973, - 155991, - 280049, - 279869, - 280185, - 280047, - 279849, - 280137, - 280101, - 280589, - 280156, - 279795, - 280175, - 279767, - 280017, - 280055, - 280216, - 280464, - 279970, - 279743, - 280126, - 279821, - 279782, - 279741, - 280223, - 280000, - 279960, - 280033, - 280401, - 149153, - 279953, - 279809, - 280005, - 148879, - 279766, - 156001, - 280070, - 279907, - 279903, - 279742, - 279730, - 280094, - 279704, - 279916, - 279937, - 148860, - 280115, - 280056, - 279819, - 246836, - 279816, - 279760, - 280238, - 279828, - 280131, - 279825, - 279751, - 280138, - 279873, - 149164, - 279838, - 280225, - 280108, - 280165, - 280088, - 279732, - 290069, - 280120, - 280234, - 279707, - 279994, - 279878, - 280018, - 279719, - 279832, - 280463, - 279831, - 280190, - 149146, - 148870, - 156024, - 280155, - 279843, - 280012, - 279794, - 279754, - 280128, - 279783, - 279868, - 280405, - 280040, - 280211, - 279861, - 280218, - 279927, - 279938, - 279763, - 279772, - 280208, - 279928, - 280184, - 279888, - 280069, - 279952, - 279837, - 280032, - 280139, - 279895, - 149172, - 280154, - 280176, - 279829, - 279974, - 280044, - 290065, - 279920, - 279722, - 280244, - 280390, - 279784, - 280099, - 279765, - 280057, - 279726, - 280019, - 279951, - 279778, - 279793, - 280079, - 280037, - 280243, - 279737, - 280200, - 279939, - 280166, - 279708, - 279929, - 280224, - 280118, - 149165, - 279810, - 280050, - 279718, - 280574, - 280527, - 280609, - 280634, - 280288, - 280582, - 280537, - 280615, - 148872, - 280349, - 280247, - 280535, - 280524, - 280343, - 280315, - 280441, - 280572, - 280278, - 280340, - 148876, - 280260, - 254109, - 280369, - 280499, - 280337, - 280451, - 280531, - 280596, - 280552, - 280402, - 148889, - 280652, - 280756, - 280433, - 148229, - 280563, - 280466, - 280600, - 148884, - 156002, - 280348, - 280326, - 280607, - 280688, - 280739, - 280693, - 280403, - 280584, - 280314, - 280539, - 280439, - 280667, - 280310, - 156022, - 280358, - 155990, - 280575, - 280336, - 280733, - 280641, - 280705, - 280725, - 280268, - 280742, - 156025, - 280586, - 156016, - 280678, - 280428, - 280553, - 149152, - 280425, - 280655, - 280542, - 280438, - 280335, - 280749, - 280565, - 280738, - 280511, - 280434, - 280515, - 280592, - 280290, - 280383, - 148226, - 280516, - 149143, - 280342, - 280712, - 280608, - 280684, - 280264, - 280612, - 280624, - 280571, - 280760, - 280661, - 280656, - 280414, - 280540, - 280302, - 280701, - 280475, - 155998, - 280443, - 148859, - 280595, - 280359, - 280465, - 280517, - 280500, - 280653, - 280726, - 156028, - 280644, - 280301, - 280404, - 280757, - 280547, - 280319, - 280394, - 280276, - 148863, - 280274, - 280456, - 280368, - 280561, - 280605, - 280716, - 280246, - 280327, - 280599, - 149174, - 280371, - 280298, - 280377, - 280283, - 280658, - 280583, - 280567, - 148878, - 280490, - 280544, - 280280, - 280462, - 280695, - 280507, - 280687, - 280645, - 280323, - 280292, - 280334, - 280474, - 156004, - 280277, - 280523, - 280440, - 280495, - 280737, - 280744, - 280471, - 280427, - 280285, - 148869, - 280333, - 280635, - 149149, - 280300, - 280347, - 280407, - 280400, - 280551, - 280508, - 280713, - 280437, - 280647, - 280631, - 280593, - 280534, - 290929, - 280528, - 280303, - 280384, - 280611, - 149154, - 280452, - 280408, - 280321, - 280681, - 280626, - 280518, - 280413, - 280353, - 280461, - 280591, - 148882, - 156014, - 280395, - 280692, - 280522, - 280698, - 280564, - 148230, - 280312, - 280636, - 149150, - 280479, - 280566, - 280266, - 149170, - 280660, - 280432, - 280242, - 148224, - 280480, - 280519, - 280598, - 280305, - 280258, - 280470, - 280346, - 280282, - 280622, - 280455, - 155984, - 280578, - 280657, - 148868, - 280747, - 280374, - 280736, - 280562, - 280734, - 280686, - 280513, - 280240, - 280640, - 280708, - 280651, - 280761, - 290930, - 280758, - 280418, - 290928, - 149171, - 148885, - 280457, - 280361, - 280730, - 155994, - 156019, - 280629, - 280503, - 149160, - 280610, - 280248, - 280324, - 280332, - 280659, - 280385, - 280728, - 280696, - 280367, - 280543, - 280573, - 280740, - 280722, - 280602, - 280275, - 156011, - 280412, - 148877, - 280296, - 280628, - 280556, - 280597, - 280587, - 280409, - 156015, - 280328, - 280271, - 280613, - 280588, - 280714, - 280252, - 280621, - 280473, - 280623, - 149144, - 280570, - 280254, - 280429, - 280520, - 280530, - 280458, - 280668, - 280309, - 280541, - 280378, - 280331, - 280671, - 280753, - 280410, - 280752, - 280743, - 148873, - 280460, - 280711, - 280494, - 280245, - 280662, - 280614, - 280665, - 280627, - 156020, - 280363, - 280509, - 280272, - 280719, - 280281, - 280555, - 280330, - 280339, - 280727, - 156006, - 280478, - 280630, - 280417, - 280267, - 280345, - 280715, - 280279, - 280666, - 280450, - 280459, - 280639, - 280741, - 280569, - 280472, - 280325, - 280424, - 280735, - 280710, - 280329, - 280594, - 280287, - 280304, - 280489, - 280532, - 280454, - 156018, - 280521, - 280483, - 280510, - 280356, - 280638, - 280481, - 280685, - 148862, - 280467, - 280411, - 280352, - 155988, - 280642, - 162016, - 280585, - 280399, - 280386, - 280557, - 280257, - 280269, - 280491, - 280577, - 280265, - 149147, - 280442, - 280754, - 280322, - 280289, - 280421, - 280546, - 280718, - 280295, - 280344, - 280706, - 280311, - 280672, - 280313, - 280576, - 280294, - 280487, - 280663, - 149166, - 280514, - 148228, - 280273, - 148225, - 280379, - 280649, - 280673, - 280376, - 280256, - 148867, - 280580, - 280341, - 156010, - 280504, - 280270, - 280601, - 280338, - 280750, - 280259, - 280373, - 280512, - 280364, - 280664, - 280485, - 148223, - 280317, - 280746, - 280299, - 280426, - 280447, - 280637, - 280370, - 280351, - 148866, - 280720, - 280670, - 280423, - 280762, - 290932, - 280620, - 280486, - 280619, - 280617, - 280683, - 280669, - 280380, - 280306, - 280680, - 280581, - 280477, - 280468, - 280484, - 280387, - 280354, - 280360, - 280251, - 280396, - 280533, - 280748, - 148222, - 280697, - 280755, - 280538, - 280261, - 149162, - 280308, - 280255, - 280446, - 149145, - 280606, - 280721, - 280476, - 280375, - 280449, - 280703, - 280694, - 280643, - 280616, - 280625, - 280648, - 280699, - 280560, - 280731, - 280679, - 280632, - 280548, - 280448, - 280677, - 280545, - 280498, - 280249, - 280689, - 280316, - 148887, - 280702, - 280350, - 280536, - 280469, - 280650, - 280682, - 280704, - 280723, - 280603, - 280381, - 280253, - 280690, - 280709, - 280372, - 280318, - 280558, - 280646, - 280241, - 280763, - 280529, - 280293, - 280568, - 280505, - 280729, - 280732, - 280707, - 280493, - 280618, - 280482, - 280488, - 280633, - 280745, - 280286, - 280430, - 280700, - 280398, - 280297, - 148881, - 280366, - 280453, - 280506, - 280357, - 280422, - 280717, - 280691, - 280382, - 280492, - 280365, - 280554, - 280579, - 280284, - 280250, - 280355, - 280724, - 280604, - 280559, - 280362, - 280759, - 280307, - 290931, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.315817+00:00', - }, - { - 'code': '221', - 'created_at': '2021-08-10T06:17:45.487347+00:00', - 'display_name': 'WET Paid', - 'id': 147710, - 'is_enabled': True, - 'name': 'WET Paid', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280634, - 280582, - 280371, - 280633, - 280493, - 280605, - 280555, - 280664, - 149149, - 280703, - 280359, - 280678, - 280758, - 280372, - 280483, - 280750, - 280426, - 148881, - 280536, - 280358, - 148867, - 280583, - 280578, - 148222, - 280494, - 280552, - 280257, - 280294, - 280373, - 280617, - 280270, - 280697, - 280253, - 280482, - 280677, - 280357, - 280624, - 280759, - 280749, - 156019, - 280644, - 290931, - 280566, - 280647, - 280495, - 280374, - 280556, - 280662, - 280356, - 280433, - 280295, - 280375, - 280704, - 280498, - 148878, - 149143, - 280696, - 280258, - 280481, - 280611, - 280748, - 280252, - 280355, - 280760, - 280480, - 280376, - 280437, - 280551, - 280354, - 280318, - 280577, - 280499, - 280563, - 280705, - 280290, - 280584, - 280500, - 280695, - 280377, - 148869, - 280353, - 280479, - 280747, - 280761, - 280503, - 280296, - 280450, - 280378, - 280607, - 280478, - 280665, - 280352, - 280557, - 280585, - 280311, - 280289, - 149147, - 280273, - 280576, - 280706, - 148228, - 280379, - 280504, - 148866, - 280259, - 280477, - 280625, - 280746, - 280351, - 280762, - 280619, - 280380, - 290932, - 280251, - 280694, - 280449, - 149162, - 280241, - 280476, - 280643, - 280533, - 280648, - 280548, - 280316, - 280604, - 280350, - 280381, - 280558, - 280763, - 280729, - 280707, - 280505, - 280745, - 280297, - 280506, - 280276, - 280382, - 280250, - 280349, - 280288, - 280693, - 280260, - 148889, - 280348, - 280575, - 280586, - 280547, - 280725, - 280608, - 156028, - 280661, - 280475, - 280307, - 280383, - 148226, - 280298, - 280474, - 280744, - 280507, - 280347, - 280508, - 280427, - 280384, - 280692, - 149170, - 280346, - 148868, - 280708, - 148885, - 280598, - 280385, - 280628, - 280587, - 280473, - 280275, - 280743, - 149160, - 280509, - 280345, - 280472, - 280666, - 280287, - 280510, - 280642, - 280386, - 280344, - 280649, - 280299, - 280620, - 280720, - 280387, - 280670, - 280261, - 280616, - 280632, - 280442, - 280249, - 280637, - 280603, - 280709, - 156010, - 280539, - 280286, - 280691, - 280574, - 280343, - 280559, - 148229, - 280742, - 280342, - 280428, - 280394, - 155998, - 280511, - 280532, - 280471, - 280300, - 280626, - 280395, - 280470, - 280722, - 280248, - 280573, - 280588, - 148873, - 280741, - 280546, - 156022, - 162016, - 280308, - 280710, - 280341, - 280512, - 280396, - 280560, - 280469, - 280690, - 280313, - 280398, - 280565, - 280340, - 155990, - 280264, - 280660, - 280285, - 280655, - 148224, - 280740, - 280513, - 280339, - 280591, - 280271, - 280399, - 148225, - 280468, - 280545, - 280650, - 280315, - 280641, - 156011, - 280400, - 280301, - 280711, - 280467, - 280689, - 280284, - 280635, - 280514, - 156018, - 280739, - 280338, - 280265, - 280515, - 280609, - 280247, - 280615, - 148876, - 280572, - 280337, - 280402, - 280688, - 280466, - 156002, - 280310, - 148884, - 280403, - 280336, - 149152, - 280623, - 280667, - 156016, - 280434, - 280335, - 280738, - 280592, - 280712, - 280571, - 280516, - 280302, - 280465, - 280517, - 280443, - 280404, - 148863, - 280246, - 280561, - 280462, - 280319, - 280283, - 280277, - 280544, - 280687, - 280334, - 280737, - 280333, - 280407, - 280713, - 280593, - 280303, - 280408, - 280461, - 280518, - 148230, - 280673, - 149150, - 280266, - 280519, - 280282, - 280564, - 155984, - 280686, - 280736, - 280640, - 280651, - 290928, - 280659, - 280332, - 280728, - 280610, - 280543, - 280602, - 148877, - 280409, - 280714, - 280460, - 280570, - 280520, - 280331, - 280410, - 280245, - 280309, - 280272, - 156020, - 280330, - 156006, - 280267, - 280459, - 280630, - 280735, - 280304, - 280521, - 280671, - 280685, - 280411, - 155988, - 290930, - 280329, - 280594, - 280638, - 280569, - 280613, - 280715, - 280458, - 280281, - 280668, - 280621, - 280328, - 280429, - 280412, - 155994, - 280457, - 280657, - 280734, - 280305, - 280242, - 280413, - 280599, - 149154, - 290929, - 280681, - 280631, - 280522, - 280523, - 280280, - 280327, - 280716, - 280456, - 280595, - 280240, - 280414, - 280684, - 280542, - 280726, - 280268, - 280531, - 280733, - 280672, - 280601, - 280326, - 280652, - 280455, - 254109, - 280524, - 280417, - 280629, - 280600, - 280639, - 156025, - 280430, - 156014, - 280717, - 280658, - 280538, - 280568, - 280325, - 280446, - 280418, - 148859, - 280534, - 280527, - 280448, - 280683, - 280732, - 280306, - 280541, - 280421, - 280269, - 280454, - 280279, - 280324, - 149171, - 280528, - 280323, - 280567, - 280596, - 280721, - 280422, - 148872, - 280453, - 280314, - 280529, - 280682, - 280731, - 149145, - 280322, - 280447, - 280423, - 280718, - 280669, - 280727, - 280424, - 148862, - 280614, - 280530, - 280730, - 280597, - 148882, - 280562, - 280636, - 280452, - 280440, - 280612, - 280653, - 280656, - 280425, - 280439, - 280723, - 280451, - 280321, - 280278, - 280554, - 280488, - 280365, - 280700, - 280724, - 280366, - 280618, - 148887, - 280606, - 280255, - 280755, - 280581, - 280680, - 280364, - 280580, - 149166, - 280663, - 280487, - 280754, - 280489, - 148223, - 280363, - 280622, - 280367, - 280292, - 280490, - 280368, - 280553, - 280438, - 280701, - 280756, - 280627, - 280679, - 280312, - 280645, - 280256, - 280753, - 280699, - 280362, - 280432, - 280646, - 280486, - 280254, - 280361, - 280535, - 280719, - 280369, - 280702, - 280293, - 149144, - 280370, - 280485, - 280274, - 156015, - 280317, - 280540, - 280757, - 149174, - 156004, - 280752, - 280537, - 280491, - 280492, - 280698, - 280484, - 280579, - 280441, - 280360, - 280496, - 280127, - 280163, - 280654, - 279969, - 279853, - 279897, - 279964, - 279729, - 280120, - 280008, - 280004, - 279885, - 280550, - 280191, - 280080, - 279771, - 279874, - 279839, - 279877, - 280126, - 279821, - 279766, - 280171, - 149172, - 279899, - 279733, - 279775, - 279731, - 280007, - 279965, - 291035, - 280590, - 280215, - 279774, - 279806, - 155992, - 279770, - 280081, - 149159, - 280124, - 280083, - 280170, - 280192, - 279966, - 280006, - 279700, - 279968, - 279856, - 280123, - 279822, - 280214, - 280082, - 279875, - 280193, - 280122, - 279898, - 279967, - 279767, - 279730, - 280589, - 280165, - 280005, - 279704, - 279838, - 279732, - 156024, - 280040, - 279920, - 279829, - 280390, - 280243, - 280050, - 280039, - 279929, - 280048, - 280202, - 280162, - 156005, - 280105, - 290084, - 279747, - 279746, - 155995, - 280237, - 279799, - 279752, - 279930, - 280391, - 280172, - 279701, - 149158, - 279989, - 280161, - 279807, - 280262, - 280051, - 279858, - 279851, - 280096, - 279919, - 279983, - 279890, - 279931, - 280038, - 279798, - 280160, - 280392, - 279750, - 279992, - 279932, - 280052, - 279702, - 148227, - 149163, - 280173, - 280106, - 280236, - 280036, - 280207, - 280044, - 279797, - 280227, - 280159, - 279745, - 279757, - 280053, - 279918, - 280393, - 280320, - 279705, - 149175, - 279982, - 279933, - 148886, - 279859, - 279850, - 280158, - 279796, - 279801, - 280095, - 148890, - 156021, - 155989, - 280201, - 280042, - 279753, - 279990, - 280174, - 280035, - 279808, - 279833, - 279934, - 280054, - 280235, - 279917, - 279985, - 279884, - 280046, - 280034, - 280226, - 280397, - 279830, - 279981, - 280107, - 149167, - 280157, - 279936, - 279860, - 279795, - 279993, - 279706, - 279849, - 280156, - 280175, - 279888, - 279743, - 280055, - 279891, - 280033, - 280401, - 279809, - 148879, - 279741, - 280094, - 279916, - 279937, - 280056, - 279828, - 279852, - 149164, - 280225, - 280108, - 279751, - 280234, - 279994, - 279707, - 149146, - 280155, - 279794, - 279754, - 280405, - 279861, - 279938, - 280208, - 280032, - 280154, - 280176, - 279722, - 279763, - 280166, - 280057, - 279793, - 280099, - 280200, - 279708, - 149165, - 279810, - 279980, - 280244, - 155999, - 280031, - 279915, - 280406, - 155993, - 280205, - 156007, - 279939, - 280233, - 280153, - 280093, - 280109, - 279940, - 280058, - 280030, - 279755, - 279995, - 280152, - 280177, - 279862, - 148858, - 279848, - 156008, - 280167, - 280221, - 279792, - 279834, - 156000, - 280415, - 279914, - 279883, - 279941, - 280059, - 279709, - 280028, - 280150, - 280102, - 279740, - 279892, - 279791, - 280232, - 280416, - 280178, - 280060, - 279986, - 279827, - 279979, - 279811, - 148865, - 148883, - 279710, - 279913, - 279863, - 279847, - 280092, - 280220, - 148875, - 156023, - 280027, - 280149, - 279855, - 279942, - 280199, - 280110, - 156027, - 280209, - 280104, - 279790, - 280419, - 280061, - 280148, - 279943, - 148888, - 279996, - 280231, - 156026, - 280179, - 279802, - 279711, - 280026, - 279812, - 279912, - 279721, - 148861, - 279978, - 279756, - 280147, - 279864, - 280062, - 280203, - 279739, - 279927, - 279846, - 280151, - 280025, - 280111, - 279987, - 279944, - 148864, - 279977, - 279789, - 280420, - 148231, - 149156, - 280146, - 279945, - 280180, - 280091, - 280063, - 279748, - 149148, - 280230, - 279857, - 279788, - 279882, - 279921, - 279764, - 279712, - 280024, - 279893, - 279988, - 279803, - 280431, - 279813, - 279865, - 279826, - 279997, - 279911, - 280043, - 280145, - 279946, - 280064, - 149157, - 279738, - 279984, - 280435, - 279714, - 280023, - 280144, - 280090, - 280198, - 280112, - 280181, - 280125, - 156012, - 279758, - 279744, - 279947, - 280210, - 280229, - 279787, - 280065, - 280143, - 149173, - 279910, - 279976, - 279948, - 279998, - 279716, - 279749, - 280022, - 279786, - 279866, - 279845, - 155985, - 279894, - 280436, - 280142, - 280113, - 279835, - 280206, - 280182, - 280066, - 279814, - 280021, - 156003, - 279909, - 279720, - 280121, - 280228, - 279924, - 279949, - 279759, - 279785, - 279768, - 280444, - 280100, - 279881, - 280067, - 280169, - 279717, - 280020, - 280141, - 279950, - 148880, - 290065, - 280183, - 279867, - 279975, - 279844, - 280445, - 279922, - 149168, - 280204, - 280089, - 279815, - 280197, - 280068, - 149161, - 280751, - 280114, - 279999, - 279991, - 279908, - 280140, - 279718, - 280224, - 279737, - 280045, - 280103, - 279926, - 280037, - 279951, - 280019, - 279784, - 279887, - 279974, - 279895, - 280139, - 279952, - 280069, - 280211, - 280184, - 279868, - 279783, - 279843, - 279831, - 148870, - 280463, - 279719, - 280018, - 290069, - 280138, - 280088, - 279825, - 279760, - 279742, - 156001, - 279816, - 246836, - 280115, - 279907, - 280070, - 279953, - 280000, - 280101, - 280223, - 279782, - 280464, - 280017, - 280137, - 280185, - 279973, - 279869, - 280029, - 279836, - 155991, - 279954, - 280071, - 279723, - 280263, - 279880, - 280016, - 279769, - 290068, - 280136, - 279906, - 279736, - 280196, - 280676, - 280116, - 156009, - 279955, - 279781, - 279761, - 279886, - 280072, - 155986, - 149155, - 280222, - 280135, - 280186, - 279817, - 279724, - 280097, - 280087, - 290067, - 280015, - 279905, - 279972, - 279935, - 279956, - 280675, - 279925, - 279870, - 280001, - 279842, - 279780, - 280497, - 279805, - 280073, - 280291, - 280164, - 155987, - 280212, - 280134, - 279957, - 279779, - 280239, - 279715, - 280168, - 280014, - 280187, - 280219, - 280501, - 279824, - 279818, - 280388, - 279889, - 279735, - 280117, - 280074, - 279725, - 280013, - 280086, - 279904, - 280133, - 279901, - 280075, - 280041, - 280195, - 279762, - 279958, - 279871, - 280002, - 280502, - 155997, - 279841, - 280132, - 279959, - 279971, - 148871, - 279923, - 280188, - 280389, - 280674, - 280118, - 279778, - 279726, - 279837, - 280218, - 280131, - 280012, - 279878, - 279819, - 279903, - 279832, - 279970, - 280047, - 149169, - 279960, - 280076, - 148874, - 279872, - 279777, - 280098, - 280085, - 279773, - 280525, - 279727, - 279896, - 279928, - 280011, - 280130, - 280189, - 279961, - 155996, - 280003, - 149151, - 279879, - 280077, - 156013, - 280217, - 279823, - 279776, - 280526, - 280213, - 279854, - 279902, - 280010, - 280129, - 279734, - 280194, - 279800, - 280119, - 279962, - 280549, - 279765, - 280238, - 280128, - 280190, - 279873, - 279840, - 279820, - 280049, - 279713, - 280078, - 279728, - 280009, - 279804, - 279900, - 279876, - 280079, - 149153, - 148860, - 279963, - 279703, - 280216, - 279772, - 280084, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.315817+00:00', - }, - { - 'code': '223', - 'created_at': '2021-08-10T06:17:45.487347+00:00', - 'display_name': 'ABN Withholding', - 'id': 147711, - 'is_enabled': True, - 'name': 'ABN Withholding', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280140, - 280243, - 279810, - 280037, - 279980, - 280099, - 279923, - 279718, - 280224, - 280390, - 149165, - 279991, - 279737, - 279962, - 148858, - 279726, - 280114, - 280218, - 279829, - 279853, - 280200, - 279793, - 279837, - 279951, - 280019, - 280103, - 280057, - 279926, - 279784, - 280171, - 279763, - 279722, - 279920, - 279974, - 280131, - 280176, - 280154, - 280079, - 279895, - 279887, - 280139, - 280012, - 280166, - 280032, - 280549, - 279952, - 279938, - 280040, - 280069, - 279783, - 280208, - 279861, - 280405, - 156024, - 280211, - 279831, - 279878, - 280184, - 279985, - 280128, - 279868, - 156001, - 279732, - 279754, - 279843, - 279838, - 279704, - 279825, - 279794, - 280155, - 279899, - 148870, - 149146, - 279707, - 279819, - 280463, - 279751, - 279903, - 280018, - 149153, - 279994, - 280234, - 290069, - 280005, - 279719, - 280138, - 280589, - 279742, - 280088, - 279765, - 280108, - 149164, - 279970, - 280225, - 279828, - 279772, - 279760, - 279767, - 279967, - 279741, - 280008, - 279816, - 280056, - 279898, - 246836, - 279937, - 149172, - 280115, - 280094, - 279907, - 149169, - 279916, - 279809, - 279832, - 280070, - 148879, - 280401, - 279821, - 279953, - 280033, - 279730, - 280000, - 280084, - 280223, - 280076, - 280055, - 279782, - 148874, - 279891, - 279743, - 279766, - 280017, - 280122, - 280175, - 280464, - 280137, - 279960, - 280156, - 280046, - 279849, - 155996, - 280185, - 279706, - 279888, - 279973, - 279875, - 279993, - 148860, - 279869, - 280029, - 279872, - 279795, - 279860, - 279936, - 279777, - 279836, - 279873, - 280126, - 279954, - 280157, - 280085, - 280071, - 149167, - 279830, - 280496, - 280263, - 280107, - 280049, - 279723, - 280397, - 280016, - 280165, - 155991, - 279880, - 280082, - 279981, - 279877, - 280034, - 290068, - 280100, - 280676, - 280226, - 279773, - 279822, - 280042, - 280136, - 280214, - 279884, - 279906, - 280190, - 156009, - 279736, - 280525, - 279917, - 280235, - 280196, - 280193, - 280054, - 279839, - 279934, - 279808, - 279727, - 280116, - 280011, - 279990, - 279700, - 279955, - 279781, - 279729, - 279833, - 280035, - 280174, - 279896, - 279761, - 279820, - 279874, - 280072, - 279753, - 280201, - 280123, - 155986, - 280222, - 155989, - 280130, - 149155, - 280097, - 279964, - 156021, - 280135, - 279966, - 280095, - 279796, - 279968, - 280186, - 280158, - 279713, - 280238, - 279817, - 279850, - 280189, - 279724, - 280006, - 280087, - 280654, - 279859, - 279933, - 280015, - 290067, - 279961, - 279771, - 148886, - 279905, - 280192, - 148890, - 279982, - 279972, - 280083, - 280393, - 279935, - 279963, - 279705, - 279918, - 280003, - 279956, - 280053, - 149175, - 280675, - 279928, - 279757, - 279769, - 280078, - 149151, - 280320, - 279745, - 279840, - 280001, - 280164, - 279870, - 279842, - 279879, - 280159, - 280227, - 279780, - 279804, - 279797, - 280239, - 280207, - 280124, - 280497, - 280045, - 280236, - 280080, - 280036, - 280077, - 280291, - 156013, - 280073, - 280134, - 155987, - 279897, - 280168, - 280106, - 149159, - 280212, - 280173, - 149163, - 279805, - 280217, - 148227, - 279702, - 279728, - 279957, - 279779, - 280081, - 280052, - 279823, - 279932, - 280014, - 280041, - 279715, - 280009, - 279992, - 279770, - 280047, - 280392, - 279806, - 280187, - 280180, - 279857, - 279945, - 280091, - 280219, - 280146, - 149156, - 279776, - 280063, - 280230, - 280160, - 149148, - 279798, - 279987, - 148231, - 280038, - 280420, - 280169, - 280043, - 279788, - 280127, - 279931, - 279748, - 279882, - 279824, - 279789, - 155992, - 279750, - 279764, - 279988, - 148864, - 279944, - 280501, - 279712, - 280024, - 279890, - 280111, - 279977, - 280170, - 279893, - 279818, - 280191, - 280025, - 280151, - 280526, - 280431, - 279846, - 279739, - 279735, - 279813, - 279803, - 280062, - 279774, - 279865, - 279911, - 279864, - 279826, - 279983, - 280147, - 279921, - 148861, - 280048, - 279997, - 279756, - 279919, - 279978, - 280590, - 280145, - 280117, - 279927, - 279721, - 279889, - 279912, - 280096, - 280064, - 279946, - 149157, - 279703, - 279984, - 279738, - 280074, - 279812, - 279851, - 156026, - 279787, - 280026, - 280213, - 280435, - 279711, - 279725, - 279714, - 280023, - 280013, - 280179, - 280144, - 279900, - 279802, - 280231, - 280090, - 280098, - 280203, - 279996, - 279749, - 280198, - 280086, - 280104, - 148888, - 279902, - 280112, - 279943, - 279858, - 280181, - 280148, - 280125, - 279807, - 280061, - 280388, - 280419, - 279904, - 279758, - 280216, - 156012, - 279790, - 280209, - 280051, - 280229, - 156027, - 280133, - 280210, - 279744, - 280215, - 280110, - 279947, - 279901, - 280199, - 279942, - 280010, - 280065, - 280143, - 280161, - 280149, - 149173, - 149158, - 156023, - 279910, - 280550, - 280027, - 280044, - 279976, - 279701, - 280220, - 280092, - 280262, - 279948, - 148875, - 279847, - 291035, - 279998, - 280195, - 280129, - 279716, - 280022, - 280391, - 279863, - 279786, - 280172, - 279913, - 279876, - 279866, - 279845, - 279762, - 279710, - 155985, - 279930, - 148883, - 279986, - 279965, - 279894, - 148865, - 279811, - 280060, - 279827, - 279958, - 280436, - 280142, - 279989, - 280178, - 279752, - 280416, - 280232, - 279854, - 279835, - 279871, - 279791, - 279799, - 280182, - 279892, - 279734, - 280066, - 279855, - 280002, - 280021, - 279925, - 279740, - 279814, - 156003, - 280075, - 280150, - 279924, - 279909, - 280237, - 280028, - 280121, - 280206, - 279720, - 280163, - 279709, - 280502, - 280113, - 280059, - 279979, - 280228, - 279747, - 279941, - 280007, - 279883, - 155997, - 156000, - 279841, - 279759, - 279914, - 279949, - 279785, - 279731, - 280167, - 280105, - 279768, - 280415, - 279834, - 290065, - 279792, - 155995, - 280221, - 156008, - 280132, - 279881, - 279800, - 279848, - 279746, - 280067, - 280444, - 290084, - 279862, - 280194, - 279717, - 280020, - 156005, - 280177, - 280141, - 279971, - 280152, - 279801, - 280101, - 279975, - 280004, - 279995, - 280202, - 148880, - 279755, - 279950, - 279959, - 280030, - 148871, - 280058, - 279775, - 279867, - 280162, - 279940, - 279844, - 279885, - 279852, - 279922, - 280183, - 280109, - 279929, - 280445, - 279856, - 280102, - 280120, - 280188, - 280089, - 280039, - 280093, - 149168, - 280153, - 280674, - 279815, - 280204, - 280197, - 280119, - 280233, - 280244, - 279939, - 280050, - 280068, - 149161, - 279886, - 156007, - 155993, - 280406, - 280751, - 279733, - 279915, - 280031, - 280118, - 279708, - 280205, - 280389, - 279999, - 279778, - 279908, - 279969, - 155999, - 280434, - 280609, - 280247, - 280679, - 280417, - 280515, - 280615, - 280265, - 280514, - 280484, - 280629, - 156018, - 280524, - 280376, - 280639, - 280437, - 280739, - 280635, - 280673, - 280551, - 156025, - 280284, - 280689, - 280760, - 280467, - 280711, - 280538, - 280301, - 280400, - 156004, - 156014, - 280641, - 280430, - 280338, - 156011, - 280645, - 280717, - 280658, - 280605, - 280480, - 280568, - 280355, - 280650, - 280271, - 280545, - 148225, - 280468, - 280315, - 280399, - 280325, - 280611, - 280591, - 280339, - 280748, - 280513, - 280740, - 280483, - 280418, - 280313, - 280285, - 280660, - 280448, - 280264, - 280256, - 148859, - 155990, - 280481, - 280340, - 280753, - 280527, - 280683, - 280703, - 280398, - 280252, - 280732, - 280258, - 280565, - 280469, - 280560, - 280396, - 280690, - 149143, - 280306, - 280512, - 280655, - 280541, - 148878, - 148224, - 280341, - 280710, - 280699, - 162016, - 280372, - 280269, - 280454, - 280362, - 280588, - 280614, - 280314, - 280279, - 280535, - 280741, - 280308, - 280613, - 148873, - 280546, - 280324, - 280696, - 149171, - 280421, - 280573, - 280498, - 280248, - 280470, - 280446, - 280720, - 280395, - 280626, - 280254, - 280511, - 280300, - 280428, - 280528, - 280323, - 280752, - 280471, - 280567, - 280539, - 155998, - 280394, - 280721, - 280342, - 280742, - 148229, - 280704, - 280596, - 280559, - 280343, - 280493, - 280722, - 280691, - 280646, - 280422, - 280375, - 148872, - 280453, - 280486, - 280666, - 280637, - 280537, - 280758, - 280286, - 156010, - 280295, - 280529, - 280709, - 280682, - 280356, - 280603, - 280442, - 280731, - 280647, - 280632, - 280670, - 280447, - 149145, - 280664, - 280616, - 280261, - 280387, - 280249, - 280322, - 280662, - 280556, - 280620, - 280574, - 149144, - 280423, - 280299, - 280532, - 280649, - 280344, - 280361, - 280718, - 280727, - 280510, - 280240, - 280625, - 280371, - 280386, - 280642, - 280374, - 280307, - 280287, - 280495, - 280424, - 280472, - 280633, - 148862, - 280669, - 280345, - 280509, - 280644, - 149160, - 280275, - 280743, - 280598, - 280587, - 280473, - 280628, - 280385, - 290931, - 280730, - 280491, - 148885, - 280708, - 280432, - 148868, - 280749, - 280597, - 280346, - 149170, - 280612, - 280692, - 280508, - 156019, - 148882, - 280427, - 280433, - 280562, - 280369, - 280452, - 280759, - 280384, - 280347, - 280636, - 280507, - 280530, - 280440, - 280357, - 280744, - 280474, - 280298, - 280719, - 148226, - 280383, - 280312, - 280653, - 280475, - 280270, - 280656, - 280622, - 280608, - 280725, - 280547, - 280678, - 280425, - 280586, - 280723, - 280575, - 280439, - 280702, - 156028, - 280661, - 280485, - 148889, - 280451, - 280360, - 280260, - 280293, - 280278, - 280492, - 280348, - 280693, - 280288, - 280365, - 280558, - 280250, - 280533, - 280677, - 280554, - 280488, - 280482, - 280253, - 280382, - 280700, - 280257, - 280698, - 280506, - 280297, - 280370, - 280366, - 280505, - 280745, - 280618, - 280697, - 280707, - 280763, - 280724, - 148867, - 280729, - 280381, - 290932, - 280349, - 148887, - 280441, - 280350, - 280604, - 280548, - 280321, - 280648, - 280476, - 280373, - 280606, - 280643, - 149162, - 280294, - 280255, - 280316, - 280566, - 280755, - 280694, - 280251, - 280619, - 156022, - 280449, - 148222, - 280581, - 280680, - 280552, - 280380, - 280276, - 280762, - 280351, - 280504, - 280746, - 280364, - 280494, - 280477, - 280259, - 280580, - 280583, - 280241, - 280706, - 280379, - 148228, - 156015, - 149166, - 280663, - 280359, - 149147, - 280487, - 149149, - 148866, - 280576, - 280754, - 280426, - 280289, - 280585, - 280557, - 280352, - 280311, - 280378, - 280274, - 280489, - 155988, - 290930, - 280555, - 280411, - 280685, - 280521, - 280304, - 280672, - 280329, - 280665, - 280630, - 280735, - 280363, - 280540, - 280569, - 280478, - 280309, - 280459, - 280607, - 156006, - 280267, - 280578, - 280715, - 280458, - 280296, - 280638, - 280281, - 280503, - 280330, - 156020, - 280410, - 280594, - 280331, - 280245, - 280617, - 280520, - 280564, - 280668, - 280460, - 280714, - 280367, - 280621, - 280328, - 280761, - 280409, - 280273, - 148877, - 280570, - 280624, - 280412, - 280602, - 280610, - 280429, - 280332, - 280543, - 280747, - 155994, - 280457, - 280479, - 280659, - 290928, - 280651, - 280599, - 280640, - 280242, - 280353, - 280734, - 148869, - 280728, - 280686, - 155984, - 280282, - 280519, - 280579, - 280305, - 149150, - 280292, - 280266, - 280736, - 148230, - 280536, - 280518, - 280461, - 148223, - 280413, - 280408, - 280377, - 149154, - 280757, - 280272, - 280303, - 280593, - 280490, - 290929, - 280553, - 280631, - 280438, - 280443, - 280713, - 280407, - 280333, - 280450, - 280522, - 280737, - 280319, - 280695, - 280523, - 280684, - 280334, - 280623, - 280681, - 280280, - 148881, - 280687, - 280544, - 280283, - 280462, - 280327, - 280368, - 280277, - 280561, - 280358, - 280716, - 280456, - 280750, - 148863, - 280657, - 280404, - 280246, - 280517, - 280465, - 280500, - 280595, - 280584, - 280302, - 280516, - 280582, - 280414, - 280531, - 280571, - 280701, - 280712, - 280592, - 280542, - 280563, - 280335, - 156016, - 280290, - 148884, - 280667, - 280318, - 280268, - 280455, - 280705, - 280733, - 280499, - 280738, - 149152, - 280726, - 149174, - 280336, - 280601, - 280756, - 280403, - 280326, - 280634, - 156002, - 280671, - 280466, - 280402, - 280627, - 280652, - 280688, - 280317, - 280534, - 280337, - 280600, - 280310, - 280577, - 254109, - 280572, - 148876, - 280354, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.315817+00:00', - }, - { - 'code': '225', - 'created_at': '2021-08-10T06:17:45.487347+00:00', - 'display_name': 'Pay As You Go Withholding', - 'id': 147712, - 'is_enabled': True, - 'name': 'Pay As You Go Withholding', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280314, - 156022, - 280536, - 280600, - 280309, - 280315, - 280598, - 280316, - 148222, - 149144, - 280317, - 280318, - 156028, - 280308, - 280319, - 280638, - 280625, - 280321, - 280307, - 280597, - 280636, - 148862, - 280322, - 149145, - 148872, - 280596, - 280323, - 280324, - 280306, - 148859, - 280325, - 156014, - 280639, - 280305, - 280326, - 280601, - 280595, - 280327, - 149154, - 155994, - 280328, - 280594, - 280329, - 280304, - 156006, - 280330, - 280331, - 148877, - 280602, - 280623, - 280332, - 280640, - 149150, - 148230, - 280303, - 280593, - 280333, - 280334, - 148863, - 280302, - 280592, - 280335, - 280336, - 156002, - 280337, - 148876, - 156018, - 280635, - 280301, - 280641, - 280338, - 280591, - 280339, - 155990, - 280340, - 280341, - 280588, - 148873, - 280300, - 155998, - 280342, - 280343, - 156010, - 280603, - 280299, - 280344, - 280642, - 280345, - 280587, - 148885, - 280346, - 280532, - 149170, - 280347, - 280298, - 148226, - 280586, - 280348, - 280297, - 280763, - 280349, - 280350, - 280604, - 280643, - 280762, - 280351, - 148228, - 280585, - 280352, - 280296, - 280761, - 280353, - 280584, - 280634, - 280354, - 280760, - 280355, - 148878, - 280295, - 280356, - 280644, - 280759, - 280357, - 280294, - 280540, - 280583, - 280358, - 280758, - 280359, - 280605, - 280582, - 280360, - 280757, - 156015, - 280293, - 280361, - 280362, - 280645, - 280624, - 280756, - 280292, - 280363, - 280364, - 280581, - 280755, - 148887, - 280365, - 280366, - 280606, - 280680, - 280580, - 280754, - 280367, - 280368, - 280679, - 280753, - 280646, - 280369, - 280370, - 280752, - 149174, - 280579, - 280371, - 280633, - 280678, - 280750, - 280578, - 280372, - 280373, - 280677, - 280749, - 280374, - 280647, - 280375, - 149143, - 280748, - 280376, - 280577, - 280290, - 280377, - 280747, - 148866, - 280607, - 280378, - 280289, - 280576, - 280379, - 280746, - 280380, - 149162, - 280648, - 280381, - 280745, - 280288, - 280533, - 280382, - 280575, - 280608, - 280383, - 280744, - 280384, - 148868, - 280385, - 280743, - 280287, - 280386, - 280649, - 280574, - 280387, - 280632, - 280286, - 280742, - 280394, - 280395, - 280573, - 280741, - 162016, - 280396, - 280398, - 280285, - 280740, - 280399, - 280650, - 280400, - 280284, - 280739, - 280609, - 280572, - 280402, - 280403, - 280738, - 156016, - 280571, - 280404, - 280283, - 280737, - 280407, - 280408, - 280736, - 280282, - 280651, - 280610, - 280570, - 280409, - 280410, - 156020, - 280735, - 280411, - 280569, - 280281, - 280412, - 280734, - 280240, - 280413, - 280631, - 280280, - 280414, - 280733, - 280652, - 280417, - 156025, - 280568, - 280418, - 280732, - 280279, - 280421, - 280567, - 280422, - 280731, - 280423, - 280424, - 280730, - 148882, - 280278, - 280673, - 280425, - 280653, - 280566, - 280426, - 280611, - 280277, - 280729, - 280427, - 280428, - 280565, - 148884, - 280728, - 280429, - 280430, - 280727, - 280276, - 280432, - 280655, - 280433, - 280612, - 280726, - 280630, - 280564, - 280434, - 148224, - 280275, - 280725, - 290932, - 280437, - 280274, - 280438, - 280724, - 280439, - 280622, - 280440, - 280656, - 280723, - 280441, - 149149, - 290931, - 280273, - 280442, - 280722, - 280443, - 280272, - 290930, - 280446, - 280721, - 280613, - 280447, - 280448, - 280657, - 156011, - 280271, - 280720, - 280449, - 280450, - 280563, - 280270, - 280719, - 280451, - 280452, - 280562, - 280718, - 280453, - 149171, - 280614, - 280454, - 280269, - 280658, - 280717, - 280629, - 280455, - 280268, - 280456, - 280716, - 290929, - 280457, - 280458, - 280715, - 280534, - 155988, - 280459, - 280267, - 280460, - 280714, - 280659, - 290928, - 280266, - 280461, - 280713, - 280462, - 280561, - 280465, - 280712, - 149152, - 280466, - 280615, - 280265, - 280467, - 280711, - 280468, - 280660, - 280264, - 280469, - 280560, - 280710, - 280470, - 280471, - 148229, - 280559, - 280709, - 280616, - 280261, - 280472, - 280473, - 280628, - 280708, - 280474, - 280475, - 280661, - 148889, - 280260, - 280558, - 280707, - 280476, - 280477, - 280259, - 280706, - 280241, - 280557, - 280478, - 280479, - 280539, - 148869, - 280705, - 280480, - 280481, - 280258, - 280704, - 280662, - 280556, - 280482, - 280257, - 280617, - 280483, - 280703, - 280555, - 156004, - 280484, - 280485, - 280702, - 280486, - 280256, - 280701, - 280487, - 280663, - 280255, - 280618, - 280488, - 280554, - 280700, - 149166, - 280489, - 280490, - 280553, - 280627, - 280699, - 280254, - 280491, - 148867, - 280492, - 280698, - 280493, - 280664, - 148881, - 280494, - 280552, - 280697, - 280253, - 280535, - 280495, - 280498, - 280696, - 280252, - 280551, - 280499, - 280500, - 280695, - 280503, - 280665, - 149147, - 280504, - 280619, - 280251, - 280694, - 280548, - 280505, - 280506, - 280250, - 280693, - 280547, - 280507, - 280508, - 280692, - 149160, - 280509, - 280510, - 280620, - 280249, - 280666, - 280691, - 280511, - 280626, - 280248, - 280546, - 280512, - 280690, - 280513, - 148225, - 280545, - 280689, - 280514, - 280515, - 280247, - 280688, - 280667, - 280516, - 280246, - 280517, - 280544, - 280687, - 280518, - 280519, - 155984, - 280686, - 280543, - 280520, - 280672, - 280245, - 280521, - 280685, - 280668, - 280621, - 280242, - 280522, - 280523, - 280684, - 280542, - 254109, - 280524, - 280538, - 280527, - 280683, - 280541, - 280528, - 280529, - 280682, - 280669, - 280530, - 280671, - 280537, - 280531, - 280681, - 280670, - 280311, - 148223, - 280312, - 156019, - 280637, - 280313, - 280310, - 280599, - 279773, - 280203, - 280098, - 280103, - 149175, - 279990, - 279751, - 156000, - 280104, - 280044, - 279984, - 279744, - 279801, - 280206, - 279991, - 280097, - 279889, - 279832, - 279885, - 279730, - 279829, - 156005, - 280202, - 279852, - 279746, - 280105, - 279752, - 149158, - 280096, - 279983, - 279890, - 149163, - 279992, - 280106, - 280207, - 279745, - 148890, - 279757, - 279982, - 148886, - 280095, - 280201, - 279753, - 279833, - 279884, - 279981, - 280107, - 279993, - 279743, - 279891, - 280094, - 279828, - 148858, - 149164, - 280108, - 279994, - 279754, - 280208, - 279722, - 279763, - 280200, - 279980, - 155999, - 156007, - 280093, - 280244, - 280109, - 279995, - 279755, - 279834, - 279883, - 279979, - 279740, - 279892, - 279827, - 148865, - 280092, - 156023, - 280199, - 280110, - 280209, - 279927, - 279996, - 279721, - 279978, - 279756, - 279739, - 279977, - 280111, - 148231, - 280091, - 149148, - 279882, - 279764, - 279893, - 279826, - 279997, - 279738, - 279921, - 280090, - 280198, - 280112, - 279758, - 280210, - 279976, - 279998, - 155985, - 279894, - 279835, - 279720, - 280113, - 279759, - 279768, - 279881, - 279975, - 148880, - 280089, - 280197, - 280238, - 280751, - 279999, - 279737, - 280114, - 279974, - 279895, - 280211, - 279825, - 148870, - 280088, - 279760, - 280115, - 280000, - 279736, - 279973, - 279836, - 279880, - 280676, - 280196, - 280116, - 279761, - 149155, - 280087, - 279972, - 280675, - 279769, - 280168, - 280001, - 280291, - 280212, - 279715, - 279824, - 279735, - 280117, - 280086, - 280195, - 279762, - 280002, - 279971, - 280674, - 280118, - 279837, - 279878, - 279970, - 149169, - 280085, - 279896, - 280003, - 279823, - 280213, - 279734, - 280194, - 280047, - 280119, - 279765, - 279713, - 148860, - 280084, - 280654, - 279969, - 279897, - 280120, - 280004, - 279877, - 280170, - 279766, - 279733, - 280590, - 279774, - 155992, - 280083, - 279968, - 280193, - 280214, - 280122, - 279767, - 280005, - 279732, - 279838, - 279704, - 280589, - 279967, - 279875, - 279898, - 280082, - 280165, - 279822, - 280123, - 279966, - 280006, - 280192, - 280124, - 149159, - 280081, - 279770, - 280215, - 291035, - 279965, - 280007, - 279731, - 279775, - 279899, - 149172, - 279821, - 280126, - 279839, - 279874, - 279771, - 280080, - 280191, - 280550, - 280008, - 279729, - 279964, - 280127, - 280216, - 279703, - 279772, - 279963, - 149153, - 280079, - 279876, - 279900, - 280009, - 279728, - 280078, - 279804, - 279820, - 280190, - 279873, - 280128, - 280549, - 279962, - 280129, - 280010, - 279902, - 279853, - 280526, - 279776, - 280217, - 156013, - 280077, - 280042, - 279840, - 149151, - 279879, - 279961, - 280189, - 280130, - 280011, - 279727, - 280525, - 279777, - 279872, - 279960, - 148874, - 280076, - 279903, - 279819, - 280012, - 155996, - 280131, - 279923, - 280218, - 279726, - 279778, - 280188, - 148871, - 279959, - 280132, - 155997, - 280502, - 280075, - 279841, - 279871, - 279958, - 280388, - 279901, - 280133, - 279904, - 280013, - 279725, - 280074, - 279818, - 280501, - 280219, - 280187, - 280014, - 279805, - 279779, - 279957, - 155987, - 280073, - 280134, - 280497, - 279780, - 279842, - 279870, - 279956, - 279935, - 279905, - 280015, - 290067, - 279724, - 280045, - 279817, - 280186, - 280135, - 280222, - 155986, - 280239, - 280072, - 279781, - 279955, - 279906, - 280136, - 280016, - 290068, - 279723, - 280496, - 280071, - 280263, - 279954, - 280029, - 279869, - 280185, - 280137, - 280464, - 280017, - 279782, - 280223, - 279953, - 280070, - 279907, - 246836, - 279816, - 280138, - 279719, - 290069, - 280463, - 280018, - 279843, - 280184, - 279868, - 156001, - 279783, - 280069, - 279926, - 279952, - 280139, - 280019, - 279784, - 279951, - 280224, - 279718, - 280037, - 280140, - 279908, - 149161, - 280068, - 279815, - 149168, - 280445, - 280183, - 279844, - 279867, - 279922, - 279950, - 280141, - 280020, - 279717, - 280444, - 280067, - 279785, - 279949, - 280228, - 280121, - 279909, - 156003, - 279814, - 279924, - 280021, - 280066, - 280182, - 280142, - 290065, - 280436, - 279845, - 279866, - 279786, - 280022, - 279716, - 279948, - 279910, - 149173, - 280143, - 280065, - 279947, - 280229, - 156012, - 280125, - 280181, - 280144, - 280023, - 279714, - 280435, - 279787, - 149157, - 279946, - 280064, - 279803, - 280145, - 279911, - 279865, - 279813, - 280431, - 280024, - 279712, - 279788, - 280230, - 280043, - 280063, - 280180, - 279945, - 280146, - 149156, - 280420, - 279789, - 148864, - 279944, - 280025, - 279846, - 279857, - 280062, - 280151, - 279864, - 280147, - 156026, - 279912, - 279812, - 280026, - 279711, - 280179, - 280231, - 279943, - 279802, - 148888, - 280148, - 280061, - 280419, - 279790, - 156027, - 279856, - 279942, - 280149, - 280027, - 280220, - 279847, - 279863, - 279913, - 279710, - 148883, - 279811, - 280060, - 280178, - 280416, - 280232, - 279791, - 280150, - 279855, - 280028, - 279709, - 280059, - 280167, - 279941, - 279914, - 280415, - 279792, - 280221, - 156008, - 279848, - 279862, - 280177, - 280152, - 280169, - 280030, - 280058, - 279940, - 280153, - 279939, - 280233, - 155993, - 280406, - 279915, - 280031, - 279708, - 279810, - 149165, - 279793, - 280057, - 280176, - 280154, - 280032, - 279938, - 279861, - 280166, - 280405, - 279707, - 280155, - 149146, - 280056, - 279794, - 280234, - 280225, - 279937, - 279916, - 279809, - 148879, - 280401, - 280046, - 280033, - 280055, - 280175, - 280156, - 279849, - 279706, - 279795, - 279860, - 279936, - 280157, - 149167, - 280397, - 280034, - 280226, - 280235, - 279917, - 280054, - 279934, - 279808, - 280035, - 280174, - 155989, - 156021, - 279796, - 280158, - 279850, - 279859, - 279933, - 280393, - 279705, - 279918, - 280053, - 280159, - 280227, - 280320, - 279797, - 280236, - 280036, - 280173, - 279932, - 148227, - 279702, - 280052, - 280392, - 280160, - 279798, - 280038, - 279931, - 279919, - 279851, - 279858, - 279807, - 280051, - 280161, - 279701, - 280391, - 280172, - 279930, - 279799, - 280262, - 280237, - 155995, - 290084, - 280162, - 279929, - 280039, - 280050, - 280243, - 280390, - 279920, - 280040, - 156024, - 279700, - 279806, - 280171, - 280163, - 280049, - 279800, - 279854, - 279925, - 279928, - 280389, - 280041, - 280164, - 156009, - 280100, - 155991, - 279742, - 279831, - 279887, - 280204, - 280101, - 279749, - 279988, - 279748, - 279987, - 148861, - 148875, - 279986, - 280102, - 280205, - 280099, - 279741, - 280048, - 279888, - 279830, - 279750, - 279989, - 279747, - 279985, - 279886, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:55.315817+00:00', - }, - { - 'code': '74', - 'created_at': '2021-04-22T06:17:45.101318+00:00', - 'display_name': 'Dues and Subscriptions', - 'id': 136502, - 'is_enabled': True, - 'name': 'Dues and Subscriptions', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 279975, - 280223, - 279856, - 279904, - 279953, - 280075, - 279901, - 280133, - 279907, - 280070, - 246836, - 279958, - 279816, - 279871, - 280138, - 280502, - 280018, - 279746, - 155997, - 279841, - 279719, - 280388, - 280132, - 280463, - 279831, - 279959, - 279783, - 148871, - 280105, - 290069, - 279868, - 280188, - 280263, - 280184, - 280069, - 279952, - 279778, - 279726, - 280218, - 280139, - 280012, - 280131, - 279784, - 280019, - 279887, - 279951, - 279819, - 279923, - 280037, - 280224, - 279804, - 279903, - 279718, - 280140, - 279960, - 280076, - 148874, - 279872, - 279801, - 279777, - 280239, - 279908, - 149161, - 280204, - 280525, - 280068, - 279815, - 149168, - 279727, - 280011, - 280130, - 279926, - 280445, - 280189, - 279844, - 279867, - 280183, - 279961, - 279950, - 149151, - 279879, - 280141, - 280077, - 156013, - 280217, - 279776, - 280020, - 280526, - 279717, - 280067, - 156005, - 280444, - 280100, - 279785, - 279902, - 280228, - 280010, - 279949, - 280129, - 280121, - 279962, - 279909, - 156003, - 280142, - 280549, - 156009, - 280021, - 280128, - 279814, - 280066, - 280190, - 279873, - 279840, - 280182, - 279820, - 155996, - 280078, - 279728, - 280009, - 280436, - 280238, - 279900, - 279786, - 279845, - 279866, - 279876, - 280043, - 280022, - 279716, - 280079, - 280202, - 279963, - 280165, - 149153, - 279948, - 279988, - 279703, - 280216, - 279985, - 279772, - 279910, - 149173, - 280127, - 280143, - 279787, - 279964, - 280229, - 279729, - 280008, - 280065, - 279947, - 279748, - 280550, - 280125, - 156012, - 280191, - 280080, - 291035, - 280181, - 279771, - 279874, - 279839, - 280126, - 280144, - 279857, - 280023, - 279821, - 279714, - 280435, - 149172, - 279899, - 280048, - 149157, - 280064, - 279946, - 279987, - 280145, - 279965, - 279731, - 280007, - 279911, - 279865, - 279813, - 280081, - 280215, - 279770, - 280431, - 149159, - 280124, - 279788, - 280024, - 279712, - 280230, - 280063, - 280192, - 280180, - 279775, - 279945, - 279966, - 280006, - 280146, - 149156, - 148861, - 279922, - 280123, - 279853, - 280420, - 279789, - 148864, - 279822, - 280082, - 279875, - 279898, - 280151, - 280025, - 279846, - 280062, - 279967, - 279864, - 280589, - 279704, - 279838, - 279829, - 280147, - 279732, - 280005, - 279767, - 279912, - 279812, - 280122, - 280026, - 279855, - 279924, - 279944, - 279803, - 280179, - 280193, - 279886, - 280214, - 279968, - 279790, - 280231, - 280083, - 155992, - 279774, - 148888, - 279711, - 280590, - 280170, - 279943, - 279733, - 280148, - 280061, - 279730, - 279766, - 279885, - 279877, - 280004, - 280120, - 279832, - 280419, - 279897, - 280027, - 156027, - 280149, - 279942, - 279969, - 280220, - 280654, - 280084, - 148860, - 279847, - 279863, - 279713, - 279913, - 148875, - 280119, - 148883, - 279710, - 280194, - 279734, - 280213, - 279889, - 279802, - 279811, - 280060, - 280178, - 279823, - 156026, - 280003, - 280416, - 280232, - 279896, - 279791, - 280085, - 279773, - 280150, - 279765, - 279852, - 280028, - 280059, - 279941, - 279970, - 279878, - 279914, - 279709, - 279837, - 280118, - 280097, - 280415, - 280206, - 280674, - 279792, - 149169, - 279971, - 280221, - 280167, - 156008, - 280002, - 279762, - 280168, - 279848, - 279862, - 280195, - 280177, - 279744, - 280086, - 279735, - 280152, - 280117, - 280030, - 280058, - 279940, - 280047, - 279824, - 279715, - 280212, - 280153, - 280291, - 280233, - 155993, - 280001, - 280675, - 280406, - 279972, - 279915, - 280102, - 280087, - 149155, - 280031, - 279761, - 149165, - 279810, - 279708, - 279939, - 279984, - 280116, - 279793, - 280057, - 280154, - 280676, - 280176, - 280196, - 279736, - 279769, - 280205, - 280032, - 279938, - 279880, - 279836, - 279973, - 280099, - 279861, - 280000, - 280405, - 279927, - 280115, - 290084, - 279794, - 279991, - 279925, - 279760, - 280155, - 279825, - 280088, - 148870, - 280211, - 149146, - 280045, - 279895, - 279707, - 280234, - 280225, - 279974, - 280056, - 280166, - 279937, - 279916, - 279737, - 279999, - 280114, - 148879, - 280751, - 279809, - 280203, - 280401, - 280197, - 280089, - 280033, - 280055, - 280013, - 280175, - 148880, - 279888, - 279881, - 279741, - 279768, - 148890, - 279795, - 280156, - 279759, - 280104, - 279849, - 279706, - 279720, - 279835, - 279860, - 280113, - 279936, - 280157, - 279894, - 149167, - 155985, - 280397, - 279998, - 279976, - 280169, - 280226, - 280034, - 280210, - 279917, - 279921, - 279758, - 280235, - 280054, - 280112, - 280035, - 280174, - 280198, - 280090, - 156000, - 279738, - 279934, - 279796, - 155989, - 156021, - 279826, - 279997, - 280158, - 279808, - 279893, - 280046, - 279882, - 279764, - 279850, - 279859, - 149148, - 279830, - 280091, - 148231, - 279933, - 279705, - 279977, - 279918, - 280111, - 280053, - 280393, - 279739, - 148858, - 279756, - 280159, - 280042, - 279751, - 279978, - 279721, - 279996, - 280227, - 279797, - 280036, - 280209, - 280199, - 280236, - 280173, - 280110, - 148227, - 280052, - 279932, - 156023, - 280092, - 148865, - 279702, - 280392, - 279986, - 279979, - 279827, - 280160, - 279740, - 279798, - 279892, - 280038, - 279931, - 279883, - 279834, - 279919, - 279755, - 279851, - 279858, - 280093, - 279995, - 280109, - 280051, - 279807, - 156007, - 279750, - 155999, - 280161, - 279980, - 279701, - 280172, - 280200, - 280262, - 280391, - 279722, - 280208, - 279763, - 279930, - 279994, - 280108, - 149175, - 279799, - 280320, - 279754, - 280237, - 155995, - 280162, - 279990, - 149164, - 280039, - 280050, - 279929, - 279828, - 280094, - 279743, - 279993, - 279891, - 280243, - 280390, - 279920, - 280040, - 280107, - 290065, - 156024, - 279700, - 279981, - 280244, - 279884, - 279833, - 279989, - 279806, - 279753, - 279747, - 280171, - 280201, - 280163, - 280049, - 280095, - 148886, - 279982, - 279800, - 279854, - 279757, - 279928, - 279745, - 280207, - 280106, - 280098, - 280389, - 280041, - 149163, - 280164, - 279992, - 280103, - 155991, - 279890, - 279749, - 279983, - 280096, - 149158, - 280186, - 280135, - 279817, - 290067, - 280222, - 155986, - 279724, - 280015, - 279905, - 279781, - 280072, - 279935, - 280101, - 279955, - 279956, - 279870, - 279842, - 280136, - 279780, - 280044, - 279906, - 280497, - 279805, - 280016, - 279723, - 280496, - 280073, - 155987, - 280134, - 279752, - 280071, - 279957, - 279954, - 156001, - 280029, - 279843, - 279869, - 279779, - 280187, - 279725, - 280014, - 280219, - 280185, - 280501, - 279742, - 280137, - 290068, - 280017, - 280464, - 279818, - 279782, - 280074, - 280432, - 280613, - 280721, - 280433, - 280612, - 280446, - 280726, - 280272, - 280564, - 290931, - 280434, - 280443, - 280622, - 280673, - 148224, - 280722, - 280442, - 280275, - 280725, - 280273, - 280437, - 280630, - 149149, - 280307, - 280274, - 280438, - 280441, - 290932, - 280723, - 280724, - 280439, - 280656, - 280671, - 280440, - 280636, - 280536, - 280597, - 280530, - 156022, - 148862, - 280322, - 280669, - 149145, - 280682, - 280529, - 148872, - 280596, - 280323, - 280528, - 280324, - 280541, - 280683, - 280306, - 280600, - 148859, - 280325, - 280527, - 280538, - 156014, - 280639, - 280326, - 280524, - 280599, - 254109, - 280542, - 280684, - 280595, - 280327, - 280523, - 149154, - 280242, - 280305, - 155994, - 280328, - 280522, - 280621, - 280329, - 280668, - 280594, - 280685, - 280304, - 280521, - 156006, - 280330, - 280245, - 280331, - 280520, - 148877, - 280602, - 280309, - 280543, - 280332, - 280686, - 280640, - 155984, - 149150, - 280519, - 148230, - 280518, - 280303, - 280544, - 280593, - 280333, - 280687, - 280334, - 280246, - 148863, - 280517, - 280302, - 280310, - 280592, - 280335, - 280516, - 280336, - 280667, - 280688, - 156002, - 280337, - 148876, - 280247, - 280338, - 280515, - 156018, - 280689, - 280315, - 280635, - 280514, - 280301, - 280532, - 280641, - 280545, - 148225, - 280339, - 280314, - 280513, - 280591, - 280690, - 155990, - 280623, - 280340, - 280512, - 280341, - 280546, - 148873, - 280313, - 280588, - 280248, - 280626, - 280300, - 155998, - 280342, - 280511, - 280343, - 280691, - 280603, - 280249, - 280299, - 156010, - 280642, - 280344, - 280620, - 280637, - 280510, - 280345, - 280666, - 280509, - 280587, - 149160, - 148885, - 280346, - 280692, - 149170, - 280598, - 280508, - 280347, - 280507, - 280298, - 280547, - 148226, - 280693, - 280586, - 280348, - 280250, - 280349, - 280604, - 280297, - 280506, - 280316, - 280763, - 280505, - 280350, - 280548, - 280694, - 280643, - 280251, - 280762, - 280619, - 280351, - 148228, - 280504, - 149147, - 280585, - 280352, - 280665, - 280296, - 280503, - 280761, - 280353, - 280695, - 280500, - 280584, - 280499, - 280634, - 280354, - 280551, - 280252, - 280625, - 280760, - 280624, - 280355, - 280696, - 280356, - 148878, - 156019, - 280498, - 280295, - 280495, - 280644, - 280672, - 280552, - 280759, - 280357, - 280253, - 280697, - 280294, - 280583, - 280358, - 148881, - 280494, - 280758, - 280359, - 280664, - 280605, - 280493, - 280698, - 280360, - 149144, - 280582, - 280492, - 156015, - 280491, - 280699, - 280293, - 280757, - 280361, - 280254, - 280362, - 280645, - 280627, - 280553, - 280292, - 280756, - 280490, - 280363, - 280364, - 149166, - 280535, - 280489, - 280581, - 280755, - 280365, - 280540, - 148887, - 280700, - 148222, - 280554, - 280366, - 280618, - 280255, - 280606, - 280488, - 280680, - 280580, - 280754, - 280367, - 280663, - 280368, - 280701, - 280487, - 280679, - 280256, - 280753, - 280646, - 280317, - 280486, - 280369, - 280702, - 280370, - 280485, - 280555, - 149174, - 156004, - 280752, - 280579, - 280484, - 280371, - 148223, - 280633, - 280703, - 280678, - 280372, - 280483, - 280750, - 280578, - 280312, - 280257, - 280373, - 280617, - 280677, - 280482, - 280749, - 280556, - 280647, - 280374, - 280662, - 280704, - 280375, - 149143, - 280318, - 280258, - 280481, - 280748, - 280376, - 280480, - 280577, - 280533, - 280607, - 280705, - 280290, - 280377, - 148869, - 280479, - 280747, - 280378, - 280478, - 280557, - 280289, - 280706, - 280379, - 280259, - 280746, - 280648, - 280380, - 280311, - 280477, - 149162, - 280476, - 280576, - 280381, - 280558, - 148866, - 280707, - 280745, - 280382, - 280260, - 280670, - 280288, - 148889, - 280575, - 280383, - 280608, - 280475, - 280241, - 280661, - 280744, - 280384, - 156028, - 280474, - 280708, - 148868, - 280385, - 280628, - 280473, - 280743, - 280287, - 280386, - 280472, - 280649, - 280709, - 280261, - 280387, - 280632, - 280616, - 280286, - 280559, - 280574, - 148229, - 280742, - 280394, - 280471, - 280395, - 280539, - 280470, - 280573, - 280710, - 162016, - 280560, - 280741, - 280396, - 148867, - 280398, - 280469, - 280264, - 280308, - 280285, - 280660, - 280740, - 280399, - 280650, - 280468, - 280400, - 280711, - 280467, - 280284, - 280739, - 280265, - 280609, - 280615, - 280572, - 280402, - 280466, - 280403, - 156016, - 280319, - 149152, - 280738, - 280712, - 280571, - 280561, - 280404, - 280465, - 290928, - 280283, - 280713, - 280737, - 280407, - 280462, - 280408, - 280461, - 280651, - 280266, - 280282, - 280736, - 280610, - 280659, - 280409, - 280714, - 280570, - 280410, - 156020, - 280638, - 280460, - 280267, - 280459, - 280735, - 290929, - 280411, - 155988, - 280715, - 280281, - 280569, - 280412, - 280458, - 280457, - 280681, - 280734, - 280413, - 280631, - 280716, - 280280, - 280456, - 280414, - 280268, - 280733, - 280652, - 280417, - 280629, - 156025, - 280531, - 280455, - 280717, - 280568, - 280418, - 280658, - 280269, - 280732, - 280421, - 280279, - 149171, - 280454, - 280567, - 280422, - 280453, - 280731, - 280423, - 280321, - 280718, - 280240, - 280424, - 280562, - 280614, - 280730, - 148882, - 280653, - 280425, - 280452, - 280278, - 280451, - 280719, - 280534, - 280270, - 280426, - 280566, - 280611, - 280563, - 280450, - 290930, - 280729, - 280427, - 280537, - 280449, - 280720, - 280428, - 280271, - 280565, - 148884, - 156011, - 280277, - 280728, - 280429, - 280657, - 280430, - 280448, - 280601, - 280727, - 280447, - 280276, - 280655, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:45:27.527000+00:00', - }, - { - 'code': '94', - 'created_at': '2021-04-13T03:30:14.829244+00:00', - 'display_name': 'Train-Airplane-Cart', - 'id': 135708, - 'is_enabled': True, - 'name': 'Train-Airplane-Cart', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280611, - 280349, - 148876, - 280359, - 280288, - 280260, - 280452, - 280443, - 280337, - 280439, - 280604, - 280402, - 156002, - 280466, - 280554, - 280403, - 280688, - 280382, - 280371, - 280667, - 148884, - 280316, - 148866, - 280319, - 280336, - 280366, - 280516, - 280297, - 280759, - 156011, - 156016, - 280484, - 280506, - 148222, - 149152, - 280335, - 280745, - 280592, - 280707, - 280273, - 280255, - 280738, - 280434, - 280712, - 280571, - 280763, - 280482, - 280302, - 280310, - 280381, - 280540, - 280517, - 280729, - 280505, - 280724, - 280561, - 148863, - 280404, - 280465, - 290928, - 280283, - 148887, - 280350, - 280537, - 280246, - 148867, - 280334, - 280678, - 280576, - 280713, - 280357, - 280548, - 280558, - 280270, - 280687, - 280606, - 280737, - 280407, - 280277, - 280365, - 280333, - 280593, - 280493, - 280694, - 290930, - 280755, - 280613, - 280278, - 280643, - 280462, - 290931, - 280544, - 280703, - 280476, - 280311, - 149162, - 280697, - 280303, - 280408, - 280518, - 280618, - 280251, - 280539, - 280461, - 280519, - 280651, - 148230, - 280700, - 280477, - 280380, - 280699, - 280253, - 149150, - 280564, - 280648, - 280633, - 280491, - 280762, - 280677, - 280266, - 155984, - 280432, - 280450, - 280619, - 280581, - 280282, - 280736, - 280640, - 280535, - 280351, - 280686, - 280610, - 280659, - 280309, - 280276, - 280637, - 280746, - 280259, - 280488, - 280332, - 280728, - 280543, - 280555, - 148228, - 280617, - 280714, - 280379, - 280312, - 280602, - 280680, - 148877, - 280504, - 280373, - 280409, - 280520, - 280681, - 280289, - 280706, - 280307, - 280489, - 149147, - 149166, - 280570, - 280621, - 280410, - 280557, - 280451, - 280563, - 280585, - 280294, - 280638, - 280331, - 280272, - 280245, - 280664, - 280352, - 156020, - 280460, - 280330, - 156006, - 280267, - 280459, - 280735, - 280521, - 280364, - 280478, - 280304, - 280378, - 280566, - 280665, - 280580, - 280240, - 290929, - 280754, - 280411, - 155988, - 280685, - 280367, - 280296, - 148223, - 280594, - 280668, - 280726, - 280329, - 280578, - 280715, - 280281, - 280569, - 280503, - 280257, - 280522, - 280412, - 280599, - 280328, - 155994, - 280458, - 156015, - 280747, - 280363, - 280457, - 280761, - 280490, - 280305, - 280734, - 280429, - 280723, - 280695, - 280242, - 280413, - 280663, - 280353, - 280721, - 280479, - 280631, - 149154, - 280756, - 280292, - 280630, - 148869, - 280523, - 280377, - 280583, - 280657, - 280716, - 280280, - 280622, - 149174, - 280500, - 280701, - 280368, - 280487, - 280290, - 280705, - 156004, - 280327, - 280584, - 280358, - 280595, - 280414, - 280456, - 280684, - 280268, - 280607, - 280719, - 280542, - 280524, - 280733, - 254109, - 280652, - 280629, - 280499, - 280553, - 280417, - 280326, - 156025, - 280455, - 280698, - 280639, - 156014, - 280256, - 280679, - 280634, - 280605, - 280717, - 280531, - 280551, - 280568, - 280750, - 280354, - 280446, - 280577, - 280538, - 280527, - 280655, - 280418, - 280426, - 280430, - 280317, - 280480, - 280376, - 280325, - 148859, - 280483, - 280601, - 280658, - 280752, - 280252, - 148881, - 280492, - 280269, - 280306, - 280448, - 280732, - 280600, - 280645, - 280627, - 280760, - 280753, - 280683, - 280421, - 280624, - 280433, - 280279, - 280541, - 280372, - 280355, - 149171, - 280481, - 280324, - 280528, - 280582, - 156019, - 280748, - 280454, - 280362, - 280696, - 280567, - 280323, - 280494, - 280258, - 280596, - 280529, - 280579, - 280356, - 149149, - 280646, - 148872, - 280422, - 280486, - 148878, - 280453, - 280718, - 280321, - 149143, - 290932, - 280727, - 280682, - 280731, - 280533, - 280318, - 280375, - 280254, - 280498, - 280361, - 149145, - 280536, - 280510, - 280704, - 280345, - 280442, - 280287, - 280437, - 280386, - 280472, - 280620, - 280757, - 280666, - 280344, - 280438, - 280649, - 280314, - 280295, - 280673, - 280642, - 156010, - 280299, - 280709, - 280261, - 280387, - 280509, - 280293, - 280669, - 280632, - 280616, - 156022, - 280743, - 280275, - 280473, - 280603, - 280274, - 280423, - 280286, - 280587, - 280322, - 280249, - 280623, - 280385, - 280662, - 280449, - 149160, - 280758, - 280559, - 280691, - 280574, - 280628, - 148862, - 280343, - 280511, - 280742, - 148885, - 280424, - 280342, - 155998, - 280394, - 148229, - 280612, - 280346, - 280300, - 156028, - 148868, - 280374, - 280471, - 280313, - 280395, - 280470, - 280360, - 280692, - 280427, - 280626, - 280573, - 280588, - 280647, - 149170, - 280369, - 280708, - 280702, - 280720, - 280248, - 280710, - 280241, - 148873, - 162016, - 280562, - 280474, - 280384, - 280530, - 280546, - 280560, - 280741, - 280428, - 280341, - 280370, - 280347, - 280512, - 280534, - 280396, - 280398, - 280469, - 280598, - 280508, - 280644, - 280340, - 155990, - 280264, - 280285, - 280614, - 280547, - 280597, - 280744, - 280722, - 280690, - 280591, - 280507, - 280636, - 280625, - 280447, - 280661, - 280513, - 280670, - 280725, - 280298, - 148882, - 280660, - 280308, - 280740, - 280271, - 280485, - 280565, - 280339, - 280399, - 280495, - 280475, - 280608, - 280383, - 148225, - 148226, - 280441, - 280650, - 280545, - 280730, - 280468, - 148224, - 280301, - 280672, - 280693, - 280400, - 280514, - 280711, - 280656, - 280467, - 280671, - 280749, - 280586, - 280575, - 280635, - 280440, - 280284, - 280689, - 280532, - 280641, - 149144, - 280348, - 156018, - 280739, - 280552, - 148889, - 280315, - 280653, - 280515, - 280265, - 280338, - 280609, - 280615, - 280425, - 280250, - 280556, - 280247, - 280572, - 279822, - 279805, - 279757, - 280161, - 280177, - 279865, - 279917, - 280167, - 280210, - 279945, - 156003, - 279776, - 280236, - 279733, - 279862, - 279780, - 149164, - 279758, - 279730, - 280195, - 279813, - 279986, - 280237, - 279726, - 280235, - 279848, - 280464, - 280054, - 280010, - 280070, - 280148, - 280151, - 279856, - 280081, - 279762, - 280076, - 279799, - 279854, - 279746, - 279921, - 279961, - 280112, - 280066, - 280168, - 280436, - 156001, - 280215, - 149156, - 280035, - 279943, - 279800, - 279743, - 280002, - 280589, - 279804, - 280174, - 280021, - 280013, - 279912, - 279721, - 156008, - 279711, - 280198, - 279960, - 280393, - 280221, - 280009, - 280090, - 279971, - 280206, - 279833, - 279980, - 279906, - 280185, - 279738, - 148861, - 149169, - 280674, - 148886, - 155989, - 279770, - 279934, - 279875, - 279792, - 148888, - 280020, - 156000, - 280129, - 155999, - 280223, - 279774, - 280078, - 279796, - 279982, - 279950, - 279767, - 156021, - 280123, - 280012, - 280082, - 280170, - 279979, - 279901, - 279826, - 280497, - 280415, - 280208, - 279997, - 280431, - 280118, - 156024, - 280016, - 280097, - 279837, - 279864, - 155992, - 279718, - 280203, - 280392, - 279853, - 280158, - 149159, - 279701, - 279808, - 148858, - 279728, - 280142, - 280209, - 279709, - 280049, - 279893, - 280083, - 279907, - 279914, - 279723, - 279878, - 280095, - 279990, - 280005, - 280262, - 155995, - 279820, - 156026, - 280018, - 280094, - 148865, - 280590, - 279882, - 279970, - 279850, - 280163, - 280050, - 279764, - 156013, - 280496, - 280172, - 280124, - 280141, - 149151, - 279941, - 279772, - 280137, - 280092, - 279782, - 280165, - 280059, - 279859, - 279903, - 280420, - 279910, - 280028, - 280391, - 280036, - 280073, - 279765, - 280024, - 149173, - 280043, - 279852, - 280216, - 290067, - 280150, - 280134, - 279803, - 280131, - 149148, - 280127, - 280218, - 279773, - 280238, - 279788, - 280085, - 280143, - 279791, - 156023, - 279896, - 279801, - 279703, - 279739, - 280201, - 280071, - 279790, - 279787, - 279898, - 279857, - 280416, - 279753, - 280224, - 280231, - 279964, - 279959, - 279904, - 280232, - 279981, - 280025, - 280003, - 280230, - 280229, - 155987, - 279885, - 279855, - 279797, - 280037, - 280159, - 279729, - 279752, - 280063, - 280008, - 279978, - 280091, - 279783, - 280065, - 279802, - 279948, - 280128, - 280182, - 280263, - 155996, - 279823, - 279932, - 280244, - 280550, - 279889, - 280178, - 280140, - 148231, - 280060, - 279748, - 279968, - 279811, - 279789, - 280125, - 280192, - 149153, - 280228, - 148871, - 291035, - 156012, - 279841, - 279957, - 280119, - 280549, - 279947, - 280501, - 279742, - 280219, - 280052, - 280213, - 280444, - 280191, - 280069, - 280463, - 279828, - 279933, - 279963, - 279734, - 280180, - 279967, - 280194, - 280214, - 280080, - 279710, - 279954, - 279700, - 148883, - 279913, - 279923, - 280181, - 280179, - 279747, - 280029, - 279771, - 279712, - 280110, - 280046, - 279716, - 279719, - 148875, - 279879, - 279831, - 280022, - 279705, - 280133, - 279984, - 279985, - 279814, - 279830, - 279713, - 280147, - 279874, - 279775, - 280202, - 279839, - 279818, - 280239, - 280144, - 279886, - 280126, - 280193, - 279863, - 279785, - 279884, - 279876, - 279819, - 279825, - 279847, - 280320, - 280088, - 280186, - 279840, - 148870, - 279977, - 279919, - 279994, - 279991, - 280211, - 279843, - 280155, - 279760, - 279929, - 280075, - 290068, - 279717, - 149168, - 280023, - 149146, - 148227, - 279794, - 280139, - 279727, - 280079, - 279895, - 148860, - 280405, - 279755, - 149158, - 280084, - 279958, - 279707, - 279838, - 280135, - 280115, - 280096, - 279821, - 279871, - 280204, - 280105, - 290069, - 279861, - 280654, - 280234, - 280011, - 279714, - 280099, - 280000, - 279887, - 280225, - 280435, - 280166, - 279834, - 280062, - 279817, - 279962, - 280220, - 279974, - 279927, - 280045, - 279973, - 279883, - 280171, - 280056, - 279873, - 279836, - 279851, - 279749, - 280227, - 280130, - 279937, - 149172, - 279880, - 279944, - 279779, - 279938, - 279815, - 280032, - 279751, - 279916, - 148864, - 280103, - 280222, - 279858, - 155986, - 279966, - 279737, - 279769, - 280042, - 279999, - 279778, - 279866, - 280114, - 280200, - 280205, - 279736, - 279890, - 280068, - 279763, - 280502, - 280196, - 279993, - 279931, - 148879, - 279806, - 280100, - 280176, - 149157, - 280751, - 279724, - 280526, - 279969, - 280390, - 279899, - 155991, - 280121, - 280676, - 280044, - 279809, - 280026, - 280015, - 280093, - 280154, - 279983, - 279942, - 279869, - 280038, - 149175, - 279951, - 280138, - 280057, - 280525, - 290084, - 279905, - 148890, - 280074, - 280197, - 280445, - 280067, - 280188, - 279722, - 280109, - 280116, - 280149, - 280089, - 155997, - 280006, - 280033, - 279939, - 280132, - 280055, - 280064, - 279708, - 279810, - 279888, - 156009, - 280162, - 149165, - 279918, - 279975, - 279946, - 279761, - 149161, - 279952, - 279781, - 280101, - 280175, - 279725, - 279892, - 290065, - 279786, - 280401, - 280243, - 279992, - 280108, - 149155, - 280017, - 279881, - 246836, - 148880, - 280122, - 280087, - 280031, - 280164, - 279915, - 280173, - 279972, - 280051, - 280120, - 279930, - 279768, - 280190, - 280072, - 279731, - 156027, - 280027, - 149163, - 279832, - 279995, - 279920, - 279897, - 279795, - 279807, - 280406, - 280048, - 279777, - 280102, - 280145, - 280156, - 279740, - 279868, - 279812, - 279759, - 280217, - 279909, - 280675, - 279935, - 280189, - 279849, - 280047, - 279754, - 279706, - 279987, - 155993, - 280419, - 280389, - 280104, - 280041, - 280001, - 280233, - 280199, - 279720, - 280187, - 280388, - 279835, - 279955, - 279844, - 280113, - 279704, - 279798, - 279750, - 279965, - 280146, - 279860, - 280053, - 280291, - 280169, - 280106, - 280212, - 279936, - 280111, - 148874, - 280004, - 280007, - 279922, - 279715, - 280040, - 279956, - 279900, - 280153, - 280019, - 155985, - 279996, - 279793, - 156007, - 280098, - 279824, - 279702, - 279953, - 280157, - 279816, - 279872, - 279924, - 279940, - 279867, - 279894, - 279877, - 279870, - 280160, - 280014, - 280207, - 279949, - 280039, - 280058, - 280061, - 149167, - 279926, - 280030, - 279829, - 279891, - 279744, - 279842, - 279911, - 280183, - 280397, - 280184, - 280117, - 156005, - 279845, - 279998, - 279988, - 279745, - 279908, - 279989, - 279735, - 279732, - 280226, - 279846, - 279928, - 279902, - 280086, - 279766, - 279976, - 280107, - 279756, - 280152, - 280136, - 279925, - 279741, - 279827, - 280034, - 279784, - 280077, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:45:25.128753+00:00', - }, - { - 'code': '86', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Postage & Delivery', - 'id': 133654, - 'is_enabled': True, - 'name': 'Postage & Delivery', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280547, - 280278, - 280279, - 280666, - 280544, - 148882, - 280668, - 280625, - 280548, - 280543, - 280542, - 280280, - 280277, - 280669, - 156025, - 280541, - 280551, - 280665, - 280670, - 280540, - 280281, - 280539, - 280552, - 280671, - 280538, - 280282, - 280537, - 156020, - 280553, - 148224, - 280672, - 280276, - 280664, - 280536, - 280283, - 280535, - 280554, - 280673, - 280534, - 280533, - 280284, - 280681, - 156016, - 280555, - 280275, - 280663, - 280532, - 280531, - 280285, - 280556, - 280682, - 280530, - 280529, - 280683, - 280286, - 280528, - 280557, - 162016, - 280662, - 149149, - 280527, - 280274, - 280684, - 280558, - 280287, - 280524, - 280762, - 280523, - 280685, - 280522, - 280288, - 280559, - 148868, - 280661, - 280521, - 280273, - 280686, - 280520, - 280560, - 280289, - 280519, - 149162, - 280687, - 280518, - 280290, - 280763, - 280561, - 280517, - 280660, - 280688, - 280516, - 156011, - 280623, - 280689, - 280515, - 290928, - 280677, - 280272, - 149143, - 280514, - 280690, - 280513, - 290929, - 280659, - 280678, - 280512, - 280691, - 280511, - 280562, - 280679, - 280271, - 280658, - 280510, - 149174, - 280692, - 280509, - 280563, - 280680, - 280508, - 280693, - 280507, - 280506, - 290930, - 280292, - 149171, - 280657, - 280270, - 280694, - 148887, - 280505, - 290931, - 280504, - 280293, - 280695, - 280503, - 280500, - 290932, - 280294, - 280696, - 280656, - 280269, - 156015, - 280499, - 280498, - 280564, - 280697, - 280350, - 280295, - 280495, - 280494, - 280698, - 280565, - 280296, - 280655, - 280493, - 155988, - 148878, - 280492, - 280566, - 280699, - 280491, - 280268, - 280297, - 280490, - 148228, - 280567, - 280700, - 280653, - 280489, - 280701, - 280488, - 280298, - 280568, - 280487, - 280702, - 280267, - 280486, - 280299, - 280240, - 149170, - 280569, - 280485, - 280652, - 280703, - 280484, - 280300, - 280483, - 280570, - 280704, - 149152, - 280266, - 280482, - 280301, - 148873, - 280481, - 280571, - 280651, - 280705, - 280480, - 280302, - 280479, - 280572, - 280706, - 148876, - 280478, - 280265, - 280477, - 280303, - 280573, - 280241, - 280650, - 280707, - 280476, - 280475, - 280304, - 280708, - 280574, - 148230, - 280474, - 148229, - 280264, - 280473, - 280709, - 280575, - 280649, - 280305, - 280472, - 280471, - 280710, - 280306, - 280576, - 280470, - 149154, - 280469, - 280711, - 280468, - 280577, - 280648, - 280307, - 148889, - 280467, - 280261, - 149145, - 280712, - 280622, - 280466, - 280578, - 280308, - 280647, - 280713, - 280465, - 280462, - 280579, - 280714, - 280461, - 280309, - 149144, - 280460, - 280715, - 280580, - 280260, - 280646, - 280459, - 280310, - 280458, - 280581, - 280716, - 280457, - 280311, - 148869, - 148223, - 280456, - 280582, - 280259, - 280717, - 280645, - 280455, - 280312, - 280454, - 280583, - 280718, - 280453, - 280452, - 280313, - 156019, - 280719, - 280584, - 280451, - 280644, - 280258, - 280314, - 280450, - 280720, - 280585, - 280449, - 280448, - 280315, - 280721, - 156022, - 280447, - 280586, - 156004, - 280643, - 280257, - 280446, - 280316, - 280722, - 280587, - 280443, - 280442, - 280723, - 280317, - 148222, - 280441, - 280353, - 280588, - 280440, - 280642, - 280724, - 280318, - 280439, - 280591, - 280725, - 280438, - 280256, - 280437, - 280319, - 156028, - 280726, - 280592, - 280434, - 280641, - 280352, - 149166, - 280433, - 280321, - 280727, - 280593, - 280432, - 280430, - 280255, - 280322, - 280728, - 280429, - 280594, - 148862, - 280640, - 280428, - 280729, - 280323, - 280427, - 280595, - 148872, - 280426, - 148881, - 280254, - 280730, - 280425, - 280596, - 280324, - 280639, - 280424, - 280731, - 280423, - 280325, - 280597, - 148859, - 280422, - 280732, - 280253, - 280421, - 280326, - 280418, - 280598, - 280638, - 156014, - 280733, - 280417, - 280414, - 280599, - 280327, - 280734, - 149147, - 280252, - 280413, - 280412, - 280600, - 280637, - 280328, - 280735, - 148867, - 155994, - 280411, - 280410, - 280601, - 280736, - 280329, - 280409, - 280408, - 280737, - 280330, - 280602, - 280636, - 280407, - 156006, - 280251, - 280738, - 280404, - 280603, - 280403, - 280331, - 280635, - 280739, - 149160, - 280402, - 280400, - 280604, - 280332, - 148877, - 280250, - 280740, - 280399, - 280398, - 280605, - 280333, - 280741, - 280634, - 280396, - 149150, - 280395, - 280606, - 280742, - 280334, - 280394, - 280387, - 280743, - 280607, - 280249, - 280386, - 280633, - 280335, - 148863, - 280385, - 280608, - 280744, - 280384, - 280336, - 148225, - 280248, - 280383, - 280745, - 280609, - 280382, - 280632, - 280337, - 280381, - 156002, - 280746, - 280610, - 280380, - 280379, - 280338, - 280747, - 280378, - 280611, - 280247, - 280631, - 280377, - 280339, - 280748, - 156018, - 280612, - 280376, - 280375, - 280749, - 155984, - 280340, - 280374, - 155990, - 280613, - 280246, - 280630, - 280750, - 280373, - 280341, - 280372, - 280614, - 280752, - 280371, - 280370, - 280342, - 280753, - 280369, - 280615, - 155998, - 280629, - 280368, - 280245, - 280343, - 280616, - 280754, - 280367, - 280366, - 280755, - 280344, - 280365, - 280617, - 254109, - 280628, - 156010, - 280364, - 280756, - 280345, - 280363, - 280618, - 280362, - 280242, - 280757, - 280361, - 280346, - 148885, - 280619, - 280360, - 280627, - 280758, - 148866, - 280359, - 280347, - 280620, - 280358, - 280759, - 280624, - 280357, - 280348, - 280356, - 280621, - 280626, - 148226, - 280760, - 280355, - 280354, - 280351, - 280349, - 280761, - 280546, - 148884, - 280667, - 280545, - 148871, - 279966, - 280199, - 279979, - 279870, - 279988, - 280238, - 279963, - 280124, - 280032, - 280196, - 279773, - 279893, - 156023, - 279927, - 279776, - 280224, - 279750, - 280050, - 280549, - 279896, - 280589, - 280129, - 280006, - 280013, - 148875, - 280033, - 279962, - 280195, - 279770, - 279708, - 279749, - 280075, - 279764, - 279824, - 279774, - 148870, - 279777, - 280045, - 246836, - 280130, - 280038, - 280200, - 280100, - 279897, - 149146, - 279868, - 279961, - 280194, - 279967, - 280102, - 280526, - 279892, - 279823, - 279898, - 280058, - 279845, - 280082, - 280193, - 280123, - 149164, - 280131, - 155987, - 279726, - 279828, - 279989, - 148861, - 279713, - 279960, - 279775, - 279733, - 149167, - 156001, - 279778, - 280161, - 280228, - 280525, - 280021, - 280590, - 279701, - 280031, - 279763, - 280099, - 279822, - 280132, - 279899, - 280201, - 280192, - 280222, - 279767, - 279867, - 279731, - 279959, - 279876, - 279986, - 279748, - 279779, - 279900, - 279968, - 149168, - 280502, - 280191, - 280133, - 280077, - 280067, - 290065, - 279709, - 280014, - 280229, - 280122, - 279958, - 279700, - 279707, - 279821, - 279879, - 155997, - 279891, - 280214, - 279902, - 279990, - 279866, - 279780, - 280074, - 149165, - 279829, - 279798, - 156024, - 280134, - 156000, - 280190, - 290067, - 279957, - 280083, - 279737, - 280654, - 279820, - 279932, - 280501, - 279704, - 279871, - 148874, - 280086, - 279755, - 279903, - 280202, - 280098, - 280189, - 280135, - 279725, - 279901, - 279846, - 279969, - 279751, - 280497, - 280011, - 280005, - 280120, - 279747, - 279956, - 280030, - 280055, - 279781, - 280188, - 279890, - 279819, - 279904, - 156012, - 280136, - 280015, - 280103, - 279757, - 279838, - 279991, - 280073, - 280219, - 279766, - 280230, - 279955, - 279935, - 280496, - 280059, - 280041, - 280049, - 279830, - 279782, - 280389, - 279905, - 280137, - 155995, - 280203, - 149158, - 280187, - 279842, - 279710, - 279954, - 279818, - 280029, - 279865, - 279970, - 279906, - 279799, - 280097, - 156008, - 279783, - 279728, - 280119, - 280110, - 280138, - 280186, - 279889, - 279847, - 280464, - 155992, - 280034, - 279817, - 279985, - 279953, - 279907, - 280674, - 280231, - 280028, - 156009, - 280185, - 280037, - 280139, - 279992, - 290068, - 149156, - 280463, - 280184, - 279952, - 279765, - 148886, - 279784, - 279744, - 279878, - 279864, - 279908, - 280096, - 279746, - 279816, - 280140, - 280016, - 280204, - 280212, - 279872, - 280072, - 280445, - 280121, - 279971, - 279951, - 149151, - 280060, - 279888, - 279717, - 279909, - 280164, - 279848, - 280118, - 280183, - 279785, - 280232, - 280141, - 279831, - 279802, - 280104, - 279732, - 280048, - 279815, - 280125, - 279742, - 279993, - 279950, - 279999, - 279910, - 280675, - 279734, - 280182, - 280142, - 280061, - 279786, - 279863, - 280095, - 280078, - 279724, - 280205, - 280027, - 280444, - 279762, - 279814, - 279752, - 155989, - 279980, - 149175, - 279949, - 279911, - 156027, - 279972, - 280181, - 280151, - 280143, - 280218, - 149173, - 280044, - 279745, - 280117, - 280180, - 279711, - 280436, - 280233, - 279706, - 280039, - 279839, - 280239, - 279887, - 279948, - 279912, - 279855, - 148883, - 279787, - 280160, - 279862, - 279853, - 279813, - 279832, - 280220, - 280144, - 279929, - 280017, - 280071, - 280435, - 279994, - 280676, - 279841, - 280084, - 280010, - 279947, - 279913, - 280179, - 280116, - 279756, - 155999, - 280163, - 279812, - 279788, - 280206, - 279984, - 290069, - 280221, - 280145, - 279973, - 280004, - 149155, - 280094, - 279914, - 279886, - 279723, - 279946, - 280062, - 279849, - 280042, - 279741, - 280178, - 280146, - 280026, - 279789, - 280213, - 279833, - 279743, - 156013, - 279873, - 280431, - 279811, - 280234, - 279761, - 155993, - 279945, - 279915, - 280177, - 280225, - 280207, - 280147, - 279995, - 279856, - 280176, - 280035, - 279712, - 280115, - 279861, - 280001, - 280420, - 280018, - 279885, - 280109, - 279944, - 279916, - 148865, - 279974, - 280105, - 148888, - 280217, - 149157, - 279790, - 279850, - 280070, - 279810, - 280148, - 280226, - 280235, - 280054, - 280093, - 280419, - 280008, - 280175, - 279917, - 279928, - 280751, - 279943, - 280007, - 155996, - 279729, - 279809, - 280227, - 148890, - 279791, - 156005, - 279730, - 148879, - 280149, - 279918, - 279760, - 280215, - 280174, - 279996, - 279942, - 280025, - 279860, - 280150, - 280208, - 279808, - 148858, - 279792, - 279703, - 279884, - 149161, - 280066, - 280416, - 279919, - 279975, - 280051, - 280063, - 280092, - 279719, - 280114, - 279941, - 280173, - 280243, - 279834, - 279740, - 279840, - 279857, - 280152, - 279722, - 279851, - 280172, - 279714, - 280022, - 280209, - 280415, - 279920, - 279931, - 280236, - 155985, - 148231, - 279880, - 279852, - 279983, - 280085, - 280019, - 156021, - 148227, - 279875, - 280047, - 279940, - 280079, - 280165, - 279859, - 280392, - 279807, - 279793, - 279759, - 280000, - 280069, - 280244, - 279997, - 280153, - 280107, - 279874, - 148864, - 280406, - 279976, - 280171, - 279921, - 148860, - 280091, - 280009, - 280113, - 279939, - 280262, - 280154, - 279883, - 279806, - 279794, - 280237, - 280024, - 280080, - 279835, - 279922, - 279705, - 279854, - 279753, - 280170, - 279739, - 279938, - 280169, - 280155, - 280210, - 279754, - 149172, - 280043, - 280068, - 280064, - 149148, - 279805, - 279795, - 279858, - 156026, - 280405, - 280112, - 279923, - 279937, - 280263, - 280106, - 280020, - 280168, - 156007, - 280036, - 279998, - 280156, - 279977, - 280081, - 279702, - 279882, - 279715, - 280003, - 148880, - 279924, - 280159, - 279721, - 280401, - 280320, - 279804, - 279736, - 280090, - 279836, - 149163, - 279936, - 149153, - 280052, - 280065, - 280167, - 279796, - 280216, - 280002, - 279758, - 280157, - 280390, - 156003, - 280089, - 279925, - 280211, - 280087, - 280053, - 279718, - 279800, - 280111, - 280023, - 280391, - 279738, - 279934, - 280388, - 280158, - 279881, - 279930, - 279803, - 279797, - 149169, - 279837, - 279978, - 280397, - 279926, - 280162, - 280166, - 279982, - 279720, - 279716, - 279801, - 279933, - 279877, - 280126, - 280076, - 280056, - 279965, - 155986, - 279987, - 279894, - 280198, - 280223, - 291035, - 280012, - 280088, - 279843, - 279771, - 279981, - 279826, - 279895, - 155991, - 280046, - 280197, - 290084, - 280127, - 279768, - 279727, - 280108, - 280040, - 149159, - 279964, - 279769, - 280101, - 279772, - 279827, - 280393, - 279869, - 280550, - 280057, - 279825, - 280128, - 279735, - 280291, - 279844, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '70200', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Interest Expense', - 'id': 133655, - 'is_enabled': True, - 'name': 'Interest Expense', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '82', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Meals & Entertainment', - 'id': 133656, - 'is_enabled': True, - 'name': 'Meals & Entertainment', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280343, - 280757, - 280690, - 280364, - 280265, - 280576, - 280331, - 280477, - 280333, - 280514, - 280306, - 280529, - 280595, - 280303, - 280710, - 280683, - 280287, - 280635, - 280471, - 280739, - 280573, - 280558, - 280605, - 280286, - 280650, - 149160, - 280563, - 280707, - 280242, - 280684, - 280528, - 280398, - 280439, - 280402, - 280666, - 280727, - 280274, - 280362, - 280472, - 280476, - 280432, - 280305, - 280475, - 280400, - 162016, - 280649, - 280611, - 280304, - 280241, - 280557, - 280505, - 280708, - 280575, - 280756, - 280591, - 280399, - 280246, - 280709, - 280604, - 280473, - 280264, - 280740, - 280345, - 280618, - 280509, - 280574, - 280662, - 148872, - 148229, - 280332, - 148230, - 149143, - 280762, - 280250, - 280656, - 280527, - 280363, - 148877, - 149149, - 280474, - 280350, - 280271, - 280342, - 290931, - 280630, - 280373, - 280352, - 280728, - 280692, - 149174, - 156015, - 280750, - 280658, - 280425, - 280269, - 148222, - 280641, - 280322, - 280378, - 280317, - 280255, - 280753, - 149166, - 280723, - 280442, - 280761, - 280596, - 280747, - 280499, - 280324, - 280614, - 280498, - 280349, - 280280, - 280369, - 280639, - 280748, - 280443, - 280338, - 280564, - 280277, - 280587, - 280657, - 280697, - 280440, - 280424, - 280272, - 280351, - 280669, - 280295, - 280677, - 280722, - 280495, - 280316, - 280446, - 280353, - 280257, - 280731, - 280379, - 280512, - 280592, - 280615, - 280423, - 156011, - 156025, - 280643, - 280691, - 280380, - 290928, - 280541, - 280354, - 280726, - 280746, - 280694, - 280542, - 280325, - 156018, - 155998, - 280610, - 280551, - 280494, - 148859, - 156004, - 280698, - 156028, - 280515, - 280586, - 280447, - 280597, - 280371, - 280565, - 280665, - 280670, - 156022, - 280296, - 280355, - 280375, - 280422, - 280667, - 280629, - 280642, - 280655, - 280721, - 280760, - 280493, - 156002, - 280588, - 280315, - 280448, - 280449, - 155988, - 280732, - 280724, - 280689, - 280540, - 280281, - 280763, - 280516, - 280253, - 280381, - 149171, - 148226, - 280337, - 280339, - 280421, - 148878, - 280368, - 280585, - 280720, - 280640, - 280492, - 280314, - 280450, - 280566, - 280539, - 280326, - 280552, - 280292, - 280418, - 280699, - 280258, - 280632, - 280644, - 280504, - 280688, - 280660, - 280671, - 280598, - 280491, - 280382, - 280626, - 280451, - 280749, - 280268, - 280297, - 280638, - 280270, - 280245, - 280545, - 280584, - 280293, - 280517, - 280729, - 280621, - 280609, - 280538, - 148867, - 280282, - 280490, - 156014, - 280561, - 280511, - 280719, - 156019, - 280745, - 280278, - 280356, - 148228, - 280733, - 280730, - 280567, - 280700, - 280313, - 280452, - 280290, - 280428, - 280518, - 280417, - 280348, - 280453, - 280653, - 148882, - 280383, - 290930, - 280537, - 280248, - 280506, - 280414, - 280718, - 156020, - 280553, - 280687, - 280583, - 280454, - 280547, - 149162, - 148224, - 148225, - 280319, - 280312, - 280455, - 280599, - 280441, - 280489, - 280701, - 280357, - 280327, - 280562, - 280336, - 280437, - 280318, - 280645, - 280488, - 280298, - 280759, - 280623, - 280734, - 155984, - 280519, - 280276, - 280279, - 280624, - 280717, - 280259, - 280254, - 280695, - 280384, - 149147, - 280616, - 280664, - 280672, - 280744, - 280568, - 280252, - 280323, - 280582, - 280456, - 280612, - 280608, - 280289, - 280487, - 290929, - 280413, - 148223, - 280702, - 280754, - 280507, - 280536, - 280283, - 280267, - 280412, - 148869, - 280358, - 280486, - 280311, - 280457, - 280340, - 280299, - 280367, - 280544, - 149170, - 280716, - 148887, - 280385, - 280620, - 280600, - 280513, - 280429, - 280560, - 280520, - 280637, - 148863, - 280581, - 280458, - 280372, - 280535, - 280554, - 280427, - 280335, - 280569, - 280310, - 280328, - 280459, - 280646, - 280546, - 280735, - 280366, - 280433, - 280347, - 280485, - 280659, - 280652, - 280673, - 280703, - 280503, - 155994, - 280633, - 280260, - 280686, - 280321, - 280273, - 280411, - 280534, - 280359, - 280374, - 280484, - 280300, - 280386, - 280256, - 280377, - 280580, - 280715, - 280460, - 280521, - 280410, - 280249, - 280661, - 149144, - 280679, - 148866, - 280607, - 280678, - 148862, - 280533, - 280284, - 280483, - 280309, - 280461, - 280601, - 280570, - 148881, - 280500, - 280755, - 280704, - 280758, - 280714, - 280736, - 290932, - 280743, - 148868, - 280681, - 280329, - 149152, - 156016, - 280725, - 280365, - 280409, - 280266, - 280693, - 280579, - 280555, - 280462, - 280387, - 280482, - 280752, - 280559, - 280713, - 280465, - 280301, - 280275, - 280294, - 280408, - 280334, - 280344, - 280627, - 280647, - 280240, - 148873, - 280737, - 280394, - 280663, - 280593, - 148884, - 280308, - 155990, - 280360, - 280481, - 280631, - 280330, - 280571, - 280288, - 280508, - 280522, - 280619, - 280578, - 280625, - 280466, - 280742, - 280532, - 280602, - 280438, - 280651, - 280636, - 280705, - 280370, - 280712, - 149145, - 280617, - 280531, - 280285, - 280341, - 254109, - 280407, - 280548, - 280261, - 280606, - 280426, - 280480, - 156006, - 148889, - 280467, - 280696, - 280479, - 280302, - 148885, - 280251, - 280543, - 280430, - 156010, - 280572, - 280395, - 280307, - 280247, - 280648, - 280346, - 280577, - 280622, - 280468, - 280628, - 280594, - 280556, - 280738, - 148876, - 280668, - 280680, - 280404, - 149150, - 280682, - 280711, - 280469, - 280706, - 280376, - 280434, - 280685, - 280523, - 280396, - 280510, - 280530, - 149154, - 280524, - 280470, - 280613, - 280361, - 280603, - 280741, - 280478, - 280634, - 280403, - 280188, - 279785, - 280045, - 280134, - 148886, - 279796, - 280232, - 279999, - 280141, - 279878, - 156024, - 148870, - 279831, - 280104, - 279732, - 280048, - 279829, - 279815, - 149165, - 279825, - 280125, - 279742, - 280074, - 280002, - 279993, - 279950, - 280129, - 279758, - 279910, - 280675, - 279802, - 279780, - 280199, - 280182, - 280052, - 280142, - 279866, - 280061, - 279734, - 279863, - 279786, - 280157, - 279990, - 280095, - 279902, - 280078, - 279724, - 280027, - 280444, - 279762, - 156003, - 279891, - 279980, - 280205, - 279814, - 279752, - 155997, - 155989, - 279949, - 149175, - 156001, - 279925, - 279911, - 156027, - 279879, - 280390, - 279972, - 279821, - 280214, - 280181, - 280151, - 280143, - 280218, - 279700, - 280211, - 280010, - 279745, - 279750, - 280180, - 280117, - 149159, - 279958, - 280087, - 279711, - 280436, - 149173, - 280229, - 279717, - 280039, - 279706, - 280122, - 279718, - 280233, - 279887, - 279798, - 279856, - 279948, - 280044, - 279912, - 279966, - 280014, - 148883, - 280589, - 279931, - 279787, - 279862, - 280397, - 279709, - 279813, - 279839, - 279832, - 279707, - 280077, - 279800, - 280144, - 279841, - 280017, - 280160, - 280071, - 280111, - 149155, - 280435, - 280220, - 279994, - 280133, - 156023, - 280676, - 279756, - 280391, - 280191, - 280084, - 280179, - 279947, - 280023, - 279913, - 280502, - 280116, - 279964, - 155999, - 279812, - 279968, - 279896, - 279731, - 280206, - 279900, - 279788, - 279984, - 279853, - 279934, - 149168, - 280145, - 280163, - 280004, - 149157, - 280108, - 279973, - 280549, - 290069, - 280049, - 280221, - 280094, - 279779, - 279886, - 279914, - 279723, - 280388, - 279946, - 280213, - 279876, - 279735, - 280062, - 280101, - 279849, - 279748, - 280042, - 279741, - 280158, - 280178, - 279986, - 280146, - 155993, - 280026, - 279789, - 279743, - 279881, - 279833, - 279811, - 156013, - 279959, - 279755, - 280431, - 280050, - 279873, - 279837, - 280070, - 279761, - 279930, - 280234, - 279767, - 279945, - 280161, - 279915, - 280177, - 279803, - 279867, - 280225, - 155987, - 280207, - 280147, - 280201, - 279738, - 279995, - 280176, - 279769, - 279899, - 279797, - 279712, - 279861, - 280115, - 280132, - 280035, - 280420, - 148858, - 280018, - 279885, - 279822, - 279978, - 280021, - 279944, - 280001, - 279927, - 279916, - 148865, - 279855, - 280099, - 148888, - 279974, - 280109, - 280105, - 280192, - 280217, - 280040, - 279926, - 279790, - 279850, - 279810, - 280162, - 280222, - 280148, - 280128, - 280226, - 279701, - 280224, - 280054, - 280093, - 280419, - 280590, - 280175, - 280166, - 279929, - 148227, - 279917, - 280031, - 280235, - 279943, - 280751, - 280007, - 280228, - 279730, - 155996, - 280008, - 280525, - 279729, - 148890, - 279809, - 280227, - 279928, - 279982, - 156005, - 279763, - 279791, - 279772, - 148879, - 279733, - 280149, - 279778, - 279801, - 279918, - 280174, - 279760, - 149167, - 279720, - 280025, - 279996, - 279942, - 279860, - 279776, - 280058, - 280173, - 279989, - 280067, - 280208, - 280150, - 279808, - 279775, - 279792, - 279703, - 279884, - 279716, - 148861, - 279875, - 149161, - 279960, - 280088, - 280416, - 279828, - 279933, - 279975, - 279919, - 280215, - 280051, - 280066, - 280063, - 280092, - 279893, - 279726, - 279719, - 280114, - 279941, - 279773, - 279845, - 279877, - 280243, - 279740, - 280131, - 279869, - 279834, - 279840, - 280126, - 280107, - 280123, - 280172, - 280152, - 279722, - 280193, - 280000, - 280076, - 279714, - 279851, - 290084, - 280209, - 280415, - 279920, - 279898, - 280236, - 279880, - 155985, - 156021, - 155986, - 148231, - 279965, - 279983, - 279823, - 149164, - 279844, - 280196, - 280019, - 280056, - 279892, - 280047, - 280392, - 279940, - 280082, - 279859, - 280113, - 148864, - 279857, - 280079, - 279987, - 279807, - 280102, - 279759, - 280526, - 279793, - 280069, - 279894, - 280244, - 279967, - 280165, - 279827, - 280153, - 280032, - 280198, - 279874, - 279997, - 280085, - 280406, - 280194, - 279976, - 280171, - 280046, - 279961, - 280124, - 279921, - 148860, - 280091, - 280038, - 280009, - 280223, - 280080, - 279939, - 279868, - 291035, - 279897, - 280154, - 279883, - 279806, - 280200, - 279794, - 280262, - 280100, - 280012, - 280237, - 280024, - 279835, - 280130, - 279713, - 279922, - 149146, - 279705, - 280170, - 280238, - 279754, - 279739, - 279843, - 280022, - 279938, - 246836, - 280169, - 280550, - 279777, - 280155, - 280210, - 279753, - 149172, - 280043, - 279774, - 280068, - 279771, - 149148, - 279764, - 280064, - 279805, - 279963, - 279824, - 279795, - 279858, - 279826, - 280405, - 148871, - 280112, - 280075, - 156007, - 149169, - 279923, - 279854, - 156026, - 279937, - 279988, - 279708, - 280263, - 280168, - 279895, - 280020, - 280036, - 280106, - 280089, - 279770, - 280291, - 280156, - 279998, - 280195, - 279977, - 280159, - 279852, - 280081, - 155991, - 279981, - 280003, - 279702, - 279890, - 279704, - 279781, - 156012, - 279819, - 279882, - 279904, - 280030, - 280136, - 279962, - 280015, - 279956, - 279757, - 280496, - 280073, - 280103, - 280219, - 279766, - 280120, - 279991, - 279955, - 280197, - 279747, - 279935, - 279924, - 280055, - 280059, - 280230, - 280239, - 148880, - 280041, - 155995, - 279830, - 279979, - 279782, - 280011, - 279901, - 279721, - 279905, - 280137, - 280057, - 279749, - 280203, - 280389, - 280497, - 280187, - 279842, - 280005, - 280086, - 280401, - 279710, - 149158, - 279954, - 279751, - 279818, - 279870, - 279838, - 280029, - 279799, - 279865, - 280110, - 279846, - 279970, - 279906, - 279969, - 280097, - 280320, - 156008, - 279804, - 279783, - 280119, - 279725, - 280138, - 280186, - 280033, - 280135, - 279889, - 280464, - 279736, - 290065, - 279847, - 155992, - 279817, - 280034, - 280189, - 279985, - 149163, - 279953, - 280098, - 280090, - 279907, - 280202, - 280674, - 280127, - 280231, - 280028, - 279715, - 279728, - 280185, - 279903, - 280037, - 279836, - 280139, - 279992, - 156009, - 290068, - 149156, - 279871, - 280463, - 280184, - 279952, - 279765, - 148874, - 279936, - 279816, - 290067, - 279784, - 279864, - 279744, - 280393, - 280083, - 148875, - 280501, - 280096, - 279908, - 279746, - 149153, - 280654, - 280140, - 280016, - 279820, - 280072, - 279727, - 280204, - 279872, - 280065, - 280445, - 280121, - 279951, - 279957, - 280167, - 279971, - 280212, - 279932, - 149151, - 280013, - 280060, - 279888, - 279737, - 280164, - 280190, - 280183, - 280216, - 279909, - 280006, - 280118, - 280053, - 156000, - 279848, - 279768, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '186', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'ash', - 'id': 133657, - 'is_enabled': True, - 'name': 'ash', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280035, - 279910, - 280022, - 279938, - 280143, - 280420, - 279769, - 279966, - 246836, - 280169, - 290084, - 280132, - 280098, - 279777, - 280021, - 279758, - 280393, - 279797, - 280151, - 280155, - 280115, - 279712, - 279713, - 280217, - 279848, - 280210, - 279826, - 280176, - 279907, - 279753, - 279861, - 279995, - 148858, - 280083, - 279771, - 280147, - 280202, - 280043, - 279872, - 280068, - 279750, - 279899, - 279821, - 279867, - 280207, - 279839, - 280225, - 155987, - 280177, - 279915, - 280141, - 149148, - 280674, - 149172, - 279803, - 280074, - 279737, - 280064, - 279764, - 156007, - 279858, - 279805, - 280052, - 279767, - 280445, - 280028, - 279824, - 279945, - 279930, - 280183, - 279795, - 279972, - 280089, - 280234, - 279950, - 279755, - 279761, - 280070, - 280405, - 280181, - 280201, - 280231, - 280112, - 279925, - 279752, - 279963, - 280065, - 279728, - 280075, - 156027, - 279988, - 280161, - 279911, - 279923, - 280185, - 279993, - 279937, - 279879, - 279873, - 280127, - 279708, - 279903, - 279959, - 280431, - 149165, - 280263, - 280168, - 280108, - 156013, - 279811, - 279833, - 279881, - 279743, - 279789, - 149175, - 279748, - 280167, - 280020, - 279895, - 279986, - 279927, - 280026, - 280146, - 280037, - 280036, - 280159, - 279949, - 279742, - 155989, - 279854, - 279770, - 279870, - 279981, - 156001, - 279837, - 280139, - 280156, - 280158, - 279871, - 279998, - 279741, - 279836, - 280178, - 280042, - 279856, - 279977, - 279951, - 280106, - 279992, - 280081, - 155997, - 279849, - 279717, - 280195, - 156003, - 156026, - 280003, - 280190, - 280062, - 279876, - 155991, - 280388, - 280188, - 279707, - 279946, - 280125, - 279890, - 290068, - 279723, - 279853, - 279781, - 156009, - 149156, - 279914, - 156012, - 279878, - 279886, - 279819, - 280205, - 280088, - 279882, - 279779, - 280549, - 279891, - 280094, - 156000, - 279904, - 280221, - 280049, - 280164, - 290069, - 280163, - 280463, - 280136, - 290065, - 280030, - 279796, - 280213, - 279762, - 280015, - 279704, - 279973, - 149146, - 149168, - 279735, - 279757, - 280444, - 280004, - 280145, - 279956, - 279934, - 280496, - 280184, - 279984, - 279788, - 280206, - 280073, - 279815, - 279968, - 279814, - 280103, - 279962, - 280219, - 279715, - 279812, - 280197, - 279896, - 279766, - 280291, - 155999, - 148870, - 279952, - 155995, - 279785, - 279991, - 279900, - 279955, - 156023, - 279964, - 148875, - 280120, - 279765, - 280116, - 280502, - 279971, - 279935, - 279913, - 149169, - 279747, - 279936, - 279924, - 280191, - 280129, - 280059, - 280023, - 148874, - 280230, - 280002, - 279724, - 279947, - 279957, - 280041, - 148880, - 279802, - 280084, - 279702, - 280179, - 279816, - 279830, - 279901, - 279909, - 155993, - 279875, - 280676, - 279756, - 280078, - 279782, - 279999, - 279721, - 280187, - 280011, - 279902, - 280027, - 279994, - 279768, - 279905, - 280101, - 280133, - 280220, - 279731, - 279784, - 279864, - 280435, - 280048, - 280160, - 280157, - 280203, - 280137, - 279744, - 279932, - 280017, - 280111, - 280095, - 279800, - 279841, - 280497, - 279842, - 149151, - 280144, - 280401, - 280121, - 279829, - 280389, - 280005, - 279786, - 279832, - 280053, - 279990, - 149158, - 279846, - 279799, - 279954, - 280096, - 280032, - 279751, - 280110, - 280077, - 279798, - 280215, - 280232, - 279869, - 280114, - 279845, - 279941, - 280086, - 279818, - 279740, - 280131, - 279980, - 279726, - 149155, - 280243, - 148886, - 280107, - 280397, - 279908, - 279893, - 280006, - 279834, - 279719, - 280051, - 280066, - 279840, - 279787, - 280063, - 279863, - 279844, - 280029, - 280092, - 149153, - 280391, - 280172, - 279865, - 280123, - 280126, - 280238, - 279919, - 279710, - 279722, - 279709, - 279975, - 280076, - 279933, - 279828, - 280152, - 279746, - 148883, - 280193, - 279749, - 279960, - 280416, - 280000, - 148861, - 149161, - 279716, - 280060, - 279714, - 279884, - 279703, - 279866, - 279851, - 279792, - 280415, - 279880, - 280057, - 279773, - 279775, - 279862, - 280209, - 280212, - 279808, - 280150, - 280208, - 279898, - 280044, - 280067, - 279970, - 279920, - 279877, - 280173, - 279969, - 279989, - 280058, - 279912, - 280014, - 279772, - 155986, - 279942, - 279734, - 155985, - 279860, - 280236, - 156021, - 279906, - 279852, - 279996, - 279965, - 279720, - 280061, - 280097, - 279983, - 280654, - 279760, - 280174, - 280589, - 148231, - 280025, - 279888, - 279948, - 279855, - 279838, - 149167, - 156008, - 280019, - 280392, - 279918, - 279727, - 279887, - 279892, - 280056, - 280149, - 279823, - 280047, - 279804, - 279776, - 280128, - 279778, - 279928, - 280233, - 279940, - 280142, - 279791, - 280196, - 280122, - 279859, - 280501, - 279733, - 280082, - 280113, - 279718, - 148864, - 279706, - 279763, - 149159, - 280008, - 149173, - 280102, - 280046, - 156005, - 279889, - 280079, - 279987, - 279783, - 148879, - 279807, - 280119, - 279982, - 280227, - 280140, - 280525, - 149164, - 280045, - 279809, - 279729, - 280165, - 279759, - 280039, - 148890, - 280038, - 279825, - 155996, - 156024, - 279793, - 280526, - 280198, - 280069, - 280033, - 280228, - 279894, - 279929, - 279725, - 280007, - 290067, - 280244, - 279967, - 280751, - 280320, - 279813, - 279705, - 280013, - 280031, - 280138, - 280135, - 279943, - 280186, - 148227, - 280182, - 280153, - 279874, - 280235, - 280390, - 279997, - 279917, - 279730, - 280104, - 280085, - 280406, - 280016, - 280175, - 279827, - 280055, - 280080, - 280194, - 280590, - 280166, - 280118, - 279976, - 148860, - 280171, - 280087, - 280419, - 280436, - 279801, - 279711, - 279958, - 279883, - 280093, - 280071, - 279921, - 279857, - 280464, - 279931, - 280054, - 280091, - 280072, - 280226, - 280229, - 279961, - 280009, - 279831, - 279701, - 280222, - 280675, - 280148, - 280117, - 279939, - 279820, - 280214, - 291035, - 279847, - 279897, - 155992, - 280216, - 279810, - 279850, - 279926, - 280180, - 280154, - 279736, - 279790, - 280192, - 280001, - 279738, - 280200, - 279806, - 280090, - 280109, - 280105, - 279817, - 280224, - 280012, - 280099, - 279780, - 279794, - 280239, - 279974, - 279700, - 280262, - 279745, - 280211, - 280040, - 280134, - 280024, - 280034, - 148888, - 148865, - 280100, - 148871, - 280130, - 280124, - 280162, - 149163, - 279835, - 280237, - 279732, - 280204, - 279916, - 279985, - 279922, - 279978, - 279944, - 149157, - 280010, - 279822, - 280223, - 279868, - 279754, - 280550, - 280018, - 280170, - 280199, - 279885, - 280189, - 279979, - 279843, - 279774, - 279739, - 280218, - 280050, - 279953, - 280446, - 280343, - 280257, - 280248, - 280414, - 280306, - 280316, - 156020, - 280718, - 280651, - 280495, - 280553, - 280687, - 280506, - 280583, - 280722, - 280636, - 280454, - 280523, - 280398, - 280319, - 148225, - 280295, - 280548, - 148224, - 290929, - 280438, - 280278, - 280694, - 280312, - 280669, - 280705, - 280455, - 280350, - 280489, - 280272, - 280668, - 280599, - 280712, - 280351, - 280424, - 280476, - 149162, - 280657, - 280357, - 280697, - 280528, - 280327, - 280648, - 280336, - 149145, - 280587, - 280430, - 280645, - 280562, - 280488, - 280437, - 280677, - 280759, - 280298, - 280531, - 280277, - 280440, - 280701, - 280510, - 280734, - 280564, - 280617, - 155984, - 280276, - 280439, - 280396, - 280519, - 280717, - 280624, - 280338, - 280684, - 280259, - 280443, - 280384, - 280254, - 280407, - 280280, - 280279, - 149147, - 280695, - 280616, - 280744, - 280664, - 280639, - 280369, - 280242, - 280441, - 280252, - 280568, - 280261, - 280608, - 280582, - 280672, - 280498, - 280456, - 280666, - 280323, - 280324, - 280289, - 280606, - 280761, - 280487, - 280530, - 280285, - 280413, - 280614, - 280349, - 148223, - 280702, - 149166, - 280747, - 280547, - 280241, - 280536, - 280596, - 280707, - 280283, - 280754, - 280507, - 148869, - 280267, - 280433, - 280480, - 280612, - 280412, - 280477, - 280442, - 280486, - 280723, - 254109, - 280358, - 280748, - 280753, - 280311, - 280426, - 280317, - 280457, - 280299, - 280367, - 156006, - 280429, - 280340, - 149170, - 149160, - 280716, - 280650, - 280378, - 280479, - 280563, - 280620, - 280255, - 148889, - 280600, - 149154, - 280385, - 280513, - 280560, - 280286, - 280499, - 280322, - 280318, - 280625, - 280637, - 280467, - 148863, - 280581, - 148222, - 280634, - 280458, - 280605, - 280520, - 280427, - 280372, - 280535, - 148887, - 280269, - 280335, - 280331, - 148885, - 280310, - 280696, - 280728, - 280658, - 280546, - 280302, - 280328, - 280752, - 280646, - 280569, - 280366, - 280750, - 280347, - 280425, - 280735, - 280251, - 280485, - 156015, - 280554, - 280503, - 280690, - 280352, - 280544, - 280470, - 280652, - 149174, - 156010, - 280673, - 280692, - 280240, - 155994, - 280558, - 280459, - 280703, - 280342, - 290931, - 280633, - 280373, - 280260, - 280659, - 280686, - 280630, - 280623, - 280321, - 280273, - 280374, - 280411, - 280524, - 280534, - 280573, - 149143, - 280359, - 280307, - 280432, - 280484, - 280271, - 148872, - 280739, - 280300, - 280474, - 280386, - 280333, - 280580, - 149149, - 148877, - 280715, - 280346, - 280460, - 280576, - 280521, - 280377, - 280256, - 280250, - 280410, - 280483, - 280527, - 280594, - 280395, - 280500, - 280363, - 149144, - 280661, - 148881, - 148866, - 280247, - 280332, - 280607, - 280577, - 280403, - 280533, - 280471, - 148229, - 280628, - 148230, - 280361, - 280679, - 280309, - 280662, - 280613, - 280284, - 280509, - 280468, - 280601, - 280570, - 280376, - 280461, - 280572, - 280574, - 280762, - 280704, - 280758, - 280364, - 280755, - 280345, - 280714, - 280635, - 280618, - 280736, - 280603, - 280740, - 280743, - 280543, - 280264, - 280656, - 280473, - 148868, - 280681, - 290932, - 280641, - 280738, - 280329, - 280725, - 149152, - 156016, - 280365, - 280556, - 280693, - 280409, - 280591, - 280266, - 280680, - 148876, - 280579, - 280287, - 280555, - 280604, - 280399, - 280709, - 280462, - 280370, - 280387, - 280482, - 280741, - 280756, - 280249, - 280275, - 280559, - 280404, - 280341, - 280713, - 280246, - 280595, - 280465, - 280301, - 280575, - 280334, - 280622, - 280408, - 149150, - 280708, - 280294, - 280557, - 280647, - 280344, - 280593, - 280721, - 280760, - 280627, - 280493, - 280315, - 148873, - 280655, - 280685, - 280448, - 156002, - 280689, - 280355, - 280629, - 280304, - 148884, - 280422, - 280732, - 155988, - 280683, - 280737, - 280339, - 280540, - 280642, - 280281, - 280678, - 280296, - 280763, - 280649, - 280375, - 280710, - 280253, - 280394, - 280516, - 280449, - 149171, - 280724, - 280670, - 148862, - 280381, - 280663, - 148226, - 280337, - 280400, - 156022, - 280268, - 280368, - 280421, - 280711, - 148878, - 280288, - 280665, - 280585, - 280515, - 280730, - 280720, - 280265, - 156028, - 280545, - 280492, - 280611, - 155990, - 280565, - 280314, - 280597, - 280542, - 280308, - 280450, - 280292, - 280566, - 280640, - 280539, - 280475, - 280371, - 280326, - 280447, - 280552, - 280428, - 280688, - 280682, - 280418, - 280360, - 280586, - 280699, - 162016, - 280258, - 280504, - 280632, - 280698, - 280481, - 280644, - 280514, - 148859, - 280588, - 156018, - 280660, - 280671, - 280667, - 280491, - 280551, - 280469, - 280598, - 148867, - 280330, - 280610, - 280382, - 280305, - 280626, - 280451, - 280571, - 280325, - 156004, - 280749, - 280297, - 280638, - 280434, - 280245, - 280303, - 155998, - 280362, - 280727, - 280746, - 280584, - 280478, - 280706, - 280354, - 280508, - 280517, - 280621, - 280619, - 280609, - 280541, - 280729, - 280726, - 280293, - 280538, - 290928, - 280578, - 280282, - 280270, - 280490, - 280511, - 156014, - 280691, - 280561, - 280719, - 280380, - 280466, - 156019, - 280494, - 280745, - 148882, - 280643, - 280522, - 280356, - 280353, - 148228, - 280313, - 280423, - 280742, - 280733, - 280472, - 280567, - 280290, - 280615, - 280505, - 156025, - 280452, - 280700, - 280532, - 156011, - 280274, - 280518, - 280653, - 280417, - 280402, - 280348, - 280592, - 280453, - 290930, - 280529, - 280379, - 280602, - 280512, - 280631, - 280537, - 280731, - 280383, - 280757, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '60640', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Amortization Expense', - 'id': 133658, - 'is_enabled': True, - 'name': 'Amortization Expense', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '128', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Legal', - 'id': 133659, - 'is_enabled': True, - 'name': 'Legal', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280431, - 280262, - 279966, - 280100, - 279794, - 280010, - 279993, - 279875, - 280187, - 149169, - 280070, - 280218, - 279806, - 279868, - 279857, - 280213, - 280199, - 280139, - 279939, - 280525, - 280234, - 280091, - 279782, - 279870, - 280080, - 279972, - 149155, - 280014, - 279945, - 279893, - 279915, - 279950, - 149175, - 279910, - 155989, - 279882, - 279774, - 280124, - 280165, - 279721, - 280182, - 280205, - 279762, - 279952, - 280177, - 280044, - 279921, - 280171, - 148860, - 280098, - 279853, - 280406, - 148227, - 280009, - 280589, - 279980, - 280140, - 279750, - 280225, - 149173, - 280039, - 280041, - 279877, - 280045, - 280016, - 280085, - 280230, - 280147, - 279799, - 280078, - 280033, - 280006, - 280061, - 279997, - 279928, - 279995, - 290068, - 280675, - 279764, - 279861, - 246836, - 279742, - 279777, - 279770, - 280200, - 280153, - 280216, - 280189, - 280244, - 280069, - 280135, - 280176, - 279712, - 280037, - 279793, - 279807, - 279824, - 279735, - 279967, - 279759, - 280104, - 279817, - 279717, - 280420, - 280059, - 279831, - 148864, - 279859, - 280118, - 149148, - 280102, - 155987, - 280072, - 279810, - 279940, - 279888, - 279935, - 280018, - 279978, - 279874, - 280161, - 279734, - 279881, - 149159, - 279955, - 149151, - 279944, - 280047, - 279835, - 279916, - 279708, - 280038, - 279962, - 279971, - 280082, - 280132, - 280019, - 279892, - 280123, - 279828, - 279991, - 279872, - 148865, - 279958, - 148231, - 149172, - 148861, - 279863, - 280204, - 279744, - 155992, - 279765, - 279725, - 148888, - 279790, - 280073, - 149163, - 280022, - 279959, - 279850, - 279931, - 156021, - 280075, - 279763, - 280590, - 279713, - 280088, - 280027, - 280236, - 280148, - 280496, - 279701, - 279846, - 279728, - 279878, - 280229, - 279920, - 280415, - 279786, - 280001, - 279852, - 280674, - 280191, - 280222, - 280226, - 279836, - 280111, - 279767, - 280013, - 279985, - 280397, - 280201, - 280095, - 279851, - 280445, - 280005, - 279724, - 280034, - 280093, - 279732, - 279733, - 149167, - 280052, - 279714, - 280419, - 280497, - 280152, - 280172, - 279901, - 280175, - 290084, - 279756, - 279778, - 280243, - 280066, - 279838, - 279986, - 280162, - 279970, - 279999, - 279917, - 279779, - 279740, - 280015, - 280108, - 280235, - 279889, - 280142, - 279707, - 279968, - 279941, - 279847, - 279943, - 280077, - 280214, - 155996, - 280136, - 280203, - 280119, - 280122, - 279842, - 280067, - 148890, - 279737, - 279809, - 280129, - 280063, - 280392, - 280464, - 280227, - 149153, - 280092, - 279747, - 279891, - 155997, - 148879, - 155995, - 279919, - 156007, - 279791, - 279867, - 279830, - 279766, - 279904, - 280149, - 156024, - 279819, - 280219, - 279896, - 280416, - 280195, - 279829, - 280058, - 279715, - 279956, - 280103, - 279802, - 279719, - 279951, - 279757, - 279926, - 279918, - 280211, - 280654, - 279981, - 280549, - 156012, - 279890, - 280463, - 280000, - 279758, - 149161, - 280025, - 279814, - 279700, - 148874, - 280030, - 279781, - 279792, - 280086, - 156001, - 280120, - 279883, - 280174, - 280011, - 280050, - 279798, - 279871, - 279808, - 280079, - 279996, - 280053, - 280121, - 280150, - 280444, - 280202, - 280188, - 279751, - 279860, - 280173, - 290065, - 149164, - 279942, - 280224, - 279969, - 280055, - 280113, - 280186, - 279927, - 280185, - 156027, - 279718, - 279949, - 279911, - 280060, - 279976, - 280002, - 279776, - 279989, - 148870, - 279773, - 279983, - 279822, - 280181, - 279821, - 279775, - 280087, - 279801, - 279934, - 279925, - 280151, - 280138, - 280143, - 280040, - 279879, - 155985, - 280209, - 279722, - 280049, - 279745, - 156003, - 279988, - 280393, - 279963, - 279960, - 279803, - 279726, - 280157, - 279748, - 280180, - 279783, - 280215, - 280032, - 280159, - 279840, - 156008, - 280166, - 280107, - 279796, - 280167, - 279816, - 280183, - 280071, - 279711, - 279902, - 280436, - 280388, - 279854, - 280051, - 279909, - 279834, - 280065, - 279936, - 279784, - 279844, - 148871, - 279930, - 279975, - 279813, - 156026, - 280233, - 279785, - 280291, - 279990, - 279703, - 280128, - 279884, - 280099, - 279749, - 279702, - 280090, - 279848, - 155993, - 279825, - 279864, - 279736, - 280097, - 279992, - 280112, - 280089, - 280208, - 279760, - 280210, - 279948, - 279912, - 279862, - 280231, - 280320, - 280114, - 279906, - 280057, - 279845, - 279804, - 280023, - 280196, - 279716, - 280401, - 279710, - 280163, - 279787, - 280550, - 280192, - 279729, - 280144, - 279869, - 156005, - 279800, - 280017, - 279772, - 280021, - 148880, - 280212, - 279924, - 280435, - 279866, - 280007, - 280220, - 149168, - 279769, - 280028, - 280751, - 279730, - 280131, - 279964, - 279704, - 280036, - 279856, - 280020, - 280054, - 149165, - 280101, - 279977, - 280003, - 279780, - 279994, - 280106, - 280179, - 280096, - 279998, - 280193, - 279727, - 279705, - 280035, - 280390, - 280084, - 279865, - 280156, - 280008, - 279947, - 279900, - 280105, - 280168, - 280164, - 280127, - 279913, - 280197, - 280239, - 279974, - 279885, - 148886, - 155999, - 279876, - 280223, - 148875, - 280263, - 280115, - 280031, - 149146, - 280109, - 279937, - 280074, - 280134, - 279812, - 280217, - 149156, - 279788, - 279933, - 155991, - 279898, - 279923, - 280405, - 280526, - 279738, - 280145, - 280184, - 279895, - 280029, - 280207, - 279761, - 279954, - 279826, - 279731, - 280502, - 279795, - 279805, - 279753, - 279754, - 280004, - 279815, - 279752, - 280141, - 290069, - 279858, - 279818, - 291035, - 280221, - 280238, - 280198, - 279908, - 279873, - 279823, - 280232, - 280064, - 280094, - 279979, - 279914, - 156013, - 280194, - 279932, - 279833, - 280081, - 279741, - 156000, - 280056, - 279965, - 280158, - 280043, - 279886, - 279961, - 279723, - 280048, - 279837, - 155986, - 279946, - 279907, - 148858, - 280155, - 149158, - 280169, - 280133, - 280062, - 156023, - 279843, - 280501, - 279973, - 279849, - 279938, - 280160, - 280076, - 280068, - 279984, - 279899, - 280126, - 279720, - 280190, - 280178, - 279855, - 280389, - 280042, - 280125, - 280206, - 280116, - 280228, - 280146, - 279987, - 279739, - 279897, - 279894, - 280026, - 280170, - 148883, - 279743, - 279880, - 279789, - 280110, - 280676, - 279957, - 279929, - 279839, - 279841, - 280137, - 280012, - 279755, - 279797, - 279922, - 279771, - 279953, - 280046, - 156009, - 279811, - 280130, - 279832, - 279887, - 279746, - 149157, - 279982, - 279820, - 280237, - 280154, - 280024, - 279706, - 290067, - 279768, - 279903, - 279905, - 279827, - 280083, - 280117, - 279709, - 280391, - 280533, - 280678, - 280694, - 280350, - 280612, - 280270, - 280614, - 148887, - 280430, - 280512, - 280657, - 280691, - 280375, - 149171, - 280292, - 280749, - 280511, - 290930, - 280506, - 155984, - 280562, - 280507, - 280667, - 280340, - 280372, - 280441, - 280374, - 280679, - 280693, - 280341, - 155990, - 280508, - 280680, - 280510, - 280613, - 280563, - 280271, - 280246, - 280509, - 280425, - 280630, - 280373, - 280692, - 149174, - 280658, - 280750, - 280322, - 148222, - 280255, - 280726, - 280317, - 280723, - 280596, - 280349, - 280442, - 280324, - 280639, - 149166, - 280280, - 280443, - 280277, - 280428, - 280587, - 280351, - 280424, - 280761, - 280669, - 280592, - 280722, - 280316, - 280257, - 280731, - 156025, - 280423, - 280446, - 280643, - 280541, - 280354, - 156004, - 280325, - 280551, - 148859, - 280586, - 280447, - 280597, - 280665, - 156022, - 156028, - 280422, - 280542, - 280355, - 280721, - 280760, - 280315, - 280448, - 280732, - 280540, - 280281, - 280253, - 280449, - 280670, - 148226, - 280421, - 280585, - 280353, - 280720, - 280539, - 280314, - 280450, - 280418, - 280552, - 280258, - 280644, - 280671, - 280598, - 280626, - 280319, - 280638, - 280621, - 280640, - 280584, - 280451, - 280538, - 280326, - 280282, - 280729, - 156014, - 280719, - 156019, - 280356, - 280313, - 280733, - 280452, - 280417, - 280348, - 280453, - 280537, - 280718, - 156020, - 280414, - 280583, - 280553, - 280454, - 148224, - 280312, - 280455, - 280599, - 280357, - 280327, - 280645, - 280759, - 280276, - 280734, - 280437, - 280717, - 280259, - 280624, - 149147, - 280664, - 280252, - 280582, - 280456, - 280672, - 280413, - 148223, - 280433, - 280536, - 148869, - 280283, - 280412, - 280358, - 280311, - 280457, - 280620, - 280716, - 280763, - 280546, - 280600, - 280279, - 280427, - 280637, - 280581, - 280458, - 280535, - 280310, - 280646, - 280347, - 280735, - 280328, - 280554, - 155994, - 280459, - 280673, - 280260, - 280534, - 280411, - 280359, - 280715, - 280580, - 280758, - 280410, - 280460, - 148866, - 149144, - 280321, - 280309, - 280601, - 280284, - 280461, - 280714, - 280625, - 280736, - 280681, - 280725, - 280329, - 156016, - 280409, - 280579, - 280555, - 280636, - 280462, - 280275, - 280323, - 280713, - 280465, - 280408, - 280663, - 280647, - 280627, - 280737, - 280308, - 280241, - 280360, - 280548, - 280330, - 280578, - 280619, - 280466, - 280532, - 280602, - 280531, - 280712, - 149145, - 280438, - 280407, - 280261, - 280285, - 156006, - 148889, - 280467, - 280594, - 280251, - 148885, - 280307, - 280346, - 280577, - 280468, - 280738, - 280556, - 280404, - 280762, - 280711, - 280682, - 280469, - 280648, - 280530, - 149154, - 280666, - 280622, - 280470, - 280543, - 280603, - 280361, - 280757, - 280403, - 280591, - 280641, - 280576, - 280331, - 280529, - 280306, - 280710, - 280683, - 280635, - 280471, - 280595, - 280286, - 149160, - 280528, - 280739, - 162016, - 280402, - 280305, - 280472, - 280362, - 148867, - 280400, - 280649, - 280727, - 280575, - 280557, - 280709, - 280604, - 280618, - 280264, - 280473, - 280662, - 148229, - 280332, - 148872, - 280527, - 148877, - 280474, - 280250, - 280363, - 148230, - 280574, - 280345, - 280240, - 280740, - 149149, - 280756, - 280399, - 280708, - 280304, - 280475, - 280274, - 280242, - 280398, - 280476, - 280707, - 280605, - 280439, - 280684, - 280650, - 280558, - 280573, - 280303, - 280477, - 280287, - 280265, - 280668, - 280634, - 280364, - 280478, - 280741, - 148862, - 280333, - 280524, - 280623, - 280396, - 280523, - 280706, - 280685, - 149150, - 148876, - 280572, - 280628, - 280395, - 280426, - 280302, - 280479, - 254109, - 280480, - 280606, - 156010, - 280617, - 280705, - 280651, - 280522, - 280742, - 280432, - 280571, - 280481, - 280288, - 280394, - 148873, - 280344, - 280334, - 280301, - 280559, - 280249, - 280387, - 280266, - 280482, - 280365, - 280318, - 149152, - 280544, - 148868, - 148884, - 280743, - 280755, - 280704, - 280661, - 280570, - 280607, - 280483, - 148881, - 280521, - 280300, - 280386, - 280484, - 280273, - 280686, - 280633, - 280434, - 280703, - 280652, - 280593, - 280485, - 280366, - 280569, - 280335, - 280520, - 148863, - 280560, - 280385, - 149170, - 280367, - 280299, - 280486, - 280267, - 280754, - 280702, - 280487, - 280608, - 280254, - 280289, - 280568, - 280744, - 280616, - 280384, - 280278, - 280519, - 280701, - 280298, - 280488, - 280336, - 149162, - 280489, - 148225, - 280256, - 280687, - 280248, - 280343, - 280383, - 280653, - 280518, - 280700, - 280290, - 280429, - 280567, - 280745, - 280517, - 148228, - 280561, - 280490, - 280609, - 280245, - 280297, - 280382, - 148882, - 280491, - 280660, - 280632, - 280699, - 280688, - 280566, - 280492, - 148878, - 280368, - 280268, - 280337, - 280724, - 280516, - 280381, - 155988, - 156002, - 280493, - 280655, - 280515, - 280629, - 280296, - 280642, - 280565, - 280545, - 280698, - 280610, - 155998, - 280746, - 290928, - 280380, - 280494, - 280615, - 280728, - 280295, - 156011, - 280379, - 280495, - 280272, - 280697, - 280564, - 280338, - 280369, - 280498, - 280440, - 280747, - 280753, - 156018, - 280378, - 280677, - 280499, - 280269, - 280689, - 156015, - 280342, - 149143, - 280611, - 280514, - 280656, - 280696, - 280377, - 280690, - 280247, - 280294, - 280631, - 280370, - 290932, - 280500, - 280588, - 280503, - 280547, - 280513, - 280695, - 290929, - 280293, - 280504, - 280339, - 280371, - 280748, - 280730, - 280752, - 290931, - 280505, - 280659, - 280376, - 280352, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '143', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Inventory Returned Not Credited', - 'id': 133660, - 'is_enabled': True, - 'name': 'Inventory Returned Not Credited', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280264, - 280287, - 280315, - 280448, - 280617, - 156002, - 280520, - 280510, - 280473, - 280458, - 280540, - 280542, - 280509, - 148863, - 280732, - 280763, - 280581, - 280345, - 280339, - 280637, - 280485, - 280523, - 155988, - 280591, - 149166, - 280535, - 280662, - 280281, - 280253, - 280427, - 280595, - 280449, - 280268, - 280705, - 280385, - 280439, - 149145, - 280600, - 280381, - 280716, - 280670, - 280560, - 280712, - 280516, - 280650, - 280620, - 280368, - 280574, - 149171, - 280531, - 280337, - 149170, - 149154, - 280720, - 148872, - 148226, - 280363, - 280358, - 280421, - 280367, - 148230, - 148878, - 280585, - 280724, - 280492, - 280651, - 280299, - 280603, - 280539, - 148229, - 280457, - 280311, - 280432, - 280314, - 280546, - 280412, - 280469, - 280486, - 280576, - 280450, - 280283, - 148869, - 280566, - 280267, - 280332, - 280688, - 280434, - 280684, - 280754, - 280522, - 280425, - 280602, - 280504, - 280418, - 280552, - 280353, - 280536, - 280741, - 280532, - 280258, - 280706, - 280702, - 280372, - 280612, - 280527, - 148223, - 280699, - 280605, - 280413, - 280250, - 148882, - 280742, - 280433, - 280682, - 280672, - 280644, - 280254, - 280292, - 148877, - 280757, - 280456, - 280582, - 280466, - 280503, - 280608, - 280619, - 280632, - 280240, - 280671, - 280289, - 280279, - 280660, - 280477, - 280568, - 280678, - 280491, - 280598, - 280252, - 280278, - 280360, - 280749, - 280664, - 280474, - 280513, - 280744, - 280711, - 280319, - 280571, - 280382, - 280750, - 280616, - 280594, - 148867, - 280658, - 149147, - 280245, - 280626, - 280638, - 280286, - 280384, - 280352, - 280297, - 280330, - 280624, - 280578, - 280507, - 280437, - 280487, - 280563, - 280511, - 280621, - 280694, - 280584, - 280685, - 280519, - 280451, - 280259, - 280717, - 280609, - 149143, - 280538, - 280481, - 280701, - 149160, - 280734, - 280294, - 280326, - 280276, - 280490, - 280308, - 156014, - 280561, - 280514, - 280298, - 280340, - 280630, - 280293, - 280759, - 280373, - 280282, - 290931, - 280645, - 148228, - 280719, - 280488, - 280679, - 156019, - 280517, - 280288, - 280357, - 280429, - 280342, - 280327, - 280692, - 280336, - 149162, - 280562, - 280745, - 280331, - 280729, - 280313, - 280394, - 280599, - 156015, - 280455, - 280733, - 280489, - 149174, - 290929, - 280312, - 280689, - 280567, - 148224, - 280290, - 149150, - 280737, - 148225, - 280548, - 290930, - 280553, - 280356, - 156010, - 280454, - 280583, - 280613, - 280452, - 280695, - 280269, - 280506, - 280321, - 280687, - 280730, - 280700, - 280348, - 280256, - 280640, - 280707, - 280248, - 280653, - 280414, - 280322, - 280417, - 280453, - 280625, - 280627, - 280343, - 148222, - 156020, - 148873, - 280718, - 280543, - 280518, - 280537, - 280677, - 280499, - 155984, - 280614, - 280383, - 280404, - 280344, - 280726, - 280350, - 280524, - 280647, - 280663, - 280528, - 280408, - 280556, - 280738, - 280334, - 280270, - 280255, - 148887, - 148876, - 280378, - 280317, - 280529, - 280739, - 280659, - 156018, - 280762, - 280301, - 280631, - 280323, - 280752, - 280623, - 280465, - 280713, - 280668, - 280753, - 280440, - 280747, - 280376, - 280242, - 280249, - 280656, - 280275, - 280572, - 280723, - 280596, - 280476, - 280559, - 280333, - 280349, - 280544, - 280468, - 280442, - 280666, - 280387, - 280508, - 280369, - 280577, - 280462, - 280555, - 280636, - 162016, - 280498, - 280579, - 280628, - 280324, - 280426, - 280266, - 280398, - 280547, - 280318, - 280409, - 280364, - 280748, - 280639, - 155990, - 280395, - 280365, - 280710, - 280338, - 148862, - 280443, - 280402, - 149152, - 280277, - 280587, - 280307, - 280564, - 280303, - 280482, - 280271, - 280280, - 280329, - 280351, - 148868, - 280341, - 280681, - 280241, - 156016, - 280346, - 280697, - 148884, - 280424, - 280592, - 280669, - 280725, - 280272, - 280403, - 280505, - 280743, - 280470, - 280722, - 280736, - 280305, - 280661, - 280495, - 280247, - 280755, - 280370, - 280714, - 280265, - 280472, - 280704, - 280588, - 280512, - 280316, - 280274, - 280761, - 280362, - 280461, - 280475, - 280731, - 280284, - 280379, - 280478, - 280570, - 148885, - 156011, - 280295, - 280400, - 280601, - 280309, - 280641, - 156025, - 280251, - 280533, - 280649, - 280545, - 290932, - 280607, - 280696, - 280423, - 280446, - 280302, - 149144, - 148866, - 280304, - 280615, - 280635, - 280728, - 280575, - 280386, - 280460, - 280494, - 280657, - 280410, - 280430, - 280483, - 280611, - 280643, - 280693, - 280471, - 280521, - 280467, - 148889, - 280541, - 280758, - 156006, - 280371, - 280380, - 148881, - 280428, - 280708, - 280300, - 290928, - 280580, - 280479, - 280683, - 280257, - 155998, - 280746, - 280557, - 280634, - 280359, - 254109, - 280715, - 280680, - 280354, - 280411, - 280727, - 280484, - 280709, - 156004, - 280396, - 280273, - 280325, - 280604, - 280610, - 280534, - 280377, - 280691, - 148859, - 280573, - 280260, - 280361, - 280551, - 280698, - 280642, - 280480, - 280633, - 280441, - 280586, - 280648, - 280673, - 280597, - 280686, - 280565, - 280665, - 280399, - 280703, - 280756, - 280530, - 280459, - 155994, - 280285, - 280447, - 280375, - 280438, - 280554, - 280629, - 280652, - 149149, - 156022, - 280306, - 280740, - 280296, - 280422, - 156028, - 280606, - 280328, - 280355, - 280622, - 280667, - 280735, - 280347, - 280515, - 280374, - 280593, - 280655, - 280246, - 280569, - 280261, - 280407, - 280646, - 280310, - 280366, - 280558, - 280760, - 280618, - 280493, - 280500, - 280335, - 280690, - 280721, - 280189, - 290068, - 279934, - 279959, - 156009, - 279992, - 279748, - 279876, - 280139, - 280037, - 279976, - 280191, - 279779, - 290065, - 280049, - 280185, - 280231, - 149168, - 280028, - 279900, - 280023, - 280502, - 279907, - 280133, - 279953, - 279709, - 280014, - 279856, - 279874, - 279817, - 279958, - 155992, - 280229, - 279847, - 280464, - 279700, - 280186, - 279883, - 279821, - 280138, - 279879, - 279783, - 156008, - 279902, - 280110, - 279990, - 279800, - 280097, - 279906, - 279710, - 280389, - 279866, - 279932, - 280390, - 149165, - 279780, - 279865, - 279705, - 280074, - 280134, - 280029, - 279954, - 279818, - 156000, - 149158, - 280501, - 280190, - 280137, - 279957, - 279905, - 280053, - 279820, - 280083, - 279782, - 279903, - 280187, - 280098, - 280041, - 279925, - 280230, - 280162, - 280135, - 280059, - 279759, - 279935, - 290067, - 279955, - 279991, - 279799, - 279725, - 280073, - 279846, - 280496, - 280005, - 280497, - 279901, - 280397, - 280015, - 280136, - 279747, - 279904, - 279956, - 279819, - 280079, - 280030, - 279781, - 156012, - 280188, - 280113, - 155995, - 280002, - 279718, - 280052, - 279983, - 280080, - 280087, - 280209, - 156003, - 155985, - 279722, - 280215, - 280157, - 279801, - 156026, - 279796, - 279840, - 280167, - 279834, - 280065, - 280051, - 280159, - 279936, - 279975, - 279702, - 279703, - 279884, - 280090, - 279736, - 279737, - 280107, - 280208, - 279760, - 280320, - 280114, - 279852, - 279804, - 280401, - 279729, - 156005, - 148880, - 279924, - 280007, - 279704, - 280751, - 279730, - 280020, - 280054, - 280003, - 279998, - 280008, - 280035, - 280156, - 280105, - 280168, - 279974, - 279885, - 280109, - 280263, - 280115, - 279979, - 279937, - 280217, - 279923, - 280405, - 279731, - 280207, - 279761, - 279795, - 279805, - 279752, - 279755, - 279858, - 279873, - 279738, - 280064, - 156013, - 279833, - 279741, - 280043, - 279886, - 290084, - 156023, - 280155, - 148858, - 280169, - 279973, - 279938, - 279984, - 280068, - 279720, - 280206, - 280116, - 279739, - 280170, - 280676, - 279839, - 279841, - 279922, - 280154, - 280165, - 279832, - 279887, - 280237, - 279706, - 279982, - 280024, - 280262, - 280117, - 279794, - 280010, - 279880, - 279806, - 149169, - 279939, - 280213, - 279972, - 280091, - 149173, - 155989, - 279921, - 280205, - 279762, - 148860, - 280218, - 280406, - 280039, - 279980, - 280085, - 280171, - 280078, - 279997, - 280675, - 280153, - 279742, - 280244, - 280069, - 279793, - 279807, - 280104, - 279931, - 279831, - 280118, - 279978, - 279859, - 279888, - 279940, - 148864, - 149151, - 280047, - 279881, - 279971, - 280019, - 279872, - 148231, - 279875, - 280204, - 149155, - 279765, - 280022, - 279744, - 156021, - 279857, - 280236, - 279878, - 279728, - 279920, - 280044, - 280674, - 280415, - 279851, - 279985, - 280111, - 280066, - 279714, - 280034, - 279732, - 280152, - 280172, - 280243, - 279970, - 149175, - 279838, - 279740, - 279889, - 279941, - 280203, - 279842, - 280214, - 280063, - 280119, - 280092, - 279919, - 279830, - 279766, - 279802, - 280086, - 280416, - 280211, - 280103, - 279719, - 279757, - 149161, - 156001, - 279890, - 280392, - 280219, - 279758, - 279792, - 280120, - 280011, - 279808, - 280150, - 279715, - 279751, - 280173, - 279969, - 280055, - 149164, - 279860, - 280202, - 279996, - 279942, - 279871, - 280174, - 148874, - 279981, - 280025, - 280654, - 279918, - 279829, - 279798, - 156024, - 280149, - 279791, - 148879, - 155997, - 280227, - 279891, - 280122, - 149153, - 148890, - 155996, - 279809, - 280077, - 280001, - 279943, - 156007, - 279968, - 279707, - 280108, - 280235, - 280000, - 279917, - 279986, - 280419, - 149167, - 280093, - 280201, - 279767, - 279836, - 280175, - 280226, - 280222, - 280148, - 279701, - 279713, - 280590, - 279763, - 279850, - 279790, - 148888, - 149163, - 148861, - 148865, - 279828, - 279735, - 280123, - 279756, - 279916, - 279892, - 280161, - 280082, - 279944, - 280018, - 280038, - 149159, - 279853, - 280102, - 279810, - 280420, - 279967, - 279712, - 280033, - 280200, - 279770, - 280216, - 279928, - 279861, - 279764, - 280176, - 279995, - 280006, - 279877, - 280147, - 280225, - 279750, - 280391, - 280589, - 279717, - 280177, - 280199, - 280124, - 279915, - 279893, - 279945, - 279882, - 279870, - 280239, - 280234, - 280070, - 279966, - 280046, - 280431, - 279827, - 279768, - 279811, - 279771, - 149157, - 279789, - 280012, - 279743, - 280026, - 280036, - 279894, - 279929, - 280146, - 279987, - 280042, - 280126, - 280178, - 280076, - 279849, - 280062, - 279843, - 279946, - 279914, - 155986, - 279965, - 280056, - 279723, - 280221, - 280081, - 280198, - 280094, - 291035, - 290069, - 279826, - 279895, - 279977, - 280004, - 280145, - 149146, - 279788, - 155991, - 280223, - 279933, - 155999, - 279812, - 279913, - 279754, - 280197, - 280127, - 279947, - 280238, - 280084, - 280106, - 279727, - 280179, - 279994, - 279837, - 279964, - 280163, - 280101, - 280220, - 279769, - 279721, - 280435, - 279772, - 280017, - 279869, - 280144, - 280550, - 279716, - 279787, - 280196, - 280057, - 279862, - 279912, - 279825, - 279948, - 280112, - 279749, - 280128, - 155993, - 280233, - 280291, - 148227, - 148871, - 280393, - 279844, - 280388, - 279813, - 279711, - 280436, - 280071, - 280032, - 280180, - 280166, - 279963, - 279988, - 279745, - 280040, - 280143, - 280151, - 149148, - 148870, - 279776, - 279855, - 280181, - 279773, - 279911, - 279949, - 280224, - 280444, - 280050, - 279927, - 279814, - 279926, - 280549, - 280195, - 279896, - 280129, - 280142, - 280095, - 280013, - 279786, - 280027, - 280075, - 279863, - 149172, - 279962, - 279708, - 280067, - 279734, - 279824, - 280088, - 280061, - 246836, - 279777, - 280182, - 279774, - 279910, - 279950, - 279868, - 279993, - 280160, - 279724, - 279797, - 280100, - 280130, - 148883, - 279897, - 280125, - 156027, - 280048, - 279961, - 280194, - 280232, - 279753, - 279823, - 280141, - 280526, - 279898, - 279815, - 148875, - 279930, - 148886, - 280210, - 280193, - 280131, - 279845, - 279785, - 279848, - 280164, - 279909, - 279726, - 280183, - 279960, - 279775, - 280021, - 279989, - 280060, - 280121, - 280058, - 279835, - 279951, - 279778, - 279733, - 280445, - 280089, - 280016, - 280140, - 279999, - 280525, - 280009, - 280228, - 279746, - 279908, - 280212, - 279803, - 280031, - 280096, - 280192, - 279864, - 279784, - 280045, - 280099, - 279822, - 280132, - 280158, - 279816, - 279899, - 279952, - 280184, - 279854, - 279867, - 280463, - 280072, - 155987, - 149156, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '152', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Bill Exchange Rate Variance', - 'id': 133661, - 'is_enabled': True, - 'name': 'Bill Exchange Rate Variance', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280100, - 280024, - 279706, - 279709, - 279768, - 279887, - 279832, - 280083, - 279811, - 280237, - 280154, - 279724, - 279771, - 279820, - 280177, - 279789, - 280164, - 279841, - 280130, - 280012, - 279922, - 280676, - 280170, - 279905, - 279743, - 280262, - 279957, - 280026, - 279746, - 280076, - 279739, - 280125, - 279894, - 279925, - 280042, - 280146, - 280139, - 279720, - 279897, - 279987, - 279929, - 280116, - 279930, - 280206, - 280068, - 279984, - 280133, - 280126, - 279716, - 280137, - 280178, - 279849, - 280190, - 279938, - 279992, - 148858, - 280062, - 156007, - 156027, - 279973, - 280141, - 279843, - 279977, - 280169, - 279914, - 280155, - 279965, - 149158, - 279946, - 280088, - 279717, - 155986, - 280045, - 290084, - 279886, - 280228, - 156023, - 279741, - 280048, - 280056, - 156013, - 279753, - 279723, - 279833, - 280221, - 279961, - 280043, - 280009, - 280198, - 156000, - 279873, - 279839, - 280194, - 280094, - 280064, - 280081, - 291035, - 279899, - 279858, - 290069, - 280501, - 279805, - 279752, - 279755, - 279826, - 280232, - 279761, - 280207, - 279976, - 279895, - 280023, - 279907, - 280004, - 280145, - 279823, - 279795, - 279788, - 280405, - 149146, - 279959, - 279818, - 279923, - 279999, - 155991, - 279731, - 280217, - 279937, - 155999, - 280115, - 280263, - 280110, - 280223, - 279856, - 279954, - 279885, - 280526, - 279812, - 279913, - 279952, - 279705, - 280197, - 280134, - 279974, - 280109, - 280168, - 280031, - 280127, - 280106, - 280105, - 279898, - 279947, - 279876, - 280084, - 280074, - 280156, - 279900, - 279727, - 148875, - 280035, - 280238, - 280163, - 279998, - 280028, - 280179, - 279994, - 279737, - 280210, - 279815, - 279964, - 148886, - 279869, - 280003, - 149156, - 280220, - 280165, - 280101, - 280029, - 280054, - 280020, - 279730, - 279865, - 280751, - 148883, - 279769, - 280096, - 149157, - 280007, - 280193, - 279704, - 279803, - 279772, - 279721, - 280435, - 280017, - 279780, - 148227, - 156005, - 280144, - 149165, - 148880, - 280393, - 280192, - 279924, - 279787, - 279933, - 280550, - 279866, - 279729, - 279710, - 280184, - 279979, - 280401, - 280008, - 280196, - 279845, - 279804, - 280114, - 279906, - 280057, - 280388, - 280320, - 279785, - 279862, - 279912, - 149168, - 280107, - 279760, - 280208, - 279825, - 279848, - 279736, - 280131, - 279948, - 280090, - 280097, - 279749, - 280231, - 279884, - 148870, - 280159, - 279990, - 280128, - 280112, - 280502, - 155993, - 280233, - 279932, - 279703, - 280389, - 280291, - 279909, - 279801, - 279936, - 279975, - 279864, - 279902, - 279702, - 156008, - 279844, - 280390, - 279726, - 279813, - 279711, - 148871, - 279784, - 280051, - 279875, - 279783, - 280436, - 280065, - 280167, - 279748, - 280071, - 279840, - 280032, - 280183, - 279834, - 280143, - 279796, - 280060, - 280180, - 279883, - 279963, - 279960, - 280215, - 280157, - 156026, - 155987, - 279988, - 280166, - 279722, - 279879, - 279745, - 279754, - 155985, - 280138, - 280040, - 149148, - 280099, - 280080, - 280151, - 279775, - 156003, - 279983, - 279867, - 279821, - 280087, - 280209, - 279718, - 280239, - 279776, - 279989, - 280212, - 280181, - 279911, - 280185, - 279773, - 279854, - 280186, - 155995, - 280002, - 280397, - 280121, - 280113, - 280188, - 279835, - 280224, - 280055, - 279926, - 280173, - 279969, - 280392, - 279738, - 279949, - 279860, - 149164, - 280202, - 156012, - 279751, - 280150, - 279996, - 279779, - 279808, - 280050, - 279942, - 279981, - 279871, - 280464, - 279758, - 280011, - 280120, - 279781, - 279857, - 280219, - 279700, - 148874, - 280444, - 280174, - 279792, - 279890, - 280030, - 280025, - 149161, - 280654, - 280089, - 279719, - 279918, - 279814, - 279757, - 280103, - 279829, - 280158, - 280416, - 280149, - 280549, - 280211, - 280058, - 156024, - 280036, - 279799, - 279766, - 280227, - 279791, - 279819, - 279830, - 279715, - 279919, - 280195, - 148879, - 280108, - 155997, - 279822, - 156001, - 279956, - 280092, - 279927, - 279891, - 280214, - 280119, - 280001, - 280063, - 279842, - 279802, - 280079, - 280122, - 156009, - 279896, - 148890, - 155996, - 279747, - 280203, - 279951, - 279809, - 149153, - 280077, - 280129, - 280044, - 279904, - 279941, - 280142, - 279847, - 279968, - 280136, - 279838, - 280235, - 279889, - 279901, - 279707, - 280015, - 280005, - 280086, - 279943, - 155992, - 279917, - 280496, - 279740, - 149167, - 149175, - 279970, - 280049, - 279986, - 280243, - 280172, - 280152, - 280013, - 280162, - 279732, - 280419, - 280111, - 280095, - 279836, - 280201, - 279786, - 279985, - 280034, - 280021, - 279767, - 279846, - 280093, - 149172, - 280175, - 279851, - 280226, - 280075, - 279807, - 280415, - 280497, - 280222, - 279713, - 280674, - 280148, - 279800, - 279701, - 280052, - 279728, - 280191, - 279920, - 149155, - 280590, - 280073, - 280236, - 279735, - 156021, - 280160, - 279763, - 279855, - 279853, - 279850, - 279725, - 279744, - 279790, - 279778, - 279714, - 280200, - 279878, - 279765, - 280229, - 148888, - 279759, - 280161, - 280204, - 279962, - 148861, - 149163, - 148865, - 279934, - 148231, - 279828, - 279991, - 279872, - 279955, - 279881, - 280445, - 280123, - 279708, - 279928, - 279916, - 279958, - 148864, - 279863, - 279892, - 280027, - 280019, - 280061, - 280082, - 279971, - 280047, - 280022, - 279734, - 279944, - 280018, - 279733, - 290067, - 149159, - 279935, - 149151, - 279940, - 280038, - 279888, - 280000, - 279824, - 279859, - 279877, - 280102, - 280132, - 280118, - 279931, - 280135, - 279810, - 279831, - 290068, - 280420, - 279712, - 279978, - 279967, - 279817, - 280104, - 279880, - 280016, - 279793, - 280069, - 280244, - 280033, - 280067, - 246836, - 279852, - 279742, - 280072, - 279770, - 280189, - 280059, - 280153, - 279953, - 280066, - 279777, - 279764, - 280216, - 279861, - 280230, - 280176, - 279995, - 280098, - 280675, - 279980, - 279756, - 280006, - 280140, - 279997, - 279798, - 280171, - 280182, - 280147, - 279837, - 280078, - 280039, - 280589, - 280225, - 280463, - 280085, - 280391, - 279750, - 279774, - 280406, - 279797, - 279910, - 280218, - 279874, - 148860, - 279762, - 280041, - 280205, - 280199, - 280187, - 149169, - 279816, - 280124, - 279921, - 279915, - 279950, - 155989, - 280213, - 279903, - 279893, - 280091, - 279868, - 279945, - 290065, - 279870, - 279782, - 279972, - 279993, - 279882, - 280234, - 279908, - 279939, - 280046, - 279806, - 149173, - 280053, - 280070, - 280010, - 279966, - 280014, - 279794, - 280525, - 279982, - 280037, - 280431, - 280117, - 279827, - 280752, - 280634, - 280656, - 280403, - 280757, - 280364, - 280361, - 280591, - 280603, - 280741, - 280524, - 280750, - 280333, - 280470, - 280240, - 280523, - 280396, - 280648, - 280530, - 280478, - 280432, - 280270, - 280469, - 280682, - 280706, - 280321, - 280738, - 280711, - 280613, - 149150, - 280556, - 280404, - 280685, - 280426, - 280572, - 280468, - 280395, - 280247, - 280577, - 280307, - 280346, - 148876, - 280628, - 148885, - 254109, - 280302, - 280251, - 280428, - 280467, - 280479, - 156006, - 148889, - 280438, - 280666, - 280680, - 280480, - 280285, - 280261, - 280606, - 280407, - 280617, - 149145, - 148884, - 280705, - 280510, - 280712, - 280531, - 280651, - 280544, - 280602, - 280522, - 280762, - 280532, - 280466, - 280742, - 280679, - 280619, - 280360, - 280571, - 280690, - 280330, - 280578, - 280594, - 280481, - 280308, - 280394, - 280737, - 156010, - 280288, - 280627, - 148873, - 280344, - 280647, - 280548, - 280408, - 280631, - 280334, - 280323, - 148868, - 280663, - 280301, - 280465, - 280713, - 280249, - 280508, - 280275, - 280555, - 280559, - 280318, - 280387, - 280462, - 280636, - 280579, - 280667, - 280266, - 280409, - 280588, - 280365, - 155990, - 149152, - 280681, - 280329, - 280482, - 156016, - 280736, - 280743, - 280661, - 280755, - 280714, - 280704, - 280725, - 280461, - 280284, - 280570, - 290932, - 280601, - 280309, - 280641, - 280533, - 280607, - 149144, - 148866, - 280460, - 280386, - 280505, - 280483, - 280521, - 280693, - 280410, - 280758, - 280300, - 280441, - 280580, - 280273, - 280359, - 280241, - 280715, - 280341, - 280484, - 148881, - 280411, - 280534, - 280260, - 280763, - 280633, - 280673, - 280703, - 280352, - 280459, - 155994, - 280554, - 280652, - 280507, - 280686, - 280328, - 280735, - 280569, - 280625, - 280646, - 280310, - 280347, - 280335, - 280593, - 280366, - 280520, - 280500, - 280458, - 148863, - 280581, - 280485, - 280637, - 280535, - 280730, - 280385, - 280370, - 280600, - 280716, - 280427, - 280560, - 280620, - 149170, - 280283, - 280358, - 280367, - 280299, - 280513, - 280457, - 280311, - 280374, - 280412, - 280267, - 280754, - 280372, - 148869, - 280486, - 280536, - 280254, - 280702, - 148223, - 280546, - 280413, - 280678, - 280672, - 280278, - 280456, - 280582, - 280608, - 280503, - 280289, - 280568, - 280252, - 280664, - 280744, - 280433, - 280616, - 280694, - 149147, - 280384, - 280624, - 280437, - 280487, - 280259, - 280519, - 280734, - 280701, - 280340, - 280717, - 149162, - 280298, - 280276, - 280759, - 280645, - 280488, - 280357, - 280327, - 280562, - 280455, - 280599, - 148224, - 280489, - 280312, - 280553, - 280695, - 148225, - 280454, - 280336, - 280583, - 280430, - 280687, - 280248, - 280414, - 280343, - 155984, - 156020, - 280718, - 280518, - 280256, - 280383, - 280640, - 280453, - 280417, - 280653, - 280506, - 280348, - 280434, - 280700, - 280537, - 280452, - 280356, - 280567, - 280733, - 280313, - 280729, - 280282, - 156019, - 290930, - 280745, - 280290, - 280517, - 280293, - 148228, - 280429, - 280719, - 280561, - 156014, - 280612, - 280490, - 280326, - 280538, - 280609, - 148862, - 280451, - 280584, - 280621, - 280297, - 280638, - 280626, - 280245, - 280382, - 280749, - 280598, - 280671, - 280511, - 280491, - 280660, - 280319, - 280699, - 280552, - 280644, - 280632, - 280353, - 280258, - 280418, - 280724, - 280566, - 280504, - 280450, - 280314, - 280688, - 280539, - 280492, - 280585, - 148226, - 280292, - 280421, - 280720, - 280350, - 280337, - 280368, - 280516, - 149171, - 280670, - 280381, - 280449, - 148882, - 280268, - 280542, - 280253, - 149166, - 280281, - 155988, - 280732, - 280540, - 156002, - 280339, - 280448, - 280315, - 280493, - 280721, - 156028, - 280655, - 280760, - 280515, - 290929, - 280355, - 280296, - 280422, - 156022, - 280629, - 280447, - 280565, - 280375, - 280597, - 280586, - 280665, - 280698, - 280691, - 280551, - 148859, - 280354, - 280325, - 280610, - 280642, - 156004, - 280657, - 280746, - 155998, - 280257, - 290928, - 280380, - 280541, - 280643, - 280494, - 280728, - 280446, - 280615, - 148878, - 280371, - 280423, - 280295, - 156025, - 156011, - 280379, - 280279, - 280669, - 280731, - 280316, - 280495, - 280722, - 280272, - 280512, - 280280, - 280547, - 280697, - 280424, - 280592, - 280351, - 280545, - 280564, - 148887, - 280587, - 280277, - 280443, - 280376, - 280338, - 280639, - 280324, - 280442, - 280748, - 280498, - 280369, - 280596, - 280747, - 280753, - 280723, - 280349, - 280440, - 156018, - 280659, - 280378, - 280317, - 280255, - 280499, - 280677, - 148222, - 280322, - 280726, - 280269, - 280373, - 280689, - 149174, - 290931, - 156015, - 280342, - 280692, - 280630, - 149143, - 280294, - 280658, - 280474, - 280250, - 280696, - 148877, - 280527, - 280332, - 148229, - 280363, - 280574, - 280509, - 280662, - 148872, - 148230, - 280345, - 280425, - 280473, - 280264, - 280740, - 280618, - 280246, - 149149, - 280727, - 280304, - 280756, - 280604, - 280399, - 280614, - 280709, - 280557, - 280708, - 280761, - 280575, - 280611, - 280649, - 280400, - 280475, - 280362, - 280274, - 280472, - 280305, - 280398, - 280402, - 162016, - 148867, - 280514, - 280476, - 280242, - 280739, - 280528, - 280707, - 149160, - 280286, - 280668, - 280595, - 149154, - 280605, - 280271, - 280684, - 280650, - 280623, - 280683, - 280377, - 280558, - 280439, - 280573, - 280471, - 280622, - 280635, - 280303, - 280710, - 280529, - 280331, - 280543, - 280477, - 280563, - 280287, - 280576, - 280265, - 280306, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '158', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Unrealized Gain-Loss', - 'id': 133662, - 'is_enabled': True, - 'name': 'Unrealized Gain-Loss', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280740, - 148882, - 280315, - 156028, - 280335, - 280339, - 280347, - 148884, - 280493, - 280530, - 280721, - 280618, - 280310, - 149171, - 280569, - 280622, - 280655, - 280261, - 280477, - 280646, - 149149, - 280760, - 280355, - 280683, - 280735, - 280328, - 156022, - 290929, - 280428, - 280296, - 280304, - 280686, - 280691, - 280529, - 280422, - 280274, - 280652, - 280507, - 280756, - 280629, - 280447, - 280563, - 280565, - 280285, - 280554, - 155994, - 280703, - 280505, - 280246, - 280597, - 280604, - 280459, - 280673, - 280478, - 280586, - 280399, - 280375, - 280633, - 280698, - 280287, - 148881, - 280480, - 280665, - 280551, - 280603, - 280372, - 280260, - 148889, - 148859, - 280354, - 280557, - 280325, - 280438, - 280534, - 280411, - 280573, - 280610, - 280709, - 280341, - 280484, - 156006, - 280657, - 156004, - 280715, - 280547, - 280727, - 280359, - 280479, - 280746, - 280642, - 280758, - 280708, - 280257, - 280648, - 280580, - 280376, - 280693, - 280322, - 280300, - 280380, - 280467, - 280273, - 280763, - 280410, - 280270, - 280643, - 280251, - 290928, - 280483, - 280541, - 148866, - 280521, - 280396, - 280494, - 280575, - 280446, - 280512, - 280615, - 280471, - 280649, - 148878, - 280386, - 280460, - 280306, - 149144, - 280607, - 280302, - 280423, - 280533, - 280309, - 280371, - 280295, - 280761, - 280601, - 280752, - 254109, - 156025, - 280634, - 280725, - 280432, - 280669, - 280379, - 280400, - 280570, - 280362, - 280611, - 280731, - 280240, - 290932, - 156011, - 280461, - 280284, - 280576, - 280316, - 280714, - 280755, - 280475, - 280495, - 280743, - 280558, - 280272, - 148885, - 280736, - 280722, - 156016, - 280280, - 280543, - 280346, - 280425, - 280350, - 280704, - 280697, - 280472, - 280661, - 148887, - 280523, - 280424, - 280628, - 280441, - 148876, - 280351, - 280482, - 280623, - 280592, - 280564, - 280305, - 280329, - 280307, - 280681, - 280577, - 280587, - 155990, - 280398, - 280443, - 280439, - 149152, - 280277, - 280395, - 280365, - 280514, - 280338, - 280442, - 280579, - 280303, - 280639, - 280409, - 280266, - 280324, - 280402, - 280548, - 280247, - 280430, - 280636, - 280668, - 280498, - 280748, - 280462, - 162016, - 280369, - 155998, - 280387, - 280559, - 280753, - 280596, - 280750, - 280555, - 280275, - 280249, - 280318, - 280352, - 280747, - 280726, - 280667, - 280713, - 280465, - 280635, - 280723, - 280476, - 280349, - 280545, - 280739, - 156018, - 280572, - 280301, - 280694, - 280659, - 280333, - 280663, - 148868, - 280440, - 280378, - 280242, - 280288, - 280408, - 280468, - 280317, - 280334, - 280361, - 280647, - 280255, - 280631, - 280344, - 280323, - 280685, - 280499, - 148222, - 148873, - 280404, - 280677, - 280710, - 280588, - 280641, - 280528, - 280707, - 280627, - 156010, - 280470, - 280269, - 280383, - 280640, - 156020, - 280518, - 280556, - 280453, - 280718, - 290931, - 280433, - 280414, - 280737, - 280506, - 155984, - 149150, - 280653, - 280256, - 280689, - 280417, - 280248, - 280343, - 280373, - 280348, - 149174, - 280700, - 149160, - 280687, - 280583, - 280762, - 280452, - 280591, - 280336, - 280537, - 280356, - 280508, - 280454, - 148225, - 280553, - 280612, - 280567, - 280426, - 280312, - 280489, - 280729, - 280733, - 156015, - 280695, - 280599, - 280394, - 280313, - 280342, - 280282, - 280286, - 148224, - 156019, - 280532, - 280757, - 280455, - 280666, - 280745, - 280327, - 280692, - 280290, - 280517, - 280594, - 280357, - 280293, - 280488, - 280562, - 280308, - 280759, - 280595, - 148228, - 149143, - 280711, - 280645, - 280276, - 280298, - 280630, - 280625, - 280294, - 156014, - 280326, - 280331, - 149162, - 280481, - 280490, - 280429, - 280561, - 280690, - 280717, - 280719, - 280701, - 280578, - 280538, - 290930, - 280734, - 280330, - 280609, - 280738, - 280451, - 280658, - 280340, - 280519, - 280696, - 280584, - 280259, - 280403, - 280487, - 148862, - 280297, - 280474, - 280624, - 280749, - 280384, - 280571, - 280638, - 280621, - 280626, - 280619, - 280437, - 280664, - 280742, - 149147, - 280382, - 280250, - 280616, - 149154, - 280671, - 280744, - 280598, - 280678, - 280252, - 280546, - 280524, - 280353, - 280614, - 280582, - 148877, - 280491, - 280728, - 280245, - 280660, - 280466, - 280289, - 280511, - 280503, - 280613, - 280552, - 280434, - 280699, - 280527, - 280332, - 280319, - 280644, - 280679, - 280724, - 280632, - 280265, - 280608, - 280568, - 280456, - 280522, - 280258, - 280651, - 280413, - 280672, - 280536, - 280702, - 148223, - 148869, - 280254, - 280605, - 280418, - 280486, - 280267, - 280509, - 280566, - 280510, - 280374, - 148229, - 280450, - 280602, - 280412, - 280311, - 280364, - 280314, - 280363, - 280457, - 280345, - 280504, - 280299, - 280531, - 280492, - 280427, - 280688, - 280539, - 280754, - 280574, - 280585, - 148226, - 280271, - 280542, - 280712, - 280367, - 280513, - 280706, - 280279, - 280421, - 148867, - 280292, - 280358, - 149170, - 280705, - 280720, - 280670, - 280741, - 280620, - 280662, - 280337, - 280560, - 280370, - 280684, - 280368, - 280516, - 280469, - 280716, - 148230, - 280473, - 280278, - 280381, - 280377, - 280241, - 280730, - 280281, - 149166, - 280449, - 149145, - 280360, - 280385, - 280321, - 280268, - 280600, - 280656, - 280283, - 280407, - 280253, - 148872, - 280264, - 280535, - 280637, - 280732, - 155988, - 280650, - 280485, - 280581, - 280617, - 280500, - 148863, - 280593, - 280544, - 280540, - 280515, - 280448, - 156002, - 280606, - 280458, - 280680, - 280682, - 280520, - 280366, - 280169, - 279979, - 279880, - 279756, - 148227, - 280212, - 280110, - 280165, - 155995, - 279702, - 279704, - 279731, - 156023, - 279720, - 279982, - 279978, - 279881, - 280111, - 280211, - 279758, - 280036, - 280044, - 149153, - 279836, - 149163, - 280216, - 279882, - 279977, - 280081, - 280106, - 279717, - 279721, - 280112, - 149148, - 149172, - 280210, - 279753, - 279835, - 280009, - 279976, - 279874, - 279883, - 279705, - 280053, - 279759, - 280079, - 280113, - 280089, - 280209, - 279983, - 155985, - 280007, - 279722, - 279834, - 279840, - 280051, - 279975, - 279703, - 279884, - 280208, - 279760, - 280114, - 280159, - 279729, - 156005, - 280751, - 279730, - 280054, - 280035, - 280105, - 279974, - 279885, - 280115, - 279737, - 280217, - 280207, - 279761, - 279752, - 279854, - 279873, - 279833, - 279741, - 279886, - 279973, - 279984, - 280206, - 280116, - 280676, - 148858, - 149173, - 279841, - 279832, - 279887, - 279706, - 280117, - 280010, - 156013, - 279972, - 155989, - 280205, - 279762, - 280078, - 280218, - 280039, - 280675, - 279742, - 280104, - 279831, - 280118, - 279888, - 149151, - 279971, - 279872, - 280204, - 279765, - 279744, - 279728, - 149155, - 280674, - 280034, - 279985, - 279802, - 279732, - 279970, - 149175, - 279889, - 156001, - 280203, - 279842, - 280119, - 279830, - 279766, - 280103, - 279757, - 279890, - 280219, - 280011, - 279751, - 279969, - 280055, - 280202, - 280120, - 279871, - 148874, - 280654, - 279829, - 156024, - 279701, - 155997, - 279891, - 280122, - 280077, - 279968, - 279707, - 149167, - 279986, - 280201, - 279767, - 279735, - 280222, - 280161, - 280590, - 279763, - 280200, - 279828, - 148861, - 280123, - 280082, - 149159, - 279892, - 280102, - 279967, - 280033, - 279770, - 279764, - 280006, - 279857, - 280589, - 279750, - 279798, - 280046, - 280199, - 280124, - 279870, - 279893, - 279966, - 279827, - 279768, - 279771, - 280012, - 280076, - 279894, - 279987, - 280126, - 279965, - 279843, - 155986, - 280056, - 280198, - 291035, - 279826, - 279895, - 149146, - 155991, - 280223, - 280197, - 280127, - 279727, - 279869, - 279964, - 280101, - 280393, - 279769, - 279772, - 280238, - 280550, - 148870, - 280196, - 280057, - 279825, - 279749, - 280128, - 280291, - 279844, - 148871, - 280032, - 279963, - 279988, - 279738, - 280040, - 280050, - 279776, - 279773, - 280224, - 280549, - 280195, - 280129, - 279896, - 280013, - 280075, - 279962, - 279927, - 279708, - 279824, - 246836, - 279777, - 279774, - 279868, - 280100, - 280130, - 279897, - 280194, - 279961, - 279823, - 280526, - 148875, - 279898, - 280193, - 279845, - 280131, - 280088, - 279726, - 279960, - 279989, - 279775, - 280058, - 279778, - 279733, - 280525, - 280021, - 280228, - 280239, - 280031, - 280192, - 280099, - 279822, - 280132, - 279899, - 279867, - 155987, - 279959, - 279748, - 280502, - 279876, - 280191, - 280049, - 279779, - 149168, - 279900, - 280133, - 280014, - 279709, - 279958, - 280229, - 279700, - 279932, - 279821, - 279879, - 279902, - 279990, - 279866, - 149165, - 279780, - 280074, - 280134, - 280190, - 280501, - 156000, - 279957, - 279820, - 280083, - 280098, - 279903, - 280189, - 280135, - 290067, - 279725, - 280497, - 279846, - 280005, - 279901, - 279747, - 279799, - 279956, - 280030, - 279781, - 280188, - 279819, - 279856, - 156012, - 279904, - 280136, - 280015, - 280496, - 280073, - 279991, - 279955, - 279935, - 280230, - 280059, - 279931, - 280041, - 280187, - 279782, - 279905, - 280137, - 149158, - 279818, - 279954, - 280029, - 279865, - 279906, - 279710, - 155992, - 280097, - 156008, - 279783, - 280138, - 280186, - 280464, - 280389, - 279847, - 279817, - 279953, - 279746, - 279907, - 280028, - 280231, - 280185, - 280037, - 280139, - 279992, - 290068, - 156009, - 149156, - 280072, - 280463, - 280184, - 279952, - 279816, - 279864, - 279784, - 280096, - 280164, - 279999, - 279908, - 280140, - 280016, - 280445, - 279951, - 280121, - 280060, - 280183, - 279909, - 279848, - 279785, - 290065, - 148883, - 279815, - 148886, - 280232, - 280048, - 280141, - 156027, - 280125, - 279724, - 279950, - 279993, - 279910, - 280182, - 279734, - 280061, - 280027, - 279863, - 280095, - 280160, - 279786, - 280142, - 279814, - 280444, - 279949, - 279911, - 280181, - 280151, - 279745, - 280180, - 280143, - 280071, - 280436, - 279711, - 279813, - 280233, - 279948, - 155993, - 279912, - 279862, - 279787, - 280144, - 280017, - 280435, - 280220, - 279994, - 280179, - 280084, - 279947, - 279913, - 279812, - 280163, - 155999, - 279788, - 280145, - 280004, - 290069, - 280094, - 280221, - 279723, - 279946, - 279914, - 280062, - 279849, - 280178, - 280146, - 280042, - 280026, - 279743, - 279789, - 280177, - 279811, - 280431, - 280070, - 280234, - 279945, - 279915, - 280000, - 280225, - 280147, - 279995, - 280176, - 279861, - 279712, - 280420, - 279810, - 280018, - 279944, - 279916, - 148865, - 148888, - 279790, - 279928, - 279850, - 280148, - 280226, - 280175, - 280093, - 280419, - 279853, - 279917, - 279943, - 280235, - 279809, - 155996, - 148890, - 148879, - 280001, - 279791, - 280227, - 280149, - 279918, - 280025, - 280174, - 279942, - 280392, - 279996, - 279860, - 280173, - 279808, - 280150, - 279792, - 149161, - 279719, - 280416, - 279919, - 280092, - 280063, - 279941, - 279740, - 280086, - 280243, - 280172, - 280152, - 279851, - 279807, - 280415, - 279920, - 280236, - 156021, - 279714, - 148231, - 148864, - 280019, - 280047, - 279940, - 279859, - 280022, - 279793, - 280069, - 280244, - 279997, - 280153, - 149169, - 280171, - 280066, - 280085, - 280406, - 148860, - 280091, - 279921, - 279939, - 280024, - 279806, - 279794, - 280237, - 280154, - 279922, - 280170, - 280262, - 279739, - 280068, - 279938, - 279875, - 280155, - 290084, - 280043, - 279858, - 279805, - 279795, - 280405, - 279923, - 280064, - 279937, - 280263, - 280168, - 279998, - 280156, - 280003, - 280020, - 149157, - 148880, - 279924, - 280401, - 279804, - 280320, - 279801, - 279736, - 280090, - 279936, - 280065, - 280045, - 280167, - 279796, - 280157, - 156003, - 279718, - 280087, - 280002, - 156026, - 280397, - 280162, - 279925, - 280023, - 279800, - 279934, - 280158, - 279803, - 279930, - 279797, - 280067, - 280390, - 279926, - 280166, - 280388, - 279933, - 279716, - 279929, - 279877, - 280038, - 279713, - 280391, - 279981, - 279852, - 280108, - 280214, - 279838, - 279878, - 149164, - 279980, - 280213, - 279839, - 279755, - 280109, - 280008, - 280107, - 279855, - 280215, - 280080, - 279754, - 156007, - 279715, - 280052, - 279837, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '163', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Mfg WIP', - 'id': 133663, - 'is_enabled': True, - 'name': 'Mfg WIP', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280012, - 279720, - 279759, - 279939, - 279789, - 279709, - 149161, - 279921, - 279724, - 280177, - 279972, - 279771, - 155989, - 279932, - 279811, - 279882, - 280391, - 279875, - 280000, - 279768, - 280091, - 280100, - 280431, - 280187, - 279827, - 279867, - 280205, - 280070, - 279762, - 279966, - 279950, - 280066, - 148860, - 280041, - 279945, - 280085, - 280078, - 280228, - 279893, - 280162, - 280234, - 280098, - 280218, - 280042, - 280031, - 279982, - 279798, - 280216, - 279870, - 279903, - 280406, - 280039, - 279993, - 280124, - 280089, - 279915, - 280049, - 280171, - 280199, - 279756, - 280059, - 280213, - 279750, - 279868, - 280153, - 279877, - 280225, - 280525, - 279997, - 280589, - 280230, - 280675, - 280189, - 280147, - 280229, - 279742, - 149169, - 279774, - 280006, - 279908, - 280244, - 280046, - 290068, - 279995, - 279910, - 280069, - 280176, - 279793, - 279831, - 279748, - 280104, - 280135, - 279861, - 279935, - 279764, - 279979, - 279847, - 279770, - 280033, - 280182, - 280118, - 279967, - 280038, - 279712, - 290067, - 279980, - 279859, - 280113, - 279888, - 279800, - 280420, - 148227, - 279777, - 279940, - 290065, - 279810, - 149151, - 280019, - 279927, - 280102, - 246836, - 279971, - 279892, - 149159, - 279931, - 279824, - 280018, - 280212, - 279872, - 279978, - 279955, - 279944, - 149163, - 148864, - 148231, - 280088, - 280082, - 280204, - 279734, - 279765, - 280123, - 279714, - 279817, - 148861, - 279991, - 148865, - 280080, - 279744, - 279916, - 280061, - 149164, - 156021, - 280184, - 148888, - 149153, - 279828, - 279725, - 280047, - 280236, - 280200, - 280497, - 279779, - 279713, - 279880, - 279920, - 280027, - 279836, - 279850, - 280397, - 279728, - 279790, - 280140, - 280674, - 279763, - 280590, - 149155, - 156009, - 280073, - 280148, - 279700, - 280415, - 280222, - 280161, - 279863, - 279878, - 279807, - 280226, - 280067, - 279851, - 280034, - 279708, - 280175, - 279802, - 279985, - 279962, - 279732, - 279778, - 280093, - 280036, - 279767, - 280201, - 280015, - 279928, - 280152, - 280464, - 280419, - 280005, - 279881, - 156001, - 280185, - 279986, - 280086, - 280496, - 149167, - 279803, - 280203, - 279917, - 279799, - 280172, - 280243, - 280016, - 279970, - 279943, - 279981, - 149175, - 280095, - 279901, - 279707, - 279735, - 280013, - 280235, - 280136, - 280111, - 279968, - 280231, - 279889, - 279941, - 279846, - 279809, - 280063, - 280077, - 279717, - 279842, - 280239, - 280119, - 280092, - 279786, - 155996, - 279821, - 279919, - 279838, - 279904, - 148890, - 279830, - 279896, - 280122, - 279747, - 279733, - 279766, - 280129, - 279891, - 280103, - 280416, - 149172, - 148879, - 280108, - 155997, - 280142, - 279757, - 280392, - 279883, - 279701, - 279956, - 279719, - 279890, - 279791, - 280030, - 279792, - 280502, - 279740, - 280219, - 280011, - 279852, - 280001, - 279853, - 279814, - 156024, - 280150, - 156012, - 280149, - 280549, - 279855, - 280445, - 279829, - 280002, - 279751, - 280211, - 279918, - 279819, - 279808, - 279969, - 280186, - 280025, - 280055, - 280654, - 280444, - 279715, - 280138, - 280173, - 280195, - 280202, - 279781, - 280174, - 156026, - 148874, - 280214, - 279860, - 280188, - 280227, - 148875, - 279996, - 280120, - 279949, - 279942, - 279758, - 279871, - 280209, - 280224, - 280139, - 280087, - 279983, - 279783, - 280160, - 279952, - 279773, - 280215, - 279718, - 279911, - 279951, - 156003, - 279837, - 149168, - 280181, - 279959, - 280058, - 279776, - 280050, - 279879, - 279899, - 155985, - 280157, - 280007, - 280151, - 279775, - 280040, - 149165, - 279722, - 279796, - 280009, - 279745, - 279926, - 279834, - 280121, - 279988, - 280028, - 279840, - 279705, - 280180, - 279999, - 279963, - 279989, - 280167, - 280065, - 280051, - 280143, - 279960, - 279975, - 279936, - 279835, - 280071, - 280081, - 280032, - 280075, - 280060, - 280045, - 279703, - 279907, - 280436, - 280166, - 279884, - 156008, - 148871, - 280090, - 279736, - 279902, - 279711, - 280072, - 280208, - 280008, - 280183, - 279813, - 149148, - 279816, - 279844, - 280079, - 280320, - 279990, - 279948, - 279760, - 280291, - 279726, - 280114, - 279702, - 280233, - 155987, - 279729, - 280110, - 280401, - 155995, - 155993, - 280097, - 280023, - 280128, - 279749, - 279909, - 280132, - 279924, - 279825, - 155992, - 148880, - 279710, - 280112, - 279912, - 279906, - 156005, - 279822, - 279862, - 280131, - 279801, - 279856, - 280057, - 280196, - 280751, - 280021, - 279804, - 280550, - 279848, - 279787, - 280099, - 280159, - 280107, - 279866, - 149157, - 280238, - 280388, - 280144, - 279934, - 280020, - 148870, - 279730, - 279845, - 279753, - 280017, - 279785, - 280054, - 280003, - 279900, - 280435, - 280156, - 279772, - 279998, - 279780, - 279769, - 279876, - 280101, - 280035, - 280220, - 279865, - 280105, - 279864, - 279974, - 279964, - 279869, - 148883, - 279994, - 279930, - 279704, - 280168, - 280193, - 280179, - 280263, - 280029, - 279885, - 280158, - 280115, - 279937, - 279727, - 279815, - 280064, - 280133, - 280084, - 280037, - 279923, - 280074, - 280217, - 279947, - 279933, - 280109, - 280134, - 280127, - 280405, - 280197, - 279874, - 279925, - 279913, - 148886, - 279795, - 280207, - 280164, - 279812, - 279721, - 279761, - 279752, - 280106, - 279954, - 280223, - 279805, - 279898, - 155999, - 279854, - 280022, - 280526, - 155991, - 280393, - 149146, - 279858, - 279788, - 149156, - 279873, - 279784, - 280043, - 279731, - 280190, - 279977, - 279833, - 279823, - 280004, - 156007, - 280463, - 279895, - 279826, - 280163, - 280145, - 280501, - 279741, - 279746, - 279716, - 290069, - 280232, - 280155, - 280014, - 279737, - 291035, - 279886, - 279818, - 280094, - 149158, - 279976, - 290084, - 280198, - 280048, - 156000, - 279973, - 280169, - 280221, - 279961, - 280206, - 279938, - 280096, - 149173, - 280137, - 279723, - 280053, - 280194, - 280056, - 279984, - 155986, - 279755, - 280210, - 279946, - 279929, - 279957, - 280068, - 280116, - 279953, - 280165, - 279914, - 156027, - 280052, - 279843, - 279739, - 279965, - 279754, - 280062, - 280192, - 280262, - 279905, - 280676, - 280170, - 279922, - 279849, - 279820, - 279841, - 280154, - 280237, - 280141, - 279832, - 280191, - 280178, - 280044, - 279738, - 280126, - 279887, - 279958, - 148858, - 279897, - 279987, - 280083, - 279797, - 280390, - 280146, - 280125, - 279706, - 280026, - 280117, - 279894, - 279794, - 279839, - 280010, - 280076, - 279992, - 156013, - 279806, - 279782, - 279743, - 280389, - 279857, - 156023, - 280130, - 280024, - 280428, - 280641, - 280434, - 280592, - 156028, - 280319, - 280729, - 280427, - 280437, - 280725, - 280323, - 280438, - 280591, - 148884, - 280595, - 148872, - 280439, - 280426, - 148867, - 280318, - 148881, - 280254, - 280256, - 280724, - 280642, - 280440, - 280588, - 280730, - 280425, - 280441, - 148222, - 280317, - 280723, - 280596, - 280639, - 280442, - 280587, - 280324, - 280424, - 280443, - 280722, - 280316, - 280731, - 280423, - 280446, - 280643, - 280257, - 156004, - 280325, - 148859, - 280586, - 280597, - 280447, - 280422, - 156022, - 280721, - 280315, - 280448, - 280732, - 280253, - 280449, - 280720, - 280421, - 280585, - 280314, - 280450, - 280542, - 280418, - 280644, - 280258, - 280598, - 280638, - 280584, - 280353, - 280451, - 280719, - 280326, - 156014, - 156019, - 280313, - 280733, - 280452, - 280417, - 280453, - 280718, - 280414, - 280583, - 280454, - 280312, - 280599, - 280455, - 280327, - 280645, - 280717, - 280734, - 280259, - 280241, - 280546, - 149147, - 280252, - 280582, - 280456, - 280413, - 148223, - 148869, - 280412, - 280311, - 280457, - 280716, - 280600, - 280581, - 280637, - 280458, - 280310, - 280646, - 280735, - 280328, - 155994, - 280459, - 280260, - 280411, - 280715, - 280580, - 280410, - 280460, - 280763, - 149144, - 280714, - 280309, - 280601, - 280461, - 280736, - 280579, - 280548, - 280329, - 280409, - 280636, - 280462, - 280713, - 280465, - 280408, - 280647, - 280240, - 280737, - 280308, - 280578, - 280330, - 280466, - 280602, - 280712, - 149145, - 280407, - 280261, - 148889, - 156006, - 280467, - 280251, - 280307, - 280577, - 280468, - 280404, - 280711, - 280738, - 280469, - 280648, - 280470, - 280603, - 280403, - 280306, - 280576, - 280331, - 280710, - 280635, - 280543, - 280471, - 280622, - 149154, - 280761, - 149160, - 280739, - 280402, - 280305, - 280472, - 280400, - 280649, - 280575, - 280709, - 280604, - 280250, - 280264, - 280473, - 148229, - 280332, - 148877, - 280474, - 280574, - 148230, - 280740, - 280304, - 280399, - 280668, - 280708, - 280475, - 280398, - 280476, - 280707, - 280605, - 280650, - 280573, - 280303, - 280477, - 280634, - 280265, - 280741, - 280333, - 280396, - 280478, - 280706, - 149150, - 280572, - 280395, - 148876, - 280302, - 280479, - 280480, - 280606, - 280705, - 280651, - 280742, - 280571, - 280481, - 280394, - 148873, - 280334, - 280301, - 280249, - 280387, - 280266, - 149152, - 280482, - 280704, - 280743, - 280570, - 280607, - 280386, - 280483, - 280300, - 280484, - 280633, - 280703, - 280652, - 280569, - 280335, - 148863, - 280278, - 280485, - 280385, - 149170, - 280299, - 280267, - 280486, - 280702, - 280568, - 280608, - 280744, - 280384, - 280487, - 280701, - 280298, - 280488, - 280489, - 148225, - 280336, - 280248, - 280383, - 280653, - 280700, - 280567, - 280745, - 148228, - 280490, - 280609, - 280297, - 280382, - 280491, - 280699, - 280632, - 280566, - 280492, - 280337, - 280381, - 280268, - 155988, - 156002, - 280655, - 280493, - 280296, - 280565, - 148882, - 280698, - 280610, - 280746, - 280380, - 280494, - 148878, - 280295, - 280379, - 280495, - 280697, - 280564, - 280338, - 280498, - 280747, - 156018, - 280378, - 280499, - 280269, - 156015, - 280352, - 280294, - 280696, - 280611, - 280377, - 280656, - 280247, - 280631, - 280279, - 290932, - 280500, - 280503, - 280695, - 280293, - 280504, - 280339, - 280748, - 290931, - 280505, - 280376, - 280694, - 280612, - 280270, - 148887, - 280292, - 280657, - 280375, - 149171, - 280749, - 290930, - 280506, - 155984, - 280340, - 280374, - 280507, - 280693, - 155990, - 280508, - 280680, - 280350, - 280563, - 280613, - 280246, - 280667, - 280509, - 280630, - 280692, - 149174, - 280373, - 280658, - 280271, - 280750, - 280510, - 280679, - 280341, - 280562, - 280372, - 280511, - 280691, - 280614, - 280512, - 280678, - 280752, - 280371, - 290929, - 280513, - 280370, - 280690, - 280514, - 149143, - 280545, - 280342, - 280689, - 280677, - 280659, - 280753, - 155998, - 280369, - 280272, - 156011, - 280615, - 290928, - 280629, - 280515, - 280516, - 280368, - 280688, - 280660, - 280245, - 280561, - 280517, - 280290, - 280518, - 280343, - 280687, - 149162, - 280519, - 280616, - 280289, - 280754, - 280367, - 280560, - 280520, - 280366, - 280686, - 280273, - 280521, - 280755, - 280661, - 280559, - 280365, - 148868, - 280288, - 280344, - 156010, - 280522, - 280617, - 254109, - 280628, - 280544, - 280685, - 280523, - 280524, - 280364, - 280287, - 280558, - 280684, - 280242, - 280756, - 280274, - 149149, - 280345, - 280363, - 280527, - 280662, - 280557, - 280618, - 280362, - 162016, - 280528, - 280286, - 280683, - 280529, - 280757, - 280361, - 280530, - 280682, - 280556, - 280346, - 148885, - 280285, - 280360, - 280623, - 280531, - 280619, - 280627, - 280666, - 280663, - 280275, - 280532, - 280555, - 280762, - 280681, - 156016, - 280284, - 280533, - 148866, - 280758, - 280359, - 280534, - 280673, - 280554, - 280347, - 280535, - 280283, - 280620, - 280358, - 280536, - 280672, - 280624, - 280664, - 280276, - 148224, - 280759, - 280357, - 280553, - 156020, - 280348, - 280537, - 280356, - 280282, - 280538, - 280621, - 280671, - 280626, - 280552, - 280539, - 148226, - 280670, - 280281, - 280540, - 280760, - 280355, - 280547, - 280665, - 280551, - 280354, - 280541, - 156025, - 280669, - 280280, - 280351, - 280625, - 280277, - 280255, - 280349, - 280322, - 280430, - 280728, - 148862, - 280429, - 280593, - 280432, - 280727, - 280321, - 280594, - 280640, - 149166, - 280433, - 280726, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '6', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Undeposited Funds', - 'id': 133664, - 'is_enabled': True, - 'name': 'Undeposited Funds', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280758, - 280658, - 280335, - 280278, - 280569, - 280245, - 280340, - 280428, - 148223, - 280533, - 280308, - 280718, - 280686, - 280677, - 280530, - 280652, - 280359, - 280633, - 280491, - 280690, - 280382, - 280703, - 280515, - 280504, - 280423, - 280446, - 280715, - 280737, - 280484, - 280499, - 280300, - 280430, - 280273, - 148869, - 280614, - 148224, - 280297, - 280378, - 280246, - 280541, - 280556, - 280412, - 280483, - 280643, - 280593, - 280521, - 280627, - 280691, - 280438, - 280257, - 280260, - 280373, - 280607, - 280570, - 280411, - 280642, - 280251, - 280386, - 280591, - 280659, - 280467, - 156004, - 280311, - 280325, - 280755, - 280534, - 156018, - 148889, - 290932, - 280743, - 280704, - 280354, - 280661, - 280457, - 280647, - 280660, - 280276, - 280673, - 280349, - 148859, - 280358, - 280285, - 280551, - 280374, - 280509, - 280559, - 290929, - 280482, - 280459, - 155994, - 280465, - 280365, - 280717, - 149152, - 280408, - 280747, - 280631, - 280665, - 280507, - 280553, - 280266, - 280387, - 280663, - 280724, - 280554, - 280249, - 280656, - 280753, - 280414, - 280301, - 280586, - 280688, - 148881, - 148868, - 280546, - 280328, - 280597, - 280620, - 280588, - 280609, - 280288, - 280318, - 280427, - 280334, - 148862, - 280372, - 280447, - 280735, - 280734, - 280713, - 148873, - 280516, - 280344, - 280646, - 280310, - 280592, - 280492, - 280422, - 155998, - 280404, - 156010, - 280339, - 280347, - 149174, - 280481, - 280394, - 280716, - 280730, - 156022, - 280571, - 280762, - 280293, - 280261, - 280742, - 280407, - 280377, - 156028, - 280355, - 280369, - 280603, - 280522, - 280458, - 280728, - 280637, - 280581, - 280760, - 280275, - 280651, - 280705, - 280437, - 280535, - 156020, - 280561, - 280498, - 280600, - 280480, - 280721, - 280617, - 280566, - 280562, - 280664, - 280315, - 280259, - 280376, - 280283, - 280606, - 280448, - 148884, - 280490, - 280479, - 280302, - 280532, - 280338, - 254109, - 280322, - 280353, - 280547, - 280564, - 280350, - 280540, - 280270, - 148228, - 280726, - 280360, - 280628, - 280426, - 280582, - 148876, - 280395, - 280425, - 280441, - 280732, - 280572, - 280752, - 290931, - 280685, - 280695, - 280517, - 280312, - 149150, - 280555, - 280697, - 280625, - 280706, - 148222, - 280594, - 280599, - 280421, - 280290, - 280514, - 280478, - 280396, - 280462, - 280432, - 280523, - 280745, - 280341, - 280544, - 280567, - 280271, - 280253, - 280449, - 280636, - 280468, - 280333, - 280694, - 280630, - 280700, - 280241, - 280524, - 280255, - 149171, - 280281, - 280409, - 280653, - 280272, - 280611, - 280364, - 280383, - 280741, - 149166, - 149145, - 280648, - 280265, - 280634, - 280632, - 148867, - 280624, - 280495, - 280317, - 280287, - 280670, - 280455, - 280696, - 280693, - 280545, - 280477, - 280303, - 280489, - 148887, - 280248, - 280429, - 280343, - 280558, - 156011, - 280682, - 280573, - 280667, - 280505, - 280720, - 280723, - 280518, - 280602, - 280650, - 280585, - 280379, - 280681, - 280684, - 280596, - 280539, - 280577, - 280531, - 280605, - 280707, - 280329, - 280503, - 280687, - 280314, - 280450, - 280434, - 280579, - 280242, - 280294, - 280295, - 280641, - 280476, - 280398, - 280368, - 149147, - 280336, - 280639, - 280418, - 280763, - 280469, - 155990, - 280475, - 280708, - 148225, - 280399, - 280442, - 280508, - 280542, - 149143, - 280644, - 280756, - 280699, - 280488, - 280298, - 280552, - 148878, - 280274, - 280712, - 280736, - 149162, - 280258, - 280640, - 156016, - 149149, - 280583, - 280304, - 280678, - 280277, - 280679, - 280701, - 280307, - 280740, - 280668, - 280615, - 280598, - 280511, - 280327, - 148230, - 280574, - 280727, - 280345, - 280587, - 280513, - 280749, - 280363, - 280252, - 280279, - 280519, - 280666, - 280456, - 280324, - 280692, - 280689, - 280474, - 280626, - 280494, - 280748, - 280289, - 148877, - 280487, - 280384, - 280470, - 280649, - 280440, - 280284, - 280351, - 280439, - 280527, - 280371, - 290928, - 280671, - 280332, - 280323, - 148229, - 280744, - 280510, - 280461, - 280616, - 280466, - 280621, - 148872, - 280662, - 280268, - 280380, - 280319, - 280453, - 280256, - 280638, - 280292, - 280424, - 280557, - 280601, - 280473, - 280548, - 280608, - 280568, - 280264, - 280309, - 280584, - 280680, - 280612, - 280657, - 280618, - 280443, - 280357, - 280451, - 280604, - 280623, - 280709, - 280413, - 280746, - 280538, - 280575, - 280486, - 280247, - 280672, - 280240, - 280267, - 280719, - 280299, - 280400, - 280254, - 280326, - 280610, - 280754, - 280362, - 280714, - 148882, - 290930, - 156006, - 280698, - 280280, - 280472, - 280622, - 280305, - 156015, - 280402, - 280346, - 280367, - 156014, - 156019, - 162016, - 280337, - 280738, - 280506, - 280739, - 280250, - 280725, - 280563, - 280729, - 280352, - 280528, - 280381, - 280565, - 280282, - 280613, - 280342, - 149160, - 156002, - 149170, - 280370, - 280702, - 280313, - 280711, - 280316, - 280286, - 149144, - 280543, - 280619, - 280629, - 280733, - 280560, - 280512, - 280454, - 149154, - 280375, - 280356, - 280722, - 280385, - 280683, - 280595, - 280460, - 280759, - 280471, - 280635, - 280731, - 155984, - 280321, - 280710, - 280485, - 280296, - 148863, - 280537, - 280750, - 148866, - 280331, - 280761, - 148226, - 280529, - 280330, - 280578, - 280433, - 280576, - 280410, - 280669, - 280520, - 280306, - 155988, - 280493, - 280403, - 280269, - 148885, - 280348, - 280500, - 280757, - 280536, - 156025, - 280580, - 280417, - 280655, - 280645, - 280361, - 280366, - 280452, - 279742, - 279959, - 290068, - 149156, - 155987, - 280164, - 280072, - 280463, - 280079, - 280021, - 280184, - 279867, - 280088, - 279952, - 279899, - 279816, - 280212, - 280132, - 280099, - 279864, - 279822, - 280158, - 279784, - 280096, - 280192, - 156026, - 280228, - 280031, - 279908, - 279778, - 279803, - 280140, - 279733, - 280016, - 280445, - 148875, - 280525, - 279951, - 280009, - 280058, - 279775, - 280121, - 279989, - 280060, - 280183, - 279835, - 279960, - 279726, - 279909, - 280131, - 279717, - 279848, - 279845, - 279785, - 279754, - 148883, - 279815, - 279930, - 280193, - 279898, - 148886, - 280526, - 279738, - 279823, - 279753, - 280232, - 280048, - 279961, - 156027, - 280194, - 280141, - 279897, - 280125, - 280130, - 279724, - 279797, - 279950, - 280100, - 279927, - 279993, - 279868, - 279774, - 280210, - 279910, - 280182, - 279777, - 279824, - 280166, - 279734, - 280061, - 280027, - 280067, - 279708, - 279863, - 279962, - 246836, - 279857, - 280013, - 280095, - 279896, - 279786, - 280129, - 280142, - 279814, - 280549, - 280444, - 149172, - 280224, - 279949, - 280195, - 280390, - 279773, - 279911, - 280181, - 280081, - 279776, - 290065, - 280050, - 280040, - 280151, - 279745, - 279988, - 280160, - 280180, - 279926, - 279963, - 280143, - 280071, - 280075, - 280436, - 148871, - 279756, - 279711, - 279813, - 279844, - 280291, - 279948, - 280238, - 280233, - 155993, - 280112, - 280128, - 279931, - 279749, - 279825, - 280032, - 279912, - 279862, - 280044, - 280057, - 280196, - 280165, - 279787, - 280550, - 280144, - 279772, - 280388, - 280017, - 280435, - 279769, - 148870, - 280220, - 280101, - 279721, - 279994, - 280179, - 279869, - 279964, - 279727, - 279933, - 280084, - 279947, - 280127, - 280197, - 156007, - 279913, - 279812, - 280223, - 280106, - 155999, - 155991, - 279788, - 149146, - 280000, - 280004, - 279895, - 280145, - 279826, - 280393, - 290069, - 280094, - 279716, - 291035, - 280163, - 280198, - 280221, - 280070, - 279723, - 279929, - 280056, - 279946, - 155986, - 279843, - 279914, - 279977, - 280062, - 279965, - 279849, - 280026, - 280178, - 280126, - 279854, - 279987, - 279798, - 279894, - 280146, - 280076, - 279743, - 279882, - 280012, - 279771, - 279789, - 280177, - 279811, - 279768, - 280431, - 149148, - 279827, - 279966, - 279945, - 279893, - 280216, - 280234, - 280042, - 279870, - 280124, - 279915, - 280199, - 279750, - 280225, - 280589, - 279877, - 280147, - 280176, - 280006, - 279995, - 279764, - 279861, - 280038, - 279770, - 280033, - 279712, - 279810, - 280420, - 279967, - 280046, - 279892, - 280102, - 149159, - 149163, - 280018, - 279944, - 280082, - 280123, - 148861, - 149153, - 148865, - 279916, - 148888, - 279828, - 280200, - 148227, - 279763, - 279850, - 279790, - 280222, - 279836, - 280148, - 280590, - 280226, - 280175, - 279767, - 280093, - 280201, - 280419, - 280036, - 279986, - 280161, - 149167, - 279917, - 279943, - 279928, - 279707, - 279981, - 280235, - 279968, - 279809, - 280077, - 279880, - 155996, - 148890, - 280122, - 279735, - 280392, - 279891, - 148879, - 155997, - 280108, - 279701, - 279791, - 279740, - 156024, - 279713, - 280149, - 280001, - 279829, - 279918, - 280025, - 280654, - 279860, - 148874, - 280174, - 279758, - 279853, - 280227, - 279942, - 279871, - 280120, - 280214, - 279996, - 280202, - 280055, - 280173, - 279969, - 279808, - 279751, - 280150, - 280011, - 280219, - 279890, - 280211, - 279792, - 279757, - 279719, - 279766, - 280416, - 279838, - 280103, - 279830, - 279919, - 280092, - 279715, - 280119, - 279842, - 279941, - 280111, - 279889, - 280063, - 149175, - 279970, - 149155, - 279855, - 280243, - 280172, - 279881, - 280203, - 279732, - 280152, - 279985, - 279851, - 279807, - 280034, - 280086, - 280415, - 279878, - 280674, - 279920, - 279728, - 156001, - 280236, - 280047, - 156021, - 279744, - 279765, - 149164, - 279714, - 279802, - 148231, - 148864, - 279872, - 279852, - 279971, - 279940, - 279980, - 279888, - 279859, - 280118, - 280204, - 280104, - 149169, - 279831, - 279978, - 279793, - 280019, - 280069, - 148858, - 280244, - 280089, - 149151, - 280675, - 279997, - 280213, - 280153, - 280171, - 279979, - 280039, - 279982, - 280406, - 280218, - 280085, - 148860, - 280078, - 279762, - 280205, - 280091, - 155989, - 280066, - 279720, - 279921, - 149161, - 279939, - 279972, - 156013, - 280024, - 279806, - 279875, - 280010, - 280117, - 279794, - 279706, - 279887, - 279839, - 280237, - 279832, - 280154, - 279841, - 156023, - 279922, - 280170, - 280239, - 279737, - 280676, - 280262, - 279739, - 280116, - 280068, - 279984, - 279938, - 279755, - 280206, - 280169, - 279973, - 279886, - 290084, - 280022, - 279741, - 280043, - 280155, - 279833, - 279805, - 279858, - 279731, - 279873, - 279761, - 279752, - 280052, - 279795, - 280405, - 280207, - 280217, - 280109, - 279923, - 280064, - 279937, - 280115, - 279885, - 280110, - 280263, - 280168, - 279974, - 280159, - 149157, - 280105, - 280035, - 279998, - 279704, - 280156, - 280003, - 280054, - 279801, - 279730, - 280107, - 280020, - 279804, - 156005, - 280751, - 148880, - 279924, - 280045, - 280401, - 279729, - 280114, - 279760, - 280391, - 280320, - 280208, - 280008, - 279736, - 280090, - 279884, - 279703, - 279936, - 279975, - 280051, - 279837, - 280065, - 280167, - 279702, - 279840, - 279834, - 279796, - 279722, - 280157, - 280007, - 155985, - 156003, - 279718, - 279983, - 149173, - 280215, - 280087, - 280209, - 280188, - 279781, - 279819, - 280002, - 279846, - 280030, - 279956, - 280113, - 279904, - 279747, - 280080, - 280136, - 279901, - 280496, - 280397, - 280005, - 279799, - 280015, - 280497, - 279955, - 279725, - 280073, - 279991, - 290067, - 156012, - 279935, - 280135, - 280189, - 279903, - 279759, - 280230, - 280059, - 280162, - 280041, - 280187, - 280098, - 280083, - 279782, - 279820, - 280053, - 279905, - 279957, - 280137, - 279818, - 156000, - 149158, - 155995, - 280501, - 279954, - 280190, - 280134, - 279925, - 280029, - 279865, - 279780, - 279866, - 279902, - 279705, - 279906, - 280023, - 155992, - 279710, - 280097, - 279990, - 156008, - 149165, - 279879, - 279783, - 280074, - 279883, - 280138, - 280186, - 279821, - 280464, - 279709, - 279700, - 279817, - 280229, - 279800, - 279958, - 279953, - 279847, - 280014, - 279746, - 280133, - 279900, - 279874, - 279907, - 280028, - 279779, - 279932, - 280389, - 149168, - 280231, - 279856, - 280185, - 280191, - 279934, - 279999, - 279876, - 280139, - 279748, - 279992, - 280037, - 280049, - 280502, - 279976, - 156009, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '12200', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Allowance For Doubtful Accounts', - 'id': 133665, - 'is_enabled': True, - 'name': 'Allowance For Doubtful Accounts', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '9', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Other Receivables', - 'id': 133666, - 'is_enabled': True, - 'name': 'Other Receivables', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280731, - 280694, - 280376, - 280505, - 290929, - 280545, - 280748, - 280752, - 280371, - 280588, - 290931, - 280504, - 280339, - 280293, - 280695, - 280503, - 280500, - 280370, - 290932, - 280513, - 280631, - 280247, - 280656, - 280611, - 280440, - 280514, - 280696, - 149143, - 280689, - 280294, - 156015, - 280377, - 280342, - 280642, - 280269, - 280677, - 280499, - 280279, - 280378, - 156018, - 280747, - 280753, - 155998, - 280434, - 280369, - 280498, - 280338, - 280659, - 280564, - 280697, - 280495, - 280272, - 156011, - 280728, - 148882, - 280379, - 280295, - 148878, - 280494, - 280615, - 290928, - 280380, - 280746, - 280610, - 280698, - 280629, - 280565, - 280493, - 280655, - 280515, - 155988, - 280268, - 280381, - 148862, - 280516, - 280368, - 280337, - 280296, - 280492, - 280688, - 280566, - 280632, - 280699, - 280491, - 280245, - 280724, - 280352, - 280297, - 280490, - 280660, - 280609, - 280561, - 148228, - 280382, - 280745, - 280517, - 280290, - 280429, - 280567, - 156002, - 280653, - 280700, - 280383, - 280489, - 280343, - 280518, - 280687, - 280248, - 280336, - 148225, - 280488, - 149162, - 280298, - 280701, - 280487, - 280256, - 280519, - 280289, - 280384, - 280744, - 280616, - 280608, - 280568, - 280486, - 280267, - 280754, - 280367, - 280299, - 149170, - 280560, - 280254, - 280702, - 280385, - 280485, - 148863, - 280335, - 280520, - 280366, - 280569, - 280652, - 280686, - 280593, - 280633, - 280703, - 280484, - 280278, - 280273, - 280300, - 280483, - 280521, - 280607, - 280570, - 280386, - 280743, - 280755, - 280661, - 280704, - 280482, - 280559, - 148881, - 280365, - 149152, - 280266, - 280387, - 280249, - 280334, - 148868, - 280288, - 280301, - 148873, - 280344, - 156010, - 280318, - 280481, - 280394, - 280742, - 280571, - 280651, - 280522, - 280685, - 280705, - 280480, - 280617, - 280606, - 280479, - 280439, - 254109, - 280302, - 148876, - 280628, - 280395, - 280641, - 280572, - 149150, - 280706, - 280478, - 280523, - 280396, - 280333, - 280741, - 280524, - 280364, - 280432, - 280265, - 280634, - 280287, - 280477, - 280303, - 280558, - 280426, - 280573, - 280650, - 280684, - 280605, - 280707, - 280242, - 280476, - 280398, - 280475, - 280544, - 280399, - 280708, - 280756, - 280727, - 280274, - 149149, - 280740, - 280304, - 148230, - 280363, - 280574, - 280474, - 280649, - 280668, - 148877, - 280332, - 280527, - 148229, - 280622, - 280662, - 280473, - 280557, - 280264, - 280604, - 148872, - 280618, - 280709, - 280345, - 280575, - 280543, - 280362, - 280400, - 280472, - 280402, - 280739, - 280250, - 280595, - 280528, - 149160, - 162016, - 280286, - 280305, - 149154, - 280683, - 280471, - 280635, - 280710, - 280331, - 280529, - 280576, - 280306, - 280403, - 280321, - 280757, - 280361, - 280603, - 280470, - 280648, - 280469, - 280530, - 280682, - 280738, - 280711, - 280556, - 280404, - 280468, - 280285, - 280761, - 280577, - 280307, - 280346, - 148885, - 280591, - 280467, - 280349, - 148889, - 280261, - 280360, - 149145, - 280251, - 280602, - 280438, - 280531, - 280712, - 280466, - 280407, - 156006, - 280330, - 280619, - 280578, - 280763, - 280737, - 280627, - 280308, - 280647, - 280465, - 280323, - 280663, - 280408, - 280713, - 280462, - 280275, - 280532, - 280555, - 280636, - 280409, - 280329, - 280681, - 280594, - 280579, - 280736, - 156016, - 280284, - 280461, - 280601, - 280309, - 280714, - 149144, - 280460, - 148866, - 280410, - 280758, - 280359, - 280725, - 280580, - 280715, - 280666, - 280533, - 280260, - 280548, - 280411, - 280534, - 280673, - 280459, - 155994, - 280554, - 280437, - 280328, - 280735, - 280646, - 280310, - 280458, - 280600, - 280535, - 280283, - 280581, - 280716, - 280620, - 280347, - 280358, - 280457, - 280311, - 280240, - 280412, - 148869, - 280623, - 148223, - 280259, - 280427, - 280536, - 148226, - 280672, - 280456, - 280762, - 280252, - 149147, - 280637, - 280624, - 280582, - 280353, - 280413, - 280664, - 280734, - 280717, - 280276, - 148224, - 149166, - 280455, - 280645, - 280759, - 280357, - 280640, - 280327, - 280599, - 280546, - 280312, - 280553, - 280454, - 280583, - 280414, - 156020, - 280718, - 280453, - 280452, - 280417, - 280428, - 280348, - 280729, - 280537, - 280356, - 280733, - 280313, - 156019, - 280625, - 280282, - 156014, - 280671, - 280326, - 280719, - 148884, - 280451, - 280584, - 280542, - 280621, - 280538, - 280626, - 280319, - 280638, - 280598, - 280547, - 280258, - 280644, - 280552, - 280450, - 280418, - 280314, - 280585, - 280241, - 280720, - 280539, - 280670, - 280449, - 280281, - 280253, - 280421, - 280732, - 280448, - 156028, - 280315, - 280721, - 280760, - 280355, - 148867, - 156022, - 280540, - 280422, - 280447, - 280597, - 280665, - 280551, - 280592, - 280586, - 148859, - 280325, - 280354, - 156004, - 280257, - 280643, - 280446, - 280541, - 280423, - 156025, - 280669, - 280722, - 280280, - 280316, - 280443, - 280424, - 280433, - 280351, - 280324, - 280587, - 280277, - 280442, - 280639, - 280596, - 280723, - 280317, - 280726, - 148222, - 280441, - 280322, - 280255, - 149174, - 280373, - 280692, - 280509, - 280667, - 280630, - 280658, - 280246, - 280425, - 280271, - 280613, - 280750, - 280563, - 280680, - 280510, - 280679, - 280730, - 280508, - 155990, - 280341, - 280693, - 280507, - 280562, - 280372, - 280374, - 280340, - 155984, - 280506, - 280350, - 280749, - 290930, - 280511, - 280691, - 280375, - 149171, - 280657, - 280292, - 148887, - 280270, - 280614, - 280430, - 280512, - 280690, - 280678, - 280612, - 280141, - 280044, - 280046, - 280045, - 156026, - 279854, - 280238, - 279852, - 279858, - 290084, - 280237, - 279859, - 156021, - 280236, - 279851, - 279860, - 148879, - 280235, - 279850, - 279861, - 280234, - 279849, - 279862, - 155993, - 280233, - 279863, - 156027, - 280232, - 279848, - 279864, - 149156, - 280231, - 279847, - 279865, - 280230, - 279846, - 279866, - 156012, - 280229, - 149168, - 279867, - 280228, - 279845, - 279868, - 279856, - 246836, - 280224, - 279844, - 279869, - 280223, - 155986, - 279843, - 279870, - 280222, - 155997, - 279871, - 280219, - 279842, - 279872, - 149151, - 280218, - 279841, - 279873, - 280217, - 279703, - 279840, - 279874, - 280216, - 279704, - 279875, - 280215, - 279839, - 279877, - 279713, - 280214, - 279838, - 279878, - 280213, - 279715, - 279837, - 279880, - 280212, - 279720, - 279881, - 280211, - 279836, - 279882, - 279721, - 280210, - 279835, - 279883, - 280209, - 279722, - 279834, - 279884, - 280208, - 279730, - 279885, - 280207, - 279833, - 279886, - 279741, - 280206, - 279832, - 279887, - 280205, - 279742, - 280204, - 279831, - 279888, - 279744, - 280203, - 279889, - 279830, - 279757, - 279890, - 280202, - 279829, - 279891, - 280201, - 279763, - 280200, - 279828, - 279892, - 279764, - 280199, - 279893, - 279827, - 279768, - 279894, - 280198, - 279826, - 279895, - 280197, - 279769, - 280196, - 279825, - 280291, - 279773, - 280195, - 279896, - 279824, - 279774, - 279897, - 280194, - 279823, - 279898, - 280193, - 279775, - 280192, - 279822, - 279899, - 279876, - 280191, - 279900, - 279821, - 279879, - 279902, - 280190, - 279820, - 279903, - 280189, - 279901, - 280188, - 279819, - 279904, - 279935, - 280187, - 279905, - 279818, - 280029, - 279906, - 280186, - 279817, - 279907, - 280185, - 280037, - 280184, - 279816, - 279908, - 280121, - 280183, - 279909, - 279815, - 280125, - 279910, - 280182, - 280181, - 279814, - 279911, - 280151, - 280180, - 279813, - 279912, - 280220, - 280179, - 279913, - 290065, - 279812, - 279914, - 280178, - 280221, - 280177, - 279811, - 279915, - 280225, - 280176, - 279810, - 279916, - 280226, - 280175, - 279917, - 279809, - 279918, - 280174, - 280227, - 280173, - 279808, - 279919, - 280243, - 280172, - 279807, - 279920, - 280244, - 280171, - 279921, - 279806, - 279922, - 280170, - 280262, - 280169, - 279805, - 279923, - 280263, - 280168, - 279804, - 279924, - 280320, - 280167, - 279925, - 279803, - 280166, - 279926, - 280388, - 280165, - 279802, - 279927, - 280389, - 280164, - 279801, - 279928, - 280390, - 280163, - 279929, - 279800, - 280162, - 279930, - 280391, - 280161, - 279799, - 279931, - 280392, - 280160, - 279932, - 280393, - 279798, - 280159, - 279933, - 279797, - 280158, - 279934, - 280397, - 280157, - 279796, - 279936, - 280401, - 280156, - 279937, - 280405, - 279795, - 280155, - 279938, - 280154, - 279794, - 279939, - 280406, - 280153, - 279793, - 279940, - 280415, - 280152, - 279853, - 279941, - 280416, - 279792, - 280150, - 279942, - 280149, - 279791, - 279943, - 280419, - 280148, - 279790, - 279944, - 280420, - 280147, - 279945, - 280431, - 279789, - 280146, - 279946, - 280145, - 279788, - 279947, - 280435, - 280144, - 279787, - 279948, - 280436, - 280143, - 279949, - 280444, - 280142, - 279786, - 279950, - 279785, - 279951, - 280445, - 280140, - 279784, - 279952, - 280463, - 280139, - 279953, - 280464, - 280138, - 279783, - 279954, - 280137, - 279782, - 279955, - 280496, - 280136, - 279781, - 279956, - 280497, - 280135, - 279957, - 280501, - 280134, - 279780, - 279958, - 280133, - 279779, - 279959, - 280502, - 280132, - 279778, - 279960, - 280525, - 280131, - 280526, - 279961, - 280130, - 279777, - 279962, - 280129, - 280549, - 279776, - 279963, - 280128, - 280550, - 279772, - 279964, - 280127, - 291035, - 279965, - 280126, - 279771, - 279966, - 280124, - 280589, - 279770, - 279967, - 280123, - 280590, - 279767, - 279968, - 280122, - 280654, - 280120, - 279969, - 279766, - 280119, - 279970, - 280674, - 279765, - 279971, - 280118, - 280675, - 279762, - 280117, - 279972, - 280116, - 279973, - 280676, - 279761, - 280115, - 279974, - 280751, - 280114, - 279760, - 279975, - 155985, - 280113, - 279759, - 279976, - 280112, - 279977, - 149148, - 279758, - 280111, - 279978, - 156023, - 280110, - 279756, - 279979, - 279855, - 156007, - 280109, - 279755, - 279980, - 280108, - 279981, - 149164, - 280107, - 279754, - 279982, - 149163, - 280106, - 279753, - 279983, - 156005, - 280105, - 279752, - 279984, - 280104, - 279985, - 149175, - 280103, - 279751, - 279986, - 148861, - 280102, - 279750, - 279987, - 155991, - 280101, - 279749, - 279988, - 280100, - 279989, - 148875, - 280099, - 279748, - 279990, - 156000, - 280098, - 279747, - 279991, - 149158, - 280097, - 279746, - 279992, - 280096, - 148886, - 279993, - 280095, - 279745, - 279994, - 155999, - 280094, - 279743, - 279995, - 148865, - 280093, - 279740, - 279996, - 280092, - 148231, - 279997, - 280091, - 279739, - 279998, - 148880, - 280090, - 279738, - 279999, - 148870, - 280089, - 279737, - 280000, - 280088, - 149155, - 280001, - 280087, - 279736, - 280002, - 149169, - 280086, - 279735, - 280003, - 148860, - 280085, - 280004, - 280084, - 279734, - 155992, - 280005, - 280083, - 279733, - 280006, - 149159, - 280082, - 279732, - 280007, - 149172, - 280081, - 280008, - 280080, - 279731, - 149153, - 280009, - 280079, - 279729, - 280010, - 156013, - 280078, - 279728, - 280011, - 148874, - 280077, - 280012, - 280076, - 279727, - 148871, - 280075, - 280013, - 279726, - 155987, - 280014, - 279857, - 280074, - 290067, - 280073, - 279725, - 280015, - 290068, - 280072, - 280016, - 279724, - 280071, - 280017, - 290069, - 280070, - 279723, - 280018, - 279719, - 280019, - 280069, - 149161, - 280068, - 280020, - 279718, - 156003, - 280067, - 280021, - 149173, - 279717, - 280022, - 280066, - 279716, - 280023, - 280065, - 149157, - 280064, - 280024, - 148864, - 279714, - 280063, - 280025, - 148888, - 279712, - 280026, - 280062, - 279711, - 280027, - 280061, - 148883, - 280060, - 280028, - 156008, - 279710, - 280059, - 280030, - 149165, - 279709, - 280031, - 280058, - 280057, - 279708, - 280032, - 149146, - 280056, - 280033, - 149167, - 279707, - 280055, - 280034, - 155989, - 279706, - 280035, - 280054, - 280239, - 280053, - 279705, - 280036, - 148227, - 280052, - 280038, - 155995, - 279702, - 280051, - 280039, - 156024, - 279701, - 280040, - 280050, - 280049, - 279700, - 280041, - 156009, - 280048, - 280042, - 155996, - 148890, - 280047, - 280043, - 156001, - 148858, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '12500', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Employee Advances', - 'id': 133667, - 'is_enabled': True, - 'name': 'Employee Advances', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': None, - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'code': '12', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Prepaid Expenses', - 'id': 133668, - 'is_enabled': True, - 'name': 'Prepaid Expenses', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280608, - 280240, - 280241, - 280242, - 280245, - 280246, - 280247, - 280248, - 280249, - 280250, - 280251, - 280252, - 280253, - 280254, - 280255, - 280256, - 280257, - 280258, - 280259, - 280260, - 280261, - 280264, - 280265, - 280266, - 280267, - 280268, - 280269, - 280270, - 280271, - 280272, - 280273, - 280274, - 280275, - 280276, - 280277, - 280278, - 280279, - 280280, - 280281, - 280282, - 280283, - 280284, - 280285, - 280286, - 280287, - 280288, - 280289, - 280290, - 280677, - 280678, - 280679, - 280680, - 280292, - 280293, - 280294, - 280295, - 280296, - 280297, - 280298, - 280299, - 280300, - 280301, - 280302, - 280303, - 280304, - 280305, - 280306, - 280307, - 280308, - 280309, - 280310, - 280311, - 280312, - 280313, - 280314, - 280315, - 280316, - 280317, - 280318, - 280319, - 280321, - 280322, - 280323, - 280324, - 280325, - 280326, - 280327, - 280328, - 280329, - 280330, - 280331, - 280332, - 280333, - 280334, - 280335, - 280336, - 280337, - 280338, - 280339, - 280340, - 280341, - 280342, - 280343, - 280344, - 280345, - 280346, - 280347, - 280348, - 280349, - 280350, - 280351, - 280352, - 280353, - 280354, - 280355, - 280356, - 280357, - 280358, - 280359, - 280360, - 280361, - 280362, - 280363, - 280364, - 280365, - 280366, - 280367, - 280368, - 280369, - 280370, - 280371, - 280372, - 280373, - 280374, - 280375, - 280376, - 280377, - 280378, - 280379, - 280380, - 280381, - 280382, - 280383, - 280384, - 280385, - 280386, - 280387, - 280394, - 280395, - 280396, - 280398, - 280399, - 280400, - 280402, - 280403, - 280404, - 280407, - 280408, - 280409, - 280410, - 280411, - 280412, - 280413, - 280414, - 280417, - 280418, - 280421, - 280422, - 280423, - 280424, - 280425, - 280426, - 280427, - 280428, - 280429, - 280430, - 280432, - 280433, - 280434, - 280437, - 280438, - 280439, - 280440, - 280441, - 280442, - 280443, - 280446, - 280447, - 280448, - 280449, - 280450, - 280451, - 280452, - 280453, - 280454, - 280455, - 280456, - 280457, - 280458, - 280459, - 280460, - 280461, - 280462, - 280465, - 280466, - 280467, - 280468, - 280469, - 280470, - 280471, - 280472, - 280473, - 280474, - 280475, - 280476, - 280477, - 280478, - 280479, - 280480, - 280481, - 280482, - 280483, - 280484, - 280485, - 280486, - 280487, - 280488, - 280489, - 280490, - 280491, - 280492, - 280493, - 280494, - 280495, - 280498, - 280499, - 280500, - 280503, - 280504, - 280505, - 280506, - 280507, - 280508, - 280509, - 280510, - 280511, - 280512, - 280513, - 280514, - 280515, - 280516, - 280517, - 280518, - 280519, - 280520, - 280521, - 280522, - 280523, - 280524, - 280527, - 280528, - 280529, - 280530, - 280531, - 280532, - 280533, - 280534, - 280535, - 280536, - 280537, - 280538, - 280539, - 280540, - 280541, - 280542, - 280543, - 280544, - 280545, - 280546, - 280547, - 280548, - 280551, - 280552, - 280553, - 280554, - 280555, - 280556, - 280557, - 280558, - 280559, - 280560, - 280561, - 290928, - 290929, - 280562, - 280563, - 290930, - 290931, - 290932, - 280564, - 280565, - 280566, - 280567, - 280568, - 280569, - 280570, - 280571, - 280572, - 280573, - 280574, - 280575, - 280576, - 280577, - 280578, - 280579, - 280580, - 280581, - 280582, - 280583, - 280584, - 280585, - 280586, - 280587, - 280588, - 280591, - 280592, - 280593, - 280594, - 280595, - 280596, - 280597, - 280598, - 280599, - 280600, - 280601, - 280602, - 280603, - 280604, - 280605, - 280606, - 280607, - 280609, - 280610, - 280611, - 280612, - 280613, - 280614, - 280615, - 280616, - 280617, - 280618, - 280619, - 280620, - 280621, - 280622, - 280623, - 280624, - 280625, - 280626, - 280627, - 280628, - 280629, - 280630, - 280631, - 280632, - 280633, - 280634, - 280635, - 280636, - 280637, - 280638, - 280639, - 280640, - 280641, - 280642, - 280643, - 280644, - 280645, - 280646, - 280647, - 280648, - 280649, - 280650, - 280651, - 280652, - 280653, - 280655, - 280656, - 280657, - 280658, - 280659, - 280660, - 280661, - 280662, - 280663, - 280664, - 280665, - 280666, - 280667, - 280668, - 280669, - 280670, - 280671, - 280672, - 280673, - 280681, - 280682, - 280683, - 280684, - 280685, - 280686, - 280687, - 280688, - 280689, - 280690, - 280691, - 280692, - 280693, - 280694, - 280695, - 280696, - 280697, - 280698, - 280699, - 280700, - 280701, - 280702, - 280703, - 280704, - 280705, - 280706, - 280707, - 280708, - 280709, - 280710, - 280711, - 280712, - 280713, - 280714, - 280715, - 280716, - 280717, - 280718, - 280719, - 280720, - 280721, - 280722, - 280723, - 280724, - 280725, - 280726, - 280727, - 280728, - 280729, - 280730, - 280731, - 280732, - 280733, - 280734, - 280735, - 280736, - 280737, - 280738, - 280739, - 280740, - 280741, - 280742, - 280743, - 280744, - 280745, - 280746, - 280747, - 280748, - 280749, - 280750, - 280752, - 280753, - 280754, - 280755, - 280756, - 280757, - 280758, - 280759, - 280760, - 280761, - 280762, - 280763, - 148226, - 148885, - 156010, - 155998, - 155990, - 156018, - 156002, - 148863, - 149150, - 148877, - 156006, - 155994, - 156014, - 148859, - 148872, - 148862, - 156028, - 148222, - 156022, - 156019, - 148223, - 149144, - 149145, - 149154, - 148230, - 148876, - 148873, - 149170, - 148228, - 148878, - 156015, - 148887, - 149174, - 149143, - 149162, - 148868, - 162016, - 156016, - 156020, - 156025, - 148882, - 148884, - 148224, - 149149, - 156011, - 149171, - 155988, - 149152, - 148229, - 148889, - 148869, - 156004, - 149166, - 148881, - 149147, - 149160, - 148225, - 155984, - 254109, - 148866, - 148867, - 280091, - 279981, - 280108, - 280117, - 280200, - 280239, - 279908, - 280020, - 279828, - 280090, - 290067, - 279816, - 280150, - 279892, - 279996, - 279762, - 280033, - 279764, - 280078, - 279858, - 280184, - 280037, - 280185, - 279740, - 279980, - 279755, - 279783, - 280044, - 280028, - 280135, - 280199, - 279893, - 156013, - 280109, - 279972, - 279907, - 279827, - 279768, - 280008, - 279817, - 279863, - 279894, - 280010, - 279957, - 280186, - 280056, - 280401, - 156008, - 280116, - 280198, - 156027, - 280043, - 279973, - 156021, - 280080, - 280238, - 279826, - 279895, - 279710, - 156001, - 279906, - 280029, - 280093, - 156007, - 280018, - 149146, - 279936, - 280197, - 279789, - 280676, - 279979, - 279756, - 279818, - 279769, - 279905, - 280187, - 280048, - 280196, - 280110, - 280059, - 290084, - 279731, - 279796, - 279761, - 279935, - 280501, - 280032, - 279825, - 280291, - 280115, - 279773, - 280146, - 279974, - 280232, - 156023, - 279855, - 279904, - 279819, - 279848, - 280195, - 280188, - 279978, - 279758, - 280751, - 279859, - 279896, - 279864, - 280030, - 279901, - 279824, - 280157, - 280111, - 279718, - 279729, - 279708, - 280189, - 279903, - 280057, - 149156, - 279774, - 279820, - 149153, - 279954, - 280114, - 279897, - 280190, - 279760, - 280134, - 280194, - 279975, - 148880, - 279902, - 279823, - 280088, - 279879, - 280397, - 280079, - 279898, - 149165, - 280237, - 155985, - 149148, - 279709, - 279734, - 280193, - 279775, - 279821, - 279900, - 279792, - 279977, - 280112, - 280113, - 280058, - 280191, - 279876, - 280000, - 279759, - 279780, - 280031, - 279976, - 280192, - 279851, - 279899, - 280009, - 148865, - 279822, - 156009, - 279934, - 280463, - 280231, - 280235, - 280074, - 279995, - 279743, - 149155, - 279946, - 279847, - 279865, - 280419, - 279797, - 280158, - 280045, - 280094, - 279719, - 156003, - 155987, - 280041, - 280067, - 279723, - 280230, - 279933, - 279852, - 280004, - 280416, - 280014, - 279846, - 279866, - 280159, - 156012, - 280137, - 279958, - 280393, - 280021, - 290068, - 155999, - 280229, - 279700, - 279952, - 279932, - 155996, - 280133, - 280084, - 280049, - 279784, - 279867, - 280139, - 279798, - 280001, - 280160, - 279779, - 279941, - 279994, - 279745, - 149168, - 279959, - 280392, - 280228, - 280095, - 280070, - 280502, - 279931, - 279944, - 279845, - 279868, - 280152, - 279799, - 280161, - 246836, - 279782, - 279717, - 280132, - 280042, - 280391, - 280224, - 280050, - 290069, - 279930, - 279778, - 279960, - 279993, - 148886, - 280096, - 280140, - 280162, - 279800, - 280040, - 279726, - 148890, - 279844, - 279869, - 279955, - 149173, - 279856, - 280525, - 279997, - 279861, - 279929, - 279992, - 279746, - 280415, - 279735, - 280223, - 155986, - 280163, - 280390, - 280097, - 280145, - 280022, - 155992, - 280131, - 279843, - 279870, - 279857, - 279961, - 280066, - 156026, - 279928, - 280222, - 155997, - 280016, - 279701, - 280464, - 280526, - 279801, - 280164, - 280389, - 279940, - 156024, - 280130, - 279871, - 279927, - 149158, - 279802, - 148860, - 280219, - 279777, - 280165, - 279788, - 279991, - 279747, - 279962, - 279716, - 279842, - 279872, - 279947, - 280086, - 280005, - 280420, - 280013, - 149151, - 279793, - 280388, - 279926, - 280039, - 280098, - 280166, - 279803, - 280083, - 280435, - 279790, - 280129, - 280218, - 280549, - 279925, - 280019, - 279841, - 279873, - 280023, - 280015, - 280217, - 279776, - 156000, - 279703, - 279854, - 279963, - 280167, - 280051, - 279943, - 280065, - 280075, - 148879, - 280017, - 279990, - 279748, - 280320, - 279924, - 280496, - 279840, - 279874, - 280099, - 280445, - 279804, - 149169, - 148871, - 280216, - 279704, - 280168, - 279702, - 280263, - 149157, - 280064, - 280069, - 155995, - 148858, - 279875, - 280089, - 280144, - 279733, - 280128, - 148875, - 280550, - 279923, - 279853, - 280215, - 279805, - 280169, - 279772, - 279791, - 279989, - 280100, - 280153, - 279964, - 279839, - 279877, - 280406, - 280262, - 279727, - 280038, - 279951, - 279713, - 279922, - 280170, - 279785, - 279988, - 279749, - 280147, - 279806, - 148870, - 280024, - 280214, - 280156, - 280127, - 279850, - 279838, - 280101, - 280234, - 279878, - 291035, - 279921, - 279787, - 280213, - 279715, - 279965, - 280171, - 280244, - 155991, - 280052, - 279948, - 280126, - 148864, - 279837, - 279714, - 280136, - 279987, - 279750, - 280076, - 279920, - 279880, - 279807, - 148227, - 280006, - 280141, - 279860, - 280012, - 280172, - 280243, - 280436, - 280212, - 279720, - 280149, - 280102, - 279939, - 280002, - 279771, - 279881, - 149159, - 280063, - 280046, - 279919, - 280211, - 279966, - 280236, - 279794, - 280036, - 279836, - 279808, - 280173, - 280082, - 279882, - 280071, - 280124, - 279721, - 279942, - 280589, - 280227, - 279781, - 280210, - 280174, - 280025, - 148861, - 279918, - 279835, - 279883, - 279956, - 279809, - 279917, - 280143, - 279986, - 279751, - 279737, - 279705, - 279770, - 280053, - 279949, - 280103, - 280072, - 279967, - 280175, - 280226, - 279916, - 280209, - 279722, - 280123, - 280154, - 279834, - 280590, - 148888, - 279712, - 149175, - 279884, - 279810, - 280208, - 279730, - 279724, - 280176, - 280054, - 279739, - 279767, - 279732, - 280497, - 280225, - 279999, - 279968, - 280085, - 279985, - 280104, - 149161, - 290065, - 279915, - 279945, - 280035, - 279950, - 279885, - 279811, - 280207, - 280122, - 279833, - 280077, - 279998, - 279786, - 279984, - 279752, - 279953, - 280177, - 279738, - 279886, - 280068, - 280221, - 279741, - 280105, - 280138, - 280178, - 280026, - 148874, - 280444, - 280206, - 279832, - 279887, - 280142, - 280062, - 280120, - 279914, - 156005, - 279706, - 279938, - 279812, - 280007, - 280011, - 279849, - 155989, - 279969, - 279913, - 280205, - 279742, - 280179, - 280654, - 279725, - 279983, - 279753, - 280220, - 280087, - 279912, - 280155, - 280204, - 279711, - 149172, - 279813, - 280431, - 279831, - 279888, - 148231, - 279766, - 279744, - 280180, - 280119, - 280034, - 279970, - 280047, - 280092, - 280081, - 280151, - 280148, - 280106, - 279795, - 279911, - 280203, - 279889, - 280674, - 279814, - 280405, - 279830, - 279890, - 279728, - 280181, - 279862, - 149163, - 279757, - 280027, - 280055, - 280061, - 279736, - 280125, - 280073, - 279982, - 279754, - 280182, - 279910, - 155993, - 280202, - 279815, - 279829, - 280107, - 279765, - 279891, - 279937, - 279971, - 279707, - 148883, - 279909, - 280118, - 149167, - 280675, - 280183, - 149164, - 280233, - 280201, - 279763, - 280060, - 280121, - 280003, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '14', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Note Receivable-Current', - 'id': 133669, - 'is_enabled': True, - 'name': 'Note Receivable-Current', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 279932, - 280139, - 280042, - 279790, - 280018, - 290068, - 279944, - 280420, - 280147, - 280072, - 279945, - 279857, - 280431, - 280146, - 279789, - 280463, - 279946, - 279723, - 279952, - 279784, - 279997, - 280070, - 290069, - 280140, - 280145, - 280016, - 279788, - 279947, - 280435, - 280017, - 280445, - 280144, - 280234, - 279951, - 279785, - 279787, - 279948, - 280141, - 280436, - 280071, - 280143, - 279949, - 279724, - 156026, - 279950, - 279786, - 279849, - 280142, - 280444, - 148231, - 280092, - 279862, - 155993, - 280233, - 279996, - 279740, - 279848, - 279863, - 156027, - 280093, - 280088, - 280048, - 280232, - 279864, - 149156, - 279734, - 156009, - 148865, - 280231, - 279995, - 279743, - 279847, - 279865, - 280094, - 149155, - 280041, - 280230, - 279846, - 280004, - 279866, - 156012, - 280229, - 155999, - 279700, - 280084, - 279852, - 280049, - 279867, - 279994, - 279745, - 280001, - 149168, - 280228, - 280095, - 279845, - 279868, - 246836, - 280224, - 280050, - 279993, - 148886, - 280096, - 280040, - 279844, - 279869, - 280223, - 279735, - 279992, - 279746, - 155986, - 279856, - 280097, - 155992, - 279843, - 279870, - 279858, - 280222, - 155997, - 279701, - 156024, - 279871, - 149158, - 280219, - 279991, - 279747, - 279842, - 279872, - 280005, - 280086, - 149151, - 280039, - 280083, - 280218, - 280098, - 279841, - 279873, - 280217, - 156000, - 279703, - 280051, - 279990, - 279748, - 149169, - 279840, - 279874, - 280099, - 280216, - 279704, - 279702, - 155995, - 279875, - 279737, - 279733, - 148875, - 280215, - 279839, - 279989, - 280100, - 279877, - 280038, - 148858, - 279713, - 148870, - 279988, - 279749, - 280214, - 279838, - 280101, - 279878, - 280213, - 279715, - 155991, - 280052, - 279837, - 279987, - 279750, - 279880, - 148227, - 280006, - 280002, - 280212, - 279720, - 280102, - 149159, - 279881, - 280211, - 280036, - 279836, - 280082, - 279882, - 279721, - 280210, - 148861, - 279835, - 279883, - 280087, - 279986, - 279751, - 279705, - 280053, - 280103, - 280209, - 279722, - 279834, - 149175, - 279884, - 280208, - 279730, - 279999, - 279732, - 280054, - 279985, - 280104, - 280035, - 280207, - 279885, - 279833, - 279984, - 279752, - 279886, - 279741, - 280105, - 279738, - 280206, - 279832, - 279887, - 156005, - 279706, - 280007, - 155989, - 280205, - 279742, - 279983, - 279753, - 280204, - 149172, - 279831, - 279888, - 279744, - 280034, - 280081, - 280203, - 280106, - 279889, - 279830, - 279890, - 279736, - 149163, - 279757, - 280055, - 279982, - 279754, - 280202, - 279829, - 280107, - 279891, - 279707, - 149167, - 149164, - 280201, - 279763, - 279981, - 280200, - 279828, - 279731, - 280108, - 280090, - 279892, - 280033, - 279764, - 279980, - 279755, - 280199, - 279893, - 280109, - 279827, - 280008, - 280043, - 279894, - 279768, - 280056, - 280198, - 279826, - 280080, - 279895, - 156007, - 149146, - 280239, - 280197, - 280044, - 279979, - 279756, - 279769, - 280196, - 280110, - 280238, - 279825, - 280032, - 280291, - 290084, - 156023, - 279773, - 280195, - 279978, - 279758, - 279896, - 279824, - 279855, - 280111, - 279708, - 280057, - 149153, - 279774, - 279897, - 280194, - 279823, - 280237, - 280079, - 279898, - 149148, - 280193, - 279775, - 279977, - 280112, - 280058, - 280031, - 280192, - 280009, - 279851, - 279822, - 279899, - 279976, - 279759, - 279876, - 280191, - 280113, - 279900, - 279821, - 279709, - 148880, - 155985, - 149165, - 279879, - 279902, - 279975, - 279760, - 280190, - 280114, - 279820, - 279903, - 280189, - 279729, - 279901, - 280030, - 280188, - 280751, - 279819, - 279904, - 279859, - 279974, - 280115, - 279935, - 279761, - 156001, - 280059, - 280187, - 279905, - 279818, - 280676, - 279906, - 279710, - 279973, - 280116, - 156021, - 156008, - 280186, - 280029, - 280000, - 280010, - 279817, - 279907, - 279972, - 280028, - 156013, - 280185, - 280037, - 280184, - 280078, - 279762, - 279816, - 279908, - 280117, - 280121, - 280060, - 280183, - 280003, - 280675, - 279909, - 148883, - 279971, - 280118, - 279765, - 279815, - 279910, - 280182, - 280125, - 280061, - 280027, - 280181, - 279728, - 279814, - 280674, - 279911, - 280151, - 279970, - 280119, - 280047, - 280180, - 279813, - 279766, - 279711, - 279912, - 280220, - 280654, - 280179, - 279913, - 279969, - 280011, - 279812, - 279914, - 280120, - 280062, - 280178, - 148874, - 279998, - 280026, - 280221, - 280177, - 280077, - 280122, - 279811, - 279915, - 279968, - 279767, - 280225, - 280176, - 279810, - 279712, - 148888, - 279739, - 280590, - 280123, - 279916, - 290065, - 280226, - 280175, - 279967, - 279770, - 279917, - 279809, - 279918, - 280025, - 280046, - 280174, - 280227, - 280236, - 280589, - 280124, - 280173, - 279808, - 279966, - 279919, - 280063, - 279771, - 148864, - 280243, - 280172, - 280012, - 279807, - 279920, - 279860, - 280076, - 279714, - 280126, - 280244, - 280171, - 279965, - 279921, - 291035, - 280127, - 280024, - 279806, - 280170, - 279727, - 279922, - 280262, - 280091, - 279964, - 280169, - 279772, - 279805, - 279923, - 280550, - 280128, - 280064, - 149157, - 280263, - 280168, - 148871, - 279804, - 279924, - 280320, - 280167, - 280075, - 280065, - 148879, - 279963, - 279776, - 280023, - 279925, - 280549, - 280129, - 279803, - 280166, - 279926, - 280388, - 280013, - 279716, - 280165, - 279962, - 279802, - 279777, - 279927, - 280130, - 148860, - 280389, - 280164, - 279801, - 280526, - 279928, - 280066, - 279961, - 280131, - 280089, - 280022, - 280390, - 280163, - 280525, - 279929, - 149173, - 279800, - 279726, - 280162, - 148890, - 279960, - 279778, - 279930, - 280391, - 280132, - 279717, - 280161, - 279799, - 280502, - 279931, - 280392, - 279959, - 279779, - 155996, - 280160, - 279798, - 280133, - 280021, - 280393, - 280159, - 279958, - 280014, - 279933, - 280045, - 280067, - 155987, - 156003, - 280158, - 279797, - 280235, - 280074, - 279934, - 279780, - 280397, - 280134, - 279718, - 280157, - 279796, - 280501, - 279936, - 279850, - 279957, - 280401, - 280135, - 290067, - 280020, - 280156, - 279795, - 279937, - 280073, - 280405, - 280155, - 280085, - 279725, - 279854, - 279938, - 280068, - 149161, - 280497, - 280154, - 279956, - 279781, - 279794, - 279939, - 279853, - 280136, - 280406, - 280153, - 279793, - 280069, - 280496, - 280015, - 280019, - 279940, - 280415, - 279955, - 279782, - 279861, - 280152, - 280137, - 279941, - 280416, - 279719, - 279792, - 279954, - 279783, - 280150, - 280138, - 279942, - 280149, - 279791, - 279943, - 280464, - 280419, - 279953, - 280148, - 280362, - 280284, - 280705, - 280481, - 280757, - 280747, - 280493, - 280625, - 280359, - 280482, - 280664, - 280384, - 280293, - 280610, - 280592, - 148887, - 280577, - 280492, - 280699, - 280411, - 156016, - 280285, - 280557, - 280534, - 280653, - 280657, - 280292, - 280607, - 280632, - 280704, - 280737, - 280240, - 280408, - 280483, - 280433, - 280554, - 280286, - 280427, - 280484, - 280576, - 280340, - 280410, - 280491, - 280680, - 149174, - 280671, - 280347, - 280703, - 280529, - 162016, - 280287, - 280758, - 280736, - 280349, - 280538, - 280490, - 280700, - 280679, - 280556, - 280288, - 280360, - 280645, - 280409, - 280678, - 149143, - 280489, - 280555, - 280623, - 280485, - 280745, - 280383, - 280609, - 280633, - 280702, - 280486, - 280663, - 280571, - 148868, - 280289, - 149150, - 280488, - 280701, - 280677, - 280361, - 280608, - 280727, - 280487, - 149162, - 280290, - 280583, - 280328, - 280346, - 280596, - 280643, - 280656, - 155990, - 280341, - 148885, - 280327, - 156014, - 280432, - 280528, - 280721, - 280448, - 280449, - 280333, - 280591, - 280655, - 280342, - 148877, - 280326, - 280424, - 280731, - 280345, - 156010, - 280430, - 280334, - 280728, - 148859, - 280543, - 280624, - 280720, - 280450, - 280439, - 155998, - 280343, - 280642, - 280639, - 290930, - 280451, - 280429, - 280566, - 280729, - 280325, - 280423, - 280428, - 280344, - 280324, - 148872, - 280396, - 280425, - 280763, - 280752, - 280580, - 280350, - 280574, - 149147, - 280253, - 280719, - 280452, - 280647, - 280524, - 280597, - 280254, - 280523, - 280685, - 280593, - 280627, - 280323, - 148862, - 280568, - 280563, - 280453, - 280658, - 290932, - 280536, - 280322, - 280522, - 280741, - 280351, - 280438, - 280521, - 280686, - 280398, - 280598, - 280725, - 148881, - 280255, - 280371, - 280321, - 280749, - 156028, - 280375, - 280668, - 280718, - 280454, - 148866, - 280455, - 280332, - 280619, - 280544, - 280319, - 280250, - 149166, - 280256, - 280422, - 280732, - 280246, - 280717, - 280456, - 280370, - 280257, - 148863, - 280336, - 280245, - 280638, - 280542, - 280387, - 280457, - 280520, - 280753, - 280621, - 280318, - 280519, - 280687, - 148222, - 280723, - 280442, - 280618, - 280562, - 280317, - 156004, - 280258, - 280386, - 280716, - 280586, - 280730, - 280672, - 280599, - 280426, - 280650, - 280545, - 280259, - 280458, - 280316, - 254109, - 156022, - 280670, - 280518, - 280762, - 280352, - 280649, - 280459, - 280372, - 280628, - 280443, - 290929, - 280369, - 280517, - 280688, - 280626, - 280399, - 280564, - 148869, - 280260, - 280315, - 280376, - 280715, - 280659, - 280261, - 280421, - 280314, - 280516, - 156019, - 280587, - 280353, - 148889, - 280368, - 280460, - 280515, - 280689, - 280313, - 280249, - 280535, - 148225, - 280569, - 280640, - 280617, - 280264, - 280754, - 280540, - 280373, - 280714, - 280667, - 280461, - 280242, - 280743, - 280637, - 280312, - 148223, - 148229, - 280265, - 280600, - 280575, - 280740, - 280514, - 280546, - 156002, - 280622, - 280266, - 280418, - 280400, - 280462, - 280337, - 280733, - 280724, - 280616, - 280641, - 280713, - 280465, - 280513, - 280690, - 280527, - 280646, - 280248, - 280311, - 149152, - 280267, - 280331, - 280310, - 149144, - 280601, - 280440, - 156006, - 280512, - 280547, - 280268, - 280629, - 290928, - 280466, - 280750, - 280537, - 280573, - 280585, - 280761, - 280682, - 280309, - 280712, - 280467, - 280691, - 148226, - 280367, - 280348, - 280581, - 280354, - 280746, - 155988, - 280269, - 280308, - 280511, - 149145, - 280385, - 280381, - 280594, - 280270, - 280660, - 280468, - 280510, - 280692, - 280722, - 280417, - 280307, - 280446, - 280615, - 280355, - 280306, - 280739, - 148867, - 149154, - 280402, - 280711, - 280469, - 280532, - 149171, - 280271, - 280636, - 280744, - 280666, - 280509, - 280602, - 280272, - 280437, - 280241, - 280561, - 280470, - 280508, - 280693, - 280644, - 280305, - 280330, - 280614, - 280710, - 280548, - 280366, - 280755, - 280471, - 280251, - 156011, - 280338, - 280304, - 148230, - 280273, - 280414, - 280541, - 280684, - 280603, - 280734, - 280274, - 290931, - 280472, - 280630, - 280380, - 280403, - 280507, - 280560, - 280652, - 280588, - 280506, - 280694, - 280303, - 148876, - 280335, - 149149, - 280709, - 280473, - 280382, - 280302, - 280551, - 280275, - 280434, - 280474, - 280726, - 148873, - 280673, - 280760, - 280661, - 280505, - 280365, - 280572, - 280578, - 148224, - 280276, - 280356, - 280301, - 280504, - 280695, - 280582, - 280595, - 280613, - 280708, - 280475, - 280565, - 280681, - 280635, - 280277, - 280357, - 280533, - 280748, - 280300, - 149170, - 280604, - 280503, - 280377, - 155984, - 280738, - 280476, - 280395, - 148884, - 280278, - 280665, - 280404, - 280413, - 149160, - 280612, - 280299, - 280559, - 280500, - 280696, - 280412, - 280279, - 280735, - 280374, - 280683, - 280298, - 148228, - 156018, - 280552, - 280339, - 280742, - 280364, - 280605, - 280756, - 280669, - 280631, - 280579, - 280707, - 280477, - 280530, - 280394, - 280441, - 280499, - 280407, - 280478, - 148882, - 280280, - 280759, - 280447, - 280297, - 280620, - 280498, - 280697, - 280558, - 280358, - 280651, - 280296, - 148878, - 156025, - 280281, - 280648, - 280570, - 280553, - 280329, - 280706, - 280479, - 155994, - 280282, - 280378, - 280480, - 280531, - 280495, - 280363, - 280295, - 280662, - 280611, - 280494, - 280698, - 280247, - 280634, - 280294, - 156015, - 156020, - 280283, - 280567, - 280584, - 280539, - 280606, - 280252, - 280379, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '60', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Merchandise', - 'id': 133670, - 'is_enabled': True, - 'name': 'Merchandise', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280329, - 280357, - 280306, - 280284, - 280626, - 280653, - 280705, - 280651, - 280276, - 280418, - 280454, - 280757, - 280481, - 280250, - 280295, - 280447, - 280569, - 280493, - 149154, - 280356, - 280300, - 280375, - 280384, - 280617, - 280359, - 280650, - 254109, - 280301, - 280664, - 280264, - 280482, - 280545, - 280443, - 280747, - 280711, - 148225, - 280293, - 280735, - 280592, - 280732, - 280610, - 280402, - 280312, - 280364, - 148887, - 280373, - 280718, - 280247, - 149170, - 280492, - 280636, - 155994, - 280577, - 280599, - 280754, - 280411, - 280698, - 280259, - 280557, - 280252, - 280542, - 156016, - 149171, - 280714, - 280285, - 280604, - 280725, - 280495, - 280271, - 280723, - 280667, - 280292, - 280446, - 280347, - 280699, - 280458, - 280638, - 280756, - 280461, - 280607, - 280503, - 280469, - 280632, - 280365, - 280433, - 280534, - 280578, - 280704, - 280319, - 280762, - 280737, - 280540, - 280637, - 280474, - 280744, - 280408, - 280666, - 280483, - 280553, - 280527, - 280339, - 280316, - 280491, - 280358, - 280554, - 280437, - 280286, - 280504, - 148878, - 280410, - 280509, - 280484, - 280605, - 148229, - 280377, - 280671, - 280624, - 280340, - 280265, - 156022, - 280602, - 280576, - 280240, - 156002, - 280363, - 280680, - 280272, - 148223, - 280533, - 149174, - 280600, - 280457, - 280740, - 280490, - 280631, - 280682, - 280703, - 280371, - 280336, - 280414, - 280514, - 280657, - 280518, - 162016, - 280738, - 280546, - 280287, - 280275, - 280706, - 280758, - 280520, - 280561, - 280582, - 280679, - 280251, - 280294, - 280266, - 280470, - 280700, - 280649, - 148867, - 280395, - 280575, - 280556, - 280379, - 280400, - 280352, - 280288, - 149166, - 280427, - 280508, - 280360, - 280248, - 280505, - 280645, - 280742, - 280538, - 280707, - 280409, - 149150, - 280532, - 280678, - 280693, - 280462, - 280753, - 280337, - 280489, - 280459, - 280606, - 280555, - 148884, - 280733, - 280644, - 149143, - 280558, - 280745, - 280683, - 280616, - 280485, - 148873, - 280330, - 280278, - 280622, - 280736, - 280318, - 280529, - 280628, - 280256, - 280633, - 156025, - 280641, - 280609, - 280713, - 280305, - 290929, - 280702, - 280349, - 280283, - 280595, - 280486, - 280245, - 280372, - 280614, - 280513, - 280668, - 148868, - 280413, - 280690, - 280289, - 280369, - 280613, - 280571, - 280465, - 280383, - 280422, - 280710, - 280670, - 280677, - 280426, - 280455, - 280488, - 280477, - 280646, - 280701, - 280620, - 280432, - 280366, - 280663, - 280517, - 280311, - 280361, - 280519, - 280548, - 280608, - 280665, - 280434, - 280688, - 280583, - 280673, - 280662, - 280487, - 280310, - 280623, - 280727, - 280331, - 149162, - 280755, - 280687, - 280290, - 149152, - 156015, - 280541, - 280282, - 280328, - 280267, - 280708, - 280404, - 280346, - 280304, - 280656, - 280499, - 280596, - 280362, - 280241, - 280476, - 149144, - 156011, - 280743, - 155990, - 280421, - 280281, - 280341, - 280601, - 280684, - 280327, - 280407, - 280246, - 156014, - 148869, - 280531, - 280643, - 148230, - 280724, - 280338, - 290928, - 148885, - 280394, - 280572, - 280721, - 280512, - 280579, - 280448, - 280333, - 280260, - 280441, - 148222, - 280345, - 280528, - 280273, - 280449, - 280268, - 280547, - 280559, - 280591, - 280629, - 280655, - 280564, - 280242, - 280697, - 280315, - 280326, - 280588, - 280342, - 280672, - 280478, - 280399, - 280424, - 280573, - 280471, - 280669, - 280648, - 280731, - 148877, - 280621, - 280430, - 280440, - 156010, - 280466, - 280370, - 280603, - 280728, - 280715, - 280585, - 280612, - 156006, - 148859, - 280380, - 280376, - 280479, - 280543, - 280695, - 280332, - 280544, - 280439, - 280720, - 148866, - 290931, - 148882, - 280712, - 155998, - 280274, - 280761, - 280343, - 280299, - 280659, - 280450, - 280309, - 280537, - 280562, - 280611, - 280642, - 280619, - 280334, - 280639, - 148863, - 280412, - 280423, - 280261, - 280467, - 290930, - 280472, - 280618, - 280451, - 280691, - 280661, - 280429, - 280507, - 280280, - 280566, - 148226, - 280475, - 280382, - 280729, - 280630, - 280746, - 280386, - 280325, - 280500, - 280367, - 280594, - 280567, - 280428, - 280530, - 280314, - 280344, - 280717, - 280696, - 280581, - 280587, - 280324, - 156028, - 280354, - 280425, - 280536, - 280516, - 280560, - 149160, - 148872, - 280396, - 280317, - 280748, - 280403, - 155988, - 280574, - 280763, - 280570, - 280378, - 280269, - 280580, - 280647, - 280759, - 280350, - 156019, - 280635, - 280681, - 149147, - 280652, - 280308, - 280253, - 280279, - 280385, - 280719, - 280734, - 280442, - 280368, - 280760, - 280511, - 156004, - 156018, - 149145, - 280524, - 280335, - 280452, - 280506, - 280387, - 280597, - 280726, - 280752, - 280254, - 280258, - 148889, - 280593, - 280456, - 280523, - 280270, - 280694, - 280685, - 280353, - 280722, - 156020, - 155984, - 280627, - 280660, - 290932, - 148224, - 280563, - 280277, - 280381, - 280323, - 280303, - 280494, - 148862, - 280468, - 280374, - 280568, - 148876, - 280750, - 280453, - 280535, - 280510, - 280298, - 280460, - 280658, - 280692, - 280716, - 280625, - 280322, - 280249, - 280417, - 280709, - 280438, - 148228, - 280522, - 280297, - 280741, - 280730, - 280257, - 149149, - 280351, - 280515, - 280584, - 280307, - 280521, - 280565, - 280539, - 280686, - 280689, - 280586, - 280473, - 280398, - 280749, - 280615, - 280598, - 280480, - 280552, - 280640, - 148881, - 280355, - 280302, - 280255, - 280348, - 280498, - 280296, - 280321, - 280739, - 280634, - 280313, - 280551, - 280121, - 279763, - 280156, - 280060, - 280183, - 280431, - 149164, - 280043, - 280675, - 280233, - 280201, - 149167, - 279909, - 148883, - 279795, - 279707, - 280003, - 279971, - 279891, - 280107, - 279765, - 279815, - 279945, - 279829, - 280202, - 279937, - 279910, - 280118, - 280000, - 280182, - 279754, - 279982, - 155993, - 280125, - 280055, - 280085, - 280181, - 280027, - 279757, - 280073, - 149163, - 280044, - 279728, - 279953, - 279890, - 279814, - 279830, - 280674, - 279862, - 279889, - 279736, - 280106, - 279854, - 279911, - 280203, - 280151, - 280081, - 279970, - 280138, - 280034, - 280119, - 280405, - 280180, - 279744, - 279813, - 280092, - 279888, - 148231, - 279766, - 280047, - 279831, - 149172, - 279711, - 280204, - 280061, - 280155, - 279912, - 279753, - 280220, - 280654, - 279983, - 280179, - 279742, - 280205, - 280234, - 156021, - 279969, - 155989, - 279913, - 280007, - 279725, - 280011, - 279812, - 280072, - 279706, - 156005, - 280444, - 280120, - 279914, - 280178, - 279738, - 280062, - 279887, - 279832, - 280206, - 280142, - 148874, - 279942, - 280026, - 279938, - 279741, - 280105, - 279886, - 280221, - 280177, - 279752, - 279984, - 280077, - 279786, - 279833, - 280122, - 279811, - 280068, - 279885, - 280207, - 280035, - 279915, - 148888, - 280104, - 279985, - 279968, - 280054, - 279732, - 279767, - 149161, - 280225, - 280176, - 279730, - 279810, - 279950, - 280208, - 279884, - 149175, - 279712, - 279999, - 280497, - 280590, - 280149, - 279834, - 279849, - 280123, - 279739, - 279722, - 280046, - 280209, - 279724, - 279916, - 280226, - 280175, - 280154, - 279967, - 280018, - 280103, - 280053, - 279705, - 279770, - 279751, - 279986, - 279917, - 290065, - 279809, - 279853, - 280174, - 279883, - 279835, - 279918, - 280025, - 279794, - 148861, - 279949, - 280087, - 280210, - 279956, - 280227, - 280236, - 280173, - 280589, - 280143, - 279721, - 279882, - 280082, - 279808, - 280071, - 279836, - 280036, - 279966, - 280211, - 280124, - 279781, - 279919, - 279881, - 149159, - 280063, - 279720, - 156026, - 279771, - 148864, - 280102, - 280212, - 280243, - 280172, - 280436, - 280012, - 280006, - 148227, - 279807, - 280141, - 279880, - 280002, - 279791, - 279920, - 279939, - 280076, - 279750, - 279987, - 279714, - 279837, - 280126, - 279860, - 280052, - 155991, - 279948, - 280244, - 280171, - 280147, - 148858, - 279965, - 280136, - 279715, - 280213, - 279921, - 291035, - 279878, - 280101, - 279838, - 279785, - 280127, - 280024, - 279951, - 280214, - 279806, - 279749, - 280170, - 280406, - 279988, - 279713, - 279727, - 280038, - 279922, - 279877, - 280153, - 280262, - 280169, - 279964, - 148870, - 279787, - 280100, - 279989, - 279772, - 280091, - 279805, - 279839, - 280215, - 279793, - 279923, - 280550, - 280420, - 148875, - 279875, - 280144, - 280128, - 279733, - 155995, - 280064, - 149157, - 279790, - 279702, - 280069, - 280263, - 280168, - 279704, - 280216, - 148871, - 279874, - 279804, - 280496, - 280099, - 279840, - 279924, - 280445, - 280320, - 280167, - 279748, - 279990, - 280075, - 149169, - 280051, - 280065, - 280019, - 279963, - 280017, - 279703, - 156000, - 280023, - 148879, - 279776, - 280217, - 279873, - 279841, - 279925, - 280549, - 280015, - 280098, - 280129, - 279803, - 280083, - 280166, - 280464, - 280086, - 280218, - 280039, - 280435, - 279926, - 279857, - 149151, - 280388, - 280005, - 280013, - 279872, - 279947, - 279716, - 280165, - 279962, - 280016, - 279747, - 279991, - 279858, - 279802, - 279842, - 279940, - 279777, - 280219, - 279871, - 149158, - 279788, - 279927, - 280130, - 156024, - 280145, - 280389, - 280164, - 279801, - 148860, - 280526, - 280415, - 279701, - 155997, - 280222, - 290069, - 279928, - 279856, - 279961, - 279955, - 279870, - 280066, - 155992, - 279944, - 280131, - 280022, - 280140, - 280097, - 279843, - 280390, - 280163, - 155986, - 279746, - 279992, - 280525, - 279943, - 280223, - 279782, - 279929, - 149173, - 279869, - 279800, - 279844, - 279726, - 280040, - 279735, - 280162, - 280096, - 148886, - 280152, - 279960, - 279993, - 280070, - 279778, - 148890, - 279930, - 280050, - 279737, - 280391, - 280224, - 280132, - 246836, - 279784, - 279717, - 280161, - 279952, - 279868, - 279799, - 279852, - 279845, - 280001, - 280502, - 290068, - 280095, - 280228, - 280137, - 279931, - 280392, - 280160, - 155996, - 279959, - 279861, - 149168, - 279745, - 279994, - 280139, - 279779, - 279941, - 279798, - 279997, - 279867, - 280049, - 280084, - 279723, - 280133, - 279700, - 280021, - 280419, - 155999, - 280045, - 279932, - 280229, - 280416, - 280393, - 280159, - 279958, - 156012, - 279866, - 149155, - 279946, - 280014, - 280004, - 279846, - 279933, - 279719, - 280230, - 280067, - 280041, - 279792, - 155987, - 280235, - 156003, - 280094, - 280158, - 280463, - 279797, - 279865, - 279743, - 279995, - 280074, - 279847, - 280231, - 148865, - 279954, - 279780, - 279934, - 279734, - 280148, - 280397, - 156009, - 280009, - 279899, - 279851, - 279976, - 279822, - 280192, - 280031, - 280134, - 279759, - 279876, - 280191, - 280058, - 280113, - 148880, - 280112, - 279977, - 279900, - 279821, - 149156, - 279775, - 280193, - 279709, - 279855, - 149165, - 279789, - 155985, - 279718, - 149148, - 279898, - 280079, - 279879, - 279823, - 280157, - 279975, - 280150, - 280239, - 280194, - 279864, - 279760, - 279774, - 279902, - 280190, - 280232, - 279897, - 280237, - 280114, - 149153, - 279820, - 279796, - 280238, - 280057, - 279903, - 280189, - 279850, - 279708, - 279729, - 280111, - 279824, - 280501, - 279901, - 280030, - 280146, - 279896, - 156001, - 280188, - 280751, - 279758, - 279978, - 290084, - 279819, - 280048, - 280195, - 279773, - 156027, - 279974, - 156023, - 280291, - 280042, - 280115, - 279859, - 279904, - 280032, - 279936, - 279935, - 279825, - 279761, - 280093, - 280110, - 280059, - 280187, - 279783, - 280196, - 279769, - 279905, - 279818, - 279957, - 279756, - 279979, - 280676, - 280197, - 156007, - 149146, - 279863, - 279906, - 279895, - 280088, - 280080, - 279973, - 279826, - 280198, - 280401, - 280116, - 279710, - 156008, - 280056, - 280186, - 279740, - 279768, - 280029, - 280135, - 279894, - 280010, - 279817, - 280008, - 279827, - 279996, - 280028, - 279972, - 280089, - 280109, - 279893, - 290067, - 156013, - 279998, - 279755, - 279907, - 280185, - 279980, - 280090, - 280199, - 280037, - 280184, - 280078, - 280020, - 279764, - 280033, - 279892, - 279762, - 279816, - 280108, - 279731, - 279828, - 279908, - 280200, - 279848, - 280117, - 279981, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '61', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Service', - 'id': 133671, - 'is_enabled': True, - 'name': 'Service', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 279934, - 279763, - 280435, - 279894, - 280083, - 280060, - 148883, - 280183, - 280166, - 279734, - 280184, - 149164, - 279904, - 279848, - 280675, - 280135, - 280218, - 280009, - 280201, - 280032, - 149167, - 279707, - 279795, - 280238, - 279909, - 279926, - 280039, - 149151, - 279891, - 279815, - 279976, - 279971, - 156009, - 279945, - 280117, - 280043, - 280233, - 280107, - 280005, - 155993, - 279899, - 279765, - 280003, - 279947, - 280010, - 280013, - 279829, - 279872, - 280202, - 280388, - 279935, - 279910, - 279747, - 280118, - 279998, - 280182, - 279822, - 279937, - 279754, - 279716, - 280165, - 279982, - 279997, - 280016, - 280125, - 280181, - 280055, - 279962, - 279825, - 280192, - 280027, - 279855, - 280073, - 279757, - 279936, - 279991, - 280146, - 279802, - 279728, - 279761, - 280139, - 149163, - 279890, - 279759, - 279814, - 279842, - 279862, - 280031, - 279830, - 279889, - 280674, - 280058, - 279777, - 280134, - 280219, - 280106, - 279871, - 279859, - 279876, - 279911, - 280191, - 280203, - 280000, - 279854, - 279927, - 279970, - 149158, - 280001, - 280081, - 279736, - 279856, - 280034, - 280092, - 279940, - 280119, - 279850, - 280151, - 280180, - 280130, - 280405, - 279744, - 279788, - 279813, - 280110, - 279775, - 279888, - 148880, - 280389, - 280164, - 279766, - 279851, - 280145, - 149172, - 156024, - 279831, - 280155, - 155997, - 279711, - 279801, - 280112, - 280061, - 280204, - 279944, - 279701, - 279912, - 279753, - 280397, - 280138, - 280526, - 280047, - 280654, - 280008, - 148231, - 280113, - 280220, - 280179, - 279863, - 279737, - 279983, - 279742, - 280199, - 280059, - 280222, - 149156, - 279969, - 280187, - 279725, - 280205, - 279928, - 279738, - 279900, - 280007, - 280097, - 279955, - 148860, - 280011, - 156021, - 279913, - 279812, - 279961, - 279821, - 155989, - 279706, - 279764, - 279870, - 280444, - 156005, - 280109, - 155986, - 280120, - 280236, - 279977, - 279914, - 280178, - 155992, - 280078, - 279887, - 279790, - 280196, - 280062, - 280193, - 280131, - 280142, - 279832, - 280140, - 280066, - 280022, - 148874, - 279864, - 280026, - 279769, - 279852, - 280206, - 279741, - 279709, - 280105, - 280028, - 279886, - 279843, - 279938, - 290069, - 280221, - 280177, - 149165, - 279786, - 279752, - 280390, - 280163, - 280077, - 279957, - 280070, - 279984, - 279731, - 279811, - 279833, - 279942, - 279746, - 280122, - 279885, - 155985, - 279905, - 279992, - 280525, - 280207, - 279818, - 280068, - 279972, - 279915, - 148888, - 149148, - 280104, - 280223, - 279718, - 279968, - 279898, - 279853, - 279985, - 280035, - 280054, - 279929, - 149173, - 149161, - 280121, - 279767, - 279732, - 279782, - 279869, - 280225, - 280176, - 156001, - 280149, - 279730, - 279800, - 279810, - 279756, - 279943, - 280157, - 279884, - 280046, - 279726, - 280088, - 279950, - 280415, - 279712, - 149175, - 280497, - 279844, - 280079, - 280590, - 279908, - 280096, - 280208, - 280162, - 279834, - 279722, - 280676, - 280152, - 280123, - 279823, - 279975, - 148886, - 279827, - 279960, - 279783, - 279916, - 279724, - 280209, - 280053, - 280154, - 290068, - 280226, - 280175, - 279979, - 279993, - 279999, - 279739, - 279967, - 279735, - 280040, - 280103, - 280020, - 280194, - 279705, - 279778, - 279849, - 279774, - 279770, - 279751, - 280050, - 279723, - 279949, - 280197, - 279917, - 279930, - 279809, - 279893, - 279760, - 279986, - 279883, - 280174, - 279792, - 156007, - 280391, - 279794, - 280033, - 279918, - 280025, - 280224, - 279784, - 279902, - 148861, - 280132, - 279956, - 148890, - 279835, - 290065, - 246836, - 280210, - 280190, - 279892, - 280227, - 280173, - 279828, - 279727, - 279717, - 280072, - 280589, - 280045, - 280161, - 279721, - 279897, - 279882, - 149146, - 280143, - 280071, - 279868, - 280082, - 279808, - 279879, - 279799, - 280087, - 280239, - 279836, - 279952, - 279966, - 279820, - 280089, - 280036, - 279895, - 149153, - 280124, - 280211, - 279881, - 280095, - 155996, - 279919, - 280502, - 149159, - 279796, - 279781, - 156013, - 280063, - 148864, - 279720, - 280114, - 280431, - 280090, - 279771, - 280102, - 279973, - 279791, - 279931, - 280228, - 280436, - 149168, - 280243, - 280172, - 280137, - 279755, - 280212, - 148858, - 280006, - 280141, - 280392, - 280012, - 280160, - 280057, - 279807, - 280234, - 279959, - 148227, - 279880, - 279708, - 279789, - 280080, - 279745, - 279920, - 279750, - 279903, - 280076, - 280189, - 279939, - 279981, - 279826, - 279987, - 280002, - 280018, - 279779, - 279714, - 279762, - 279837, - 280052, - 279948, - 279941, - 280126, - 279994, - 279867, - 279798, - 155991, - 280237, - 280111, - 280244, - 280171, - 279729, - 280049, - 279858, - 279907, - 279715, - 279860, - 279965, - 280501, - 280084, - 280108, - 280116, - 280213, - 280136, - 280133, - 279921, - 279806, - 280024, - 279878, - 291035, - 279845, - 279785, - 279700, - 280101, - 279824, - 280021, - 279896, - 280401, - 280127, - 279838, - 290067, - 155999, - 279901, - 280214, - 280030, - 280147, - 279749, - 279932, - 280170, - 149155, - 279710, - 156008, - 279988, - 279713, - 279816, - 280393, - 280406, - 280159, - 280038, - 280153, - 290084, - 279922, - 279877, - 280416, - 280229, - 279958, - 280262, - 280169, - 279740, - 280420, - 279964, - 279946, - 279951, - 156012, - 280100, - 280188, - 279866, - 280198, - 279787, - 280232, - 279772, - 280004, - 279989, - 148870, - 279805, - 279758, - 279793, - 280751, - 279839, - 280014, - 280215, - 280235, - 280056, - 280091, - 280550, - 280048, - 280419, - 279875, - 279980, - 148875, - 279933, - 279906, - 279846, - 280128, - 279978, - 279733, - 279719, - 280144, - 280186, - 280064, - 279923, - 155995, - 149157, - 280230, - 279819, - 279702, - 280200, - 280085, - 155987, - 280263, - 280168, - 279768, - 156026, - 279704, - 280067, - 156003, - 279804, - 280216, - 279874, - 280496, - 280195, - 148871, - 280148, - 280094, - 279773, - 280099, - 280041, - 280158, - 279840, - 280042, - 279996, - 279924, - 280051, - 279748, - 156027, - 279865, - 280320, - 280167, - 279797, - 280445, - 279953, - 280463, - 280075, - 279974, - 280069, - 279990, - 279743, - 280156, - 280019, - 280093, - 280065, - 279703, - 280023, - 280150, - 279963, - 280074, - 280029, - 279861, - 279995, - 156023, - 279847, - 156000, - 149169, - 280017, - 280291, - 279776, - 148879, - 279857, - 279954, - 280217, - 279873, - 280231, - 280185, - 280464, - 280037, - 279925, - 280549, - 279817, - 279780, - 279841, - 280086, - 280098, - 148865, - 280015, - 280115, - 280129, - 280044, - 279803, - 280332, - 156028, - 280551, - 280246, - 280718, - 280668, - 280567, - 280454, - 280250, - 280275, - 280375, - 280455, - 280619, - 280760, - 280422, - 280697, - 280319, - 280723, - 280724, - 149166, - 280256, - 148863, - 280494, - 148873, - 280542, - 280370, - 280382, - 280544, - 280717, - 280578, - 280257, - 280365, - 280456, - 280732, - 280638, - 280681, - 280474, - 280726, - 280457, - 280520, - 280505, - 280648, - 280318, - 280358, - 280336, - 280672, - 280753, - 280519, - 280572, - 280687, - 148222, - 280421, - 280621, - 280562, - 280296, - 280618, - 280661, - 280586, - 280317, - 156004, - 148224, - 280258, - 280716, - 156015, - 280276, - 280379, - 280301, - 280545, - 280442, - 280259, - 280599, - 280458, - 280650, - 280725, - 280762, - 280316, - 280504, - 280649, - 156022, - 149160, - 280518, - 280673, - 156025, - 280587, - 280369, - 280356, - 280352, - 290929, - 280708, - 280628, - 280613, - 280386, - 280373, - 280517, - 280698, - 280620, - 280688, - 280426, - 148869, - 280748, - 280582, - 280260, - 280315, - 280588, - 280399, - 280564, - 280715, - 280695, - 280248, - 280376, - 280659, - 280281, - 280261, - 280730, - 280314, - 280329, - 280516, - 280635, - 280640, - 280368, - 156019, - 148878, - 280459, - 280249, - 148889, - 280653, - 280353, - 280277, - 280460, - 280515, - 280689, - 280313, - 280418, - 280357, - 280300, - 280569, - 280617, - 280651, - 280706, - 280264, - 280312, - 280752, - 149170, - 280754, - 280530, - 280714, - 280443, - 280667, - 280565, - 280624, - 280503, - 280461, - 148225, - 280637, - 280682, - 280740, - 280553, - 280335, - 280738, - 156002, - 148229, - 280604, - 280265, - 280475, - 280294, - 280540, - 280514, - 280395, - 280546, - 280600, - 280377, - 280266, - 254109, - 280400, - 280575, - 148884, - 280462, - 148223, - 280384, - 280616, - 280362, - 280372, - 280733, - 280626, - 280713, - 280278, - 280641, - 280513, - 280413, - 280690, - 280533, - 280622, - 280311, - 280646, - 280665, - 280331, - 280465, - 280761, - 280310, - 149152, - 280267, - 280595, - 149144, - 280476, - 280282, - 280601, - 290928, - 280512, - 280404, - 280559, - 280629, - 280412, - 280394, - 280299, - 280532, - 280573, - 280612, - 280547, - 280466, - 280585, - 156006, - 280268, - 148226, - 280712, - 280309, - 280479, - 280367, - 280742, - 280594, - 280500, - 280691, - 280467, - 280746, - 280511, - 280537, - 280385, - 280696, - 156018, - 280251, - 155988, - 280269, - 280440, - 280308, - 280581, - 280722, - 280337, - 280279, - 280707, - 149145, - 280354, - 280240, - 280570, - 156020, - 280270, - 280660, - 280669, - 280298, - 280510, - 280363, - 280692, - 280417, - 280381, - 280307, - 280750, - 280378, - 280468, - 280364, - 280615, - 280743, - 280739, - 280355, - 280306, - 280705, - 280284, - 280552, - 280295, - 280529, - 148228, - 280481, - 280493, - 280757, - 280347, - 149154, - 280711, - 280348, - 280592, - 280664, - 280666, - 280482, - 280359, - 280293, - 280610, - 280735, - 148887, - 280636, - 280492, - 280411, - 280577, - 149171, - 280557, - 156016, - 280495, - 280285, - 280447, - 280292, - 280271, - 155984, - 280699, - 280433, - 280683, - 280607, - 280632, - 280704, - 280756, - 280737, - 280671, - 280402, - 280437, - 280483, - 280410, - 280491, - 280469, - 280286, - 280509, - 280408, - 280374, - 280554, - 280484, - 280534, - 280680, - 280576, - 280272, - 149174, - 280340, - 280490, - 280703, - 280602, - 280414, - 280758, - 162016, - 280744, - 280631, - 280287, - 280657, - 280561, - 280679, - 280339, - 280605, - 280700, - 280252, - 280470, - 280556, - 149150, - 280645, - 280508, - 280288, - 280360, - 280745, - 280409, - 280678, - 280693, - 280427, - 280489, - 280330, - 280555, - 280247, - 149143, - 280644, - 280441, - 280485, - 280623, - 280538, - 280736, - 280541, - 280633, - 280333, - 280609, - 280305, - 280702, - 280480, - 280486, - 280614, - 280349, - 148868, - 155994, - 280710, - 280289, - 280328, - 280571, - 280677, - 280361, - 280432, - 280488, - 280366, - 280701, - 280663, - 280383, - 280477, - 280608, - 280747, - 280583, - 280283, - 280487, - 149162, - 280499, - 280290, - 280727, - 280656, - 280304, - 280536, - 280371, - 280596, - 156011, - 280327, - 155990, - 280662, - 280548, - 280341, - 280625, - 156014, - 280643, - 280647, - 280721, - 280684, - 280755, - 280655, - 280448, - 280345, - 280449, - 280273, - 280591, - 280338, - 148230, - 280424, - 280528, - 280326, - 280611, - 280342, - 280478, - 290931, - 280471, - 280430, - 280380, - 156010, - 280446, - 280728, - 280439, - 280731, - 280603, - 148859, - 148882, - 280543, - 280720, - 280531, - 155998, - 280274, - 280343, - 148885, - 280450, - 280639, - 280241, - 280642, - 280606, - 280423, - 280670, - 290930, - 280507, - 280334, - 280429, - 148877, - 280325, - 280729, - 280566, - 280630, - 280451, - 280280, - 280242, - 280652, - 280344, - 280425, - 280763, - 280324, - 280387, - 280428, - 280560, - 280245, - 280396, - 148872, - 280403, - 280759, - 280346, - 280719, - 280472, - 149147, - 280539, - 280253, - 290932, - 280579, - 280506, - 280580, - 280527, - 280535, - 280593, - 280524, - 280303, - 280597, - 280407, - 280254, - 280350, - 280523, - 280584, - 280685, - 280694, - 280452, - 280627, - 280563, - 280574, - 280323, - 280297, - 148862, - 148876, - 280453, - 280568, - 148866, - 280734, - 280658, - 280322, - 280709, - 280438, - 280741, - 280522, - 149149, - 280749, - 280351, - 280521, - 280558, - 280634, - 280686, - 148867, - 280473, - 280598, - 280498, - 148881, - 280302, - 280255, - 280321, - 280434, - 280398, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - { - 'code': '62', - 'created_at': '2021-03-30T06:17:45.260578+00:00', - 'display_name': 'Salaries & Wages', - 'id': 133672, - 'is_enabled': True, - 'name': 'Salaries & Wages', - 'org_id': 'orNoatdUnm1w', - 'restricted_project_ids': [ - 280601, - 149150, - 280334, - 280347, - 280335, - 280656, - 280439, - 148885, - 280684, - 280593, - 280438, - 148863, - 280336, - 280725, - 280564, - 280426, - 156002, - 280241, - 280641, - 280647, - 155984, - 280437, - 280337, - 280346, - 280338, - 280620, - 280434, - 280726, - 280565, - 280588, - 156018, - 280339, - 280752, - 280567, - 280592, - 280433, - 280340, - 280427, - 280252, - 280432, - 280727, - 280247, - 155990, - 280341, - 280242, - 280345, - 280655, - 280591, - 280342, - 280430, - 156010, - 280728, - 280543, - 155998, - 280343, - 280642, - 280429, - 280729, - 280566, - 280344, - 280428, - 280396, - 280535, - 149147, - 280253, - 280580, - 280524, - 280523, - 280685, - 280627, - 280254, - 280749, - 280741, - 280522, - 280521, - 148881, - 280255, - 280398, - 280668, - 280686, - 280619, - 280370, - 280375, - 149166, - 280256, - 280544, - 280257, - 280672, - 280520, - 280519, - 280687, - 280753, - 280618, - 156004, - 280258, - 280248, - 280573, - 280545, - 280259, - 280650, - 280649, - 280518, - 280369, - 280628, - 280373, - 280517, - 280688, - 148869, - 280260, - 280399, - 280261, - 280516, - 280376, - 280368, - 148889, - 280515, - 280689, - 280617, - 280264, - 280740, - 280667, - 280754, - 280669, - 280514, - 148229, - 280265, - 280546, - 280540, - 280575, - 280616, - 280266, - 280646, - 280513, - 280690, - 280400, - 149152, - 280267, - 280394, - 280512, - 280629, - 280547, - 280529, - 254109, - 280268, - 280367, - 280691, - 280385, - 280511, - 155988, - 280269, - 280581, - 280537, - 280510, - 280270, - 280692, - 280615, - 280739, - 280666, - 149171, - 280271, - 280402, - 280509, - 280272, - 280744, - 280508, - 280693, - 280366, - 280614, - 156011, - 280548, - 280743, - 280273, - 280750, - 280755, - 280507, - 280274, - 280630, - 280403, - 280506, - 280694, - 149149, - 280572, - 280551, - 280275, - 280578, - 280365, - 280505, - 148224, - 280504, - 280748, - 280613, - 280276, - 280582, - 280673, - 280695, - 280277, - 280503, - 280738, - 280665, - 148884, - 280278, - 280625, - 280377, - 280404, - 280612, - 280500, - 280696, - 280279, - 280364, - 280552, - 280756, - 280631, - 280499, - 148882, - 280280, - 280407, - 280498, - 280697, - 156025, - 280281, - 280384, - 280553, - 280651, - 280282, - 280363, - 280495, - 280378, - 280611, - 280494, - 280698, - 156020, - 280283, - 280579, - 280362, - 280284, - 280493, - 280757, - 280664, - 280610, - 280530, - 280492, - 156016, - 280285, - 280374, - 280737, - 280671, - 280699, - 280632, - 280491, - 280286, - 280408, - 280554, - 280490, - 280576, - 162016, - 280287, - 280645, - 280700, - 280288, - 280489, - 280555, - 280409, - 280609, - 280538, - 148868, - 280289, - 280361, - 280488, - 280701, - 280571, - 149162, - 280290, - 280487, - 280747, - 280583, - 280608, - 280383, - 280663, - 280677, - 280486, - 280633, - 280702, - 280736, - 280485, - 149143, - 280678, - 280360, - 280556, - 280679, - 280745, - 280484, - 280703, - 280758, - 280534, - 149174, - 280680, - 280623, - 280483, - 280410, - 280607, - 280704, - 280292, - 280557, - 280577, - 280411, - 148887, - 280293, - 280359, - 280482, - 280481, - 280742, - 280606, - 280705, - 148866, - 156015, - 280294, - 280634, - 280379, - 280584, - 280662, - 280539, - 280480, - 280295, - 280570, - 280479, - 280706, - 148878, - 280296, - 280358, - 280558, - 280297, - 280648, - 280759, - 280478, - 280477, - 280536, - 280735, - 280605, - 148228, - 280298, - 280707, - 280299, - 280412, - 280533, - 280559, - 148867, - 280476, - 280475, - 280357, - 280604, - 149170, - 280300, - 280635, - 280413, - 280708, - 280395, - 280356, - 280301, - 280382, - 280661, - 280474, - 148873, - 280760, - 280302, - 280473, - 280709, - 280734, - 148876, - 280303, - 280472, - 280560, - 280652, - 280681, - 280603, - 280471, - 280240, - 280380, - 148230, - 280304, - 280710, - 280305, - 280644, - 280470, - 280541, - 280561, - 280414, - 280602, - 280469, - 280636, - 280711, - 280387, - 149154, - 280306, - 280355, - 280381, - 280468, - 280307, - 280417, - 280660, - 280354, - 149145, - 280308, - 280467, - 280309, - 280746, - 280712, - 280585, - 280466, - 280626, - 290928, - 149144, - 280310, - 280622, - 280683, - 280761, - 280465, - 280311, - 280713, - 280372, - 280733, - 148223, - 280462, - 280600, - 280637, - 148225, - 280569, - 280461, - 280714, - 280312, - 280313, - 280353, - 280460, - 280459, - 280418, - 280249, - 280670, - 156019, - 280314, - 280659, - 280715, - 280315, - 290929, - 280352, - 156022, - 280316, - 280458, - 280762, - 280599, - 280716, - 280317, - 280586, - 280621, - 280562, - 280421, - 280457, - 148222, - 280318, - 280456, - 280638, - 280732, - 280717, - 280319, - 280422, - 280455, - 280454, - 280718, - 280250, - 156028, - 280321, - 280246, - 280598, - 280351, - 280322, - 280658, - 280568, - 280453, - 280574, - 148862, - 280323, - 280563, - 280542, - 280452, - 280350, - 280597, - 280719, - 148872, - 280324, - 280763, - 280245, - 280451, - 280325, - 290930, - 280423, - 280450, - 280639, - 280720, - 148859, - 280731, - 280528, - 280326, - 280449, - 280643, - 280448, - 156014, - 280327, - 280371, - 280596, - 280424, - 280721, - 280386, - 280349, - 280328, - 280657, - 280447, - 280532, - 149160, - 155994, - 280329, - 280653, - 280446, - 280595, - 290931, - 280330, - 280348, - 280722, - 280251, - 148226, - 156006, - 280331, - 280443, - 280640, - 280587, - 280442, - 280624, - 280723, - 280332, - 290932, - 148877, - 280333, - 280425, - 280682, - 280441, - 280531, - 280527, - 280594, - 280440, - 280724, - 280730, - 279737, - 280089, - 279735, - 148870, - 279999, - 279738, - 280090, - 148880, - 279998, - 280003, - 279739, - 280091, - 148860, - 280085, - 279997, - 148231, - 280092, - 279996, - 279740, - 280093, - 279734, - 148865, - 279995, - 279743, - 280094, - 280004, - 155999, - 280084, - 279994, - 279745, - 280095, - 148886, - 279993, - 280096, - 279992, - 279746, - 155992, - 280097, - 149158, - 279991, - 279747, - 279852, - 280005, - 280083, - 280098, - 156000, - 279990, - 279748, - 280099, - 148875, - 279733, - 279989, - 280100, - 279988, - 279749, - 280101, - 155991, - 279987, - 279750, - 280006, - 280102, - 149159, - 280082, - 148861, - 279986, - 279751, - 280103, - 149175, - 279732, - 279985, - 280104, - 279984, - 279752, - 280105, - 156005, - 280007, - 279983, - 279753, - 149172, - 280081, - 280106, - 149163, - 279982, - 279754, - 280107, - 149164, - 279981, - 279731, - 280108, - 279980, - 279755, - 280109, - 280008, - 280080, - 156007, - 279979, - 279756, - 280110, - 156023, - 279978, - 279758, - 280111, - 149153, - 280079, - 149148, - 279977, - 280112, - 279976, - 280009, - 280238, - 279759, - 279855, - 280113, - 155985, - 279975, - 279760, - 280114, - 279729, - 280751, - 279974, - 280115, - 279761, - 280676, - 279973, - 280116, - 279972, - 280010, - 156013, - 280078, - 279762, - 280117, - 280675, - 279971, - 279765, - 280118, - 279728, - 280674, - 279970, - 280119, - 279766, - 280654, - 279969, - 280011, - 280120, - 148874, - 280077, - 280122, - 279968, - 279767, - 280590, - 280123, - 279967, - 279770, - 279727, - 280589, - 279966, - 280124, - 279771, - 280012, - 280076, - 280126, - 279965, - 291035, - 280127, - 279964, - 279772, - 280550, - 280128, - 148871, - 280075, - 279963, - 280549, - 279776, - 280129, - 279962, - 280013, - 279777, - 280130, - 280526, - 279961, - 280131, - 280525, - 279726, - 279960, - 279778, - 280132, - 280502, - 279959, - 279779, - 280133, - 279958, - 280014, - 155987, - 280074, - 279854, - 279780, - 280134, - 280501, - 279957, - 280135, - 290067, - 280073, - 279725, - 280497, - 279956, - 279781, - 280136, - 280496, - 280015, - 279955, - 279782, - 280137, - 279954, - 279783, - 280138, - 280464, - 279953, - 280139, - 290068, - 280072, - 280463, - 279952, - 279784, - 280140, - 280016, - 280445, - 279951, - 279785, - 280141, - 279724, - 279950, - 279786, - 280142, - 280444, - 279949, - 280143, - 280071, - 280436, - 279948, - 279787, - 280144, - 280017, - 280435, - 279947, - 279788, - 280145, - 156026, - 290069, - 280070, - 279857, - 279723, - 279946, - 279789, - 280146, - 280431, - 279945, - 280147, - 280420, - 279944, - 280018, - 279790, - 280148, - 280419, - 279943, - 279791, - 280149, - 279942, - 280150, - 279719, - 280416, - 279941, - 279792, - 280152, - 280415, - 279940, - 280019, - 280069, - 279793, - 280153, - 280406, - 279939, - 279794, - 280154, - 149161, - 280068, - 279938, - 280155, - 280405, - 279853, - 279937, - 279795, - 280156, - 280020, - 280401, - 279936, - 279796, - 280157, - 279718, - 280397, - 279934, - 279797, - 280158, - 156003, - 280067, - 279933, - 280159, - 280393, - 279932, - 280021, - 279798, - 280160, - 280392, - 279931, - 279799, - 280161, - 279717, - 280045, - 280391, - 279930, - 280162, - 279800, - 149173, - 279929, - 280163, - 280390, - 280022, - 280066, - 279928, - 279801, - 280164, - 280389, - 279927, - 279802, - 280165, - 279716, - 280388, - 279926, - 280166, - 279803, - 279925, - 280023, - 280065, - 280167, - 280320, - 279924, - 279804, - 280168, - 280263, - 149157, - 279923, - 280064, - 279805, - 280169, - 280262, - 279922, - 280170, - 280024, - 279806, - 279921, - 280171, - 280244, - 279920, - 279714, - 279807, - 280172, - 280243, - 290065, - 148864, - 280063, - 279919, - 279808, - 280173, - 280227, - 280025, - 279918, - 280174, - 279809, - 279917, - 280175, - 280226, - 279916, - 279712, - 279810, - 280176, - 280225, - 148888, - 279915, - 279811, - 280177, - 280221, - 280046, - 280026, - 280062, - 280178, - 279914, - 279812, - 279913, - 280179, - 280220, - 279912, - 280061, - 279711, - 279813, - 280180, - 280151, - 279911, - 279814, - 280027, - 280181, - 280125, - 280182, - 279910, - 279815, - 279909, - 280183, - 148883, - 280060, - 280121, - 279908, - 279816, - 280184, - 280037, - 279907, - 280028, - 279817, - 280185, - 280239, - 280029, - 280186, - 279906, - 279710, - 279818, - 279905, - 280187, - 156008, - 280059, - 279935, - 279904, - 279819, - 280188, - 280030, - 279901, - 280189, - 279903, - 279820, - 279879, - 280190, - 279902, - 149165, - 279709, - 156001, - 279821, - 279900, - 280191, - 279876, - 279899, - 279822, - 280192, - 280031, - 280058, - 279775, - 280193, - 279898, - 279823, - 280194, - 279774, - 279897, - 280057, - 279708, - 279824, - 279896, - 280195, - 279773, - 280291, - 280032, - 279825, - 280196, - 279769, - 280197, - 149146, - 279895, - 279826, - 280198, - 280056, - 279768, - 279894, - 279827, - 279893, - 280199, - 279764, - 280033, - 279892, - 279828, - 280200, - 279763, - 280201, - 149167, - 279707, - 279891, - 279829, - 280202, - 280055, - 279757, - 279890, - 279830, - 279889, - 280203, - 280034, - 279744, - 279888, - 279831, - 280204, - 279742, - 280205, - 155989, - 279706, - 279887, - 279832, - 280206, - 279741, - 279886, - 279833, - 279885, - 280207, - 280035, - 280054, - 279730, - 279884, - 279834, - 280208, - 279722, - 280209, - 280053, - 279705, - 279883, - 279835, - 280210, - 279721, - 279882, - 148858, - 280036, - 279836, - 280211, - 279881, - 279720, - 280212, - 148227, - 279880, - 279837, - 280052, - 279715, - 280213, - 279878, - 279838, - 280214, - 279713, - 280038, - 279877, - 279839, - 280215, - 279875, - 155995, - 279702, - 279704, - 280216, - 279874, - 279840, - 280051, - 279703, - 280217, - 279873, - 279841, - 280218, - 280039, - 149151, - 279872, - 279842, - 280219, - 279856, - 279871, - 155997, - 156024, - 279701, - 280222, - 155986, - 279870, - 279843, - 280223, - 279869, - 279844, - 280040, - 280050, - 280224, - 246836, - 279868, - 280228, - 149168, - 279867, - 280049, - 279845, - 279700, - 280229, - 156012, - 279866, - 279846, - 280230, - 280041, - 279865, - 279847, - 280231, - 149156, - 156009, - 279864, - 280232, - 280048, - 156027, - 279863, - 279848, - 280233, - 155993, - 279862, - 279849, - 280042, - 280234, - 279861, - 279850, - 280235, - 280044, - 155996, - 148890, - 148879, - 279860, - 280236, - 156021, - 280047, - 279859, - 279851, - 280237, - 290084, - 280043, - 279736, - 280087, - 279858, - 280002, - 149169, - 280086, - 280001, - 149155, - 280088, - 280000, - ], - 'sub_category': None, - 'system_category': None, - 'updated_at': '2022-05-05T17:48:51.900866+00:00', - }, - ]}], - 'get_all_cost_centers': # !/usr/bin/python - # -*- coding: utf-8 -*- - [{'data': [ - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - 01: San Francisco, Id - 2', - 'id': 9587, - 'is_enabled': True, - 'name': '01: San Francisco', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - 02: Boston, Id - 1', - 'id': 9588, - 'is_enabled': True, - 'name': '02: Boston', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - Bir Billing, Id - 13', - 'id': 9589, - 'is_enabled': True, - 'name': 'Bir Billing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - Custom Location, Id - 9', - 'id': 9590, - 'is_enabled': True, - 'name': 'Custom Location', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - Fyle, Id - 7', - 'id': 9591, - 'is_enabled': True, - 'name': 'Fyle', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - hubajuba, Id - 8', - 'id': 9592, - 'is_enabled': True, - 'name': 'hubajuba', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - hukiju, Id - 10', - 'id': 9593, - 'is_enabled': True, - 'name': 'hukiju', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - Mars, Id - 15', - 'id': 9594, - 'is_enabled': True, - 'name': 'Mars', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': "Cost Center - Nilesh's Location, Id - 11", - 'id': 9595, - 'is_enabled': True, - 'name': "Nilesh's Location", - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - njiy, Id - 14', - 'id': 9596, - 'is_enabled': True, - 'name': 'njiy', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - Overstock, Id - 3', - 'id': 9597, - 'is_enabled': True, - 'name': 'Overstock', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - QA Hold, Id - 5', - 'id': 9598, - 'is_enabled': True, - 'name': 'QA Hold', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - Receiving Insp., Id - 4', - 'id': 9599, - 'is_enabled': True, - 'name': 'Receiving Insp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - UK Location, Id - 12', - 'id': 9600, - 'is_enabled': True, - 'name': 'UK Location', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2022-05-09T10:49:26.333255+00:00', - 'description': 'Cost Center - VendorTest, Id - 6', - 'id': 9601, - 'is_enabled': True, - 'name': 'VendorTest', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2022-05-09T10:49:26.333255+00:00', - }, - { - 'code': None, - 'created_at': '2021-12-15T10:43:45.165486+00:00', - 'description': 'LOLOOOOOooo', - 'id': 9354, - 'is_enabled': True, - 'name': 'Platform CCCCCC - 19999', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2021-12-15T10:43:45.165486+00:00', - }, - { - 'code': None, - 'created_at': '2021-10-26T15:07:00.464491+00:00', - 'description': 'Cost Center - Avenged Sevenfold, Id - 5', - 'id': 9305, - 'is_enabled': True, - 'name': 'Avenged Sevenfold', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2021-10-26T15:07:00.464491+00:00', - }, - { - 'code': None, - 'created_at': '2021-10-26T15:07:00.464491+00:00', - 'description': 'Cost Center - Lamb of God, Id - 3', - 'id': 9306, - 'is_enabled': True, - 'name': 'Lamb of God', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2021-10-26T15:07:00.464491+00:00', - }, - { - 'code': None, - 'created_at': '2021-10-26T15:07:00.464491+00:00', - 'description': 'Cost Center - Megadeth, Id - 1', - 'id': 9307, - 'is_enabled': True, - 'name': 'Megadeth', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2021-10-26T15:07:00.464491+00:00', - }, - { - 'code': None, - 'created_at': '2021-10-26T15:07:00.464491+00:00', - 'description': 'Cost Center - Metallica, Id - 2', - 'id': 9308, - 'is_enabled': True, - 'name': 'Metallica', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2021-10-26T15:07:00.464491+00:00', - }, - { - 'code': None, - 'created_at': '2021-10-26T15:07:00.464491+00:00', - 'description': 'Cost Center - Opeth, Id - 4', - 'id': 9309, - 'is_enabled': True, - 'name': 'Opeth', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'updated_at': '2021-10-26T15:07:00.464491+00:00', - }, - { - 'code': '82758', - 'created_at': '2020-09-02T08:05:57.677861+00:00', - 'description': '', - 'id': 6589, - 'is_enabled': True, - 'name': 'F & A', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:58.677861+00:00', - }, - { - 'code': '30868', - 'created_at': '2020-09-02T08:05:55.963835+00:00', - 'description': '', - 'id': 6588, - 'is_enabled': True, - 'name': 'Internal', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:56.963835+00:00', - }, - { - 'code': '77240', - 'created_at': '2020-09-02T08:05:55.630647+00:00', - 'description': '', - 'id': 6587, - 'is_enabled': True, - 'name': 'Corporate', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:56.630647+00:00', - }, - { - 'code': '62958', - 'created_at': '2020-09-02T08:05:55.303377+00:00', - 'description': '', - 'id': 6586, - 'is_enabled': True, - 'name': 'Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:56.303377+00:00', - }, - { - 'code': '35260', - 'created_at': '2020-09-02T08:05:54.957871+00:00', - 'description': '', - 'id': 6585, - 'is_enabled': True, - 'name': 'Office', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:55.957871+00:00', - }, - { - 'code': '52111', - 'created_at': '2020-09-02T08:05:54.629473+00:00', - 'description': '', - 'id': 6584, - 'is_enabled': True, - 'name': 'Head', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:55.629473+00:00', - }, - { - 'code': '14530', - 'created_at': '2020-09-02T08:05:54.288304+00:00', - 'description': '', - 'id': 6583, - 'is_enabled': True, - 'name': 'OPS & Retail', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:55.288304+00:00', - }, - { - 'code': '00207', - 'created_at': '2020-09-02T08:05:53.943911+00:00', - 'description': '', - 'id': 6582, - 'is_enabled': True, - 'name': 'Administration', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:54.943911+00:00', - }, - { - 'code': '48163', - 'created_at': '2020-09-02T08:05:53.620144+00:00', - 'description': '', - 'id': 6581, - 'is_enabled': True, - 'name': 'Treasury', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:54.620144+00:00', - }, - { - 'code': '38594', - 'created_at': '2020-09-02T08:05:53.286029+00:00', - 'description': '', - 'id': 6580, - 'is_enabled': True, - 'name': 'Sales and Cross', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': [ - 'usqywo0f3nBY', - 'us3o3Yl7A5Uq', - 'usiUCyQYp2N2', - 'usenjNn1QU1A', - 'us5LYztuG20F', - 'usuycevSQL2z', - 'ushzyZgwhV7M', - 'use1hqDbsybg', - 'us5qnHSldfcB', - 'us6bdTBqx1iZ', - 'usJunSVNaFGE', - 'usZU7tBgtPVH', - 'us49CBDOfTLC', - ], - 'updated_at': '2020-09-02T08:05:54.286029+00:00', - }, - ]}], - 'get_all_projects': # !/usr/bin/python - # -*- coding: utf-8 -*- - [{'data': [ - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': 'Template-FF', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - Fixed Fee Project with Five Tasks, Id - Template-FF', - 'display_name': 'Fixed Fee Project with Five Tasks', - 'id': 300177, - 'is_enabled': True, - 'name': 'Fixed Fee Project with Five Tasks', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10078', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - Fyle NetSuite Integration, Id - 10078', - 'display_name': 'Fyle NetSuite Integration', - 'id': 300178, - 'is_enabled': True, - 'name': 'Fyle NetSuite Integration', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10077', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - Fyle Sage Intacct Integration, Id - 10077', - 'display_name': 'Fyle Sage Intacct Integration', - 'id': 300179, - 'is_enabled': True, - 'name': 'Fyle Sage Intacct Integration', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10000', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - General Overhead, Id - 10000', - 'display_name': 'General Overhead', - 'id': 300180, - 'is_enabled': True, - 'name': 'General Overhead', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10025', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - General Overhead-Current, Id - 10025', - 'display_name': 'General Overhead-Current', - 'id': 300181, - 'is_enabled': True, - 'name': 'General Overhead-Current', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10083', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - labhvam, Id - 10083', - 'display_name': 'labhvam', - 'id': 300182, - 'is_enabled': True, - 'name': 'labhvam', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10080', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - Mobile App Redesign, Id - 10080', - 'display_name': 'Mobile App Redesign', - 'id': 300183, - 'is_enabled': True, - 'name': 'Mobile App Redesign', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10081', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - Platform APIs, Id - 10081', - 'display_name': 'Platform APIs', - 'id': 300184, - 'is_enabled': True, - 'name': 'Platform APIs', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': '10082', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - Support Taxes, Id - 10082', - 'display_name': 'Support Taxes', - 'id': 300185, - 'is_enabled': True, - 'name': 'Support Taxes', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [], - 'approver_users': [], - 'code': 'Template-TM', - 'created_at': '2022-08-10T16:50:50.914909+00:00', - 'description': 'Sage Intacct Project - T&M Project with Five Tasks, Id - Template-TM', - 'display_name': 'T&M Project with Five Tasks', - 'id': 300186, - 'is_enabled': True, - 'name': 'T&M Project with Five Tasks', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-08-10T16:50:50.914909+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '14449', - 'created_at': '2022-03-18T09:04:58.414064+00:00', - 'description': 'Project - Project Sravan, Id - 14449', - 'display_name': 'Project Sravan', - 'id': 291035, - 'is_enabled': True, - 'name': 'Project Sravan', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-03-18T09:04:58.414064+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '465', - 'created_at': '2022-02-10T08:05:06.127907+00:00', - 'description': 'Project - Penister Hospital Fabricators, Id - 465', - 'display_name': 'Penister Hospital Fabricators', - 'id': 290931, - 'is_enabled': True, - 'name': 'Penister Hospital Fabricators', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-02-10T08:05:06.127907+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1505', - 'created_at': '2022-02-10T08:05:06.127907+00:00', - 'description': 'Project - Rogers Communication, Id - 1505', - 'display_name': 'Rogers Communication', - 'id': 290932, - 'is_enabled': True, - 'name': 'Rogers Communication', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-02-10T08:05:06.127907+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1547', - 'created_at': '2022-02-10T08:05:02.989188+00:00', - 'description': 'Project - FA-HB Inc., Id - 1547', - 'display_name': 'FA-HB Inc.', - 'id': 290930, - 'is_enabled': True, - 'name': 'FA-HB Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-02-10T08:05:02.989188+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1249', - 'created_at': '2022-02-10T08:04:56.661256+00:00', - 'description': 'Project - AB&I Holdings, Id - 1249', - 'display_name': 'AB&I Holdings', - 'id': 290928, - 'is_enabled': True, - 'name': 'AB&I Holdings', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-02-10T08:04:56.661256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1491', - 'created_at': '2022-02-10T08:04:56.661256+00:00', - 'description': 'Project - Alpart, Id - 1491', - 'display_name': 'Alpart', - 'id': 290929, - 'is_enabled': True, - 'name': 'Alpart', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-02-10T08:04:56.661256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '14045', - 'created_at': '2022-01-21T08:04:53.290095+00:00', - 'description': 'Project - Wow Company, Id - 14045', - 'display_name': 'Wow Company', - 'id': 290084, - 'is_enabled': True, - 'name': 'Wow Company', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-01-21T08:04:53.290095+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': None, - 'created_at': '2022-01-12T05:57:06.832363+00:00', - 'description': None, - 'display_name': 'Parent Project with Sub Project', - 'id': 290069, - 'is_enabled': True, - 'name': 'Parent Project with Sub Project', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-01-12T05:57:08.620524+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': None, - 'created_at': '2022-01-12T05:56:54.681118+00:00', - 'description': None, - 'display_name': 'Parent Project with Sub Project / Sub Project 2', - 'id': 290068, - 'is_enabled': True, - 'name': 'Parent Project with Sub Project', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': 'Sub Project 2', - 'updated_at': '2022-01-12T05:56:56.428752+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': None, - 'created_at': '2022-01-12T05:56:38.461931+00:00', - 'description': None, - 'display_name': 'Parent Project with Sub Project / Sub Project 1', - 'id': 290067, - 'is_enabled': True, - 'name': 'Parent Project with Sub Project', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': 'Sub Project 1', - 'updated_at': '2022-01-12T05:56:40.262033+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '13815', - 'created_at': '2022-01-11T14:36:14.140465+00:00', - 'description': 'Project - Nilesh Pant, Id - 13815', - 'display_name': 'Nilesh Pant', - 'id': 290065, - 'is_enabled': True, - 'name': 'Nilesh Pant', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2022-01-11T14:36:14.140465+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': None, - 'created_at': '2021-12-01T10:01:48.215109+00:00', - 'description': None, - 'display_name': 'Integrations / Xero', - 'id': 290006, - 'is_enabled': True, - 'name': 'Integrations', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': 'Xero', - 'updated_at': '2021-12-01T10:01:48.377496+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': None, - 'created_at': '2021-12-01T10:00:17.659628+00:00', - 'description': None, - 'display_name': 'Integrations', - 'id': 290005, - 'is_enabled': True, - 'name': 'Integrations', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-12-01T10:00:17.852458+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1271', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - UniExchange, Id - 1271', - 'display_name': 'UniExchange', - 'id': 280677, - 'is_enabled': True, - 'name': 'UniExchange', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '863', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Unnold Hospital Co., Id - 863', - 'display_name': 'Unnold Hospital Co.', - 'id': 280678, - 'is_enabled': True, - 'name': 'Unnold Hospital Co.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1212', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Upper 49th, Id - 1212', - 'display_name': 'Upper 49th', - 'id': 280679, - 'is_enabled': True, - 'name': 'Upper 49th', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '251', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Ursery Publishing Group, Id - 251', - 'display_name': 'Ursery Publishing Group', - 'id': 280680, - 'is_enabled': True, - 'name': 'Ursery Publishing Group', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '527', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Urwin Leasing Group, Id - 527', - 'display_name': 'Urwin Leasing Group', - 'id': 280681, - 'is_enabled': True, - 'name': 'Urwin Leasing Group', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '293', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Valley Center Catering Leasing, Id - 293', - 'display_name': 'Valley Center Catering Leasing', - 'id': 280682, - 'is_enabled': True, - 'name': 'Valley Center Catering Leasing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '559', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vanaken Apartments Holding Corp., Id - 559', - 'display_name': 'Vanaken Apartments Holding Corp.', - 'id': 280683, - 'is_enabled': True, - 'name': 'Vanaken Apartments Holding Corp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '797', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vanasse Antiques Networking, Id - 797', - 'display_name': 'Vanasse Antiques Networking', - 'id': 280684, - 'is_enabled': True, - 'name': 'Vanasse Antiques Networking', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '507', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vance Construction and Associates, Id - 507', - 'display_name': 'Vance Construction and Associates', - 'id': 280685, - 'is_enabled': True, - 'name': 'Vance Construction and Associates', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '503', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vanwyngaarden Title Systems, Id - 503', - 'display_name': 'Vanwyngaarden Title Systems', - 'id': 280686, - 'is_enabled': True, - 'name': 'Vanwyngaarden Title Systems', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '866', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vegas Tours, Id - 866', - 'display_name': 'Vegas Tours', - 'id': 280687, - 'is_enabled': True, - 'name': 'Vegas Tours', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '287', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vellekamp Title Distributors, Id - 287', - 'display_name': 'Vellekamp Title Distributors', - 'id': 280688, - 'is_enabled': True, - 'name': 'Vellekamp Title Distributors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '448', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Veradale Telecom Manufacturing, Id - 448', - 'display_name': 'Veradale Telecom Manufacturing', - 'id': 280689, - 'is_enabled': True, - 'name': 'Veradale Telecom Manufacturing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '336', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vermont Attorneys Company, Id - 336', - 'display_name': 'Vermont Attorneys Company', - 'id': 280690, - 'is_enabled': True, - 'name': 'Vermont Attorneys Company', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '712', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Verrelli Construction -, Id - 712', - 'display_name': 'Verrelli Construction -', - 'id': 280691, - 'is_enabled': True, - 'name': 'Verrelli Construction -', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1278', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vertex, Id - 1278', - 'display_name': 'Vertex', - 'id': 280692, - 'is_enabled': True, - 'name': 'Vertex', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '249', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vessel Painting Holding Corp., Id - 249', - 'display_name': 'Vessel Painting Holding Corp.', - 'id': 280693, - 'is_enabled': True, - 'name': 'Vessel Painting Holding Corp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '301', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Villanova Lumber Systems, Id - 301', - 'display_name': 'Villanova Lumber Systems', - 'id': 280694, - 'is_enabled': True, - 'name': 'Villanova Lumber Systems', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '637', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Virginia Beach Hospital Manufacturing, Id - 637', - 'display_name': 'Virginia Beach Hospital Manufacturing', - 'id': 280695, - 'is_enabled': True, - 'name': 'Virginia Beach Hospital Manufacturing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '854', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vista Lumber Agency, Id - 854', - 'display_name': 'Vista Lumber Agency', - 'id': 280696, - 'is_enabled': True, - 'name': 'Vista Lumber Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '314', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vivas Electric Sales, Id - 314', - 'display_name': 'Vivas Electric Sales', - 'id': 280697, - 'is_enabled': True, - 'name': 'Vivas Electric Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1136', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Vodaphone, Id - 1136', - 'display_name': 'Vodaphone', - 'id': 280698, - 'is_enabled': True, - 'name': 'Vodaphone', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '239', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Volden Publishing Systems, Id - 239', - 'display_name': 'Volden Publishing Systems', - 'id': 280699, - 'is_enabled': True, - 'name': 'Volden Publishing Systems', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '795', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Volmar Liquors and Associates, Id - 795', - 'display_name': 'Volmar Liquors and Associates', - 'id': 280700, - 'is_enabled': True, - 'name': 'Volmar Liquors and Associates', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '582', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Volmink Builders Inc., Id - 582', - 'display_name': 'Volmink Builders Inc.', - 'id': 280701, - 'is_enabled': True, - 'name': 'Volmink Builders Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '338', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wagenheim Painting and Associates, Id - 338', - 'display_name': 'Wagenheim Painting and Associates', - 'id': 280702, - 'is_enabled': True, - 'name': 'Wagenheim Painting and Associates', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '658', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wahlers Lumber Management, Id - 658', - 'display_name': 'Wahlers Lumber Management', - 'id': 280703, - 'is_enabled': True, - 'name': 'Wahlers Lumber Management', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '156', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wallace Printers, Id - 156', - 'display_name': 'Wallace Printers', - 'id': 280704, - 'is_enabled': True, - 'name': 'Wallace Printers', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1135', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Walter Martin, Id - 1135', - 'display_name': 'Walter Martin', - 'id': 280705, - 'is_enabled': True, - 'name': 'Walter Martin', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '883', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Walters Production Company, Id - 883', - 'display_name': 'Walters Production Company', - 'id': 280706, - 'is_enabled': True, - 'name': 'Walters Production Company', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '261', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wapp Hardware Sales, Id - 261', - 'display_name': 'Wapp Hardware Sales', - 'id': 280707, - 'is_enabled': True, - 'name': 'Wapp Hardware Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '598', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Warnberg Automotive and Associates, Id - 598', - 'display_name': 'Warnberg Automotive and Associates', - 'id': 280708, - 'is_enabled': True, - 'name': 'Warnberg Automotive and Associates', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '773', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Warwick Lumber, Id - 773', - 'display_name': 'Warwick Lumber', - 'id': 280709, - 'is_enabled': True, - 'name': 'Warwick Lumber', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '509', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wasager Wine Sales, Id - 509', - 'display_name': 'Wasager Wine Sales', - 'id': 280710, - 'is_enabled': True, - 'name': 'Wasager Wine Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '843', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wassenaar Construction Services, Id - 843', - 'display_name': 'Wassenaar Construction Services', - 'id': 280711, - 'is_enabled': True, - 'name': 'Wassenaar Construction Services', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1308', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Watertown Hicks, Id - 1308', - 'display_name': 'Watertown Hicks', - 'id': 280712, - 'is_enabled': True, - 'name': 'Watertown Hicks', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '651', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Weare and Norvell Painting Co., Id - 651', - 'display_name': 'Weare and Norvell Painting Co.', - 'id': 280713, - 'is_enabled': True, - 'name': 'Weare and Norvell Painting Co.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1439', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Webmaster Gproxy, Id - 1439', - 'display_name': 'Webmaster Gproxy', - 'id': 280714, - 'is_enabled': True, - 'name': 'Webmaster Gproxy', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '579', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Webster Electric, Id - 579', - 'display_name': 'Webster Electric', - 'id': 280715, - 'is_enabled': True, - 'name': 'Webster Electric', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '596', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wedge Automotive Fabricators, Id - 596', - 'display_name': 'Wedge Automotive Fabricators', - 'id': 280716, - 'is_enabled': True, - 'name': 'Wedge Automotive Fabricators', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '715', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wenatchee Builders Fabricators, Id - 715', - 'display_name': 'Wenatchee Builders Fabricators', - 'id': 280717, - 'is_enabled': True, - 'name': 'Wenatchee Builders Fabricators', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '760', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wence Antiques Rentals, Id - 760', - 'display_name': 'Wence Antiques Rentals', - 'id': 280718, - 'is_enabled': True, - 'name': 'Wence Antiques Rentals', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '281', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wendler Markets Leasing, Id - 281', - 'display_name': 'Wendler Markets Leasing', - 'id': 280719, - 'is_enabled': True, - 'name': 'Wendler Markets Leasing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '371', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - West Covina Builders Distributors, Id - 371', - 'display_name': 'West Covina Builders Distributors', - 'id': 280720, - 'is_enabled': True, - 'name': 'West Covina Builders Distributors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '767', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Westminster Lumber Sales, Id - 767', - 'display_name': 'Westminster Lumber Sales', - 'id': 280721, - 'is_enabled': True, - 'name': 'Westminster Lumber Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '778', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Westminster Lumber Sales 1, Id - 778', - 'display_name': 'Westminster Lumber Sales 1', - 'id': 280722, - 'is_enabled': True, - 'name': 'Westminster Lumber Sales 1', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '749', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - West Palm Beach Painting Manufacturing, Id - 749', - 'display_name': 'West Palm Beach Painting Manufacturing', - 'id': 280723, - 'is_enabled': True, - 'name': 'West Palm Beach Painting Manufacturing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '677', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wethersfield Hardware Dynamics, Id - 677', - 'display_name': 'Wethersfield Hardware Dynamics', - 'id': 280724, - 'is_enabled': True, - 'name': 'Wethersfield Hardware Dynamics', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '348', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wettlaufer Construction Systems, Id - 348', - 'display_name': 'Wettlaufer Construction Systems', - 'id': 280725, - 'is_enabled': True, - 'name': 'Wettlaufer Construction Systems', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '626', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wever Apartments -, Id - 626', - 'display_name': 'Wever Apartments -', - 'id': 280726, - 'is_enabled': True, - 'name': 'Wever Apartments -', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '495', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Whetzell and Maymon Antiques Sales, Id - 495', - 'display_name': 'Whetzell and Maymon Antiques Sales', - 'id': 280727, - 'is_enabled': True, - 'name': 'Whetzell and Maymon Antiques Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '729', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Whittier Hardware -, Id - 729', - 'display_name': 'Whittier Hardware -', - 'id': 280728, - 'is_enabled': True, - 'name': 'Whittier Hardware -', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1282', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Whole Oats Markets, Id - 1282', - 'display_name': 'Whole Oats Markets', - 'id': 280729, - 'is_enabled': True, - 'name': 'Whole Oats Markets', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '674', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wickenhauser Hardware Management, Id - 674', - 'display_name': 'Wickenhauser Hardware Management', - 'id': 280730, - 'is_enabled': True, - 'name': 'Wickenhauser Hardware Management', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '452', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wicklund Leasing Corporation, Id - 452', - 'display_name': 'Wicklund Leasing Corporation', - 'id': 280731, - 'is_enabled': True, - 'name': 'Wicklund Leasing Corporation', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '425', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wiesel Construction Dynamics, Id - 425', - 'display_name': 'Wiesel Construction Dynamics', - 'id': 280732, - 'is_enabled': True, - 'name': 'Wiesel Construction Dynamics', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1390', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wiggles Inc., Id - 1390', - 'display_name': 'Wiggles Inc.', - 'id': 280733, - 'is_enabled': True, - 'name': 'Wiggles Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '521', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wilkey Markets Group, Id - 521', - 'display_name': 'Wilkey Markets Group', - 'id': 280734, - 'is_enabled': True, - 'name': 'Wilkey Markets Group', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1066', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Williams Electronics and Communications, Id - 1066', - 'display_name': 'Williams Electronics and Communications', - 'id': 280735, - 'is_enabled': True, - 'name': 'Williams Electronics and Communications', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '93', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Williams Wireless World, Id - 93', - 'display_name': 'Williams Wireless World', - 'id': 280736, - 'is_enabled': True, - 'name': 'Williams Wireless World', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '876', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': "Project - Will's Leather Co., Id - 876", - 'display_name': "Will's Leather Co.", - 'id': 280737, - 'is_enabled': True, - 'name': "Will's Leather Co.", - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '532', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wilner Liquors, Id - 532', - 'display_name': 'Wilner Liquors', - 'id': 280738, - 'is_enabled': True, - 'name': 'Wilner Liquors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '193', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wilson Kaplan, Id - 193', - 'display_name': 'Wilson Kaplan', - 'id': 280739, - 'is_enabled': True, - 'name': 'Wilson Kaplan', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '716', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Windisch Title Corporation, Id - 716', - 'display_name': 'Windisch Title Corporation', - 'id': 280740, - 'is_enabled': True, - 'name': 'Windisch Title Corporation', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '625', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Witten Antiques Services, Id - 625', - 'display_name': 'Witten Antiques Services', - 'id': 280741, - 'is_enabled': True, - 'name': 'Witten Antiques Services', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '441', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wolfenden Markets Holding Corp., Id - 441', - 'display_name': 'Wolfenden Markets Holding Corp.', - 'id': 280742, - 'is_enabled': True, - 'name': 'Wolfenden Markets Holding Corp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '641', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wollan Software Rentals, Id - 641', - 'display_name': 'Wollan Software Rentals', - 'id': 280743, - 'is_enabled': True, - 'name': 'Wollan Software Rentals', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1203', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wood-Mizer, Id - 1203', - 'display_name': 'Wood-Mizer', - 'id': 280744, - 'is_enabled': True, - 'name': 'Wood-Mizer', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '198', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Woods Publishing Co., Id - 198', - 'display_name': 'Woods Publishing Co.', - 'id': 280745, - 'is_enabled': True, - 'name': 'Woods Publishing Co.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1045', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wood Wonders Funiture, Id - 1045', - 'display_name': 'Wood Wonders Funiture', - 'id': 280746, - 'is_enabled': True, - 'name': 'Wood Wonders Funiture', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '645', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Woon Hardware Networking, Id - 645', - 'display_name': 'Woon Hardware Networking', - 'id': 280747, - 'is_enabled': True, - 'name': 'Woon Hardware Networking', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '549', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Wraight Software and Associates, Id - 549', - 'display_name': 'Wraight Software and Associates', - 'id': 280748, - 'is_enabled': True, - 'name': 'Wraight Software and Associates', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1166', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - X Eye Corp, Id - 1166', - 'display_name': 'X Eye Corp', - 'id': 280749, - 'is_enabled': True, - 'name': 'X Eye Corp', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '536', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Yahl Markets Incorporated, Id - 536', - 'display_name': 'Yahl Markets Incorporated', - 'id': 280750, - 'is_enabled': True, - 'name': 'Yahl Markets Incorporated', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '850', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Yanity Apartments and Associates, Id - 850', - 'display_name': 'Yanity Apartments and Associates', - 'id': 280751, - 'is_enabled': True, - 'name': 'Yanity Apartments and Associates', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '440', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Yarnell Catering Holding Corp., Id - 440', - 'display_name': 'Yarnell Catering Holding Corp.', - 'id': 280752, - 'is_enabled': True, - 'name': 'Yarnell Catering Holding Corp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '481', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Yockey Markets Inc., Id - 481', - 'display_name': 'Yockey Markets Inc.', - 'id': 280753, - 'is_enabled': True, - 'name': 'Yockey Markets Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '886', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Yong Yi, Id - 886', - 'display_name': 'Yong Yi', - 'id': 280754, - 'is_enabled': True, - 'name': 'Yong Yi', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '984', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Y-Tec Manufacturing, Id - 984', - 'display_name': 'Y-Tec Manufacturing', - 'id': 280755, - 'is_enabled': True, - 'name': 'Y-Tec Manufacturing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '692', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Yucca Valley Camping, Id - 692', - 'display_name': 'Yucca Valley Camping', - 'id': 280756, - 'is_enabled': True, - 'name': 'Yucca Valley Camping', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '319', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Yucca Valley Title Agency, Id - 319', - 'display_name': 'Yucca Valley Title Agency', - 'id': 280757, - 'is_enabled': True, - 'name': 'Yucca Valley Title Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '743', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Zearfoss Windows Group, Id - 743', - 'display_name': 'Zearfoss Windows Group', - 'id': 280758, - 'is_enabled': True, - 'name': 'Zearfoss Windows Group', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '500', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Zechiel _ Management, Id - 500', - 'display_name': 'Zechiel _ Management', - 'id': 280759, - 'is_enabled': True, - 'name': 'Zechiel _ Management', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '354', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Zombro Telecom Leasing, Id - 354', - 'display_name': 'Zombro Telecom Leasing', - 'id': 280760, - 'is_enabled': True, - 'name': 'Zombro Telecom Leasing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '413', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Zucca Electric Agency, Id - 413', - 'display_name': 'Zucca Electric Agency', - 'id': 280761, - 'is_enabled': True, - 'name': 'Zucca Electric Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '594', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Zucconi Telecom Sales, Id - 594', - 'display_name': 'Zucconi Telecom Sales', - 'id': 280762, - 'is_enabled': True, - 'name': 'Zucconi Telecom Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '449', - 'created_at': '2021-08-11T08:15:31.577584+00:00', - 'description': 'Project - Zurasky Markets Dynamics, Id - 449', - 'display_name': 'Zurasky Markets Dynamics', - 'id': 280763, - 'is_enabled': True, - 'name': 'Zurasky Markets Dynamics', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '568', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Russell Telecom, Id - 568', - 'display_name': 'Russell Telecom', - 'id': 280484, - 'is_enabled': True, - 'name': 'Russell Telecom', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1125', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Russ Mygrant, Id - 1125', - 'display_name': 'Russ Mygrant', - 'id': 280485, - 'is_enabled': True, - 'name': 'Russ Mygrant', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '392', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Ruts Construction Holding Corp., Id - 392', - 'display_name': 'Ruts Construction Holding Corp.', - 'id': 280486, - 'is_enabled': True, - 'name': 'Ruts Construction Holding Corp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '326', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Saenger _ Inc., Id - 326', - 'display_name': 'Saenger _ Inc.', - 'id': 280487, - 'is_enabled': True, - 'name': 'Saenger _ Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '633', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Salisbury Attorneys Group, Id - 633', - 'display_name': 'Salisbury Attorneys Group', - 'id': 280488, - 'is_enabled': True, - 'name': 'Salisbury Attorneys Group', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '187', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sally Ward, Id - 187', - 'display_name': 'Sally Ward', - 'id': 280489, - 'is_enabled': True, - 'name': 'Sally Ward', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1217', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Samantha Walker, Id - 1217', - 'display_name': 'Samantha Walker', - 'id': 280490, - 'is_enabled': True, - 'name': 'Samantha Walker', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1369', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sam Brown, Id - 1369', - 'display_name': 'Sam Brown', - 'id': 280491, - 'is_enabled': True, - 'name': 'Sam Brown', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '556', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - San Angelo Automotive Rentals, Id - 556', - 'display_name': 'San Angelo Automotive Rentals', - 'id': 280492, - 'is_enabled': True, - 'name': 'San Angelo Automotive Rentals', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '444', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - San Diego Plumbing Distributors, Id - 444', - 'display_name': 'San Diego Plumbing Distributors', - 'id': 280493, - 'is_enabled': True, - 'name': 'San Diego Plumbing Distributors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '728', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - San Diego Windows Agency, Id - 728', - 'display_name': 'San Diego Windows Agency', - 'id': 280494, - 'is_enabled': True, - 'name': 'San Diego Windows Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1236', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sandoval Products Inc, Id - 1236', - 'display_name': 'Sandoval Products Inc', - 'id': 280495, - 'is_enabled': True, - 'name': 'Sandoval Products Inc', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '88', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sandra Burns, Id - 88', - 'display_name': 'Sandra Burns', - 'id': 280496, - 'is_enabled': True, - 'name': 'Sandra Burns', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '644', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sandwich Antiques Services, Id - 644', - 'display_name': 'Sandwich Antiques Services', - 'id': 280497, - 'is_enabled': True, - 'name': 'Sandwich Antiques Services', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '366', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sandwich Telecom Sales, Id - 366', - 'display_name': 'Sandwich Telecom Sales', - 'id': 280498, - 'is_enabled': True, - 'name': 'Sandwich Telecom Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '153', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sandy King, Id - 153', - 'display_name': 'Sandy King', - 'id': 280499, - 'is_enabled': True, - 'name': 'Sandy King', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '882', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sandy Whines, Id - 882', - 'display_name': 'Sandy Whines', - 'id': 280500, - 'is_enabled': True, - 'name': 'Sandy Whines', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1036', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - San Francisco Design Center, Id - 1036', - 'display_name': 'San Francisco Design Center', - 'id': 280501, - 'is_enabled': True, - 'name': 'San Francisco Design Center', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '587', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - San Luis Obispo Construction Inc., Id - 587', - 'display_name': 'San Luis Obispo Construction Inc.', - 'id': 280502, - 'is_enabled': True, - 'name': 'San Luis Obispo Construction Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '683', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Santa Ana Telecom Management, Id - 683', - 'display_name': 'Santa Ana Telecom Management', - 'id': 280503, - 'is_enabled': True, - 'name': 'Santa Ana Telecom Management', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '255', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Santa Fe Springs Construction Corporation, Id - 255', - 'display_name': 'Santa Fe Springs Construction Corporation', - 'id': 280504, - 'is_enabled': True, - 'name': 'Santa Fe Springs Construction Corporation', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '713', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Santa Maria Lumber Inc., Id - 713', - 'display_name': 'Santa Maria Lumber Inc.', - 'id': 280505, - 'is_enabled': True, - 'name': 'Santa Maria Lumber Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '427', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Santa Monica Attorneys Manufacturing, Id - 427', - 'display_name': 'Santa Monica Attorneys Manufacturing', - 'id': 280506, - 'is_enabled': True, - 'name': 'Santa Monica Attorneys Manufacturing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '794', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sarasota Software Rentals, Id - 794', - 'display_name': 'Sarasota Software Rentals', - 'id': 280507, - 'is_enabled': True, - 'name': 'Sarasota Software Rentals', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '412', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sarchett Antiques Networking, Id - 412', - 'display_name': 'Sarchett Antiques Networking', - 'id': 280508, - 'is_enabled': True, - 'name': 'Sarchett Antiques Networking', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '612', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sawatzky Catering Rentals, Id - 612', - 'display_name': 'Sawatzky Catering Rentals', - 'id': 280509, - 'is_enabled': True, - 'name': 'Sawatzky Catering Rentals', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '744', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sax Lumber Co., Id - 744', - 'display_name': 'Sax Lumber Co.', - 'id': 280510, - 'is_enabled': True, - 'name': 'Sax Lumber Co.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '686', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Scalley Construction Inc., Id - 686', - 'display_name': 'Scalley Construction Inc.', - 'id': 280511, - 'is_enabled': True, - 'name': 'Scalley Construction Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '514', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Schlicker Metal Fabricators Fabricators, Id - 514', - 'display_name': 'Schlicker Metal Fabricators Fabricators', - 'id': 280512, - 'is_enabled': True, - 'name': 'Schlicker Metal Fabricators Fabricators', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '445', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Schmauder Markets Corporation, Id - 445', - 'display_name': 'Schmauder Markets Corporation', - 'id': 280513, - 'is_enabled': True, - 'name': 'Schmauder Markets Corporation', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '908', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Schmidt Sporting Goods, Id - 908', - 'display_name': 'Schmidt Sporting Goods', - 'id': 280514, - 'is_enabled': True, - 'name': 'Schmidt Sporting Goods', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '830', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Schneck Automotive Group, Id - 830', - 'display_name': 'Schneck Automotive Group', - 'id': 280515, - 'is_enabled': True, - 'name': 'Schneck Automotive Group', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '426', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Scholl Catering -, Id - 426', - 'display_name': 'Scholl Catering -', - 'id': 280516, - 'is_enabled': True, - 'name': 'Scholl Catering -', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '334', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Schreck Hardware Systems, Id - 334', - 'display_name': 'Schreck Hardware Systems', - 'id': 280517, - 'is_enabled': True, - 'name': 'Schreck Hardware Systems', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '836', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Schwarzenbach Attorneys Systems, Id - 836', - 'display_name': 'Schwarzenbach Attorneys Systems', - 'id': 280518, - 'is_enabled': True, - 'name': 'Schwarzenbach Attorneys Systems', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '511', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Scottsbluff Lumber -, Id - 511', - 'display_name': 'Scottsbluff Lumber -', - 'id': 280519, - 'is_enabled': True, - 'name': 'Scottsbluff Lumber -', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '684', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Scottsbluff Plumbing Rentals, Id - 684', - 'display_name': 'Scottsbluff Plumbing Rentals', - 'id': 280520, - 'is_enabled': True, - 'name': 'Scottsbluff Plumbing Rentals', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '347', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Scullion Telecom Agency, Id - 347', - 'display_name': 'Scullion Telecom Agency', - 'id': 280521, - 'is_enabled': True, - 'name': 'Scullion Telecom Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '143', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sebastian Inc., Id - 143', - 'display_name': 'Sebastian Inc.', - 'id': 280522, - 'is_enabled': True, - 'name': 'Sebastian Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '835', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sebek Builders Distributors, Id - 835', - 'display_name': 'Sebek Builders Distributors', - 'id': 280523, - 'is_enabled': True, - 'name': 'Sebek Builders Distributors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1225', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sedlak Inc, Id - 1225', - 'display_name': 'Sedlak Inc', - 'id': 280524, - 'is_enabled': True, - 'name': 'Sedlak Inc', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '697', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Seecharan and Horten Hardware Manufacturing, Id - 697', - 'display_name': 'Seecharan and Horten Hardware Manufacturing', - 'id': 280525, - 'is_enabled': True, - 'name': 'Seecharan and Horten Hardware Manufacturing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '141', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Seena Rose, Id - 141', - 'display_name': 'Seena Rose', - 'id': 280526, - 'is_enabled': True, - 'name': 'Seena Rose', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '726', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Seilhymer Antiques Distributors, Id - 726', - 'display_name': 'Seilhymer Antiques Distributors', - 'id': 280527, - 'is_enabled': True, - 'name': 'Seilhymer Antiques Distributors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '628', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Selders Distributors, Id - 628', - 'display_name': 'Selders Distributors', - 'id': 280528, - 'is_enabled': True, - 'name': 'Selders Distributors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '410', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Selia Metal Fabricators Company, Id - 410', - 'display_name': 'Selia Metal Fabricators Company', - 'id': 280529, - 'is_enabled': True, - 'name': 'Selia Metal Fabricators Company', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '554', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Seney Windows Agency, Id - 554', - 'display_name': 'Seney Windows Agency', - 'id': 280530, - 'is_enabled': True, - 'name': 'Seney Windows Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '856', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sequim Automotive Systems, Id - 856', - 'display_name': 'Sequim Automotive Systems', - 'id': 280531, - 'is_enabled': True, - 'name': 'Sequim Automotive Systems', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '457', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Seyler Title Distributors, Id - 457', - 'display_name': 'Seyler Title Distributors', - 'id': 280532, - 'is_enabled': True, - 'name': 'Seyler Title Distributors', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '860', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Shackelton Hospital Sales, Id - 860', - 'display_name': 'Shackelton Hospital Sales', - 'id': 280533, - 'is_enabled': True, - 'name': 'Shackelton Hospital Sales', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '204', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sharon Stone, Id - 204', - 'display_name': 'Sharon Stone', - 'id': 280534, - 'is_enabled': True, - 'name': 'Sharon Stone', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '750', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sheinbein Construction Fabricators, Id - 750', - 'display_name': 'Sheinbein Construction Fabricators', - 'id': 280535, - 'is_enabled': True, - 'name': 'Sheinbein Construction Fabricators', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '266', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Shininger Lumber Holding Corp., Id - 266', - 'display_name': 'Shininger Lumber Holding Corp.', - 'id': 280536, - 'is_enabled': True, - 'name': 'Shininger Lumber Holding Corp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '313', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Shutter Title Services, Id - 313', - 'display_name': 'Shutter Title Services', - 'id': 280537, - 'is_enabled': True, - 'name': 'Shutter Title Services', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '523', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Siddiq Software -, Id - 523', - 'display_name': 'Siddiq Software -', - 'id': 280538, - 'is_enabled': True, - 'name': 'Siddiq Software -', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1198', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Simatry, Id - 1198', - 'display_name': 'Simatry', - 'id': 280539, - 'is_enabled': True, - 'name': 'Simatry', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '455', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Simi Valley Telecom Dynamics, Id - 455', - 'display_name': 'Simi Valley Telecom Dynamics', - 'id': 280540, - 'is_enabled': True, - 'name': 'Simi Valley Telecom Dynamics', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '547', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sindt Electric, Id - 547', - 'display_name': 'Sindt Electric', - 'id': 280541, - 'is_enabled': True, - 'name': 'Sindt Electric', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '732', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Skibo Construction Dynamics, Id - 732', - 'display_name': 'Skibo Construction Dynamics', - 'id': 280542, - 'is_enabled': True, - 'name': 'Skibo Construction Dynamics', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '476', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Slankard Automotive, Id - 476', - 'display_name': 'Slankard Automotive', - 'id': 280543, - 'is_enabled': True, - 'name': 'Slankard Automotive', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '504', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Slatter Metal Fabricators Inc., Id - 504', - 'display_name': 'Slatter Metal Fabricators Inc.', - 'id': 280544, - 'is_enabled': True, - 'name': 'Slatter Metal Fabricators Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1176', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - SlingShot Communications, Id - 1176', - 'display_name': 'SlingShot Communications', - 'id': 280545, - 'is_enabled': True, - 'name': 'SlingShot Communications', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '717', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sloman and Zeccardi Builders Agency, Id - 717', - 'display_name': 'Sloman and Zeccardi Builders Agency', - 'id': 280546, - 'is_enabled': True, - 'name': 'Sloman and Zeccardi Builders Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '264', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Smelley _ Manufacturing, Id - 264', - 'display_name': 'Smelley _ Manufacturing', - 'id': 280547, - 'is_enabled': True, - 'name': 'Smelley _ Manufacturing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1290', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Smith East, Id - 1290', - 'display_name': 'Smith East', - 'id': 280548, - 'is_enabled': True, - 'name': 'Smith East', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1049', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Smith Inc., Id - 1049', - 'display_name': 'Smith Inc.', - 'id': 280549, - 'is_enabled': True, - 'name': 'Smith Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1065', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Smith Photographic Equipment, Id - 1065', - 'display_name': 'Smith Photographic Equipment', - 'id': 280550, - 'is_enabled': True, - 'name': 'Smith Photographic Equipment', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1429', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Smith West, Id - 1429', - 'display_name': 'Smith West', - 'id': 280551, - 'is_enabled': True, - 'name': 'Smith West', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '808', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Snode and Draper Leasing Rentals, Id - 808', - 'display_name': 'Snode and Draper Leasing Rentals', - 'id': 280552, - 'is_enabled': True, - 'name': 'Snode and Draper Leasing Rentals', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '363', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Soares Builders Inc., Id - 363', - 'display_name': 'Soares Builders Inc.', - 'id': 280553, - 'is_enabled': True, - 'name': 'Soares Builders Inc.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1210', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Solidd Group Ltd, Id - 1210', - 'display_name': 'Solidd Group Ltd', - 'id': 280554, - 'is_enabled': True, - 'name': 'Solidd Group Ltd', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1168', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Soltrus, Id - 1168', - 'display_name': 'Soltrus', - 'id': 280555, - 'is_enabled': True, - 'name': 'Soltrus', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '719', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Solymani Electric Leasing, Id - 719', - 'display_name': 'Solymani Electric Leasing', - 'id': 280556, - 'is_enabled': True, - 'name': 'Solymani Electric Leasing', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '243', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sossong Plumbing Holding Corp., Id - 243', - 'display_name': 'Sossong Plumbing Holding Corp.', - 'id': 280557, - 'is_enabled': True, - 'name': 'Sossong Plumbing Holding Corp.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1427', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - South East, Id - 1427', - 'display_name': 'South East', - 'id': 280558, - 'is_enabled': True, - 'name': 'South East', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1227', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Spany ltd, Id - 1227', - 'display_name': 'Spany ltd', - 'id': 280559, - 'is_enabled': True, - 'name': 'Spany ltd', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '954', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Spectrum Eye, Id - 954', - 'display_name': 'Spectrum Eye', - 'id': 280560, - 'is_enabled': True, - 'name': 'Spectrum Eye', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1003', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sports Authority, Id - 1003', - 'display_name': 'Sports Authority', - 'id': 280561, - 'is_enabled': True, - 'name': 'Sports Authority', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1004', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Sport Station, Id - 1004', - 'display_name': 'Sport Station', - 'id': 280562, - 'is_enabled': True, - 'name': 'Sport Station', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '280', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Spurgin Telecom Agency, Id - 280', - 'display_name': 'Spurgin Telecom Agency', - 'id': 280563, - 'is_enabled': True, - 'name': 'Spurgin Telecom Agency', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1262', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - SS&C, Id - 1262', - 'display_name': 'SS&C', - 'id': 280564, - 'is_enabled': True, - 'name': 'SS&C', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '756', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Stai Publishing -, Id - 756', - 'display_name': 'Stai Publishing -', - 'id': 280565, - 'is_enabled': True, - 'name': 'Stai Publishing -', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '727', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Stampe Leasing and Associates, Id - 727', - 'display_name': 'Stampe Leasing and Associates', - 'id': 280566, - 'is_enabled': True, - 'name': 'Stampe Leasing and Associates', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1276', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Stantec Inc, Id - 1276', - 'display_name': 'Stantec Inc', - 'id': 280567, - 'is_enabled': True, - 'name': 'Stantec Inc', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1103', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Star Structural, Id - 1103', - 'display_name': 'Star Structural', - 'id': 280568, - 'is_enabled': True, - 'name': 'Star Structural', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '1141', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Steacy Tech Inc, Id - 1141', - 'display_name': 'Steacy Tech Inc', - 'id': 280569, - 'is_enabled': True, - 'name': 'Steacy Tech Inc', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '581', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Steep and Cloud Liquors Co., Id - 581', - 'display_name': 'Steep and Cloud Liquors Co.', - 'id': 280570, - 'is_enabled': True, - 'name': 'Steep and Cloud Liquors Co.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '613', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Steffensmeier Markets Co., Id - 613', - 'display_name': 'Steffensmeier Markets Co.', - 'id': 280571, - 'is_enabled': True, - 'name': 'Steffensmeier Markets Co.', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '846', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Steinberg Electric Networking, Id - 846', - 'display_name': 'Steinberg Electric Networking', - 'id': 280572, - 'is_enabled': True, - 'name': 'Steinberg Electric Networking', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - { - 'approver_user_ids': [None, None], - 'approver_users': [], - 'code': '160', - 'created_at': '2021-08-11T08:15:27.838114+00:00', - 'description': 'Project - Stella Sebastian Inc, Id - 160', - 'display_name': 'Stella Sebastian Inc', - 'id': 280573, - 'is_enabled': True, - 'name': 'Stella Sebastian Inc', - 'org_id': 'orNoatdUnm1w', - 'restricted_spender_user_ids': None, - 'sub_project': None, - 'updated_at': '2021-09-29T10:46:33.242256+00:00', - }, - ]}], - 'get_all_corporate_cards': # !/usr/bin/python - # -*- coding: utf-8 -*- - [{'data': [ - { - 'assignor_user_id': 'usqywo0f3nBY', - 'bank_name': 'Bank of America', - 'card_number': '8084', - 'cardholder_name': None, - 'code': None, - 'created_at': '2020-09-02T08:48:43.633229+00:00', - 'data_feed_source': None, - 'id': 'bacczhYCLDUZ7I', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2021-09-07T08:14:53.668178+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:48:44.452298+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:48:48.452274+00:00', - 'user_id': 'usqywo0f3nBY', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'us6bdTBqx1iZ', - 'bank_name': 'Bank of America', - 'card_number': '1319', - 'cardholder_name': None, - 'code': None, - 'created_at': '2020-09-02T08:48:42.230365+00:00', - 'data_feed_source': None, - 'id': 'baccXe1EZcZAc9', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2021-01-28T06:16:14.906883+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:48:43.590156+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:48:47.590135+00:00', - 'user_id': 'us6bdTBqx1iZ', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': None, - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-13278', - 'cardholder_name': "Dr. Ross Eustace Geller's account", - 'code': None, - 'created_at': '2020-09-02T08:44:57.282773+00:00', - 'data_feed_source': None, - 'id': 'baccfQehf3Ww4G', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': None, - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:05.948639+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:09.948597+00:00', - 'user_id': None, - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-17561', - 'cardholder_name': "Dr. Ross Eustace Geller's account", - 'code': None, - 'created_at': '2020-09-02T08:44:57.230783+00:00', - 'data_feed_source': None, - 'id': 'baccF4AdQCIzUI', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:11.624070+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:05.106199+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:09.106164+00:00', - 'user_id': 'usuycevSQL2z', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-23341', - 'cardholder_name': "Joseph Francis Tribbiani, Jr's account", - 'code': None, - 'created_at': '2020-09-02T08:44:57.170993+00:00', - 'data_feed_source': None, - 'id': 'baccUBc4t8ZPjS', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:09.530540+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:04.609505+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:08.609471+00:00', - 'user_id': 'us5LYztuG20F', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-37464', - 'cardholder_name': "Monica E. Geller-Bing's account", - 'code': None, - 'created_at': '2020-09-02T08:44:57.125184+00:00', - 'data_feed_source': None, - 'id': 'bacc0F4WmHp0sG', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:08.054735+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:04.155563+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:08.155532+00:00', - 'user_id': 'usiUCyQYp2N2', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-83040', - 'cardholder_name': "Chandler Muriel Bing's account", - 'code': None, - 'created_at': '2020-09-02T08:44:57.071304+00:00', - 'data_feed_source': None, - 'id': 'bacckVW15GyGZu', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:07.699559+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:01.731666+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:05.731606+00:00', - 'user_id': 'us6bdTBqx1iZ', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-65015', - 'cardholder_name': "Chandler Muriel Bing's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.992437+00:00', - 'data_feed_source': None, - 'id': 'baccCNeYclm8kp', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:09.879628+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:01.335457+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:05.335432+00:00', - 'user_id': 'us49CBDOfTLC', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-73856', - 'cardholder_name': "Phoebe Buffay-Hannigan's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.918992+00:00', - 'data_feed_source': None, - 'id': 'baccx7FvID8jmp', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:09.197625+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:00.972093+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:04.972067+00:00', - 'user_id': 'usZU7tBgtPVH', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'us6bdTBqx1iZ', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-30555', - 'cardholder_name': "Joseph Francis Tribbiani, Jr's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.862601+00:00', - 'data_feed_source': None, - 'id': 'bacckCqZ39S95k', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2021-01-28T06:16:23.333848+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:45:00.560120+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:04.560091+00:00', - 'user_id': 'us6bdTBqx1iZ', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': None, - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-16866', - 'cardholder_name': "Dr. Ross Eustace Geller's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.802319+00:00', - 'data_feed_source': None, - 'id': 'bacchbqULPV9q4', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': None, - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:44:59.748841+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:03.748818+00:00', - 'user_id': None, - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-85200', - 'cardholder_name': "Phoebe Buffay-Hannigan's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.738053+00:00', - 'data_feed_source': None, - 'id': 'baccFn9Kg0N3zj', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:08.845454+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:44:59.327845+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:03.327820+00:00', - 'user_id': 'usn71kjcQibs', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-34654', - 'cardholder_name': "Monica E. Geller-Bing's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.690927+00:00', - 'data_feed_source': None, - 'id': 'bacco5QaXfBo4E', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:12.388778+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:44:58.925901+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:02.925863+00:00', - 'user_id': 'use1hqDbsybg', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-37172', - 'cardholder_name': "Chandler Muriel Bing's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.638414+00:00', - 'data_feed_source': None, - 'id': 'bacc6SEFz8hEMc', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:12.046070+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:44:58.101066+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:02.101001+00:00', - 'user_id': 'ushzyZgwhV7M', - 'verification_status': 'NOT_VERIFIED', - }, - { - 'assignor_user_id': 'usJunSVNaFGE', - 'bank_name': 'American Express', - 'card_number': 'Sample-Bank-xxxxxx-18104', - 'cardholder_name': "Phoebe Buffay-Hannigan's account", - 'code': None, - 'created_at': '2020-09-02T08:44:56.582614+00:00', - 'data_feed_source': None, - 'id': 'baccFKdJjI55bo', - 'is_dummy': False, - 'is_visa_enrolled': False, - 'last_assigned_at': '2020-09-02T08:45:08.507674+00:00', - 'last_ready_for_verification_at': None, - 'last_synced_at': '2020-09-02T08:44:57.714553+00:00', - 'last_verification_attempt_at': None, - 'last_verified_at': None, - 'org_id': 'orNoatdUnm1w', - 'updated_at': '2020-09-02T08:45:01.714528+00:00', - 'user_id': 'usenjNn1QU1A', - 'verification_status': 'NOT_VERIFIED', - }, - ]}], - 'get_all_expense_fields': # !/usr/bin/python - # -*- coding: utf-8 -*- - [{'data': [ - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - 164748, - 164755, - 164756, - 164757, - 164759, - 192359, - 192360, - 192361, - 192362, - 192456, - 192457, - 192458, - 192459, - 207983, - 207984, - 207985, - 207986, - 207987, - 207988, - 207989, - 207990, - 207991, - 207992, - 207993, - 207994, - 207995, - 207996, - 207997, - 207998, - 207999, - 208000, - 208001, - 208002, - 208003, - 208004, - 208005, - 208006, - 208007, - 208008, - 208009, - 208010, - 208011, - 208012, - 208013, - 208014, - 208015, - 208016, - 208017, - 208018, - 208019, - 208020, - 208021, - 208022, - 208023, - 208024, - 208025, - 208026, - 208027, - 208028, - 208029, - 208030, - 208031, - 208032, - 208033, - 208034, - 208035, - 208036, - 208037, - 208038, - 208039, - 208040, - 208041, - 208042, - 208043, - 208044, - 208045, - 208046, - 208047, - 208048, - 208049, - 208050, - 208051, - 208052, - 208053, - 208054, - 208055, - 208056, - 208057, - 208058, - 208059, - 208060, - 208061, - 208062, - 208063, - 208064, - 208065, - 208066, - 208067, - 208068, - 208069, - 208070, - 208071, - 208072, - 208073, - 208074, - 208075, - 208076, - 208077, - 208078, - 208079, - 208080, - 208081, - 208082, - 208083, - 208084, - 208085, - 208086, - 208087, - 208088, - 208089, - 208090, - 208091, - 208092, - 208093, - 208094, - 208095, - 208096, - 208097, - 208098, - 208099, - 208100, - 208101, - 208102, - 208103, - 208104, - 208105, - 208106, - 208107, - 208108, - 208109, - 208110, - 208111, - 208112, - 208113, - 208114, - 208115, - 208116, - 208117, - 208118, - 208119, - 208120, - 208121, - 208122, - 208123, - 208124, - 208125, - 208126, - 208127, - 208128, - 208129, - 208130, - 208131, - 208132, - 208133, - 208134, - 208135, - 208136, - ], - 'code': None, - 'column_name': 'text_column6', - 'created_at': '2022-05-09T10:49:53.722744+00:00', - 'default_value': None, - 'field_name': 'New Custom Field', - 'id': 205597, - 'is_custom': True, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [ - 'Admin', - 'Sales', - 'Service', - 'Marketing', - 'Production', - 'Machine Shop', - 'Assembly', - 'Inspection', - 'Fabrication', - 'Engineering', - 'Product', - 'Fyle', - ], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select New Custom Field', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [], - 'code': None, - 'column_name': 'category_id', - 'created_at': '2022-03-08T11:37:18.493620+00:00', - 'default_value': None, - 'field_name': 'Category', - 'id': 203016, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Category', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [], - 'code': None, - 'column_name': 'tax_group_id', - 'created_at': '2021-08-17T04:48:57.792695+00:00', - 'default_value': None, - 'field_name': 'Tax Group', - 'id': 193471, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Tax Group', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [], - 'code': None, - 'column_name': 'is_billable', - 'created_at': '2021-07-29T11:05:38.811564+00:00', - 'default_value': False, - 'field_name': 'Billable', - 'id': 188951, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Billable', - 'seq': 1, - 'type': 'BOOLEAN', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [], - 'code': None, - 'column_name': 'project_id', - 'created_at': '2021-07-28T08:48:55.152191+00:00', - 'default_value': None, - 'field_name': 'Project', - 'id': 184653, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Project', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - ], - 'code': None, - 'column_name': 'text_column5', - 'created_at': '2021-06-18T09:26:49.063610+00:00', - 'default_value': None, - 'field_name': 'Operating System', - 'id': 174120, - 'is_custom': True, - 'is_enabled': False, - 'is_mandatory': False, - 'options': ['MacOS', 'IOS', 'Linux', 'Andriod'], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Operating System', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - ], - 'code': None, - 'column_name': 'text_column4', - 'created_at': '2021-06-18T09:13:45.794161+00:00', - 'default_value': None, - 'field_name': 'Team', - 'id': 174119, - 'is_custom': True, - 'is_enabled': False, - 'is_mandatory': False, - 'options': [ - 'Small Business', - 'Midsize Business', - 'Enterprise', - 'Service Line 2', - 'Service Line 1', - 'Service Line 3', - ], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Team', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114956], - 'code': None, - 'column_name': 'travel_classes[0]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Travel Class', - 'id': 16076, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Enter class of travel', - 'seq': 2, - 'type': 'TEXT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - 164748, - 164755, - 164757, - 192359, - 192360, - 192361, - 192362, - 192456, - 192457, - 192458, - 192459, - 207983, - 207984, - 207985, - 207986, - 207987, - 207988, - 207989, - 207990, - 207991, - 207992, - 207993, - 207994, - 207995, - 207996, - 207997, - 207998, - 207999, - 208000, - 208001, - 208002, - 208003, - 208004, - 208005, - 208006, - 208007, - 208008, - 208009, - 208010, - 208011, - 208012, - 208013, - 208014, - 208015, - 208016, - 208017, - 208018, - 208019, - 208020, - 208021, - 208022, - 208023, - 208024, - 208025, - 208026, - 208027, - 208028, - 208029, - 208030, - 208031, - 208032, - 208033, - 208034, - 208035, - 208036, - 208037, - 208038, - 208039, - 208040, - 208041, - 208042, - 208043, - 208044, - 208045, - 208046, - 208047, - 208048, - 208049, - 208050, - 208051, - 208052, - 208053, - 208054, - 208055, - 208056, - 208057, - 208058, - 208059, - 208060, - 208061, - 208062, - 208063, - 208064, - 208065, - 208066, - 208067, - 208068, - 208069, - 208070, - 208071, - 208072, - 208073, - 208074, - 208075, - 208076, - 208077, - 208078, - 208079, - 208080, - 208081, - 208082, - 208083, - 208084, - 208085, - 208086, - 208087, - 208088, - 208089, - 208090, - 208091, - 208092, - 208093, - 208094, - 208095, - 208096, - 208097, - 208098, - 208099, - 208100, - 208101, - 208102, - 208103, - 208104, - 208105, - 208106, - 208107, - 208108, - 208109, - 208110, - 208111, - 208112, - 208113, - 208114, - 208115, - 208116, - 208117, - 208118, - 208119, - 208120, - 208121, - 208122, - 208123, - 208124, - 208125, - 208126, - 208127, - 208128, - 208129, - 208130, - 208131, - 208132, - 208133, - 208134, - 208135, - 208136, - ], - 'code': None, - 'column_name': 'cost_center_id', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Cost Center', - 'id': 16077, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Cost Center', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114953], - 'code': None, - 'column_name': 'distance', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Distance', - 'id': 16078, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': True, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Enter Distance', - 'seq': 1, - 'type': 'NUMBER', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114958], - 'code': None, - 'column_name': 'distance', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Distance', - 'id': 16079, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Enter Distance', - 'seq': 2, - 'type': 'NUMBER', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114953], - 'code': None, - 'column_name': 'distance_unit', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': 'MILES', - 'field_name': 'Unit', - 'id': 16080, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': True, - 'options': ['KM', 'MILES'], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Unit', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114958], - 'code': None, - 'column_name': 'distance_unit', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': 'MILES', - 'field_name': 'Unit', - 'id': 16081, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': ['KM', 'MILES'], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Unit', - 'seq': 2, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114964], - 'code': None, - 'column_name': 'travel_classes[0]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Onward Travel Class', - 'id': 16082, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': ['BUSINESS', 'ECONOMY', 'FIRST_CLASS'], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select travel class', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114964], - 'code': None, - 'column_name': 'travel_classes[1]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Return Travel Class', - 'id': 16083, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': ['BUSINESS', 'ECONOMY', 'FIRST_CLASS'], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select travel class', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114960], - 'code': None, - 'column_name': 'started_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Check-in Date', - 'id': 16084, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 1, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114955], - 'code': None, - 'column_name': 'started_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'From', - 'id': 16085, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 2, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114946, 114956, 114964], - 'code': None, - 'column_name': 'started_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Onward Date', - 'id': 16086, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 3, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114946, 114956, 114964], - 'code': None, - 'column_name': 'locations[0]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'From', - 'id': 16087, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select a City', - 'seq': 1, - 'type': 'LOCATION', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114953], - 'code': None, - 'column_name': 'locations[0]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'From', - 'id': 16088, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Choose Location - Search for Place or Area', - 'seq': 2, - 'type': 'LOCATION', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114960], - 'code': None, - 'column_name': 'locations[0]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'City', - 'id': 16089, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select a City', - 'seq': 3, - 'type': 'LOCATION', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114953], - 'code': None, - 'column_name': 'locations[1]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'To', - 'id': 16090, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Choose Location - Search for Place or Area', - 'seq': 1, - 'type': 'LOCATION', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114946, 114956, 114964], - 'code': None, - 'column_name': 'locations[1]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'To', - 'id': 16091, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select a City', - 'seq': 2, - 'type': 'LOCATION', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114955], - 'code': None, - 'column_name': 'num_days', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'No. of Days', - 'id': 16092, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'No. of Days', - 'seq': 1, - 'type': 'NUMBER', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - 164748, - 164755, - 164757, - 192359, - 192360, - 192361, - 192362, - 192456, - 192457, - 192458, - 192459, - 207983, - 207984, - 207985, - 207986, - 207987, - 207988, - 207989, - 207990, - 207991, - 207992, - 207993, - 207994, - 207995, - 207996, - 207997, - 207998, - 207999, - 208000, - 208001, - 208002, - 208003, - 208004, - 208005, - 208006, - 208007, - 208008, - 208009, - 208010, - 208011, - 208012, - 208013, - 208014, - 208015, - 208016, - 208017, - 208018, - 208019, - 208020, - 208021, - 208022, - 208023, - 208024, - 208025, - 208026, - 208027, - 208028, - 208029, - 208030, - 208031, - 208032, - 208033, - 208034, - 208035, - 208036, - 208037, - 208038, - 208039, - 208040, - 208041, - 208042, - 208043, - 208044, - 208045, - 208046, - 208047, - 208048, - 208049, - 208050, - 208051, - 208052, - 208053, - 208054, - 208055, - 208056, - 208057, - 208058, - 208059, - 208060, - 208061, - 208062, - 208063, - 208064, - 208065, - 208066, - 208067, - 208068, - 208069, - 208070, - 208071, - 208072, - 208073, - 208074, - 208075, - 208076, - 208077, - 208078, - 208079, - 208080, - 208081, - 208082, - 208083, - 208084, - 208085, - 208086, - 208087, - 208088, - 208089, - 208090, - 208091, - 208092, - 208093, - 208094, - 208095, - 208096, - 208097, - 208098, - 208099, - 208100, - 208101, - 208102, - 208103, - 208104, - 208105, - 208106, - 208107, - 208108, - 208109, - 208110, - 208111, - 208112, - 208113, - 208114, - 208115, - 208116, - 208117, - 208118, - 208119, - 208120, - 208121, - 208122, - 208123, - 208124, - 208125, - 208126, - 208127, - 208128, - 208129, - 208130, - 208131, - 208132, - 208133, - 208134, - 208135, - 208136, - ], - 'code': None, - 'column_name': 'purpose', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Purpose', - 'id': 16093, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'E.g. Client Meeting', - 'seq': 1, - 'type': 'TEXT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - ], - 'code': None, - 'column_name': 'text_column1', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Custom Expense Field', - 'id': 16094, - 'is_custom': True, - 'is_enabled': False, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Updated By Bot', - 'seq': 1, - 'type': 'TEXT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - ], - 'code': None, - 'column_name': 'text_column2', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Quickbooks Class', - 'id': 16095, - 'is_custom': True, - 'is_enabled': False, - 'is_mandatory': False, - 'options': ['Class 1', 'Class 2', 'Class 3', 'This Class', - 'That Class'], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Quickbooks Class', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114953, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - ], - 'code': None, - 'column_name': 'text_column3', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Quickbooks Customer', - 'id': 16096, - 'is_custom': True, - 'is_enabled': False, - 'is_mandatory': False, - 'options': ['Customer 1', 'Customer 2', 'Customer 3'], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Updated By Bot', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114946, 114956, 114964], - 'code': None, - 'column_name': 'ended_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Return Date', - 'id': 16097, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 1, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114955], - 'code': None, - 'column_name': 'ended_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'To', - 'id': 16098, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 2, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114960], - 'code': None, - 'column_name': 'ended_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Check-out Date', - 'id': 16099, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 3, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114946], - 'code': None, - 'column_name': 'travel_classes[0]', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Travel class', - 'id': 16100, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Enter class of travel', - 'seq': 3, - 'type': 'TEXT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114945, - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114954, - 114955, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - 164748, - 164755, - 164757, - 192359, - 192360, - 192361, - 192362, - 192456, - 192457, - 192458, - 192459, - 207983, - 207984, - 207985, - 207986, - 207987, - 207988, - 207989, - 207990, - 207991, - 207992, - 207993, - 207994, - 207995, - 207996, - 207997, - 207998, - 207999, - 208000, - 208001, - 208002, - 208003, - 208004, - 208005, - 208006, - 208007, - 208008, - 208009, - 208010, - 208011, - 208012, - 208013, - 208014, - 208015, - 208016, - 208017, - 208018, - 208019, - 208020, - 208021, - 208022, - 208023, - 208024, - 208025, - 208026, - 208027, - 208028, - 208029, - 208030, - 208031, - 208032, - 208033, - 208034, - 208035, - 208036, - 208037, - 208038, - 208039, - 208040, - 208041, - 208042, - 208043, - 208044, - 208045, - 208046, - 208047, - 208048, - 208049, - 208050, - 208051, - 208052, - 208053, - 208054, - 208055, - 208056, - 208057, - 208058, - 208059, - 208060, - 208061, - 208062, - 208063, - 208064, - 208065, - 208066, - 208067, - 208068, - 208069, - 208070, - 208071, - 208072, - 208073, - 208074, - 208075, - 208076, - 208077, - 208078, - 208079, - 208080, - 208081, - 208082, - 208083, - 208084, - 208085, - 208086, - 208087, - 208088, - 208089, - 208090, - 208091, - 208092, - 208093, - 208094, - 208095, - 208096, - 208097, - 208098, - 208099, - 208100, - 208101, - 208102, - 208103, - 208104, - 208105, - 208106, - 208107, - 208108, - 208109, - 208110, - 208111, - 208112, - 208113, - 208114, - 208115, - 208116, - 208117, - 208118, - 208119, - 208120, - 208121, - 208122, - 208123, - 208124, - 208125, - 208126, - 208127, - 208128, - 208129, - 208130, - 208131, - 208132, - 208133, - 208134, - 208135, - 208136, - ], - 'code': None, - 'column_name': 'spent_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Date of Spend', - 'id': 16101, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': True, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 1, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [114953], - 'code': None, - 'column_name': 'spent_at', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': None, - 'field_name': 'Date of Travel', - 'id': 16102, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': True, - 'options': [], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'Select Date', - 'seq': 2, - 'type': 'DATE', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - { - 'category_ids': [ - 114946, - 114947, - 114948, - 114949, - 114950, - 114951, - 114952, - 114954, - 114956, - 114957, - 114958, - 114959, - 114960, - 114961, - 114962, - 114963, - 114964, - 114965, - 114966, - 114967, - 114968, - 114969, - 114970, - 118635, - 118636, - 118637, - 118638, - 118639, - 118640, - 118641, - 118642, - 118643, - 118644, - 118645, - 118646, - 118647, - 118648, - 118650, - 118651, - 118652, - 118653, - 118654, - 118655, - 118656, - 118657, - 118658, - 118659, - 118660, - 118661, - 118662, - 118663, - 118664, - 118665, - 118666, - 118667, - 118668, - 118669, - 118670, - 118671, - 118672, - 118673, - 118674, - 118675, - 118676, - 118677, - 118678, - 119372, - 119373, - 119374, - 119375, - 119376, - 119377, - 119378, - 119379, - 119380, - 119381, - 119382, - 119383, - 119384, - 119385, - 119386, - 119387, - 119388, - 119389, - 119390, - 119391, - 119392, - 119393, - 122681, - 122682, - 123016, - 123017, - 125743, - 126078, - 129774, - 129775, - 129776, - 129777, - 129778, - 129779, - 129780, - 129781, - 129782, - 129783, - 129784, - 129785, - 129786, - 129787, - 129788, - 129789, - 129790, - 129791, - 129792, - 129793, - 129794, - 129795, - 129796, - 129797, - 129798, - 129799, - 129800, - 129801, - 129802, - 129803, - 129804, - 129805, - 129806, - 129807, - 129808, - 129809, - 129810, - 129811, - 129812, - 129813, - 129814, - 129815, - 129816, - 129817, - 129818, - 129819, - 129820, - 131728, - 131729, - 131730, - 131731, - 132326, - 133654, - 133655, - 133656, - 133657, - 133658, - 133659, - 133660, - 133661, - 133662, - 133663, - 133664, - 133665, - 133666, - 133667, - 133668, - 133669, - 133670, - 133671, - 133672, - 133673, - 133674, - 133675, - 133676, - 133677, - 133678, - 133679, - 133680, - 133681, - 133682, - 133683, - 133684, - 133685, - 133686, - 133687, - 133688, - 133689, - 133690, - 133691, - 133692, - 133693, - 133694, - 133695, - 133696, - 133697, - 133698, - 133699, - 133700, - 133701, - 133702, - 133703, - 133704, - 133705, - 133706, - 133707, - 133708, - 133709, - 133710, - 133711, - 133712, - 133713, - 133714, - 133715, - 133716, - 133717, - 133718, - 133719, - 133720, - 133721, - 133722, - 133723, - 133724, - 133725, - 133726, - 133727, - 133728, - 133729, - 133730, - 133731, - 133732, - 133733, - 133734, - 133735, - 133736, - 133737, - 133738, - 133739, - 135708, - 136502, - 147708, - 147709, - 147710, - 147711, - 147712, - 147870, - 147871, - 147872, - 147873, - 157577, - 157578, - 157579, - 164748, - 164755, - 164757, - 192359, - 192360, - 192361, - 192362, - 192456, - 192457, - 192458, - 192459, - 207983, - 207984, - 207985, - 207986, - 207987, - 207988, - 207989, - 207990, - 207991, - 207992, - 207993, - 207994, - 207995, - 207996, - 207997, - 207998, - 207999, - 208000, - 208001, - 208002, - 208003, - 208004, - 208005, - 208006, - 208007, - 208008, - 208009, - 208010, - 208011, - 208012, - 208013, - 208014, - 208015, - 208016, - 208017, - 208018, - 208019, - 208020, - 208021, - 208022, - 208023, - 208024, - 208025, - 208026, - 208027, - 208028, - 208029, - 208030, - 208031, - 208032, - 208033, - 208034, - 208035, - 208036, - 208037, - 208038, - 208039, - 208040, - 208041, - 208042, - 208043, - 208044, - 208045, - 208046, - 208047, - 208048, - 208049, - 208050, - 208051, - 208052, - 208053, - 208054, - 208055, - 208056, - 208057, - 208058, - 208059, - 208060, - 208061, - 208062, - 208063, - 208064, - 208065, - 208066, - 208067, - 208068, - 208069, - 208070, - 208071, - 208072, - 208073, - 208074, - 208075, - 208076, - 208077, - 208078, - 208079, - 208080, - 208081, - 208082, - 208083, - 208084, - 208085, - 208086, - 208087, - 208088, - 208089, - 208090, - 208091, - 208092, - 208093, - 208094, - 208095, - 208096, - 208097, - 208098, - 208099, - 208100, - 208101, - 208102, - 208103, - 208104, - 208105, - 208106, - 208107, - 208108, - 208109, - 208110, - 208111, - 208112, - 208113, - 208114, - 208115, - 208116, - 208117, - 208118, - 208119, - 208120, - 208121, - 208122, - 208123, - 208124, - 208125, - 208126, - 208127, - 208128, - 208129, - 208130, - 208131, - 208132, - 208133, - 208134, - 208135, - 208136, - ], - 'code': None, - 'column_name': 'merchant', - 'created_at': '2020-09-02T08:04:53.321869+00:00', - 'default_value': '', - 'field_name': 'Merchant', - 'id': 16103, - 'is_custom': False, - 'is_enabled': True, - 'is_mandatory': False, - 'options': [ - '1', - 'AL Systems Ltd', - 'AMAZON MKTPLACE', - 'AMAZON.COM', - 'AVI Consulting', - 'Alexander Valley Vineyards', - 'Allison Hill', - 'Allsteel', - 'Amanda Monroe', - 'Amazon', - 'American Computers', - 'American Express', - 'Apparel Co Inc.', - 'Apple Inc', - 'Ashwin from NetSuite', - 'Basket Case', - 'Bausch & Lomb', - 'Bayer Health Care', - 'Best Fixture, Inc.', - 'Bob Ford, CPA', - 'Bonnie Dawson', - 'Boston Ophthalmology', - 'Brad Pitt', - 'Bravo TV', - 'Brian Foster', - 'Brian Master', - 'Bridgepoint Industries', - 'CARRABBAS', - 'CCSF MTA IPS PRKNG METER', - 'CHICK-FIL-A', - 'CIBA Vision2', - 'CIRCLE K', - 'California EDD', - 'Canon, Inc.', - 'Carbray Insurance Agency', - 'Charles Schwab', - 'Chevron', - 'Chris Curtis', - 'Clancy Machine Tool, Inc.', - 'Computer Depot Pacific', - 'Computer Glory', - 'Computer Systems LTD', - 'Computers Extreme', - 'Contract Manufacturer', - 'Coopers Office Furniture', - 'Coopervision', - 'Cray Inc', - 'DAIRY QUEEN', - 'DOLLAR TREE', - "DOMINO'S", - "DOMINO'S P", - 'DUNKIN PLAZA', - 'Devinci Cycles Inc.', - 'Dholakpur', - 'Digital Supply', - 'Drive Medical Design & Manufacturing', - 'Eagle Fragrance Co.', - 'Edward Blankenship', - 'Eric Givens', - 'Expensify Vendor', - 'FRG: FIREHOUSE', - 'Federal Express', - 'First Community Bank', - 'Fyle For QBO Paymrnt Sync', - 'Fyle Inc SDK Vendor', - 'Gillette', - 'Github Corp', - 'GlaxoSmithKline', - 'Google Inc.', - 'HOTELSCOM160804675156', - 'HP Corporation', - 'Harper Systems', - 'Herman Miller Inc.', - 'Hillerman Inc.', - 'Hisoka', - 'Hotel Royal', - 'IGA Inc', - 'Indian Airforce', - 'Intel Computer', - 'Internal Revenue Service- Income,FICA', - 'Internal Revenue Service-FUTA', - 'Invacare Corporation', - 'Iron Horse Bicycles', - 'James Taylor', - 'Jatin', - 'Jessica Lane', - 'Jonathan Elliott', - 'Joshua Wood', - 'Justin Glass', - 'Koka Office Supplies', - 'Kreager Machine Tool Corporation', - 'LOLLICUPSTORE', - 'LOLOOO', - 'Lakewood Vineyards', - 'Lol Sob', - 'MAPLE STREET', - 'MJM International Corp.', - 'Master Design Furniture', - 'Matthew Estrada', - 'Maxson Waste Management', - 'McGeever Property Management', - 'Merlin', - 'Micromass Inc', - 'Motorola', - 'NESPRESSO USA', - 'Nandos', - 'Natalie Pope', - 'National Instruments', - 'Natures Own', - 'Nestle corporation', - 'Netfli', - 'Netflix', - 'New York City', - 'New York County', - 'New York State', - 'Nikki Wilson', - 'Nikon', - 'Nilesh Pant', - 'Office Depot', - 'PANERA', - 'PANERA #601741', - 'PANERA BREAD', - "PAPA JOHN'S", - 'PIZZA HUT', - 'PUBLIX', - 'PUBLIX SUPER', - 'Pacific Bell Telephone', - 'Pacific Gas and Electric', - 'Panasonic', - 'Panic', - 'Phillips', - 'Polaroid', - 'Qual Ltd.', - 'RRR KGF', - 'Ramsey Electronic Supply', - 'Random', - 'Reinen Machine Sales', - 'Riddell Inc.', - 'Ryan Gallagher', - 'SAMS CLUB', - 'SDK Employee Sravan', - 'SDK Vendor Entity ID', - 'SDK Vendor Entity ID 2', - 'SPEEDWAY', - 'STARBUCKS STORE', - 'STEAK-N-SHAKE', - 'Safety Net Security', - "Sam's Club", - 'Samantha Washington', - 'Sasuke', - 'SparkFun', - 'Sravan KSK', - 'Starbucks Coffee Company', - 'State Board of Equalization', - 'Steele & Frock Law Offices', - 'Stein Investments', - 'Store Tax Agency', - 'Sullivan Distributors, Inc.', - 'Sunrise Medical', - 'Superior ISP', - 'Swiggy Boiiii', - 'TARGET', - 'TR', - 'Tax Agency AK (1 - Honeycomb Mfg.) (20210317-104301)', - 'Taylor Made Golf Co.', - 'Teck Machine Tool Co.', - 'Terrence Decker', - 'Testarossa Vineyards', - 'The Office Shop Inc', - 'Theresa Brown', - 'Thomas Cook', - 'Torrance Printing, Inc.', - 'Trisha Lee', - 'UBER TRIP HELP.UBER.CO', - 'UDT Instruments', - 'UPS', - 'Uber 063015 SF**POOL**', - 'VITIANOSITAL', - 'Victor Martinez', - 'Vikrant Messi', - 'Vogel', - 'Vwr Scientific Inc', - 'WM SUPERCENTER', - 'Wal-Mart', - 'Wellington Vineyards', - 'Wesley Ophthalmic', - 'Witt & Anderson', - 'Yujiro hanma', - "ZAXBY'S", - 'Zomato', - 'baki', - 'casalife', - 'chota bheem', - 'expensify@thatharmansingh.com - Honeycomb Mfg.', - 'fyle.in', - 'gara', - 'innogy eMobility Solut', - 'jhon doe', - 'labhvam', - 'realme', - 'wraith', - 'ADP', - 'Advisor Printing', - 'akavuluru', - 'Ashwin', - 'Boardwalk Post', - 'Canyon CPA', - 'Citi Bank', - 'Consulting Grid', - 'Cornerstone', - 'Credit Card Misc', - 'Entity V100', - 'Entity V200', - 'Entity V300', - 'Entity V400', - 'Entity V500', - 'Entity V600', - 'Entity V700', - 'Global Printing', - 'Global Properties Inc.', - 'gokul', - 'Green Team Waste Management', - 'Hanson Learning Solutions', - 'HC Equipment Repair', - 'Investor CPA', - 'Kaufman & Langer LLP', - 'Kristofferson Consulting', - 'Lee Thomas', - 'Lenovo', - 'Linda Hicks', - 'Magnolia CPA', - 'Massachusetts Department of Revenue', - 'Microns Consulting', - 'National Grid', - 'National Insurance', - 'Neighborhood Printers', - 'Nilesh, Dhoni', - 'Paramount Consulting', - 'Prima Printing', - 'Prosper Post', - 'Quali Consultants', - 'Quick Post', - 'River Glen Insurance', - 'Sachin, Saran', - 'Scribe Post', - 'Singleton Brothers CPA', - 'Srav', - 'State Bank', - 'The Nonprofit Alliance', - 'The Post Company', - 'Vaishnavi Primary', - 'Vision Post', - 'VM', - 'Worldwide Commercial', - 'Yash', - ], - 'org_id': 'orNoatdUnm1w', - 'placeholder': 'E.g. Uber', - 'seq': 1, - 'type': 'SELECT', - 'updated_at': '2022-08-30T16:50:44.671684+00:00', - }, - ]}], - 'get_all_orgs': [ - { - 'id': 'orHVw3ikkCxJ', - 'created_at': '2018-12-18T10:50:36.506Z', - 'updated_at': '2018-12-18T10:51:53.352Z', - 'name': 'Anagha Org', - 'domain': 'afyle.in', - 'currency': 'EUR', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orOarwdPeIWs', - 'created_at': '2019-08-10T15:20:08.170Z', - 'updated_at': '2019-08-10T15:30:32.828Z', - 'name': 'asdf', - 'domain': 'gmail.com', - 'currency': 'INR', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orelSi63db7S', - 'created_at': '2019-08-28T10:52:20.867Z', - 'updated_at': '2019-08-28T11:06:20.014Z', - 'name': 'Ashwin Personal Org', - 'domain': 'gmail.com', - 'currency': 'INR', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orPJvXuoLqvJ', - 'created_at': '2018-11-08T13:01:44.133Z', - 'updated_at': '2019-09-07T10:25:44.771Z', - 'name': 'FAE', - 'domain': 'fae.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orsO0VW86WLQ', - 'created_at': '2017-07-03T04:45:51.698Z', - 'updated_at': '2022-07-27T10:19:53.095Z', - 'name': 'Fyle - Demo US', - 'domain': 'fyle-us.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'or7m5SVD9Rv1', - 'created_at': '2020-11-11T10:49:28.307Z', - 'updated_at': '2022-05-12T10:28:59.325Z', - 'name': 'Fyle For Acme', - 'domain': 'fyleforintegrations.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'or79Cob97KSh', - 'created_at': '2021-04-09T11:23:49.091Z', - 'updated_at': '2021-04-09T11:23:51.883Z', - 'name': 'Fyle For Arkham Asylum', - 'domain': 'fyleforgotham.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orCr0d188we7', - 'created_at': '2021-02-19T05:12:55.157Z', - 'updated_at': '2021-02-19T05:13:01.200Z', - 'name': 'Fyle For automated testing webapp', - 'domain': 'fyleforautomatedtestingwebapp.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orMCxDMCEOfp', - 'created_at': '2021-02-19T07:26:20.834Z', - 'updated_at': '2021-02-19T07:26:26.737Z', - 'name': 'Fyle For Budgets Marketing Demo', - 'domain': 'fyleforbudgets.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'ork2c90PAHtk', - 'created_at': '2021-04-27T12:21:23.824Z', - 'updated_at': '2021-04-27T12:21:25.763Z', - 'name': 'Fyle For dimension-sync', - 'domain': 'fylefordimension.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orGcBCVPijjO', - 'created_at': '2021-05-25T15:55:03.214Z', - 'updated_at': '2021-05-25T15:55:17.334Z', - 'name': 'Fyle For Intacct Bill-CCT', - 'domain': 'fyleforbill.cct', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orhlmPm4H0wn', - 'created_at': '2021-05-25T16:48:57.330Z', - 'updated_at': '2021-05-25T16:49:11.283Z', - 'name': 'Fyle For Intacct ER-Bill', - 'domain': 'fyleforer.bill', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orpMfWO2KOsU', - 'created_at': '2021-05-25T15:01:04.691Z', - 'updated_at': '2021-05-25T15:01:18.807Z', - 'name': 'Fyle For Intacct ER-CCT', - 'domain': 'fyleforer.cct', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'oraWFQlEpjbb', - 'created_at': '2021-05-05T09:35:41.567Z', - 'updated_at': '2021-05-05T09:35:43.318Z', - 'name': 'Fyle For IntacctNew Technologies', - 'domain': 'fyleforintacctnew.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'or3Ka0zKz4LE', - 'created_at': '2021-06-08T12:20:23.018Z', - 'updated_at': '2021-06-08T12:20:37.663Z', - 'name': 'Fyle For Intacct Refactor', - 'domain': 'fyleforintacct.refactor', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orNoatdUnm1w', - 'created_at': '2020-09-02T08:04:52.891Z', - 'updated_at': '2020-09-03T10:26:23.381Z', - 'name': 'Fyle For MS Dynamics Demo', - 'domain': 'fyleforqvd.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orq6KZ9kxAIZ', - 'created_at': '2020-06-18T09:55:42.156Z', - 'updated_at': '2020-06-18T09:56:01.655Z', - 'name': 'Fyle For Multi Org Dashboard Demo 1', - 'domain': 'fylefordashboard1.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orFcbTXP4Nzl', - 'created_at': '2020-06-18T10:47:51.321Z', - 'updated_at': '2020-06-18T10:48:05.118Z', - 'name': 'Fyle For Multi Org Dashboard Demo 2', - 'domain': 'fylefordashboard2.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'oryVGi2hkIje', - 'created_at': '2020-06-22T08:27:15.146Z', - 'updated_at': '2020-06-22T08:27:28.105Z', - 'name': 'Fyle For Multi Org Dashboard Demo 3', - 'domain': 'fylefordashboard3.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orDGNZupZmja', - 'created_at': '2020-12-20T20:52:48.962Z', - 'updated_at': '2020-12-28T11:38:20.804Z', - 'name': 'Fyle For nami enterprise', - 'domain': 'fylefornami.org', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orf7jLXAJ6SY', - 'created_at': '2021-01-22T10:15:13.803Z', - 'updated_at': '2021-01-22T10:15:19.492Z', - 'name': 'Fyle For NetSuite Projects Customers', - 'domain': 'fyleforlol.sob', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'or8ly3LMmpEB', - 'created_at': '2021-05-11T06:25:49.247Z', - 'updated_at': '2021-05-11T06:26:03.243Z', - 'name': 'Fyle For NetsuiteTest', - 'domain': 'fylefornetsuitetest.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orfrt4S8Mbj1', - 'created_at': '2021-02-03T13:26:13.462Z', - 'updated_at': '2021-02-03T13:26:19.323Z', - 'name': 'Fyle For Nilesh', - 'domain': 'fylefornileshfyle.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'or89lKTL3Yhk', - 'created_at': '2021-07-13T10:33:54.537Z', - 'updated_at': '2021-07-13T10:34:08.805Z', - 'name': 'Fyle For NS NS NS', - 'domain': 'fylefornetsuite.netsuite', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orE1oxkAMtq0', - 'created_at': '2021-05-24T09:30:32.057Z', - 'updated_at': '2022-04-27T13:26:50.737Z', - 'name': 'Fyle For QBO', - 'domain': 'fyleforquickbooksonlinetest.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'or1xUjUb50no', - 'created_at': '2021-02-07T07:27:44.106Z', - 'updated_at': '2022-08-10T14:29:29.481Z', - 'name': 'Fyle For QBO Angular Tests - Github Action', - 'domain': 'fyleforjatinorg.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orS3AQhrbhHB', - 'created_at': '2020-12-16T07:19:53.201Z', - 'updated_at': '2020-12-18T19:20:07.711Z', - 'name': 'Fyle For Sage Intacct Demo1', - 'domain': 'fyleforsageintacctdemo.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'oriSOntNdZGd', - 'created_at': '2020-09-10T12:48:30.073Z', - 'updated_at': '2020-09-15T09:32:51.692Z', - 'name': 'Fyle For Sage Intacct Integration', - 'domain': 'fyleforintacct2.com', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orCqJYWF68EL', - 'created_at': '2021-02-01T09:55:11.430Z', - 'updated_at': '2021-02-01T09:55:17.153Z', - 'name': 'Fyle For Sage Intacct Projects Sync', - 'domain': 'fyleforsage.intacct', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'or830tbc1ovU', - 'created_at': '2020-06-16T08:46:12.748Z', - 'updated_at': '2020-06-16T08:46:30.227Z', - 'name': 'Fyle For SageIntacct Test Backend Integration', - 'domain': 'fyleforxyz.in', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orXeYZqiAXhZ', - 'created_at': '2021-04-06T14:06:20.536Z', - 'updated_at': '2021-10-04T05:52:04.179Z', - 'name': 'Fyle For Stark Industries', - 'domain': 'fylefortonystark.com', - 'currency': 'AUD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmFudU7eReqs', - }, - { - 'id': 'orrjqbDbeP9p', - 'created_at': '2017-04-06T04:52:07.820Z', - 'updated_at': '2022-08-29T10:07:57.393Z', - 'name': 'Fyle Staging', - 'domain': 'fyledemo.com', - 'currency': 'INR', - 'branch_ifsc': 'SBIN0005943', - 'branch_account': 'state bank of india', - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmha6maJPreu', - }, - { - 'id': 'oreD0u6pkphI', - 'created_at': '2017-02-16T07:19:20.273Z', - 'updated_at': '2021-05-29T02:53:59.134Z', - 'name': 'Greytip Demo1', - 'domain': 'fyle.in', - 'currency': 'INR', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmLvCKmvsn4k', - }, - { - 'id': 'orTwovfDpEYc', - 'created_at': '2020-05-11T11:52:32.876Z', - 'updated_at': '2020-09-10T13:58:23.407Z', - 'name': 'Sage Intacct Demo 1', - 'domain': 'test_org_ach.03', - 'currency': 'USD', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orNVthTo2Zyo', - 'created_at': '2018-01-31T23:50:27.216Z', - 'updated_at': '2022-08-29T09:58:13.589Z', - 'name': 'Staging Loaded', - 'domain': 'fyle.in', - 'currency': 'INR', - 'branch_ifsc': 'ICIC0003440', - 'branch_account': '82382398239239', - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': 'dcmbDcwO330Wn', - }, - { - 'id': 'orZu2yrz7zdy', - 'created_at': '2019-02-05T14:31:26.313Z', - 'updated_at': '2020-02-24T09:51:50.672Z', - 'name': 'Test Trip', - 'domain': 'triptest.com', - 'currency': 'INR', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, - { - 'id': 'orwZZAwJb7eF', - 'created_at': '2019-01-11T09:55:45.305Z', - 'updated_at': '2019-10-26T17:27:19.390Z', - 'name': 'Yagami', - 'domain': 'L', - 'currency': 'INR', - 'branch_ifsc': None, - 'branch_account': None, - 'tally_bank_ledger': None, - 'tally_default_category': None, - 'tally_default_user': None, - 'corporate_credit_card_details': {'bank_name': None, - 'number_of_cards': None}, - 'verified': True, - 'lite': False, - 'dwolla_customers_metadata_id': None, - }, + [ + { + "data": [ + { + "code": "16200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Patents & Licenses", + "id": 207983, + "is_enabled": True, + "name": "Patents & Licenses", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "50100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Sales", + "id": 207984, + "is_enabled": True, + "name": "COGS - Sales", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60110", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Employee Benefits", + "id": 207985, + "is_enabled": True, + "name": "Employee Benefits", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60120", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Commission", + "id": 207986, + "is_enabled": True, + "name": "Commission", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Rent", + "id": 207987, + "is_enabled": True, + "name": "Rent", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "50300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Subcontractors", + "id": 207988, + "is_enabled": True, + "name": "COGS - Subcontractors", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40800-101", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Usage - Unbilled", + "id": 207989, + "is_enabled": True, + "name": "Contract Usage - Unbilled", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40800-102", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Usage - Billed", + "id": 207990, + "is_enabled": True, + "name": "Contract Usage - Billed", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40600-101", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Subscriptions - Unbilled", + "id": 207991, + "is_enabled": True, + "name": "Contract Subscriptions - Unbilled", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "OE Subscriptions", + "id": 207992, + "is_enabled": True, + "name": "OE Subscriptions", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40600", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Subscriptions", + "id": 207993, + "is_enabled": True, + "name": "Contract Subscriptions", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40800", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Usage", + "id": 207994, + "is_enabled": True, + "name": "Contract Usage", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40600-102", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Subscriptions - Billed", + "id": 207995, + "is_enabled": True, + "name": "Contract Subscriptions - Billed", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40800-103", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Usage - Paid", + "id": 207996, + "is_enabled": True, + "name": "Contract Usage - Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40600-103", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Subscriptions - Paid", + "id": 207997, + "is_enabled": True, + "name": "Contract Subscriptions - Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40700-102", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Services - Billed", + "id": 207998, + "is_enabled": True, + "name": "Contract Services - Billed", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Revenue - Services", + "id": 207999, + "is_enabled": True, + "name": "Revenue - Services", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Revenue - Subcontractors", + "id": 208000, + "is_enabled": True, + "name": "Revenue - Subcontractors", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40700-103", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Services - Paid", + "id": 208001, + "is_enabled": True, + "name": "Contract Services - Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Revenue - Reimbursed Expenses", + "id": 208002, + "is_enabled": True, + "name": "Revenue - Reimbursed Expenses", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40700", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Services", + "id": 208003, + "is_enabled": True, + "name": "Contract Services", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40700-101", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Services - Unbilled", + "id": 208004, + "is_enabled": True, + "name": "Contract Services - Unbilled", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60150", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Spot Bonus", + "id": 208005, + "is_enabled": True, + "name": "Spot Bonus", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "36000", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "CTA", + "id": 208006, + "is_enabled": True, + "name": "CTA", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "50900", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Other", + "id": 208007, + "is_enabled": True, + "name": "COGS - Other", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "14100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Prepaid Insurance", + "id": 208008, + "is_enabled": True, + "name": "Prepaid Insurance", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "14200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Prepaid Rent", + "id": 208009, + "is_enabled": True, + "name": "Prepaid Rent", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "14300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Prepaid Other", + "id": 208010, + "is_enabled": True, + "name": "Prepaid Other", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20600", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Accrued Expense", + "id": 208011, + "is_enabled": True, + "name": "Accrued Expense", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20680", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Inventory - GRNI", + "id": 208012, + "is_enabled": True, + "name": "Inventory - GRNI", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20650", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Accrued Payroll Tax Payable", + "id": 208013, + "is_enabled": True, + "name": "Accrued Payroll Tax Payable", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20610", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Accr. Sales Tax Payable", + "id": 208014, + "is_enabled": True, + "name": "Accr. Sales Tax Payable", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60660", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Other G&A", + "id": 208015, + "is_enabled": True, + "name": "Other G&A", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Currency Gain-Loss", + "id": 208016, + "is_enabled": True, + "name": "Currency Gain-Loss", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60220", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Telecommunications", + "id": 208017, + "is_enabled": True, + "name": "Telecommunications", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "13500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Valuation Reserves", + "id": 208018, + "is_enabled": True, + "name": "Valuation Reserves", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "16100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Goodwill", + "id": 208019, + "is_enabled": True, + "name": "Goodwill", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60360", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Printing and Reproduction", + "id": 208020, + "is_enabled": True, + "name": "Printing and Reproduction", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Notes Payable", + "id": 208021, + "is_enabled": True, + "name": "Notes Payable", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Long Term Debt", + "id": 208022, + "is_enabled": True, + "name": "Long Term Debt", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "30310", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Unrealized Currency Gain and Loss", + "id": 208023, + "is_enabled": True, + "name": "Unrealized Currency Gain and Loss", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60510", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Trade Shows and Exhibits", + "id": 208024, + "is_enabled": True, + "name": "Trade Shows and Exhibits", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Marketing and Advertising", + "id": 208025, + "is_enabled": True, + "name": "Marketing and Advertising", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60350", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Postage and Delivery", + "id": 208026, + "is_enabled": True, + "name": "Postage and Delivery", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60410", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Professional Fees Expense", + "id": 208027, + "is_enabled": True, + "name": "Professional Fees Expense", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60320", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Repairs and Maintenance", + "id": 208028, + "is_enabled": True, + "name": "Repairs and Maintenance", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Salaries and Wages", + "id": 208029, + "is_enabled": True, + "name": "Salaries and Wages", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "80500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Gain for Sale of an Asset", + "id": 208030, + "is_enabled": True, + "name": "Gain for Sale of an Asset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "80400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Dividends", + "id": 208031, + "is_enabled": True, + "name": "Dividends", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Cash", + "id": 208032, + "is_enabled": True, + "name": "Cash", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10040", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Checking 4 - Bank Of Canada", + "id": 208033, + "is_enabled": True, + "name": "Checking 4 - Bank Of Canada", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10050", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Checking 5 - Bank Of England", + "id": 208034, + "is_enabled": True, + "name": "Checking 5 - Bank Of England", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10060", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Checking 6 - Bank Of Australia", + "id": 208035, + "is_enabled": True, + "name": "Checking 6 - Bank Of Australia", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10070", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Checking 7 - Bank Of South Africa", + "id": 208036, + "is_enabled": True, + "name": "Checking 7 - Bank Of South Africa", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10010", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Checking 1 - SVB", + "id": 208037, + "is_enabled": True, + "name": "Checking 1 - SVB", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10020", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Checking 2 - SVB", + "id": 208038, + "is_enabled": True, + "name": "Checking 2 - SVB", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10030", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Checking 3 - SVB", + "id": 208039, + "is_enabled": True, + "name": "Checking 3 - SVB", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900-400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due from Entity 400", + "id": 208040, + "is_enabled": True, + "name": "Due from Entity 400", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900-700", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due from Entity 700", + "id": 208041, + "is_enabled": True, + "name": "Due from Entity 700", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900-600", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due from Entity 600", + "id": 208042, + "is_enabled": True, + "name": "Due from Entity 600", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900-500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due from Entity 500", + "id": 208043, + "is_enabled": True, + "name": "Due from Entity 500", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900-200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due from Entity 200", + "id": 208044, + "is_enabled": True, + "name": "Due from Entity 200", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900-300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due from Entity 300", + "id": 208045, + "is_enabled": True, + "name": "Due from Entity 300", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Intercompany Receivables", + "id": 208046, + "is_enabled": True, + "name": "Intercompany Receivables", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12701-200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Unbilled AR - Contract Services", + "id": 208047, + "is_enabled": True, + "name": "Unbilled AR - Contract Services", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12701-300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Unbilled AR - Contract Usage", + "id": 208048, + "is_enabled": True, + "name": "Unbilled AR - Contract Usage", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "17710-001", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Deferred Expense - Commission", + "id": 208049, + "is_enabled": True, + "name": "Deferred Expense - Commission", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "17710-002", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Deferred Expense - Royalty", + "id": 208050, + "is_enabled": True, + "name": "Deferred Expense - Royalty", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12620", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Tax Receivable", + "id": 208051, + "is_enabled": True, + "name": "Tax Receivable", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "17710", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Deferred Expense", + "id": 208052, + "is_enabled": True, + "name": "Deferred Expense", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12701-100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Unbilled AR - Contract Subscriptions", + "id": 208053, + "is_enabled": True, + "name": "Unbilled AR - Contract Subscriptions", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12600", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "WIP (Labor Only)", + "id": 208054, + "is_enabled": True, + "name": "WIP (Labor Only)", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12701", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Unbilled AR", + "id": 208055, + "is_enabled": True, + "name": "Unbilled AR", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "15110", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Buildings Accm. Depr.", + "id": 208056, + "is_enabled": True, + "name": "Buildings Accm. Depr.", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "16300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Capitalized Software Costs", + "id": 208057, + "is_enabled": True, + "name": "Capitalized Software Costs", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "15100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Buildings", + "id": 208058, + "is_enabled": True, + "name": "Buildings", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-101", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Subscriptions - Unbilled", + "id": 208059, + "is_enabled": True, + "name": "DR - Contract Subscriptions - Unbilled", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-301", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Usage - Unbilled", + "id": 208060, + "is_enabled": True, + "name": "DR - Contract Usage - Unbilled", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-102", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Subscriptions - Billed", + "id": 208061, + "is_enabled": True, + "name": "DR - Contract Subscriptions - Billed", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-202", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Services - Billed", + "id": 208062, + "is_enabled": True, + "name": "DR - Contract Services - Billed", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-302", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Usage - Billed", + "id": 208063, + "is_enabled": True, + "name": "DR - Contract Usage - Billed", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-303", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Usage - Paid", + "id": 208064, + "is_enabled": True, + "name": "DR - Contract Usage - Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-203", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Services - Paid", + "id": 208065, + "is_enabled": True, + "name": "DR - Contract Services - Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-103", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Subscriptions - Paid", + "id": 208066, + "is_enabled": True, + "name": "DR - Contract Subscriptions - Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701-201", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "DR - Contract Services - Unbilled", + "id": 208067, + "is_enabled": True, + "name": "DR - Contract Services - Unbilled", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20702", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Deferred Revenue Contra", + "id": 208068, + "is_enabled": True, + "name": "Deferred Revenue Contra", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20701", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Deferred Revenue", + "id": 208069, + "is_enabled": True, + "name": "Deferred Revenue", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900-700", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due to Entity 700", + "id": 208070, + "is_enabled": True, + "name": "Due to Entity 700", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900-500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due to Entity 500", + "id": 208071, + "is_enabled": True, + "name": "Due to Entity 500", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900-400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due to Entity 400", + "id": 208072, + "is_enabled": True, + "name": "Due to Entity 400", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900-600", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due to Entity 600", + "id": 208073, + "is_enabled": True, + "name": "Due to Entity 600", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900-300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due to Entity 300", + "id": 208074, + "is_enabled": True, + "name": "Due to Entity 300", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900-100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due to Entity 100", + "id": 208075, + "is_enabled": True, + "name": "Due to Entity 100", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900-200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due to Entity 200", + "id": 208076, + "is_enabled": True, + "name": "Due to Entity 200", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20900", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Intercompany Payables", + "id": 208077, + "is_enabled": True, + "name": "Intercompany Payables", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "80200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Interest Income", + "id": 208078, + "is_enabled": True, + "name": "Interest Income", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Journal Entry Rounding", + "id": 208079, + "is_enabled": True, + "name": "Journal Entry Rounding", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Intercompany Professional Fees", + "id": 208080, + "is_enabled": True, + "name": "Intercompany Professional Fees", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "30300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Accumulated OCI", + "id": 208081, + "is_enabled": True, + "name": "Accumulated OCI", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "40900", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Revenue - Other", + "id": 208082, + "is_enabled": True, + "name": "Revenue - Other", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60140", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Employee Deductions", + "id": 208083, + "is_enabled": True, + "name": "Employee Deductions", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60130", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Payroll Taxes", + "id": 208084, + "is_enabled": True, + "name": "Payroll Taxes", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60620", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Other Taxes", + "id": 208085, + "is_enabled": True, + "name": "Other Taxes", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60610", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Excise Tax", + "id": 208086, + "is_enabled": True, + "name": "Excise Tax", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "13400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Reserved Inventory", + "id": 208087, + "is_enabled": True, + "name": "Reserved Inventory", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "13200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Goods in Transit", + "id": 208088, + "is_enabled": True, + "name": "Goods in Transit", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "13100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Inventory", + "id": 208089, + "is_enabled": True, + "name": "Inventory", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "13900", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Inventory - Other", + "id": 208090, + "is_enabled": True, + "name": "Inventory - Other", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "16900", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Other Intangible Assets", + "id": 208091, + "is_enabled": True, + "name": "Other Intangible Assets", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "17000", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Other Assets", + "id": 208092, + "is_enabled": True, + "name": "Other Assets", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20500", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Credit Card Offset", + "id": 208093, + "is_enabled": True, + "name": "Credit Card Offset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "20620", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Sales Tax Payable", + "id": 208094, + "is_enabled": True, + "name": "Sales Tax Payable", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "30100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Common Stock", + "id": 208095, + "is_enabled": True, + "name": "Common Stock", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "30200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Preferred Stock", + "id": 208096, + "is_enabled": True, + "name": "Preferred Stock", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "35000", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Retained Earnings", + "id": 208097, + "is_enabled": True, + "name": "Retained Earnings", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "50200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Materials", + "id": 208098, + "is_enabled": True, + "name": "COGS - Materials", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70303", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Paid Time Off", + "id": 208099, + "is_enabled": True, + "name": "Paid Time Off", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70300", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Indirect Labor", + "id": 208100, + "is_enabled": True, + "name": "Indirect Labor", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70301", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Holiday", + "id": 208101, + "is_enabled": True, + "name": "Holiday", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60700", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Company Credit Card Offset", + "id": 208102, + "is_enabled": True, + "name": "Company Credit Card Offset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Other Expense", + "id": 208103, + "is_enabled": True, + "name": "Other Expense", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70302", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Professional Development", + "id": 208104, + "is_enabled": True, + "name": "Professional Development", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70304", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Indirect Labor Offset", + "id": 208105, + "is_enabled": True, + "name": "Indirect Labor Offset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "80100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Other Income", + "id": 208106, + "is_enabled": True, + "name": "Other Income", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12710", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "AR - Retainage", + "id": 208107, + "is_enabled": True, + "name": "AR - Retainage", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51708", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Billable Overtime Hours", + "id": 208108, + "is_enabled": True, + "name": "Billable Overtime Hours", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51709", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Non-Billable Overtime Hours", + "id": 208109, + "is_enabled": True, + "name": "Non-Billable Overtime Hours", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51701", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Billable Hours", + "id": 208110, + "is_enabled": True, + "name": "Billable Hours", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51711", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Labor Cost Variance", + "id": 208111, + "is_enabled": True, + "name": "Labor Cost Variance", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51710", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Labor Cost Offset", + "id": 208112, + "is_enabled": True, + "name": "Labor Cost Offset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51702", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Non-Billable Hours", + "id": 208113, + "is_enabled": True, + "name": "Non-Billable Hours", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51703", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Burden on Projects", + "id": 208114, + "is_enabled": True, + "name": "COGS - Burden on Projects", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51704", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Overhead on Projects", + "id": 208115, + "is_enabled": True, + "name": "COGS - Overhead on Projects", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51705", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - G&A on Projects", + "id": 208116, + "is_enabled": True, + "name": "COGS - G&A on Projects", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51706", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Indirect Projects Costs Offset", + "id": 208117, + "is_enabled": True, + "name": "COGS - Indirect Projects Costs Offset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "51707", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "COGS - Reimbursed Expenses", + "id": 208118, + "is_enabled": True, + "name": "COGS - Reimbursed Expenses", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Software and Licenses", + "id": 208119, + "is_enabled": True, + "name": "Software and Licenses", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90006", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Downgrade", + "id": 208120, + "is_enabled": True, + "name": "Downgrade", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "50400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Royalty Expense", + "id": 208121, + "is_enabled": True, + "name": "Contract Royalty Expense", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "60160", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Contract Commission", + "id": 208122, + "is_enabled": True, + "name": "Contract Commission", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90009", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "CMRR Offset", + "id": 208123, + "is_enabled": True, + "name": "CMRR Offset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90002", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "CMRR New", + "id": 208124, + "is_enabled": True, + "name": "CMRR New", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90003", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "CMRR Add-On", + "id": 208125, + "is_enabled": True, + "name": "CMRR Add-On", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90004", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Renewal Upgrade", + "id": 208126, + "is_enabled": True, + "name": "Renewal Upgrade", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90005", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Renewal Downgrade", + "id": 208127, + "is_enabled": True, + "name": "Renewal Downgrade", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90007", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "CMRR Churn", + "id": 208128, + "is_enabled": True, + "name": "CMRR Churn", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90008", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "CMRR Renewal", + "id": 208129, + "is_enabled": True, + "name": "CMRR Renewal", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90000", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Potential Billings", + "id": 208130, + "is_enabled": True, + "name": "Potential Billings", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "90001", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Potential Billings Offset", + "id": 208131, + "is_enabled": True, + "name": "Potential Billings Offset", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "70600", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Elimination Adjustment", + "id": 208132, + "is_enabled": True, + "name": "Elimination Adjustment", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12610", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Transactor Clearing", + "id": 208133, + "is_enabled": True, + "name": "Transactor Clearing", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10200", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Cash Equivalents", + "id": 208134, + "is_enabled": True, + "name": "Cash Equivalents", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "10400", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Investments and Securities", + "id": 208135, + "is_enabled": True, + "name": "Investments and Securities", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12900-100", + "created_at": "2022-08-12T16:50:53.658771+00:00", + "display_name": "Due from Entity 100", + "id": 208136, + "is_enabled": True, + "name": "Due from Entity 100", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "36", + "created_at": "2022-05-06T07:03:30.124944+00:00", + "display_name": "UK Expense Category", + "id": 192456, + "is_enabled": True, + "name": "UK Expense Category", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-06T07:03:30.124944+00:00", + }, + { + "code": "37", + "created_at": "2022-05-06T07:03:30.124944+00:00", + "display_name": "New Aus", + "id": 192457, + "is_enabled": True, + "name": "New Aus", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-06T07:03:30.124944+00:00", + }, + { + "code": "38", + "created_at": "2022-05-06T07:03:30.124944+00:00", + "display_name": "Final Aus Category", + "id": 192458, + "is_enabled": True, + "name": "Final Aus Category", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-06T07:03:30.124944+00:00", + }, + { + "code": "40", + "created_at": "2022-05-06T07:03:30.124944+00:00", + "display_name": "Nilesh Pant", + "id": 192459, + "is_enabled": True, + "name": "Nilesh Pant", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-06T07:03:30.124944+00:00", + }, + { + "code": "36", + "created_at": "2022-05-05T08:27:28.316187+00:00", + "display_name": "UK Expense Category / ", + "id": 192359, + "is_enabled": True, + "name": "UK Expense Category", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": " ", + "system_category": None, + "updated_at": "2022-05-05T08:27:28.316187+00:00", + }, + { + "code": "37", + "created_at": "2022-05-05T08:27:28.316187+00:00", + "display_name": "New Aus / ", + "id": 192360, + "is_enabled": True, + "name": "New Aus", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": " ", + "system_category": None, + "updated_at": "2022-05-05T08:27:28.316187+00:00", + }, + { + "code": "38", + "created_at": "2022-05-05T08:27:28.316187+00:00", + "display_name": "Final Aus Category / ", + "id": 192361, + "is_enabled": True, + "name": "Final Aus Category", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": " ", + "system_category": None, + "updated_at": "2022-05-05T08:27:28.316187+00:00", + }, + { + "code": "40", + "created_at": "2022-05-05T08:27:28.316187+00:00", + "display_name": "Nilesh Pant / ", + "id": 192362, + "is_enabled": True, + "name": "Nilesh Pant", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [], + "sub_category": " ", + "system_category": None, + "updated_at": "2022-05-05T08:27:28.316187+00:00", + }, + { + "code": "XYZ XYZXYZ XYZ", + "created_at": "2021-12-15T10:41:02.645588+00:00", + "display_name": "XYZ XYZ / ", + "id": 164759, + "is_enabled": True, + "name": "XYZ XYZ", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 290929, + 290932, + 290928, + 290931, + 290930, + 290067, + 290069, + 290084, + 291035, + 290065, + 290068, + ], + "sub_category": "", + "system_category": "Others", + "updated_at": "2021-12-15T10:41:02.645588+00:00", + }, + { + "code": "asjkhasd2", + "created_at": "2021-12-15T10:40:01.221856+00:00", + "display_name": "Platform3 Single POST Category - 199 / ", + "id": 164757, + "is_enabled": True, + "name": "Platform3 Single POST Category - 199", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 290084, + 290069, + 290067, + 290068, + 290065, + 291035, + 290931, + 290928, + 290930, + 290929, + 290932, + ], + "sub_category": "", + "system_category": None, + "updated_at": "2021-12-15T10:40:01.221856+00:00", + }, + { + "code": "C12342", + "created_at": "2021-12-15T10:40:00.583460+00:00", + "display_name": "Engine2 / Turbo charged2", + "id": 164756, + "is_enabled": True, + "name": "Engine2", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 290930, + 290929, + 290932, + 290931, + 290928, + 291035, + 290068, + 290069, + 290084, + 290067, + 290065, + ], + "sub_category": "Turbo charged2", + "system_category": "Others", + "updated_at": "2021-12-15T10:40:00.583460+00:00", + }, + { + "code": "asjkhasd2", + "created_at": "2021-12-15T10:39:36.910635+00:00", + "display_name": "Platform2 Single POST Category - 199 / ", + "id": 164755, + "is_enabled": True, + "name": "Platform2 Single POST Category - 199", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 290069, + 290067, + 290084, + 290068, + 290065, + 291035, + 290932, + 290928, + 290931, + 290929, + 290930, + ], + "sub_category": "", + "system_category": None, + "updated_at": "2021-12-15T10:39:36.910635+00:00", + }, + { + "code": "asjkhasd", + "created_at": "2021-12-15T08:41:04.181338+00:00", + "display_name": "Platform Single POST Category - 199 / ", + "id": 164748, + "is_enabled": True, + "name": "Platform Single POST Category - 199", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 290928, + 290931, + 290932, + 290930, + 290929, + 290068, + 291035, + 290069, + 290084, + 290065, + 290067, + ], + "sub_category": "", + "system_category": None, + "updated_at": "2021-12-15T08:41:04.181338+00:00", + }, + { + "code": "33", + "created_at": "2021-09-29T10:46:33.242256+00:00", + "display_name": "New Category", + "id": 157577, + "is_enabled": True, + "name": "New Category", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280168, + 280216, + 279703, + 279857, + 148860, + 280042, + 279772, + 279963, + 149153, + 280079, + 280654, + 279876, + 279969, + 279900, + 279820, + 280009, + 279728, + 279765, + 280078, + 280190, + 280049, + 279713, + 279873, + 279837, + 280128, + 280119, + 279962, + 280170, + 280213, + 280010, + 279885, + 279902, + 280129, + 280526, + 280194, + 279804, + 280217, + 279776, + 279734, + 280163, + 156013, + 280077, + 280003, + 149151, + 279879, + 279961, + 279823, + 280189, + 279896, + 280011, + 279727, + 279773, + 279840, + 279923, + 280130, + 280525, + 279800, + 279872, + 280085, + 279777, + 279960, + 149169, + 148874, + 280076, + 279928, + 279903, + 279819, + 279970, + 279878, + 280131, + 280502, + 279854, + 280218, + 280012, + 279726, + 280118, + 280188, + 279805, + 279959, + 280674, + 279750, + 148871, + 279832, + 279971, + 155997, + 280002, + 280132, + 279778, + 280075, + 279841, + 279871, + 279762, + 279958, + 280195, + 279901, + 280117, + 279904, + 280169, + 280389, + 280013, + 279725, + 280086, + 280074, + 279818, + 280133, + 280501, + 279735, + 279824, + 280219, + 280187, + 280291, + 279889, + 280014, + 279715, + 279779, + 279957, + 280212, + 279853, + 155987, + 280073, + 279769, + 280134, + 280497, + 155996, + 279780, + 280001, + 279842, + 279870, + 279956, + 280675, + 280041, + 279935, + 279905, + 279972, + 280015, + 279724, + 279817, + 279744, + 280087, + 290067, + 280072, + 280186, + 149155, + 279985, + 279926, + 280222, + 155986, + 279761, + 280135, + 280496, + 280116, + 280164, + 279955, + 279906, + 280196, + 279856, + 280136, + 280016, + 279723, + 279880, + 280071, + 279836, + 279781, + 279954, + 280676, + 279869, + 280029, + 280185, + 279973, + 156009, + 290068, + 280137, + 280464, + 279736, + 280017, + 280000, + 148890, + 279782, + 280223, + 279953, + 280070, + 280115, + 280263, + 279907, + 279816, + 279719, + 246836, + 279760, + 155991, + 280088, + 280138, + 280463, + 280100, + 280018, + 148870, + 279843, + 290069, + 280184, + 279868, + 280211, + 279825, + 279783, + 280069, + 279952, + 279895, + 280139, + 279974, + 280019, + 279718, + 280097, + 279951, + 280114, + 280238, + 280224, + 279737, + 280037, + 279999, + 149161, + 279908, + 280068, + 280751, + 279815, + 280140, + 149168, + 279991, + 280445, + 280089, + 280239, + 280183, + 280197, + 280203, + 279844, + 279867, + 148880, + 279784, + 279950, + 280141, + 279975, + 280020, + 279717, + 279759, + 280444, + 279887, + 280067, + 279768, + 279785, + 279949, + 280113, + 280228, + 279921, + 280121, + 156001, + 279720, + 156003, + 279909, + 279814, + 279881, + 280021, + 279716, + 280066, + 279835, + 280182, + 280204, + 280142, + 280436, + 279894, + 279845, + 279866, + 279998, + 279786, + 279948, + 280022, + 279924, + 280206, + 155985, + 279910, + 279976, + 149173, + 280143, + 280065, + 279758, + 290065, + 280210, + 279947, + 280229, + 156012, + 279803, + 280112, + 280125, + 280181, + 156026, + 280101, + 280144, + 280435, + 280090, + 280023, + 279714, + 280198, + 279787, + 149157, + 279946, + 280064, + 279738, + 279997, + 280145, + 279865, + 279749, + 279826, + 279911, + 279813, + 280431, + 280048, + 279893, + 279764, + 280024, + 279712, + 279788, + 279945, + 279882, + 280230, + 280063, + 280180, + 280091, + 148231, + 279988, + 280146, + 149156, + 280420, + 149148, + 279789, + 280111, + 148864, + 279944, + 279748, + 279922, + 280025, + 279977, + 279846, + 279711, + 280062, + 279864, + 279756, + 280151, + 279984, + 279912, + 279812, + 279721, + 279739, + 280026, + 279996, + 280147, + 280179, + 279987, + 279834, + 280231, + 279943, + 148888, + 279978, + 280098, + 280148, + 280061, + 280110, + 280419, + 280104, + 280209, + 279790, + 279942, + 156027, + 148861, + 280199, + 280043, + 280149, + 156023, + 280244, + 279847, + 279863, + 280092, + 280220, + 280027, + 279710, + 148865, + 279913, + 280416, + 279811, + 280167, + 148883, + 280178, + 280060, + 148858, + 279827, + 279986, + 279892, + 280232, + 279791, + 280150, + 156000, + 279763, + 280028, + 279709, + 280059, + 279941, + 279883, + 279914, + 280415, + 279979, + 279755, + 280221, + 279792, + 279848, + 279862, + 279740, + 280177, + 279995, + 156008, + 280152, + 280030, + 279708, + 280058, + 280109, + 279940, + 279939, + 280046, + 280153, + 280093, + 280233, + 280406, + 155993, + 279802, + 156007, + 155999, + 279915, + 280031, + 279810, + 279980, + 280205, + 149165, + 279793, + 280057, + 280200, + 279855, + 280176, + 148875, + 280154, + 279938, + 280208, + 280032, + 279707, + 280405, + 279861, + 279754, + 280099, + 280108, + 279994, + 149146, + 280155, + 280056, + 279794, + 279937, + 280234, + 279852, + 279831, + 280225, + 279828, + 279916, + 279809, + 279751, + 148879, + 280094, + 280401, + 279891, + 280175, + 280166, + 280033, + 279706, + 280055, + 280102, + 279743, + 279993, + 279849, + 280156, + 279795, + 279860, + 279742, + 149164, + 279936, + 280107, + 280157, + 279934, + 149167, + 280397, + 279925, + 279981, + 280034, + 279722, + 279741, + 280226, + 279884, + 280235, + 280054, + 279833, + 279917, + 279808, + 279886, + 279753, + 280035, + 279705, + 280174, + 279990, + 156021, + 280201, + 279796, + 280095, + 155989, + 280158, + 279933, + 279850, + 279859, + 148886, + 280393, + 279982, + 279757, + 279888, + 279918, + 280053, + 280044, + 280159, + 280207, + 280227, + 279927, + 280106, + 279830, + 279797, + 280173, + 280236, + 280036, + 279702, + 279932, + 279745, + 148227, + 280052, + 279992, + 280392, + 149163, + 280160, + 279798, + 279931, + 280320, + 279890, + 280038, + 279701, + 280051, + 149175, + 279851, + 279858, + 280096, + 279919, + 279807, + 149158, + 280161, + 279983, + 280391, + 280103, + 280172, + 279752, + 279930, + 280105, + 280237, + 279989, + 290084, + 279799, + 155995, + 280162, + 279929, + 279746, + 280039, + 280050, + 279747, + 280202, + 280390, + 280243, + 156005, + 279829, + 280040, + 279700, + 279920, + 279806, + 280262, + 279732, + 279767, + 279967, + 280589, + 280005, + 279838, + 279704, + 280045, + 279801, + 280122, + 280082, + 279875, + 280214, + 279898, + 279822, + 156024, + 280047, + 280193, + 280123, + 279966, + 280006, + 279774, + 280192, + 280083, + 149159, + 280081, + 155992, + 280124, + 279770, + 280215, + 291035, + 279965, + 280590, + 280007, + 279731, + 279968, + 280165, + 279766, + 279775, + 279730, + 279899, + 279821, + 280120, + 280171, + 279839, + 279874, + 279877, + 280126, + 279733, + 149172, + 280080, + 280191, + 280004, + 280550, + 279771, + 280388, + 280008, + 279729, + 279897, + 279964, + 280127, + 280549, + 280084, + 280344, + 280265, + 280499, + 280357, + 280425, + 148872, + 290929, + 280747, + 280330, + 148889, + 280599, + 280245, + 280489, + 280249, + 280661, + 280331, + 290931, + 280428, + 148866, + 280520, + 280299, + 280596, + 280660, + 280432, + 280653, + 280733, + 280576, + 280698, + 280434, + 148877, + 280260, + 280584, + 280510, + 280461, + 280602, + 156010, + 280622, + 280385, + 280276, + 280536, + 280314, + 280691, + 280492, + 280447, + 280740, + 280332, + 280565, + 280678, + 280285, + 280458, + 280734, + 280343, + 280573, + 280478, + 280500, + 280686, + 280543, + 280572, + 280666, + 280617, + 280519, + 280288, + 280363, + 280546, + 149166, + 155984, + 280727, + 280342, + 280411, + 280456, + 280273, + 280669, + 280600, + 280695, + 148862, + 280566, + 280704, + 280640, + 280620, + 280732, + 149150, + 148224, + 280439, + 280626, + 155988, + 280607, + 280712, + 280287, + 280315, + 280353, + 280427, + 280534, + 280300, + 280581, + 280559, + 280558, + 280264, + 280375, + 280248, + 280670, + 280378, + 148859, + 280423, + 280455, + 280387, + 280518, + 155998, + 280555, + 148230, + 280303, + 280574, + 148873, + 156011, + 280321, + 280707, + 280593, + 280612, + 280511, + 280364, + 280539, + 280755, + 280289, + 280761, + 280449, + 280429, + 156028, + 280446, + 280284, + 280672, + 280283, + 280745, + 280742, + 280341, + 280333, + 280722, + 280687, + 280649, + 280739, + 280334, + 280430, + 280588, + 280759, + 280544, + 280517, + 280352, + 280340, + 290932, + 254109, + 280326, + 149143, + 148881, + 280325, + 280417, + 280690, + 280408, + 280706, + 280270, + 280569, + 280381, + 280472, + 280541, + 148863, + 280503, + 280719, + 280442, + 280616, + 280467, + 155990, + 280512, + 148887, + 280563, + 280552, + 280280, + 280305, + 280644, + 280339, + 280358, + 280246, + 280302, + 280454, + 280557, + 280648, + 280592, + 280749, + 280516, + 280513, + 280296, + 280468, + 149162, + 280360, + 280545, + 280277, + 280306, + 280630, + 280426, + 280610, + 280335, + 280711, + 280591, + 280309, + 280667, + 280721, + 280671, + 280718, + 280476, + 280275, + 280371, + 280394, + 148225, + 280724, + 280310, + 280597, + 280477, + 280716, + 280641, + 280564, + 280379, + 280700, + 280471, + 280365, + 280338, + 280624, + 280351, + 280399, + 280457, + 280611, + 280736, + 280336, + 156002, + 280729, + 280688, + 280488, + 280689, + 280356, + 280613, + 148222, + 280758, + 280746, + 280301, + 280741, + 280515, + 280286, + 280380, + 280579, + 280400, + 280635, + 280571, + 148876, + 149147, + 280312, + 280450, + 280259, + 280418, + 280542, + 280514, + 280627, + 280650, + 280567, + 280725, + 280386, + 156018, + 148228, + 280247, + 280313, + 280618, + 280337, + 280258, + 280726, + 280322, + 280532, + 280561, + 149144, + 149174, + 280268, + 280638, + 280404, + 280495, + 280366, + 280504, + 280583, + 280580, + 280665, + 280757, + 156004, + 280255, + 280359, + 280606, + 280680, + 280554, + 280459, + 280585, + 280677, + 280663, + 280424, + 280266, + 280491, + 280717, + 280697, + 280754, + 280487, + 156016, + 280619, + 148878, + 280282, + 156014, + 280251, + 280715, + 280528, + 156025, + 280710, + 280484, + 280367, + 280762, + 149171, + 280267, + 149145, + 156019, + 280643, + 280752, + 280481, + 280533, + 280694, + 280368, + 280636, + 280568, + 280701, + 280629, + 280438, + 280311, + 148868, + 280679, + 280498, + 280350, + 280319, + 280753, + 280639, + 280384, + 156015, + 280548, + 280370, + 280414, + 280529, + 280730, + 280316, + 280604, + 280293, + 280748, + 280256, + 148229, + 280486, + 280493, + 280551, + 280658, + 280578, + 280349, + 149152, + 280577, + 280633, + 280556, + 280664, + 280480, + 280323, + 280261, + 280562, + 280682, + 280625, + 280473, + 280505, + 156022, + 280421, + 280485, + 290928, + 280763, + 280696, + 280646, + 280369, + 280317, + 280623, + 280702, + 280738, + 280530, + 280448, + 280681, + 280376, + 280659, + 280506, + 280240, + 280460, + 162016, + 280361, + 280250, + 280631, + 280453, + 280537, + 280651, + 280595, + 280297, + 280656, + 280570, + 280655, + 280474, + 280750, + 280348, + 280628, + 280281, + 280535, + 280410, + 280355, + 280693, + 280402, + 280713, + 280409, + 280452, + 280254, + 280269, + 280294, + 280272, + 280252, + 280744, + 280441, + 280290, + 280412, + 280586, + 280714, + 280652, + 280605, + 280547, + 280470, + 280657, + 156020, + 280538, + 148882, + 280440, + 280684, + 290930, + 280523, + 280673, + 280662, + 280396, + 280383, + 280274, + 280637, + 280527, + 280298, + 280483, + 280632, + 280253, + 280374, + 280327, + 280735, + 155994, + 280507, + 280699, + 280522, + 148226, + 280708, + 280560, + 280347, + 280760, + 148869, + 148867, + 280278, + 280608, + 280582, + 149154, + 280362, + 149170, + 280318, + 280609, + 280469, + 280372, + 280756, + 280508, + 280373, + 280475, + 280709, + 280422, + 280692, + 280531, + 280324, + 280407, + 280354, + 280601, + 280308, + 280377, + 280437, + 280242, + 280346, + 280720, + 280465, + 280328, + 280621, + 280292, + 280737, + 280443, + 280413, + 280594, + 148885, + 280257, + 280668, + 280451, + 148223, + 280598, + 280743, + 280279, + 280683, + 280723, + 149160, + 280241, + 280271, + 280614, + 280615, + 280587, + 280295, + 280575, + 280329, + 280494, + 280345, + 280703, + 156006, + 280705, + 280553, + 280490, + 148884, + 280509, + 280647, + 280304, + 280307, + 280685, + 280403, + 280521, + 280634, + 280603, + 280524, + 280731, + 280466, + 280433, + 280482, + 280642, + 280398, + 280479, + 149149, + 280395, + 280382, + 280728, + 280645, + 280540, + 280462, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:49:03.508375+00:00", + }, + { + "code": "34", + "created_at": "2021-09-29T10:46:33.242256+00:00", + "display_name": "Aus Category", + "id": 157578, + "is_enabled": True, + "name": "Aus Category", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280257, + 280462, + 280385, + 148881, + 280677, + 280741, + 280311, + 280561, + 280494, + 280552, + 280622, + 280308, + 280440, + 280268, + 280697, + 280373, + 280312, + 280253, + 280421, + 280294, + 280583, + 280357, + 280439, + 280749, + 280759, + 280644, + 280283, + 280567, + 280356, + 280404, + 280241, + 156019, + 280528, + 280495, + 280671, + 148866, + 148878, + 280628, + 280447, + 280498, + 280551, + 280556, + 280696, + 280403, + 280453, + 280355, + 280252, + 280662, + 280656, + 280537, + 280374, + 280760, + 280395, + 280354, + 280723, + 280422, + 280465, + 280295, + 280731, + 280647, + 280708, + 280499, + 280634, + 280326, + 280569, + 280353, + 280733, + 280500, + 280695, + 280712, + 280584, + 280761, + 280352, + 149143, + 280503, + 280532, + 280319, + 280375, + 280531, + 280296, + 280325, + 280718, + 280351, + 148228, + 280423, + 280724, + 149147, + 280571, + 280258, + 148222, + 280438, + 280704, + 280504, + 280665, + 280694, + 156016, + 280585, + 280748, + 280424, + 280619, + 280251, + 280481, + 280762, + 280643, + 280414, + 280316, + 280730, + 280721, + 280350, + 280604, + 280548, + 280473, + 280726, + 280577, + 280349, + 280480, + 149152, + 280455, + 280505, + 280763, + 280323, + 280452, + 280738, + 280506, + 280250, + 280376, + 280297, + 280348, + 280402, + 280693, + 280429, + 148229, + 280564, + 280290, + 280347, + 280441, + 280547, + 280586, + 148882, + 280601, + 280298, + 280274, + 280278, + 148869, + 280507, + 148226, + 280609, + 280346, + 149170, + 280413, + 280470, + 280508, + 280692, + 280437, + 280562, + 280377, + 280535, + 280451, + 148885, + 280743, + 280276, + 280286, + 149160, + 280318, + 280587, + 280345, + 280615, + 280655, + 280705, + 280509, + 280669, + 280603, + 280539, + 280479, + 280642, + 280324, + 280265, + 280344, + 280747, + 149149, + 280425, + 290931, + 280249, + 280598, + 280299, + 280576, + 155988, + 280540, + 280510, + 280653, + 280691, + 280287, + 280478, + 156010, + 280343, + 280273, + 280666, + 280546, + 280572, + 280342, + 280566, + 280315, + 280456, + 280620, + 280626, + 156011, + 280607, + 280300, + 280248, + 280466, + 280378, + 280573, + 155998, + 148873, + 280672, + 280511, + 280289, + 156028, + 280284, + 280341, + 280739, + 280588, + 280340, + 290932, + 280716, + 280472, + 280690, + 280307, + 280270, + 280394, + 280706, + 280512, + 155990, + 280339, + 280467, + 280719, + 280557, + 280513, + 280545, + 280711, + 280591, + 280641, + 280426, + 280477, + 148225, + 156022, + 280446, + 280338, + 280681, + 280379, + 280611, + 280689, + 280400, + 280613, + 280746, + 280301, + 280541, + 280635, + 280450, + 280670, + 280259, + 280457, + 280514, + 280715, + 156018, + 280337, + 280247, + 280650, + 148876, + 280599, + 280725, + 280386, + 280306, + 280380, + 280515, + 280688, + 156014, + 280729, + 280310, + 280336, + 280673, + 156002, + 280399, + 280476, + 280335, + 280667, + 280471, + 280277, + 280612, + 149162, + 280468, + 280516, + 280592, + 280648, + 280302, + 280246, + 280610, + 148863, + 280442, + 280563, + 280275, + 280305, + 280517, + 280544, + 280381, + 280334, + 280687, + 280722, + 280745, + 280559, + 280449, + 280333, + 280280, + 280649, + 148859, + 280321, + 280303, + 148230, + 280707, + 280264, + 280518, + 280288, + 148224, + 280600, + 280427, + 149150, + 280593, + 280640, + 280558, + 155984, + 280411, + 280519, + 280543, + 280412, + 280686, + 280565, + 280285, + 280625, + 280332, + 290929, + 280740, + 280602, + 280260, + 280434, + 280534, + 148877, + 280520, + 280331, + 280660, + 280661, + 280245, + 148889, + 280428, + 280330, + 280560, + 280728, + 280536, + 280398, + 280433, + 280382, + 280530, + 280387, + 280521, + 280685, + 280575, + 280304, + 156006, + 280329, + 280432, + 280271, + 280683, + 280313, + 280396, + 280594, + 280328, + 280621, + 280668, + 280538, + 280475, + 280443, + 280632, + 280242, + 280720, + 149154, + 280469, + 280527, + 280608, + 148867, + 280522, + 155994, + 280327, + 280523, + 280684, + 280383, + 280272, + 280657, + 280281, + 280637, + 156020, + 280409, + 280714, + 280744, + 280524, + 280474, + 280742, + 280570, + 280651, + 280410, + 280533, + 162016, + 280460, + 280595, + 280631, + 280709, + 280659, + 280369, + 290928, + 280702, + 280682, + 280646, + 280485, + 280633, + 280417, + 280256, + 280529, + 280658, + 280568, + 280370, + 280486, + 280679, + 280753, + 280368, + 280701, + 280710, + 280752, + 149145, + 280606, + 280367, + 280384, + 280240, + 280484, + 156025, + 280317, + 280487, + 280754, + 280266, + 280663, + 280554, + 280717, + 156004, + 280680, + 280255, + 280542, + 280596, + 149144, + 148872, + 280267, + 280366, + 280322, + 149174, + 280282, + 280618, + 280627, + 280580, + 280418, + 280579, + 280261, + 280488, + 280736, + 280365, + 280638, + 148887, + 280700, + 280454, + 280371, + 280408, + 280309, + 280755, + 280574, + 280364, + 280555, + 280732, + 280458, + 149166, + 280581, + 280363, + 280678, + 280616, + 148862, + 280489, + 280645, + 280461, + 280430, + 280279, + 280623, + 280652, + 280490, + 280553, + 280407, + 280292, + 280597, + 280703, + 148223, + 280756, + 280727, + 280362, + 254109, + 280483, + 280699, + 280713, + 280254, + 280750, + 280269, + 280361, + 280734, + 280578, + 280459, + 280293, + 156015, + 148884, + 280629, + 280636, + 280491, + 280482, + 280757, + 280360, + 280617, + 148868, + 280492, + 280698, + 280639, + 280314, + 290930, + 280614, + 280737, + 280582, + 280605, + 280372, + 280630, + 280493, + 280359, + 280735, + 149171, + 280448, + 280664, + 280758, + 280624, + 280358, + 280201, + 148858, + 156027, + 279942, + 280225, + 279790, + 279831, + 280209, + 279766, + 279828, + 280419, + 280104, + 280061, + 279876, + 279916, + 279809, + 279773, + 280148, + 280110, + 279727, + 148879, + 279978, + 148888, + 279943, + 280231, + 279834, + 280094, + 280401, + 280011, + 280179, + 279891, + 280147, + 279996, + 280175, + 279775, + 279987, + 280026, + 279739, + 279721, + 280033, + 279706, + 279812, + 280055, + 279923, + 279912, + 280151, + 279896, + 279756, + 279864, + 280166, + 280098, + 280062, + 280102, + 279711, + 280654, + 279743, + 279993, + 279846, + 279977, + 279922, + 280025, + 279944, + 279849, + 279789, + 148864, + 279748, + 280189, + 280156, + 280111, + 149148, + 280045, + 279795, + 279936, + 279860, + 280079, + 280420, + 279899, + 279988, + 149156, + 280146, + 148231, + 279742, + 149164, + 280107, + 279821, + 280091, + 280180, + 280063, + 280165, + 280157, + 279934, + 279823, + 279925, + 280230, + 279882, + 279945, + 279832, + 149167, + 280397, + 279961, + 279788, + 279712, + 280024, + 279764, + 279730, + 279981, + 279741, + 280431, + 279893, + 279879, + 279722, + 279826, + 279749, + 279813, + 280226, + 279911, + 279865, + 279884, + 280145, + 279997, + 280235, + 280034, + 280054, + 279738, + 280064, + 279946, + 279833, + 149151, + 279787, + 149157, + 279917, + 280198, + 290065, + 279714, + 279808, + 280120, + 280023, + 280101, + 280090, + 280435, + 279753, + 280144, + 280181, + 280125, + 280035, + 279705, + 280112, + 156012, + 280174, + 280171, + 156026, + 279803, + 279990, + 280229, + 280048, + 280044, + 279947, + 280210, + 156021, + 280003, + 280065, + 280143, + 279758, + 148861, + 149173, + 279976, + 279924, + 279910, + 279796, + 155985, + 280095, + 280206, + 280022, + 279948, + 279786, + 279776, + 280158, + 279933, + 279998, + 279866, + 148886, + 279845, + 280436, + 279850, + 279859, + 149153, + 280142, + 279894, + 279839, + 156001, + 280204, + 280182, + 279835, + 280066, + 280393, + 279716, + 155989, + 280021, + 279881, + 279814, + 279982, + 279757, + 279874, + 279963, + 279909, + 156003, + 279918, + 280053, + 279734, + 279720, + 280121, + 279888, + 280228, + 280113, + 280163, + 280106, + 279949, + 279785, + 280239, + 280077, + 280159, + 280207, + 279921, + 279768, + 280067, + 280227, + 280444, + 279759, + 279830, + 156013, + 279887, + 279717, + 279804, + 279797, + 280173, + 280020, + 279975, + 280141, + 279950, + 280217, + 280236, + 279784, + 148880, + 279867, + 279877, + 280036, + 279702, + 279844, + 280197, + 280183, + 280089, + 279932, + 280445, + 280140, + 280169, + 149168, + 280751, + 280126, + 280068, + 279815, + 148227, + 279908, + 149161, + 279745, + 279991, + 280052, + 279999, + 280037, + 279992, + 280194, + 279737, + 280392, + 280127, + 280224, + 280114, + 280097, + 279951, + 279927, + 279718, + 280019, + 279974, + 280170, + 280160, + 149163, + 280139, + 279895, + 279952, + 279798, + 279931, + 280526, + 279890, + 279825, + 280069, + 279783, + 149172, + 280038, + 279701, + 279868, + 280051, + 280184, + 280080, + 290069, + 280211, + 279843, + 149175, + 280320, + 280018, + 148870, + 280100, + 280463, + 279772, + 279851, + 279858, + 279885, + 280088, + 280138, + 280263, + 279760, + 280129, + 279919, + 279807, + 155991, + 246836, + 279719, + 280096, + 149158, + 279816, + 279902, + 279907, + 280115, + 280070, + 279733, + 280161, + 279973, + 280168, + 280103, + 280223, + 280391, + 279953, + 279782, + 280388, + 279983, + 280172, + 280191, + 280000, + 280203, + 279752, + 148860, + 280017, + 279930, + 279736, + 156009, + 280464, + 280137, + 280105, + 280010, + 290068, + 280185, + 280029, + 280676, + 280213, + 280237, + 279869, + 279857, + 279954, + 279801, + 279781, + 290084, + 279962, + 279989, + 280071, + 279836, + 279880, + 279723, + 280004, + 279799, + 280016, + 280196, + 280136, + 155995, + 280162, + 279929, + 280042, + 279906, + 280164, + 279955, + 280116, + 279746, + 279853, + 279747, + 280496, + 280135, + 280039, + 280050, + 280550, + 279761, + 155986, + 280119, + 280202, + 280222, + 149155, + 280390, + 280072, + 280186, + 280087, + 280128, + 280243, + 156005, + 290067, + 279817, + 279905, + 279744, + 279837, + 148890, + 279724, + 280015, + 280040, + 279700, + 279873, + 279926, + 279920, + 279806, + 279972, + 280041, + 279935, + 279713, + 280549, + 279732, + 155996, + 280675, + 279956, + 280084, + 279767, + 279967, + 280190, + 280589, + 279870, + 280005, + 279842, + 279829, + 279780, + 280001, + 279838, + 279704, + 280049, + 279735, + 279985, + 280497, + 280134, + 280078, + 279769, + 280073, + 155987, + 280122, + 280212, + 279957, + 280082, + 279703, + 279779, + 279856, + 279715, + 279875, + 280008, + 280014, + 280291, + 279889, + 280187, + 280214, + 280219, + 279824, + 279898, + 279822, + 279729, + 280501, + 280133, + 279818, + 280086, + 280074, + 279725, + 279728, + 280013, + 156024, + 279904, + 280389, + 280123, + 279966, + 280009, + 148871, + 280117, + 280193, + 279774, + 279901, + 280195, + 279958, + 280006, + 279897, + 279805, + 280047, + 280192, + 279871, + 279841, + 279778, + 279750, + 280132, + 280002, + 155997, + 279762, + 279765, + 280083, + 279971, + 280075, + 149159, + 280081, + 279771, + 280674, + 279959, + 280188, + 155992, + 280118, + 280124, + 279726, + 280012, + 280218, + 279878, + 279964, + 280502, + 280131, + 279854, + 279970, + 279819, + 280216, + 280215, + 291035, + 279903, + 279928, + 280076, + 148874, + 279770, + 279965, + 279969, + 149169, + 279802, + 155999, + 156007, + 279751, + 155993, + 280406, + 280031, + 280233, + 279915, + 279810, + 280262, + 280093, + 280153, + 279939, + 279940, + 280058, + 279708, + 279820, + 280590, + 280030, + 280109, + 280085, + 149165, + 279980, + 280152, + 280205, + 279984, + 156008, + 280046, + 279793, + 280057, + 279995, + 280177, + 279960, + 280200, + 279938, + 280176, + 279740, + 279862, + 279848, + 279792, + 280221, + 280208, + 279777, + 279755, + 279979, + 279800, + 280154, + 279872, + 279883, + 280415, + 148875, + 279914, + 280059, + 280007, + 280032, + 279707, + 279709, + 280028, + 279763, + 280405, + 279861, + 280150, + 156000, + 279941, + 279754, + 279731, + 280099, + 279791, + 280232, + 279892, + 279827, + 279986, + 280108, + 280525, + 279855, + 279994, + 280060, + 280178, + 156023, + 148883, + 279811, + 149146, + 280416, + 279913, + 148865, + 280130, + 280155, + 280056, + 279710, + 280027, + 280043, + 279886, + 280092, + 280220, + 279840, + 279794, + 279937, + 279900, + 280167, + 279863, + 279847, + 280238, + 280149, + 279968, + 280234, + 279852, + 280199, + 280244, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:49:03.508375+00:00", + }, + { + "code": "35", + "created_at": "2021-09-29T10:46:33.242256+00:00", + "display_name": "Travel - Automobile", + "id": 157579, + "is_enabled": True, + "name": "Travel - Automobile", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280129, + 279794, + 279760, + 280590, + 280389, + 279919, + 279807, + 156000, + 279902, + 280117, + 156024, + 246836, + 279793, + 279719, + 280193, + 149175, + 280096, + 149158, + 279901, + 279774, + 280057, + 279816, + 279907, + 280232, + 155991, + 280103, + 280195, + 279800, + 280070, + 280115, + 279900, + 279958, + 148861, + 280161, + 156027, + 280244, + 279973, + 279942, + 279766, + 279889, + 280225, + 279790, + 279995, + 279725, + 280211, + 279843, + 279792, + 280013, + 279805, + 280018, + 280152, + 279927, + 279728, + 279968, + 148870, + 280088, + 279904, + 279941, + 280463, + 279876, + 148871, + 279851, + 279858, + 280009, + 156008, + 280123, + 280138, + 280263, + 279966, + 280100, + 280168, + 279791, + 280320, + 280006, + 279801, + 280223, + 280155, + 279891, + 280209, + 279733, + 279831, + 280419, + 280148, + 280391, + 280177, + 280004, + 280205, + 279916, + 279809, + 279953, + 279782, + 280061, + 280192, + 279740, + 280110, + 280216, + 279978, + 148879, + 280172, + 279727, + 279750, + 148888, + 279938, + 279871, + 280231, + 280000, + 279943, + 280011, + 279736, + 280017, + 280094, + 280401, + 279841, + 279983, + 279834, + 279752, + 280179, + 280147, + 280056, + 280654, + 279778, + 280175, + 279930, + 280200, + 279996, + 279775, + 280010, + 280026, + 156009, + 279987, + 279739, + 280047, + 279721, + 280132, + 148858, + 279892, + 280033, + 279706, + 280464, + 279773, + 279749, + 280137, + 279812, + 279912, + 280055, + 279960, + 280104, + 280151, + 280105, + 280002, + 279864, + 290068, + 279922, + 280176, + 155997, + 280062, + 279827, + 279711, + 280185, + 280029, + 279743, + 279993, + 280102, + 280025, + 279762, + 279846, + 280676, + 279756, + 280166, + 279896, + 279977, + 279777, + 279937, + 280083, + 280237, + 279944, + 279789, + 279823, + 155992, + 279849, + 279869, + 148864, + 279971, + 279840, + 279802, + 280674, + 280213, + 280156, + 280044, + 279954, + 279748, + 280111, + 149148, + 279781, + 279862, + 280189, + 279795, + 279936, + 279860, + 279988, + 280420, + 290084, + 280146, + 280075, + 279899, + 279925, + 279821, + 279765, + 149156, + 279848, + 149159, + 280071, + 280081, + 149164, + 280107, + 279836, + 279880, + 148231, + 279742, + 280091, + 280108, + 279715, + 280167, + 279723, + 280221, + 280157, + 279934, + 279710, + 279799, + 280016, + 280180, + 280230, + 279959, + 280098, + 279882, + 280196, + 279989, + 279945, + 280046, + 280136, + 149167, + 280397, + 280188, + 279853, + 279788, + 279906, + 280063, + 148860, + 279741, + 279712, + 280024, + 280208, + 155995, + 279764, + 279962, + 279879, + 279771, + 280169, + 280162, + 290065, + 279929, + 280027, + 279893, + 280118, + 280079, + 279964, + 279832, + 279826, + 280164, + 280043, + 280124, + 279923, + 279747, + 280226, + 279722, + 279813, + 279911, + 279955, + 279772, + 279865, + 280170, + 279994, + 280431, + 280145, + 279726, + 280116, + 279997, + 279885, + 280012, + 280235, + 279755, + 280034, + 279705, + 280054, + 280218, + 280171, + 279738, + 280496, + 280135, + 280064, + 279884, + 280203, + 279979, + 279833, + 280550, + 279878, + 279946, + 279787, + 280039, + 149157, + 280050, + 280120, + 280149, + 279917, + 280198, + 279986, + 280090, + 280101, + 279714, + 280023, + 279808, + 155986, + 280222, + 280549, + 280234, + 280502, + 280202, + 280042, + 280435, + 279981, + 279753, + 280144, + 280131, + 279857, + 280154, + 279990, + 280390, + 280181, + 280125, + 280060, + 149151, + 280128, + 280035, + 149155, + 279856, + 280087, + 280112, + 155996, + 280174, + 279854, + 280072, + 156012, + 279970, + 280186, + 280229, + 279883, + 279803, + 279820, + 279947, + 280143, + 279924, + 148865, + 280165, + 280210, + 156021, + 280243, + 280065, + 280119, + 280525, + 279758, + 280163, + 156005, + 280201, + 279976, + 149173, + 290067, + 280215, + 279910, + 279817, + 156026, + 279961, + 279905, + 279796, + 155985, + 149153, + 291035, + 280022, + 280415, + 279776, + 280206, + 279969, + 279948, + 279786, + 279724, + 280015, + 279819, + 280158, + 279933, + 279837, + 279804, + 279903, + 279998, + 280040, + 279866, + 280095, + 148886, + 279700, + 279845, + 280178, + 156001, + 280239, + 280003, + 148890, + 279850, + 279859, + 279914, + 280041, + 280436, + 280142, + 279761, + 279873, + 279894, + 280076, + 279920, + 279806, + 148874, + 280182, + 279713, + 280204, + 279828, + 279972, + 280393, + 156023, + 279839, + 280066, + 279835, + 279926, + 279716, + 280021, + 279881, + 279855, + 155989, + 279935, + 279770, + 280048, + 280675, + 279874, + 279965, + 279814, + 280106, + 279757, + 280238, + 148883, + 279909, + 279732, + 279928, + 156003, + 280032, + 279720, + 279734, + 149169, + 280053, + 279707, + 280199, + 279767, + 280121, + 279967, + 280228, + 155999, + 280007, + 280589, + 280113, + 279886, + 279918, + 280190, + 279956, + 280207, + 279888, + 279949, + 279785, + 280059, + 279870, + 279842, + 280005, + 280159, + 280092, + 280077, + 279897, + 279830, + 155993, + 279709, + 280067, + 279768, + 156013, + 279780, + 280227, + 280085, + 280444, + 280028, + 280001, + 279730, + 279963, + 280388, + 279759, + 280031, + 279704, + 279717, + 280406, + 279852, + 279797, + 279932, + 280173, + 279735, + 280217, + 280020, + 280233, + 279887, + 279975, + 280130, + 280141, + 279751, + 279921, + 279829, + 279950, + 279784, + 280497, + 280134, + 280236, + 280093, + 280049, + 148880, + 148875, + 279867, + 279844, + 279744, + 279915, + 280036, + 279702, + 280122, + 280194, + 279769, + 280197, + 279810, + 280089, + 280073, + 280183, + 279982, + 155987, + 279863, + 280084, + 280045, + 280140, + 280078, + 279763, + 280212, + 149168, + 280751, + 279984, + 279957, + 279779, + 280068, + 280082, + 279815, + 279908, + 280126, + 280153, + 148227, + 280405, + 149161, + 149146, + 156007, + 279745, + 279992, + 279939, + 280052, + 280014, + 279877, + 279991, + 279838, + 280037, + 279875, + 279746, + 279872, + 279861, + 279999, + 279737, + 280058, + 280097, + 280224, + 280392, + 279811, + 280291, + 279824, + 279731, + 280150, + 280214, + 279951, + 279708, + 280008, + 279718, + 280019, + 280219, + 280262, + 280114, + 279974, + 280030, + 280445, + 280139, + 279985, + 280220, + 280160, + 280187, + 149163, + 279890, + 279729, + 280416, + 279898, + 279895, + 279825, + 280191, + 279822, + 279798, + 279931, + 279913, + 280099, + 280526, + 149165, + 280127, + 280501, + 280133, + 280069, + 279952, + 279783, + 279847, + 279980, + 279818, + 280038, + 279701, + 280086, + 149172, + 279754, + 280051, + 280109, + 280080, + 279868, + 279703, + 290069, + 280074, + 279940, + 280184, + 280265, + 280678, + 280642, + 280382, + 156019, + 280603, + 280734, + 280521, + 280685, + 280749, + 280479, + 280632, + 280575, + 280705, + 290930, + 280325, + 280509, + 280353, + 280304, + 280615, + 280634, + 156006, + 280329, + 280673, + 280345, + 280411, + 280587, + 280489, + 149160, + 280721, + 148862, + 280747, + 280499, + 280396, + 280645, + 280271, + 280614, + 280536, + 280538, + 148885, + 155988, + 280647, + 280594, + 280328, + 280624, + 280313, + 280683, + 280377, + 280475, + 280281, + 280451, + 280279, + 280621, + 148868, + 280540, + 280750, + 280461, + 280357, + 280494, + 280470, + 280242, + 280622, + 280562, + 280692, + 280508, + 280443, + 280459, + 280527, + 280437, + 149154, + 280465, + 149170, + 280268, + 280490, + 280346, + 280413, + 280720, + 280553, + 280469, + 148226, + 280583, + 280245, + 280552, + 280249, + 280560, + 148889, + 280695, + 280492, + 280425, + 280428, + 280330, + 149166, + 290931, + 280698, + 149149, + 280625, + 280728, + 280581, + 280433, + 280363, + 280758, + 280535, + 280318, + 280500, + 280344, + 148867, + 280608, + 280715, + 280507, + 280731, + 280522, + 280668, + 280407, + 155994, + 280327, + 280295, + 280274, + 280298, + 148869, + 280657, + 280272, + 280278, + 148882, + 280539, + 280430, + 280523, + 280684, + 280422, + 280586, + 280532, + 280294, + 280537, + 280312, + 280383, + 280292, + 280441, + 280533, + 280439, + 280409, + 280727, + 280744, + 156020, + 280714, + 280358, + 280547, + 280601, + 280723, + 280458, + 280669, + 280347, + 280290, + 280354, + 280474, + 280699, + 148866, + 280693, + 280323, + 280348, + 162016, + 280297, + 280664, + 280570, + 280651, + 280756, + 280276, + 280703, + 280582, + 280376, + 280410, + 280483, + 280402, + 280250, + 280506, + 280362, + 280460, + 280359, + 280760, + 280605, + 280738, + 280561, + 280455, + 280682, + 280659, + 280452, + 280253, + 156022, + 280374, + 280713, + 280656, + 156025, + 280646, + 280616, + 280763, + 280286, + 280505, + 280737, + 280485, + 280619, + 280702, + 280726, + 280529, + 149152, + 280480, + 148223, + 280633, + 280569, + 280631, + 280417, + 280595, + 280349, + 280564, + 280577, + 280256, + 280252, + 254109, + 280710, + 280254, + 280369, + 280652, + 148881, + 280568, + 156011, + 280548, + 280604, + 280662, + 280319, + 280752, + 280639, + 280350, + 280404, + 280486, + 280531, + 280679, + 280372, + 280753, + 280368, + 280355, + 280701, + 280269, + 280730, + 280361, + 280677, + 280309, + 280609, + 290928, + 280473, + 280643, + 280762, + 280606, + 280308, + 280367, + 280556, + 280743, + 280542, + 280658, + 280403, + 280484, + 280578, + 280638, + 280240, + 280316, + 280696, + 280424, + 280373, + 280251, + 280481, + 280447, + 280487, + 280266, + 280628, + 149144, + 148222, + 280412, + 156004, + 280585, + 280551, + 280663, + 280554, + 280448, + 280748, + 280754, + 280293, + 280717, + 148872, + 156015, + 280742, + 280493, + 280680, + 280704, + 280384, + 280255, + 280498, + 280694, + 280440, + 280665, + 280241, + 149145, + 280326, + 280317, + 280596, + 280597, + 280322, + 280655, + 280337, + 280247, + 280741, + 156018, + 280504, + 280541, + 280259, + 280514, + 280310, + 148876, + 280366, + 280635, + 156014, + 280453, + 156016, + 280306, + 280670, + 280258, + 280446, + 280611, + 280725, + 280257, + 280450, + 280301, + 280438, + 280515, + 280746, + 280729, + 280688, + 280629, + 280689, + 280423, + 280380, + 280612, + 149174, + 280636, + 280336, + 280571, + 280400, + 280482, + 280476, + 280399, + 280379, + 280618, + 156002, + 280739, + 280627, + 280637, + 280613, + 280338, + 280335, + 148225, + 280277, + 280426, + 280641, + 280591, + 280282, + 280667, + 280477, + 280557, + 280579, + 280267, + 280711, + 280599, + 280545, + 280386, + 280471, + 280513, + 280724, + 149147, + 148878, + 280467, + 280580, + 280516, + 280574, + 280592, + 149162, + 280719, + 280697, + 280468, + 280491, + 280246, + 280414, + 280706, + 280457, + 280648, + 280339, + 280462, + 155990, + 280302, + 280512, + 280432, + 280610, + 290932, + 148228, + 148863, + 280334, + 280395, + 280442, + 280488, + 280387, + 280270, + 280370, + 280690, + 280340, + 280495, + 280517, + 280544, + 280418, + 280588, + 280559, + 280314, + 280722, + 280563, + 280381, + 280365, + 280716, + 280687, + 280311, + 280305, + 280745, + 280351, + 280449, + 280736, + 280307, + 280757, + 280333, + 280454, + 280284, + 280681, + 280341, + 148887, + 280511, + 280394, + 280617, + 280289, + 280700, + 280360, + 280472, + 280264, + 148873, + 280718, + 148230, + 280261, + 155998, + 280600, + 280385, + 280707, + 280288, + 280296, + 280573, + 280630, + 280518, + 280378, + 280375, + 148224, + 280280, + 280466, + 280248, + 280503, + 280456, + 280300, + 280408, + 280607, + 280626, + 280356, + 280620, + 280283, + 149150, + 149143, + 280593, + 280640, + 280275, + 280650, + 280649, + 156028, + 280427, + 280524, + 280352, + 280572, + 280342, + 280759, + 155984, + 280546, + 280761, + 280666, + 280708, + 280519, + 280543, + 149171, + 148859, + 280755, + 148884, + 280565, + 280686, + 280732, + 280566, + 280343, + 290929, + 156010, + 280567, + 280364, + 280644, + 280285, + 280315, + 280332, + 280429, + 280653, + 280273, + 280691, + 280598, + 280623, + 280584, + 280602, + 280528, + 280510, + 280740, + 280478, + 280434, + 280421, + 280398, + 280303, + 280530, + 280555, + 280260, + 280733, + 280321, + 280709, + 148877, + 280331, + 280672, + 280558, + 280534, + 280661, + 280299, + 280287, + 280735, + 280520, + 280671, + 280712, + 280576, + 280324, + 280660, + 280371, + 148229, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:49:03.508375+00:00", + }, + { + "code": "1", + "created_at": "2021-08-11T08:14:36.942235+00:00", + "display_name": "Cellular Phone", + "id": 147870, + "is_enabled": True, + "name": "Cellular Phone", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280130, + 280006, + 280088, + 279901, + 279987, + 279760, + 279816, + 280049, + 246836, + 279968, + 279966, + 280180, + 279962, + 280133, + 280103, + 279807, + 279907, + 149158, + 280115, + 280216, + 279904, + 280091, + 280161, + 280070, + 280009, + 279978, + 280123, + 280063, + 279961, + 280086, + 279988, + 280171, + 280013, + 280167, + 279701, + 279953, + 280223, + 280000, + 280391, + 148858, + 280193, + 279703, + 279782, + 280172, + 280208, + 279725, + 280017, + 280464, + 279930, + 279729, + 280214, + 279822, + 280107, + 279989, + 290068, + 280230, + 280074, + 279752, + 279852, + 280028, + 280117, + 279735, + 279799, + 280137, + 279736, + 280185, + 280237, + 156027, + 279818, + 279751, + 149148, + 280128, + 280029, + 279794, + 279973, + 279869, + 280262, + 280263, + 279938, + 280550, + 279836, + 156009, + 279954, + 279837, + 280105, + 280046, + 155995, + 280501, + 280389, + 280239, + 279824, + 149167, + 280071, + 279746, + 280097, + 280496, + 279723, + 279788, + 280219, + 279882, + 290084, + 280016, + 279764, + 279898, + 279712, + 279880, + 279728, + 280676, + 280202, + 279943, + 280187, + 156024, + 279875, + 279709, + 279805, + 280162, + 280163, + 279715, + 280136, + 280014, + 148875, + 279873, + 279906, + 280196, + 280116, + 280082, + 279955, + 149153, + 279929, + 279781, + 280045, + 280397, + 279761, + 279779, + 279981, + 279772, + 280039, + 280024, + 280135, + 280122, + 279984, + 280004, + 155986, + 280072, + 280050, + 149172, + 279957, + 280222, + 280164, + 149155, + 279804, + 156005, + 280186, + 280190, + 279893, + 280212, + 280243, + 290067, + 279913, + 155987, + 280059, + 280390, + 279829, + 279817, + 280170, + 279967, + 280225, + 280099, + 280087, + 279747, + 279724, + 280120, + 279763, + 280073, + 279889, + 280291, + 280040, + 279767, + 279920, + 280034, + 280134, + 280431, + 280168, + 280015, + 280027, + 280005, + 280226, + 290065, + 279905, + 279704, + 280078, + 279972, + 279935, + 279813, + 280497, + 280234, + 280008, + 279732, + 279941, + 279884, + 279820, + 279956, + 280675, + 279769, + 280041, + 279780, + 279979, + 280001, + 279870, + 279765, + 148879, + 279838, + 280589, + 279713, + 279842, + 280231, + 279883, + 279996, + 279879, + 279865, + 279914, + 279911, + 279872, + 280056, + 279826, + 279997, + 280235, + 280145, + 279828, + 280032, + 279775, + 280003, + 279749, + 280064, + 279821, + 279856, + 280415, + 280179, + 280054, + 279946, + 280401, + 279834, + 280244, + 149151, + 279986, + 279917, + 149157, + 280044, + 280549, + 279738, + 280092, + 280154, + 280079, + 279803, + 156008, + 279710, + 279787, + 279744, + 280206, + 280221, + 280199, + 280435, + 280198, + 279934, + 279741, + 280048, + 279792, + 279711, + 279714, + 279766, + 280023, + 279722, + 279840, + 279808, + 280026, + 279755, + 279833, + 279848, + 280033, + 280144, + 280090, + 279921, + 280112, + 280176, + 280147, + 280181, + 279885, + 280035, + 280125, + 279812, + 279862, + 280011, + 279877, + 148861, + 279758, + 156012, + 279855, + 280057, + 279927, + 280007, + 279839, + 280174, + 279994, + 280177, + 156000, + 280229, + 280101, + 279806, + 280210, + 279753, + 279947, + 280201, + 279847, + 279925, + 279857, + 279793, + 280152, + 280149, + 155989, + 280065, + 280077, + 280143, + 279706, + 280525, + 280200, + 279912, + 280098, + 279995, + 156021, + 280095, + 280102, + 280030, + 279721, + 149173, + 279796, + 279910, + 279976, + 279756, + 149165, + 148860, + 279874, + 280238, + 280084, + 148865, + 279998, + 280022, + 280104, + 280058, + 148883, + 279960, + 279948, + 280158, + 279786, + 279790, + 279733, + 280204, + 279866, + 280055, + 279940, + 280169, + 279896, + 280109, + 280093, + 279980, + 279850, + 279845, + 155985, + 279894, + 156013, + 279891, + 279965, + 280436, + 280142, + 280209, + 280153, + 279864, + 279859, + 279888, + 279835, + 279810, + 279743, + 280108, + 279939, + 280182, + 279933, + 279811, + 279924, + 155999, + 280126, + 280233, + 149146, + 148886, + 280066, + 279982, + 279708, + 280151, + 279716, + 280393, + 279705, + 280021, + 279801, + 279814, + 279918, + 156003, + 279942, + 279991, + 279909, + 280217, + 279739, + 155993, + 280031, + 156007, + 279748, + 280121, + 148874, + 280166, + 280406, + 279853, + 280203, + 279937, + 280155, + 279720, + 280113, + 280053, + 280205, + 279915, + 280419, + 280228, + 279887, + 279823, + 279757, + 279759, + 291035, + 280062, + 279949, + 279745, + 280654, + 280159, + 279963, + 279800, + 280076, + 279785, + 279768, + 279881, + 279731, + 280060, + 149169, + 279970, + 280175, + 280227, + 280067, + 279776, + 279903, + 279773, + 280444, + 280207, + 280047, + 279797, + 279827, + 279717, + 280020, + 279969, + 280320, + 279922, + 280094, + 279819, + 280194, + 280156, + 280141, + 279846, + 279849, + 279975, + 279923, + 279878, + 279916, + 280236, + 148880, + 280012, + 280025, + 279950, + 280215, + 280106, + 280178, + 279754, + 280131, + 279977, + 280526, + 279784, + 279876, + 280590, + 279899, + 279774, + 156023, + 280111, + 280036, + 279831, + 279867, + 279771, + 279844, + 280218, + 279863, + 280173, + 280183, + 280445, + 280416, + 279770, + 280089, + 280085, + 279730, + 155992, + 279802, + 279932, + 279897, + 149168, + 279830, + 279944, + 279726, + 280080, + 280165, + 280197, + 279993, + 148890, + 279815, + 279742, + 280068, + 279707, + 280118, + 280127, + 279778, + 280061, + 148227, + 279908, + 280081, + 279702, + 149161, + 279985, + 149164, + 280188, + 279854, + 280751, + 280674, + 280189, + 279999, + 148864, + 156001, + 280140, + 279902, + 280052, + 280232, + 280037, + 279990, + 280213, + 279718, + 279900, + 148871, + 280148, + 279992, + 280224, + 279789, + 279737, + 280114, + 155996, + 279959, + 280042, + 279795, + 279971, + 280043, + 279951, + 280392, + 149175, + 149163, + 280132, + 280019, + 280420, + 280160, + 149159, + 279700, + 279974, + 280139, + 280405, + 280124, + 279895, + 279798, + 155991, + 279860, + 155997, + 279952, + 280220, + 280069, + 280010, + 279892, + 280038, + 279783, + 280211, + 280110, + 279791, + 280502, + 280083, + 279926, + 280100, + 279727, + 279964, + 148231, + 279868, + 149156, + 279777, + 280184, + 290069, + 280146, + 280075, + 279936, + 280002, + 279928, + 279841, + 280157, + 280051, + 279931, + 279861, + 279890, + 280192, + 279945, + 279983, + 280129, + 279843, + 279825, + 279740, + 279871, + 279919, + 148870, + 280096, + 280191, + 280388, + 280018, + 279886, + 279851, + 280463, + 279734, + 279858, + 279809, + 279958, + 156026, + 148888, + 279762, + 280195, + 280150, + 280119, + 279750, + 279719, + 279832, + 280138, + 280458, + 280272, + 280709, + 280286, + 280559, + 148229, + 280742, + 280394, + 280471, + 280470, + 280395, + 280573, + 148884, + 280715, + 280741, + 162016, + 280710, + 280396, + 280560, + 280469, + 280569, + 280398, + 280308, + 280264, + 280660, + 280319, + 280285, + 280728, + 280411, + 280740, + 280399, + 280468, + 280650, + 280400, + 280711, + 155988, + 280443, + 280467, + 280284, + 280739, + 280265, + 280615, + 280538, + 280609, + 280572, + 280402, + 280466, + 149152, + 280738, + 156016, + 280571, + 280712, + 280403, + 280465, + 280735, + 280524, + 280404, + 280638, + 280561, + 280462, + 280283, + 280459, + 280434, + 280737, + 280240, + 280407, + 280713, + 280408, + 280461, + 280736, + 280266, + 280282, + 290928, + 280651, + 156011, + 280267, + 280659, + 280681, + 280610, + 280570, + 280409, + 280714, + 280721, + 280460, + 280410, + 156020, + 280534, + 280639, + 254109, + 280305, + 280601, + 280326, + 280542, + 280595, + 280327, + 280684, + 280523, + 280522, + 149154, + 280242, + 155994, + 280328, + 280621, + 280432, + 280720, + 280668, + 280594, + 280329, + 280536, + 280685, + 148224, + 280271, + 280521, + 280304, + 156006, + 280330, + 280565, + 280331, + 280245, + 280309, + 280623, + 280520, + 280722, + 148877, + 280428, + 280613, + 280602, + 280332, + 280640, + 280686, + 280543, + 155984, + 280672, + 280519, + 149150, + 148230, + 280446, + 280427, + 280729, + 280442, + 280518, + 280277, + 280669, + 280449, + 280537, + 280303, + 280593, + 280333, + 280334, + 280687, + 280275, + 280310, + 280544, + 280517, + 148863, + 280246, + 280302, + 280516, + 280592, + 280335, + 280667, + 280336, + 156002, + 280688, + 280337, + 280515, + 280725, + 280450, + 290931, + 148876, + 280247, + 280514, + 156018, + 280635, + 280276, + 280563, + 280689, + 280301, + 280641, + 280338, + 280545, + 280597, + 280611, + 148225, + 280313, + 280591, + 280513, + 280339, + 155990, + 280340, + 280315, + 280690, + 280433, + 280512, + 280341, + 290932, + 280270, + 280588, + 148873, + 280546, + 280273, + 280426, + 280566, + 280437, + 280248, + 280626, + 280511, + 280300, + 155998, + 149149, + 280719, + 280342, + 280343, + 280691, + 280666, + 156010, + 280603, + 280249, + 280441, + 280653, + 280620, + 280299, + 280344, + 280510, + 280637, + 280274, + 280425, + 280278, + 280727, + 280642, + 280345, + 280451, + 280726, + 280509, + 149160, + 280587, + 148885, + 280346, + 149170, + 280692, + 280508, + 280347, + 280507, + 280298, + 280673, + 280532, + 148226, + 280598, + 280547, + 280586, + 280452, + 280438, + 280348, + 280316, + 280693, + 280250, + 280506, + 280297, + 280505, + 280763, + 280349, + 280724, + 280562, + 280321, + 280447, + 148882, + 290930, + 280730, + 280622, + 280350, + 280604, + 280548, + 280643, + 280694, + 280251, + 280619, + 280762, + 280504, + 280351, + 280439, + 280424, + 148228, + 149147, + 280585, + 280352, + 280665, + 280296, + 280503, + 280723, + 280718, + 280761, + 280353, + 280695, + 280500, + 280656, + 280423, + 280731, + 280440, + 280584, + 148867, + 280499, + 156019, + 280634, + 280295, + 280354, + 280551, + 280535, + 280760, + 280671, + 280307, + 280453, + 280530, + 280355, + 280252, + 148878, + 280696, + 280498, + 280422, + 280567, + 156022, + 280540, + 280356, + 280495, + 280644, + 280759, + 280357, + 280253, + 280294, + 280697, + 280552, + 280636, + 280421, + 280494, + 280583, + 149171, + 280625, + 148881, + 280358, + 280758, + 280664, + 280359, + 280279, + 280605, + 280614, + 280600, + 280493, + 280312, + 280582, + 280360, + 280698, + 148862, + 280492, + 148222, + 149144, + 280454, + 280491, + 280757, + 156015, + 280293, + 280361, + 280322, + 280624, + 280254, + 280362, + 280699, + 280645, + 280612, + 280269, + 280756, + 280553, + 280490, + 280292, + 280732, + 149145, + 280363, + 280489, + 149166, + 280364, + 280581, + 280448, + 280755, + 148887, + 148223, + 280700, + 280365, + 280554, + 280488, + 280366, + 280627, + 280618, + 280655, + 280418, + 280568, + 280682, + 280606, + 280658, + 280529, + 280255, + 280680, + 280580, + 280663, + 280487, + 280317, + 148872, + 280717, + 280754, + 280367, + 280368, + 280701, + 280679, + 280753, + 280256, + 280486, + 280646, + 280369, + 280702, + 280485, + 280370, + 280752, + 280484, + 149174, + 156004, + 280579, + 280596, + 156025, + 280633, + 280629, + 280371, + 280318, + 280555, + 280678, + 280323, + 280417, + 280703, + 280483, + 280750, + 280617, + 280430, + 280652, + 280733, + 280578, + 280455, + 280528, + 280372, + 280373, + 280257, + 280482, + 280677, + 280749, + 280374, + 280556, + 280324, + 280268, + 280531, + 280541, + 280662, + 280647, + 280375, + 280704, + 149143, + 280258, + 280481, + 280311, + 280748, + 280480, + 280376, + 280577, + 280290, + 280306, + 280414, + 280705, + 148869, + 280377, + 148866, + 280479, + 280314, + 280456, + 280630, + 280747, + 280241, + 280478, + 280607, + 280378, + 280557, + 280289, + 280576, + 280379, + 280706, + 280539, + 280259, + 280477, + 280429, + 280716, + 280746, + 280380, + 280683, + 149162, + 280280, + 280527, + 280476, + 280648, + 280381, + 280745, + 280707, + 280558, + 280288, + 280382, + 280260, + 148889, + 280661, + 280631, + 280657, + 280575, + 280608, + 280475, + 280383, + 280564, + 290929, + 280474, + 156028, + 280744, + 280413, + 280734, + 280599, + 280384, + 280533, + 148868, + 280708, + 280385, + 280628, + 280473, + 280457, + 148859, + 280743, + 280472, + 280287, + 280386, + 280649, + 280574, + 280670, + 280261, + 280616, + 280325, + 280412, + 280632, + 280281, + 156014, + 280387, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.252512+00:00", + }, + { + "code": "4", + "created_at": "2021-08-11T08:14:36.942235+00:00", + "display_name": "Integration Test Account", + "id": 147871, + "is_enabled": True, + "name": "Integration Test Account", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280690, + 280655, + 280432, + 280613, + 280276, + 280727, + 280447, + 280430, + 280448, + 280429, + 280657, + 148884, + 280728, + 280321, + 156011, + 280720, + 280271, + 280428, + 280565, + 280427, + 280729, + 280449, + 280277, + 280669, + 280450, + 280563, + 280611, + 280270, + 280426, + 280566, + 280719, + 280653, + 280425, + 280278, + 280451, + 280452, + 280562, + 148882, + 280673, + 280730, + 280424, + 280718, + 280423, + 280731, + 280422, + 280597, + 280453, + 280567, + 280421, + 149171, + 280614, + 280279, + 280629, + 280269, + 280732, + 280454, + 280418, + 280568, + 280658, + 280717, + 156025, + 280417, + 280652, + 280455, + 280268, + 280733, + 280414, + 280531, + 280456, + 280716, + 280413, + 280280, + 280631, + 290929, + 280734, + 280457, + 280412, + 280281, + 280458, + 280715, + 280411, + 155988, + 280569, + 280735, + 280459, + 280267, + 280410, + 156020, + 280460, + 280714, + 280681, + 280409, + 280570, + 280610, + 280659, + 280651, + 290928, + 280282, + 280266, + 280736, + 280534, + 280408, + 280461, + 280713, + 280407, + 280737, + 280283, + 280638, + 280462, + 280561, + 280404, + 280465, + 280403, + 280712, + 280571, + 156016, + 280738, + 149152, + 280402, + 280466, + 280609, + 280572, + 280615, + 280265, + 280739, + 280284, + 280467, + 280711, + 280400, + 280650, + 280319, + 280468, + 280399, + 280740, + 280285, + 280660, + 280264, + 280398, + 280240, + 280308, + 280469, + 280560, + 280396, + 280710, + 162016, + 280741, + 280395, + 280470, + 280573, + 280471, + 280394, + 280742, + 148229, + 280559, + 280286, + 280709, + 280387, + 280632, + 280670, + 280616, + 280261, + 280574, + 280649, + 280386, + 280533, + 280287, + 280472, + 280743, + 280473, + 280628, + 280385, + 280708, + 148868, + 280384, + 280744, + 280474, + 280383, + 156028, + 280475, + 280608, + 280661, + 280575, + 148889, + 280260, + 280382, + 280288, + 280539, + 280558, + 280707, + 280745, + 280381, + 280648, + 149162, + 280476, + 280380, + 280746, + 280477, + 280259, + 280379, + 280706, + 280576, + 280289, + 280557, + 280378, + 280607, + 280478, + 280747, + 280479, + 280377, + 148869, + 280705, + 280290, + 148866, + 280241, + 280376, + 280577, + 280480, + 280748, + 280481, + 280258, + 280311, + 149143, + 280704, + 280375, + 280647, + 280662, + 280556, + 280374, + 280749, + 280677, + 280373, + 280257, + 280372, + 280482, + 280578, + 280617, + 280750, + 280483, + 280703, + 280318, + 280678, + 280555, + 280371, + 280633, + 280579, + 149174, + 156004, + 280484, + 280752, + 280370, + 280536, + 280485, + 280702, + 280369, + 280646, + 280486, + 280256, + 280753, + 280679, + 280701, + 280317, + 280368, + 280367, + 280754, + 280487, + 280663, + 280680, + 280255, + 280606, + 280580, + 280366, + 280618, + 280627, + 280488, + 280554, + 280365, + 280700, + 148887, + 280755, + 280581, + 280364, + 148223, + 149166, + 280489, + 280363, + 280292, + 280490, + 280553, + 280756, + 280645, + 280699, + 280362, + 280254, + 280361, + 280624, + 280293, + 156015, + 280757, + 149144, + 280491, + 280492, + 280698, + 280360, + 280582, + 280493, + 280605, + 280359, + 280312, + 280664, + 280758, + 280358, + 148881, + 280583, + 280494, + 280552, + 280697, + 280294, + 280253, + 280357, + 280759, + 280644, + 280495, + 280356, + 148878, + 280498, + 280551, + 280696, + 280540, + 280252, + 280355, + 280760, + 156019, + 280354, + 280295, + 280634, + 280499, + 280584, + 280500, + 280695, + 148222, + 280353, + 280761, + 280503, + 280296, + 280535, + 280352, + 149147, + 280665, + 148228, + 280351, + 280504, + 280585, + 280762, + 280619, + 280251, + 280694, + 280643, + 280548, + 280604, + 280350, + 280349, + 280763, + 280505, + 280297, + 280506, + 280250, + 280316, + 280532, + 280693, + 280348, + 280586, + 148867, + 280547, + 148226, + 280298, + 280598, + 280507, + 280347, + 280508, + 280692, + 149170, + 280346, + 148885, + 280587, + 149160, + 280509, + 280345, + 280603, + 280642, + 280344, + 280299, + 280637, + 280620, + 280249, + 156010, + 280510, + 280666, + 280691, + 280343, + 280342, + 280626, + 280300, + 155998, + 280248, + 280511, + 280546, + 148873, + 280341, + 280588, + 280315, + 280512, + 280340, + 155990, + 280339, + 280513, + 280591, + 148225, + 280545, + 280313, + 280641, + 280338, + 280301, + 280689, + 280635, + 280514, + 156018, + 280247, + 148876, + 280515, + 280337, + 280688, + 156002, + 280336, + 280667, + 280335, + 280592, + 280516, + 280302, + 280246, + 148863, + 280672, + 280310, + 280517, + 280544, + 280687, + 280314, + 280334, + 280333, + 280593, + 280303, + 280518, + 148230, + 149150, + 280519, + 155984, + 280543, + 280686, + 280640, + 280332, + 280602, + 148877, + 280600, + 280520, + 280331, + 280245, + 280309, + 280330, + 156006, + 280304, + 280521, + 280685, + 280329, + 280623, + 280594, + 280668, + 280621, + 280328, + 280242, + 155994, + 149154, + 280522, + 280327, + 280523, + 280684, + 280595, + 280542, + 280639, + 280326, + 280601, + 280305, + 254109, + 280524, + 280538, + 280599, + 156014, + 280325, + 148859, + 280527, + 280683, + 280306, + 280541, + 280324, + 280323, + 280528, + 280596, + 148872, + 280529, + 280682, + 149145, + 280322, + 280625, + 148862, + 280530, + 280636, + 280307, + 156022, + 280671, + 280440, + 280656, + 280439, + 280723, + 280724, + 280622, + 280438, + 280274, + 280441, + 149149, + 280437, + 280273, + 280537, + 290932, + 290931, + 280725, + 280275, + 280442, + 280722, + 148224, + 280434, + 280443, + 280272, + 280433, + 280564, + 280630, + 290930, + 280726, + 280446, + 280721, + 280612, + 280006, + 280130, + 280234, + 156023, + 148861, + 280092, + 279847, + 280108, + 279863, + 279731, + 280220, + 279794, + 280046, + 279913, + 280027, + 280056, + 279710, + 280104, + 280166, + 280525, + 279994, + 148865, + 148883, + 149146, + 279811, + 280099, + 280155, + 279773, + 280060, + 279827, + 280178, + 279805, + 280416, + 279754, + 280167, + 279707, + 280085, + 280232, + 279892, + 280405, + 279791, + 279740, + 279861, + 280150, + 279777, + 280028, + 280079, + 279938, + 279709, + 280059, + 148875, + 279763, + 279872, + 279941, + 279979, + 280244, + 279883, + 279914, + 280032, + 280208, + 280415, + 279986, + 279834, + 280098, + 280154, + 156008, + 280221, + 279722, + 279792, + 279755, + 279848, + 280176, + 279862, + 156000, + 280007, + 280057, + 280177, + 279793, + 279995, + 280152, + 280200, + 279855, + 148858, + 280030, + 149165, + 279856, + 279960, + 280058, + 280102, + 279980, + 279968, + 279940, + 280109, + 280093, + 280048, + 280153, + 279810, + 279939, + 279965, + 280233, + 279708, + 280031, + 155993, + 156007, + 280406, + 280205, + 148874, + 155999, + 279915, + 291035, + 280076, + 149169, + 279923, + 279970, + 279903, + 280590, + 279819, + 279969, + 280215, + 279853, + 279878, + 280012, + 279885, + 279730, + 280131, + 280047, + 280165, + 279876, + 280218, + 279770, + 280216, + 155992, + 279726, + 279897, + 280118, + 279854, + 279778, + 280188, + 280674, + 280081, + 279959, + 148871, + 279900, + 149159, + 279971, + 280132, + 280124, + 155997, + 279700, + 280169, + 280083, + 280502, + 280002, + 279774, + 155996, + 279964, + 280075, + 279928, + 279841, + 279703, + 280192, + 279871, + 279958, + 279832, + 279762, + 280195, + 279901, + 279966, + 279904, + 280123, + 280117, + 280009, + 280086, + 280013, + 280193, + 279725, + 279729, + 280074, + 280214, + 279818, + 280389, + 279735, + 280133, + 279822, + 280501, + 279824, + 279898, + 280219, + 279728, + 156024, + 280187, + 279875, + 280014, + 279715, + 280082, + 279779, + 279765, + 280122, + 279957, + 280212, + 279889, + 155987, + 280291, + 279967, + 280073, + 279767, + 280134, + 280078, + 280005, + 280497, + 279704, + 280163, + 279769, + 279780, + 279838, + 280001, + 280041, + 279842, + 280589, + 280008, + 279870, + 279820, + 279956, + 280675, + 279935, + 279713, + 279732, + 279972, + 279905, + 279806, + 279920, + 280015, + 280040, + 279724, + 280087, + 279747, + 279829, + 279817, + 280044, + 280243, + 290067, + 156005, + 280190, + 280390, + 280186, + 280388, + 149155, + 280168, + 280222, + 280072, + 280050, + 155986, + 280164, + 280135, + 280004, + 290065, + 280039, + 279761, + 279781, + 280202, + 279873, + 279955, + 279929, + 280116, + 280196, + 279906, + 280136, + 280103, + 280162, + 280676, + 279880, + 280016, + 279744, + 279772, + 279804, + 279723, + 279801, + 290084, + 280496, + 280262, + 279746, + 280071, + 280097, + 280042, + 279837, + 155995, + 279954, + 279836, + 280105, + 156009, + 279869, + 280263, + 280029, + 280237, + 280128, + 280185, + 279973, + 279736, + 280137, + 279799, + 279989, + 290068, + 280550, + 279752, + 280464, + 279930, + 280017, + 280049, + 280172, + 280239, + 279782, + 280391, + 280000, + 280223, + 279771, + 279953, + 279701, + 280161, + 280070, + 148890, + 280115, + 279907, + 149158, + 279750, + 279962, + 279807, + 246836, + 279816, + 280119, + 279760, + 280088, + 279719, + 280138, + 279858, + 279851, + 280463, + 279734, + 280096, + 280018, + 279919, + 279926, + 148870, + 279825, + 279843, + 279983, + 279890, + 280129, + 279931, + 280051, + 290069, + 280184, + 280100, + 280191, + 279868, + 280084, + 280211, + 279783, + 280038, + 280069, + 155991, + 279798, + 280010, + 279952, + 279895, + 279985, + 280139, + 279974, + 280160, + 149175, + 280019, + 149163, + 279951, + 280392, + 280114, + 279737, + 280224, + 280213, + 279718, + 279992, + 280037, + 280052, + 279999, + 280751, + 149161, + 279902, + 279990, + 279908, + 279702, + 148227, + 279886, + 280068, + 280549, + 280171, + 279815, + 280197, + 156001, + 280140, + 280320, + 149168, + 280080, + 280089, + 279932, + 280445, + 279745, + 279852, + 279830, + 280183, + 280173, + 279844, + 280036, + 279867, + 280526, + 279831, + 148880, + 279784, + 280236, + 279950, + 279975, + 280141, + 280106, + 280194, + 280020, + 279717, + 279797, + 279963, + 280207, + 280444, + 280227, + 280067, + 279776, + 279768, + 279759, + 279785, + 280159, + 279949, + 279887, + 279757, + 280113, + 280228, + 279823, + 280121, + 280053, + 280217, + 279720, + 279991, + 279909, + 279881, + 156003, + 279918, + 279814, + 280126, + 279742, + 280021, + 279982, + 280393, + 279716, + 280066, + 279888, + 148886, + 280182, + 279835, + 280142, + 279859, + 148860, + 280436, + 279850, + 279894, + 279924, + 155985, + 280204, + 279845, + 156013, + 279933, + 279866, + 280203, + 279786, + 280158, + 279948, + 279998, + 280022, + 155989, + 279976, + 279910, + 279796, + 149173, + 280077, + 280095, + 280045, + 280143, + 156021, + 279874, + 280065, + 280206, + 280201, + 279947, + 279753, + 280210, + 279921, + 280229, + 279839, + 280174, + 279758, + 279705, + 156012, + 280101, + 279877, + 280125, + 280120, + 280035, + 280181, + 280112, + 280090, + 280144, + 279925, + 279808, + 280023, + 279833, + 280654, + 279714, + 280198, + 279803, + 280435, + 279934, + 279787, + 279738, + 149157, + 149151, + 279917, + 279741, + 279946, + 280054, + 280064, + 280003, + 279749, + 280145, + 279821, + 280235, + 279997, + 279911, + 279865, + 279826, + 279879, + 279884, + 279813, + 280226, + 280034, + 280431, + 279857, + 149172, + 279893, + 280024, + 279766, + 279981, + 279712, + 279984, + 279764, + 279882, + 280397, + 279788, + 156026, + 279961, + 149167, + 280230, + 280107, + 280063, + 279988, + 149148, + 279922, + 280180, + 280091, + 279945, + 280157, + 149153, + 280146, + 279936, + 149156, + 148231, + 279860, + 280420, + 279795, + 279789, + 149164, + 280189, + 148864, + 279993, + 279849, + 279944, + 279899, + 280111, + 279977, + 280025, + 279751, + 279846, + 280156, + 279748, + 279743, + 280062, + 279739, + 280175, + 280151, + 279733, + 279864, + 279896, + 280055, + 279756, + 279721, + 280043, + 279912, + 279800, + 279706, + 279812, + 280011, + 280147, + 280033, + 280026, + 279891, + 279711, + 280401, + 280179, + 279775, + 280238, + 279996, + 280231, + 280127, + 279943, + 279987, + 279978, + 148888, + 148879, + 279727, + 280094, + 279809, + 280148, + 280061, + 279916, + 280419, + 279840, + 279927, + 280209, + 279790, + 279937, + 279802, + 279828, + 156027, + 280110, + 280225, + 279942, + 280199, + 280170, + 280149, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.252512+00:00", + }, + { + "code": "5", + "created_at": "2021-08-11T08:14:36.942235+00:00", + "display_name": "Travelling Charges", + "id": 147872, + "is_enabled": True, + "name": "Travelling Charges", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280036, + 279812, + 279733, + 280526, + 148231, + 279867, + 280206, + 280200, + 280525, + 280143, + 280178, + 280654, + 279770, + 156021, + 280019, + 279721, + 279876, + 280065, + 279830, + 280075, + 280103, + 279874, + 280152, + 280191, + 280201, + 280148, + 148880, + 156001, + 149163, + 279995, + 279793, + 279839, + 280232, + 279947, + 279993, + 279968, + 279784, + 280210, + 279790, + 280147, + 290069, + 280033, + 280131, + 280057, + 280011, + 280229, + 279816, + 280129, + 279753, + 280177, + 279913, + 280236, + 279758, + 280174, + 280051, + 280171, + 280138, + 279950, + 279760, + 156012, + 280012, + 279831, + 280026, + 279928, + 279705, + 279878, + 279805, + 279748, + 279975, + 280101, + 279862, + 280184, + 280125, + 279951, + 280215, + 279791, + 280035, + 280238, + 280141, + 280170, + 280112, + 279971, + 280181, + 279937, + 280176, + 279789, + 280392, + 156023, + 279819, + 279846, + 280106, + 279891, + 280090, + 280003, + 279848, + 279900, + 280144, + 279762, + 280120, + 280114, + 279922, + 156000, + 279755, + 280020, + 149159, + 280194, + 280173, + 279710, + 279808, + 279777, + 279919, + 280023, + 280189, + 279797, + 279737, + 280213, + 279833, + 279717, + 280018, + 279730, + 279714, + 280156, + 279792, + 279722, + 280590, + 149164, + 279751, + 279803, + 279863, + 280435, + 279996, + 280224, + 280221, + 280167, + 280198, + 280207, + 155996, + 280043, + 279934, + 279868, + 156008, + 280444, + 279787, + 279892, + 149151, + 279903, + 280163, + 280154, + 280401, + 148871, + 280227, + 279775, + 149157, + 279743, + 279774, + 279718, + 279917, + 280179, + 280067, + 279925, + 279828, + 279979, + 279896, + 279946, + 280002, + 280388, + 279970, + 279738, + 279741, + 279964, + 280415, + 149169, + 280064, + 280211, + 279885, + 280085, + 279768, + 279992, + 280054, + 280056, + 279711, + 279958, + 280235, + 280208, + 279759, + 279749, + 280032, + 279860, + 280145, + 279887, + 279997, + 280083, + 279834, + 280007, + 280674, + 279785, + 280199, + 279750, + 279914, + 280076, + 280159, + 280099, + 279911, + 280037, + 279985, + 279821, + 280127, + 279865, + 279959, + 279986, + 279949, + 280060, + 279826, + 291035, + 279883, + 280048, + 280052, + 280001, + 279884, + 279842, + 279901, + 280062, + 280097, + 279936, + 279847, + 280589, + 280113, + 149153, + 279870, + 280081, + 279915, + 280041, + 279780, + 279838, + 279999, + 279856, + 280228, + 279783, + 279879, + 148870, + 279956, + 279757, + 148874, + 280320, + 279813, + 280675, + 279858, + 279704, + 279767, + 279719, + 279769, + 155999, + 280497, + 280231, + 279935, + 148864, + 279941, + 280226, + 279732, + 156007, + 279994, + 279972, + 280121, + 280005, + 280751, + 279905, + 155993, + 279713, + 280419, + 280053, + 279739, + 279806, + 280225, + 279720, + 279920, + 280034, + 280188, + 280134, + 156026, + 280015, + 280175, + 280078, + 280042, + 280038, + 280040, + 280096, + 279909, + 280073, + 280217, + 279724, + 149161, + 279871, + 280166, + 279967, + 279899, + 280087, + 280031, + 279829, + 280431, + 279811, + 280094, + 156003, + 279897, + 279817, + 148875, + 280084, + 279969, + 279918, + 279927, + 280100, + 279857, + 280190, + 279747, + 155987, + 280406, + 280243, + 280027, + 280291, + 280061, + 290067, + 279852, + 279908, + 280126, + 280069, + 156005, + 279893, + 279814, + 279902, + 279742, + 280212, + 280420, + 280186, + 280059, + 279881, + 279982, + 280390, + 148227, + 280008, + 279851, + 279778, + 149155, + 279864, + 279849, + 279981, + 148861, + 280021, + 155991, + 279889, + 279872, + 280222, + 279776, + 279801, + 280262, + 279957, + 280072, + 280068, + 279888, + 148858, + 280050, + 279771, + 279843, + 155986, + 280024, + 279820, + 280118, + 280502, + 280122, + 279716, + 279798, + 279708, + 279943, + 280135, + 280393, + 279942, + 279800, + 280039, + 279965, + 279707, + 279745, + 279779, + 280164, + 280066, + 279761, + 149146, + 279763, + 280082, + 280202, + 279765, + 280405, + 280233, + 279873, + 280195, + 280205, + 279815, + 279715, + 279712, + 279944, + 279955, + 280104, + 279952, + 279709, + 280116, + 279987, + 280045, + 280168, + 279734, + 149156, + 279929, + 280182, + 279764, + 279906, + 280151, + 280014, + 279810, + 148886, + 280196, + 279835, + 279832, + 280004, + 279923, + 155997, + 280136, + 280197, + 279754, + 280153, + 280162, + 279916, + 279875, + 280187, + 280140, + 279794, + 279773, + 280047, + 279882, + 279880, + 279744, + 280142, + 279984, + 280130, + 280192, + 280016, + 148860, + 279854, + 280044, + 279859, + 280111, + 280219, + 280046, + 279726, + 279723, + 279978, + 279898, + 279788, + 280010, + 279840, + 280239, + 290084, + 280496, + 280436, + 279728, + 149168, + 280093, + 280397, + 279746, + 280169, + 280204, + 279824, + 279837, + 279855, + 280071, + 280092, + 279894, + 149167, + 279961, + 279850, + 279836, + 279756, + 290065, + 279781, + 279895, + 148883, + 155995, + 279945, + 279939, + 280416, + 280501, + 280055, + 148865, + 279954, + 280165, + 280216, + 155992, + 279731, + 279822, + 279845, + 280676, + 279825, + 280108, + 279938, + 156024, + 279703, + 279799, + 280049, + 279886, + 279869, + 280102, + 280209, + 156009, + 156013, + 280237, + 280133, + 280028, + 280089, + 280098, + 280029, + 279866, + 279735, + 148888, + 279818, + 279827, + 280105, + 280230, + 279940, + 280185, + 279932, + 155985, + 280463, + 279823, + 279973, + 279933, + 280128, + 279729, + 279924, + 280080, + 280124, + 280445, + 280137, + 279802, + 279989, + 279772, + 280107, + 280214, + 280234, + 279786, + 280389, + 280074, + 280079, + 290068, + 280139, + 279700, + 280158, + 279912, + 279752, + 280109, + 280220, + 149175, + 279804, + 279948, + 280464, + 280063, + 280086, + 279727, + 279736, + 280263, + 279977, + 280550, + 279930, + 279890, + 280088, + 279861, + 280017, + 280160, + 279998, + 280549, + 279725, + 148879, + 280172, + 149148, + 279990, + 280058, + 149172, + 280022, + 280146, + 279877, + 279782, + 280183, + 155989, + 280193, + 280110, + 280391, + 279795, + 279980, + 280000, + 280157, + 279921, + 279991, + 279960, + 279766, + 280223, + 280218, + 279974, + 280095, + 279983, + 279963, + 149165, + 279953, + 280180, + 280025, + 148890, + 280013, + 156027, + 279701, + 279976, + 280161, + 280150, + 280009, + 279702, + 280070, + 279988, + 279926, + 279706, + 279904, + 280119, + 279910, + 280123, + 280115, + 280091, + 279931, + 279809, + 280117, + 279796, + 279907, + 279844, + 280132, + 279740, + 149158, + 280006, + 280077, + 279962, + 280149, + 279841, + 280244, + 280203, + 279807, + 279966, + 280030, + 246836, + 280155, + 149173, + 279853, + 280283, + 280257, + 280664, + 280671, + 280359, + 280462, + 280493, + 280614, + 280605, + 280582, + 280395, + 280372, + 280307, + 280455, + 280385, + 280596, + 280482, + 280533, + 280360, + 280639, + 280578, + 280655, + 280652, + 280698, + 280617, + 280737, + 280492, + 280279, + 280624, + 280757, + 280491, + 280459, + 156015, + 280293, + 280636, + 280629, + 280407, + 280361, + 280750, + 280715, + 149144, + 280254, + 280318, + 280530, + 290930, + 280483, + 280524, + 280699, + 280362, + 280269, + 280645, + 280756, + 280553, + 280632, + 280703, + 148872, + 280490, + 280708, + 280292, + 280417, + 280732, + 280678, + 280638, + 280489, + 148223, + 280363, + 149166, + 280581, + 148862, + 280364, + 280657, + 280555, + 280755, + 280713, + 280454, + 148887, + 280700, + 148868, + 280371, + 280321, + 280430, + 280461, + 280365, + 280554, + 156025, + 280529, + 280579, + 280742, + 280488, + 280322, + 280627, + 280618, + 280418, + 280366, + 280240, + 149174, + 280580, + 280606, + 280412, + 280658, + 156004, + 280542, + 280255, + 280680, + 280663, + 280487, + 280630, + 280717, + 280408, + 280484, + 280736, + 280754, + 149145, + 280568, + 280367, + 280266, + 280752, + 280282, + 280368, + 280701, + 280679, + 280448, + 280753, + 290928, + 280370, + 280721, + 280317, + 280682, + 280256, + 280486, + 280633, + 280485, + 280646, + 280369, + 280702, + 280741, + 280384, + 280267, + 280734, + 280651, + 280527, + 280744, + 280659, + 280460, + 280616, + 280474, + 156014, + 280570, + 280595, + 280409, + 280728, + 280410, + 280714, + 280681, + 156020, + 280684, + 280523, + 280281, + 280383, + 280327, + 290929, + 280522, + 155994, + 280433, + 280538, + 280608, + 149154, + 280710, + 280637, + 280475, + 162016, + 280242, + 280328, + 280621, + 280720, + 280559, + 280631, + 280668, + 280261, + 280594, + 280539, + 280443, + 280575, + 280396, + 280329, + 280271, + 280685, + 280521, + 280309, + 280304, + 156006, + 280330, + 280709, + 148889, + 280308, + 280432, + 280612, + 280245, + 280661, + 280394, + 280434, + 280331, + 280520, + 280428, + 148877, + 280565, + 280602, + 280560, + 280260, + 280683, + 280600, + 280332, + 280469, + 280382, + 280640, + 280686, + 148224, + 280543, + 280288, + 280398, + 280519, + 280429, + 155984, + 149150, + 280285, + 280558, + 280540, + 280427, + 280599, + 148230, + 280518, + 156022, + 280729, + 280303, + 280574, + 280707, + 280449, + 280593, + 280536, + 280722, + 280264, + 280745, + 280660, + 280333, + 280334, + 280687, + 280277, + 280544, + 280517, + 156011, + 280381, + 148863, + 280310, + 280246, + 280302, + 280442, + 280411, + 280648, + 280306, + 280458, + 280563, + 280516, + 280592, + 280649, + 149162, + 280740, + 280613, + 280280, + 280335, + 280476, + 280399, + 280667, + 280336, + 156002, + 280275, + 280688, + 280515, + 280672, + 280468, + 280380, + 280337, + 280413, + 280531, + 280450, + 148876, + 280716, + 280247, + 280477, + 280650, + 156018, + 280514, + 280725, + 280610, + 280259, + 280635, + 280670, + 156028, + 280746, + 280386, + 280313, + 280669, + 280689, + 280301, + 280338, + 280641, + 280286, + 290931, + 280611, + 148225, + 280591, + 280545, + 280513, + 280314, + 280400, + 280557, + 280379, + 280339, + 155990, + 280340, + 280690, + 280325, + 280706, + 280319, + 280512, + 280305, + 280588, + 280287, + 280270, + 280541, + 280576, + 290932, + 280341, + 280289, + 280711, + 148867, + 148873, + 280315, + 280426, + 280276, + 280546, + 280511, + 148229, + 155998, + 280566, + 280248, + 280471, + 280378, + 254109, + 280446, + 280300, + 280273, + 280626, + 280472, + 280607, + 280573, + 280620, + 280719, + 280342, + 280666, + 280478, + 280467, + 280343, + 280691, + 280510, + 155988, + 156010, + 280537, + 280653, + 280456, + 280249, + 280747, + 280284, + 280299, + 280344, + 280425, + 148884, + 280278, + 280479, + 280739, + 280642, + 280603, + 149149, + 280345, + 280509, + 280451, + 280572, + 280587, + 149160, + 148885, + 280437, + 280346, + 149170, + 280265, + 280377, + 280692, + 280508, + 280598, + 280622, + 280457, + 148869, + 280466, + 280347, + 280507, + 280298, + 280705, + 280324, + 148226, + 280743, + 280414, + 280547, + 280290, + 280470, + 280586, + 280452, + 280441, + 280693, + 280615, + 280348, + 148882, + 280241, + 280250, + 280506, + 280601, + 280376, + 280316, + 280297, + 280274, + 280577, + 280569, + 280532, + 280505, + 280763, + 280480, + 280609, + 280625, + 280562, + 280727, + 280402, + 280349, + 280730, + 280350, + 148866, + 280438, + 280473, + 280748, + 280387, + 280604, + 280548, + 280694, + 280323, + 280481, + 280738, + 280643, + 280251, + 280619, + 280762, + 280585, + 149152, + 280535, + 280504, + 280424, + 280351, + 148228, + 280326, + 280258, + 280665, + 149147, + 280352, + 280296, + 280724, + 280503, + 280718, + 148222, + 156016, + 149143, + 280761, + 280447, + 280353, + 280695, + 280571, + 280704, + 280500, + 280423, + 280311, + 280712, + 280375, + 280528, + 280584, + 280731, + 280499, + 280723, + 280634, + 280403, + 280295, + 280647, + 280354, + 280465, + 280760, + 280726, + 280422, + 280623, + 280733, + 280453, + 280662, + 280735, + 156019, + 280252, + 280355, + 280696, + 280656, + 280551, + 280404, + 280556, + 280272, + 280268, + 280498, + 280564, + 280374, + 148878, + 280628, + 280567, + 280495, + 280439, + 280749, + 280356, + 148859, + 280644, + 280759, + 280357, + 280253, + 280294, + 280697, + 280421, + 280552, + 280494, + 280673, + 280677, + 280561, + 280583, + 280597, + 148881, + 280440, + 280534, + 280373, + 149171, + 280312, + 280358, + 280758, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.252512+00:00", + }, + { + "code": "7", + "created_at": "2021-08-11T08:14:36.942235+00:00", + "display_name": "expense category", + "id": 147873, + "is_enabled": True, + "name": "expense category", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 148230, + 280387, + 280533, + 280458, + 280709, + 280286, + 280524, + 280616, + 280261, + 280412, + 280632, + 280649, + 280386, + 280325, + 280457, + 148884, + 280472, + 280287, + 280743, + 280473, + 280628, + 280385, + 148859, + 148868, + 280539, + 280708, + 280734, + 280574, + 280384, + 280527, + 280474, + 280744, + 280383, + 280608, + 290929, + 280475, + 280631, + 280531, + 280575, + 280683, + 148889, + 280661, + 280260, + 280382, + 280288, + 280558, + 280536, + 280707, + 280429, + 280745, + 280381, + 280648, + 280280, + 149162, + 280306, + 280476, + 280380, + 280477, + 280259, + 280716, + 280746, + 280379, + 280557, + 280706, + 280541, + 156028, + 280240, + 280289, + 280576, + 280378, + 280607, + 280309, + 280478, + 280456, + 280747, + 280413, + 280479, + 280705, + 280377, + 280324, + 148869, + 280318, + 280290, + 280414, + 280376, + 280577, + 280480, + 280241, + 280323, + 280748, + 280481, + 148866, + 280258, + 149143, + 280704, + 280375, + 280647, + 280733, + 280311, + 280662, + 280556, + 280528, + 280374, + 280268, + 280749, + 280677, + 280373, + 280257, + 280455, + 280372, + 156022, + 280482, + 280596, + 280617, + 280578, + 280652, + 280750, + 280483, + 280703, + 148872, + 280678, + 280555, + 280417, + 280371, + 280448, + 280673, + 280579, + 149174, + 156025, + 156004, + 254109, + 280484, + 280529, + 280752, + 280370, + 280702, + 280658, + 280369, + 280485, + 280646, + 280633, + 280317, + 280682, + 280486, + 280256, + 280753, + 280679, + 280701, + 280368, + 280568, + 280367, + 149145, + 280717, + 280487, + 280754, + 280321, + 280663, + 280680, + 280606, + 280255, + 280580, + 280366, + 280618, + 280627, + 280322, + 280418, + 149144, + 280488, + 280554, + 280630, + 280365, + 280700, + 148887, + 280430, + 280454, + 280755, + 290930, + 280364, + 280581, + 148862, + 149166, + 280363, + 280732, + 280489, + 280645, + 148223, + 280490, + 280553, + 280292, + 280756, + 280362, + 280699, + 280269, + 280254, + 280530, + 280361, + 280629, + 280293, + 156015, + 280636, + 280491, + 280757, + 280279, + 280492, + 280698, + 280360, + 280624, + 280307, + 280582, + 280605, + 280614, + 280493, + 280727, + 280597, + 280359, + 280671, + 280664, + 280758, + 280358, + 280655, + 149171, + 148881, + 280440, + 280312, + 280494, + 280552, + 280583, + 280697, + 280421, + 280294, + 280253, + 280357, + 280759, + 280644, + 280439, + 280356, + 280495, + 280567, + 148878, + 280498, + 280551, + 280696, + 280656, + 156019, + 280355, + 280252, + 280453, + 280760, + 280422, + 280354, + 280295, + 280723, + 280634, + 280731, + 280499, + 280726, + 280584, + 280500, + 280695, + 280423, + 280447, + 280353, + 280761, + 280352, + 280503, + 280718, + 280296, + 148222, + 280724, + 280351, + 149147, + 280665, + 148228, + 280424, + 280504, + 280585, + 280619, + 280251, + 280762, + 280643, + 280535, + 280694, + 280532, + 280350, + 280548, + 280438, + 280604, + 280730, + 280349, + 280562, + 280316, + 280505, + 280763, + 280297, + 280274, + 280506, + 280250, + 280348, + 280693, + 280452, + 280441, + 280586, + 280547, + 148882, + 148226, + 280298, + 280507, + 280347, + 280278, + 280508, + 280692, + 280598, + 149170, + 280346, + 280437, + 148885, + 280537, + 280451, + 149160, + 280587, + 280345, + 280314, + 280509, + 280603, + 149149, + 280642, + 280425, + 280344, + 280249, + 280299, + 280653, + 156010, + 280510, + 280691, + 280343, + 280666, + 280546, + 280342, + 280620, + 280626, + 280273, + 280566, + 280300, + 280248, + 280276, + 280315, + 155998, + 148873, + 280446, + 280511, + 280426, + 280669, + 280341, + 290932, + 280588, + 280270, + 280512, + 280690, + 280340, + 280719, + 155990, + 280339, + 280513, + 280545, + 280672, + 280591, + 148225, + 290931, + 280641, + 280338, + 280611, + 280622, + 280301, + 280689, + 280635, + 280313, + 280514, + 280725, + 156018, + 280247, + 280450, + 148876, + 280337, + 280515, + 280688, + 156002, + 280336, + 280275, + 280729, + 280667, + 280335, + 280613, + 280592, + 280310, + 280277, + 280516, + 280302, + 280246, + 280442, + 280563, + 148863, + 148867, + 280517, + 280544, + 280334, + 280687, + 280722, + 280333, + 280449, + 280593, + 280303, + 280518, + 280427, + 149150, + 280640, + 148224, + 155984, + 280519, + 280543, + 280686, + 280612, + 280600, + 280625, + 280332, + 280565, + 280602, + 280540, + 148877, + 280434, + 280520, + 280428, + 280331, + 280245, + 280330, + 156006, + 280304, + 280521, + 280685, + 280271, + 280329, + 280432, + 280594, + 280443, + 280668, + 280621, + 280328, + 280720, + 280242, + 280433, + 149154, + 155994, + 280637, + 280522, + 280327, + 280523, + 280684, + 156020, + 280714, + 280657, + 280409, + 280410, + 280595, + 280570, + 280681, + 280460, + 280659, + 280651, + 290928, + 280267, + 280282, + 280266, + 280736, + 280542, + 280408, + 280638, + 280272, + 280461, + 280407, + 280713, + 280459, + 280737, + 280639, + 280462, + 280283, + 280561, + 280735, + 280404, + 280465, + 280403, + 280712, + 280569, + 280326, + 280571, + 280534, + 156016, + 149152, + 280738, + 280402, + 280319, + 280609, + 280601, + 280615, + 280466, + 280265, + 280572, + 280739, + 155988, + 280284, + 280467, + 280711, + 280400, + 280599, + 280650, + 156011, + 280610, + 280399, + 280305, + 280468, + 280740, + 280411, + 280264, + 280285, + 280660, + 280398, + 280728, + 280469, + 280560, + 280396, + 280538, + 162016, + 280710, + 280281, + 280308, + 280721, + 280741, + 280395, + 280715, + 280623, + 280470, + 280573, + 280564, + 280471, + 280559, + 280394, + 156014, + 280742, + 148229, + 280670, + 279807, + 279897, + 280096, + 279816, + 280220, + 279901, + 279754, + 279760, + 280107, + 280405, + 155991, + 280388, + 279719, + 156023, + 280195, + 148231, + 280138, + 280088, + 279766, + 279858, + 279851, + 279958, + 280463, + 279964, + 280006, + 280146, + 280100, + 279899, + 280018, + 279762, + 279937, + 148870, + 279936, + 279774, + 280192, + 279871, + 149156, + 279843, + 279820, + 280044, + 280225, + 279841, + 279791, + 149164, + 279931, + 290069, + 279804, + 280184, + 280075, + 280051, + 279701, + 279868, + 280148, + 280211, + 280002, + 279825, + 280213, + 279801, + 279783, + 279885, + 280038, + 280420, + 280132, + 149175, + 280069, + 280083, + 279890, + 279798, + 279860, + 279952, + 279795, + 155997, + 279895, + 149148, + 280189, + 280139, + 280010, + 280160, + 280124, + 280239, + 279974, + 280127, + 280232, + 280097, + 279742, + 280019, + 149163, + 279832, + 280191, + 279900, + 279971, + 280129, + 279951, + 279809, + 280114, + 279789, + 149159, + 148871, + 279922, + 280224, + 279916, + 280392, + 279718, + 279730, + 280081, + 280111, + 279737, + 280320, + 279992, + 280674, + 279927, + 280037, + 279959, + 279999, + 280052, + 279703, + 280061, + 279778, + 280045, + 279969, + 280188, + 148864, + 149161, + 279892, + 280099, + 280103, + 279908, + 148227, + 279849, + 279902, + 280068, + 280199, + 280751, + 279750, + 279745, + 279944, + 279815, + 280502, + 280118, + 155992, + 280092, + 280140, + 279963, + 149168, + 279726, + 280012, + 279827, + 279932, + 280445, + 280110, + 279876, + 279991, + 280089, + 280080, + 149172, + 279748, + 280108, + 280183, + 280218, + 280197, + 280526, + 279854, + 280025, + 279844, + 279805, + 279702, + 280036, + 279867, + 279770, + 279977, + 149153, + 148880, + 280098, + 280131, + 279784, + 279878, + 280236, + 279993, + 279950, + 280156, + 279975, + 279831, + 280178, + 280141, + 279928, + 279830, + 280106, + 279819, + 280215, + 279846, + 280020, + 280173, + 279797, + 280194, + 279717, + 279896, + 279903, + 279759, + 279733, + 280444, + 279743, + 280227, + 280042, + 280067, + 279970, + 279887, + 280207, + 279711, + 279768, + 280159, + 149169, + 279863, + 280590, + 279773, + 279785, + 280076, + 291035, + 280126, + 279949, + 280062, + 280549, + 148874, + 279915, + 280113, + 280419, + 280046, + 280060, + 280228, + 279994, + 156001, + 155999, + 280163, + 156007, + 280121, + 279720, + 155993, + 280244, + 280053, + 279918, + 279965, + 156003, + 280217, + 279909, + 279757, + 279982, + 279814, + 280234, + 280406, + 280654, + 279881, + 279864, + 279888, + 280031, + 280021, + 279708, + 280167, + 279984, + 279776, + 279716, + 279739, + 280393, + 148860, + 280066, + 280233, + 279828, + 279835, + 279810, + 279802, + 280182, + 280151, + 148886, + 279921, + 280153, + 279734, + 280093, + 280142, + 148883, + 280204, + 279859, + 279850, + 280436, + 279756, + 279894, + 280209, + 279939, + 279800, + 279845, + 280205, + 279866, + 280048, + 279940, + 155985, + 279933, + 156013, + 279811, + 279786, + 280169, + 280158, + 279877, + 279948, + 279912, + 280109, + 279924, + 279998, + 280055, + 280022, + 155989, + 149146, + 280058, + 280171, + 279980, + 280095, + 279796, + 280104, + 280206, + 279960, + 279910, + 280077, + 280416, + 280030, + 279976, + 279990, + 149173, + 279812, + 149165, + 279847, + 279886, + 279855, + 280143, + 279706, + 156021, + 280065, + 279721, + 280152, + 280201, + 280033, + 279874, + 279839, + 280210, + 279947, + 279913, + 279793, + 279995, + 280057, + 280229, + 279790, + 279758, + 280102, + 280174, + 148865, + 280177, + 156012, + 279840, + 280200, + 280176, + 279705, + 280026, + 279740, + 280112, + 280011, + 280125, + 280149, + 280035, + 279862, + 280181, + 280101, + 280525, + 148875, + 279777, + 280003, + 279848, + 280175, + 280144, + 279753, + 280155, + 279755, + 279803, + 280090, + 280120, + 279996, + 280023, + 279792, + 279808, + 280147, + 279833, + 279775, + 279714, + 279891, + 279923, + 280221, + 280435, + 279710, + 279722, + 280198, + 149151, + 156008, + 280166, + 279787, + 156000, + 279934, + 280154, + 280085, + 149157, + 280179, + 279917, + 279979, + 279946, + 280079, + 279938, + 280208, + 148861, + 280064, + 280401, + 280415, + 279738, + 280056, + 280054, + 280235, + 279997, + 279834, + 280145, + 280094, + 279741, + 156026, + 279914, + 279749, + 279883, + 280043, + 279884, + 279925, + 279865, + 279731, + 279821, + 279987, + 279826, + 279911, + 280027, + 279842, + 280001, + 280005, + 280170, + 279986, + 279870, + 280226, + 279780, + 279838, + 280589, + 279767, + 279956, + 279813, + 279704, + 280041, + 280675, + 279856, + 279769, + 279935, + 280497, + 280231, + 279732, + 279941, + 279905, + 280034, + 279972, + 279713, + 279806, + 279920, + 280134, + 280015, + 280040, + 279942, + 279967, + 279724, + 279879, + 280073, + 280078, + 280431, + 279829, + 280262, + 280203, + 279817, + 280216, + 280087, + 280190, + 155987, + 279751, + 280243, + 279893, + 290067, + 280291, + 279747, + 156005, + 148858, + 280072, + 279727, + 280186, + 280212, + 279744, + 280390, + 279981, + 149155, + 279857, + 280008, + 280122, + 280059, + 280047, + 280222, + 279771, + 280032, + 279957, + 279943, + 155986, + 280024, + 280050, + 279761, + 279926, + 280082, + 280135, + 280039, + 279707, + 279852, + 279779, + 280202, + 280164, + 279873, + 280116, + 279715, + 279763, + 279712, + 279955, + 279889, + 279875, + 279765, + 279764, + 280014, + 279906, + 279929, + 155995, + 280196, + 280049, + 280084, + 280130, + 280136, + 279709, + 280162, + 279872, + 280187, + 280168, + 280219, + 280496, + 280016, + 279882, + 279746, + 279799, + 279723, + 279788, + 279880, + 279837, + 279961, + 279824, + 290084, + 280397, + 280071, + 149167, + 279898, + 279836, + 279985, + 279781, + 279945, + 279728, + 279853, + 280501, + 279954, + 279794, + 279822, + 279968, + 280676, + 155996, + 279729, + 279869, + 280028, + 280133, + 280237, + 279735, + 280029, + 279989, + 280185, + 280230, + 279818, + 156009, + 279973, + 280007, + 280128, + 280214, + 148888, + 280105, + 280165, + 156024, + 280157, + 290068, + 280137, + 279861, + 280063, + 290065, + 280074, + 280086, + 280464, + 279736, + 279930, + 280389, + 280017, + 156027, + 279752, + 280172, + 280550, + 280000, + 279772, + 279725, + 280150, + 279782, + 280119, + 279978, + 280391, + 280263, + 280193, + 148890, + 280009, + 280223, + 280180, + 279983, + 280004, + 279953, + 280013, + 280161, + 280070, + 279904, + 148879, + 280115, + 280123, + 279966, + 280091, + 279907, + 279962, + 149158, + 280238, + 280117, + 279823, + 246836, + 279988, + 279700, + 279919, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.252512+00:00", + }, + { + "code": "217", + "created_at": "2021-08-10T06:17:45.487347+00:00", + "display_name": "GST Paid", + "id": 147708, + "is_enabled": True, + "name": "GST Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280671, + 280609, + 280417, + 280312, + 280615, + 280446, + 280247, + 280563, + 280524, + 280499, + 280572, + 280673, + 148876, + 280326, + 280337, + 148884, + 280402, + 280582, + 156002, + 280652, + 280466, + 280607, + 280584, + 280403, + 280688, + 280667, + 254109, + 280733, + 280705, + 280336, + 280358, + 280310, + 280268, + 156016, + 280553, + 280542, + 149152, + 280335, + 280441, + 280738, + 280592, + 280684, + 280516, + 280434, + 280712, + 280290, + 280319, + 280599, + 280487, + 280571, + 280443, + 280583, + 280302, + 280414, + 280517, + 280561, + 280500, + 280595, + 148863, + 280533, + 280404, + 280327, + 280465, + 280456, + 280701, + 280368, + 280377, + 280726, + 280283, + 280246, + 280280, + 280716, + 280462, + 290930, + 280334, + 280687, + 280523, + 280605, + 280737, + 280277, + 280544, + 149154, + 280713, + 280333, + 280613, + 280407, + 148869, + 280432, + 280593, + 280631, + 280695, + 280303, + 280292, + 290929, + 280408, + 280757, + 280518, + 280461, + 280564, + 280540, + 280413, + 280657, + 148230, + 149150, + 280266, + 280479, + 280242, + 280437, + 280681, + 280519, + 280353, + 155984, + 280305, + 280761, + 280282, + 280756, + 280734, + 280747, + 280736, + 280522, + 280651, + 280640, + 290928, + 280578, + 280457, + 280490, + 280686, + 155994, + 280503, + 280610, + 156015, + 280458, + 280659, + 280332, + 280543, + 280328, + 280296, + 280602, + 148877, + 280412, + 280309, + 280728, + 280409, + 280520, + 280714, + 280367, + 280621, + 280665, + 280570, + 280378, + 280668, + 280410, + 280555, + 280429, + 280331, + 280460, + 280245, + 280363, + 156020, + 280281, + 280272, + 280330, + 156006, + 280267, + 280478, + 280715, + 280569, + 280459, + 280270, + 280638, + 280329, + 280663, + 280735, + 280304, + 280594, + 280314, + 280521, + 280489, + 280535, + 280685, + 280257, + 155988, + 280411, + 280352, + 280585, + 280450, + 280557, + 280723, + 280754, + 149147, + 280491, + 280360, + 280289, + 280601, + 280699, + 280484, + 280706, + 280625, + 280294, + 280664, + 280379, + 280485, + 280311, + 280580, + 148228, + 280504, + 280373, + 280273, + 280259, + 280364, + 280746, + 290932, + 149166, + 148223, + 280351, + 280619, + 280762, + 149149, + 280451, + 280680, + 280380, + 280617, + 280477, + 280488, + 280581, + 280648, + 280251, + 280697, + 149162, + 280370, + 280755, + 280703, + 280476, + 280643, + 280606, + 280694, + 280365, + 280493, + 280548, + 148887, + 280677, + 280576, + 280449, + 148866, + 280350, + 280505, + 280316, + 280255, + 280381, + 148222, + 280763, + 280700, + 280558, + 280253, + 280702, + 280618, + 280707, + 280482, + 280745, + 280729, + 280297, + 280630, + 280506, + 280366, + 280357, + 280382, + 280554, + 280759, + 280241, + 280604, + 280250, + 280447, + 280698, + 280288, + 290931, + 280349, + 280278, + 280317, + 280670, + 280260, + 280724, + 148889, + 280725, + 280552, + 280348, + 280439, + 280369, + 280575, + 280693, + 280586, + 280612, + 148226, + 280749, + 280383, + 280425, + 280608, + 280293, + 280678, + 280475, + 280492, + 280653, + 280547, + 280661, + 280427, + 280298, + 280644, + 280656, + 280507, + 280440, + 280495, + 156028, + 280744, + 280359, + 156022, + 280452, + 280647, + 280347, + 280508, + 280752, + 280384, + 280758, + 280474, + 280276, + 148882, + 280361, + 280692, + 149170, + 280598, + 280708, + 280636, + 280374, + 148868, + 280346, + 280730, + 148885, + 149160, + 280275, + 280385, + 280556, + 280534, + 280587, + 148867, + 280628, + 280371, + 280597, + 280254, + 280473, + 280530, + 280727, + 280743, + 280614, + 280509, + 280562, + 280486, + 280666, + 280321, + 280662, + 280566, + 280494, + 280287, + 280424, + 280345, + 280510, + 280472, + 280356, + 280442, + 280386, + 280295, + 148862, + 280322, + 280620, + 280637, + 280344, + 280642, + 280721, + 280649, + 149144, + 280718, + 156010, + 280299, + 280720, + 280709, + 280426, + 280423, + 156019, + 280387, + 280498, + 280669, + 280307, + 280261, + 280375, + 149145, + 280731, + 280372, + 280632, + 280719, + 280249, + 280704, + 280616, + 280682, + 280603, + 280672, + 280646, + 280529, + 280286, + 280622, + 280453, + 280362, + 280691, + 280422, + 280559, + 280574, + 280343, + 148872, + 148229, + 280428, + 280596, + 149143, + 280742, + 280511, + 280323, + 280342, + 155998, + 156004, + 280394, + 280567, + 280539, + 280611, + 148878, + 280471, + 280240, + 280300, + 280624, + 280454, + 280537, + 280395, + 280258, + 280528, + 280324, + 149171, + 280470, + 280633, + 280626, + 280753, + 280573, + 280248, + 280588, + 280696, + 280541, + 148873, + 280722, + 280710, + 280279, + 280645, + 280741, + 280313, + 162016, + 280481, + 280483, + 280318, + 280546, + 280421, + 280448, + 280683, + 280341, + 280512, + 280271, + 280396, + 280306, + 280560, + 280748, + 280536, + 280732, + 280256, + 148881, + 280690, + 280274, + 280398, + 280269, + 280308, + 280469, + 280355, + 280340, + 155990, + 280760, + 280527, + 280264, + 280658, + 280565, + 280285, + 148859, + 280591, + 280532, + 280623, + 280660, + 280513, + 280627, + 280740, + 280418, + 280325, + 280252, + 280339, + 280438, + 280679, + 280399, + 280376, + 280600, + 148225, + 280538, + 280468, + 280568, + 280650, + 280545, + 280480, + 280717, + 280750, + 280641, + 280301, + 280400, + 280551, + 156014, + 280315, + 280514, + 280711, + 280639, + 280579, + 280467, + 156011, + 280455, + 280284, + 280635, + 156025, + 280689, + 149174, + 156018, + 280430, + 280577, + 280739, + 280515, + 280433, + 148224, + 280265, + 280354, + 280629, + 280655, + 280338, + 280634, + 280531, + 280496, + 279925, + 280262, + 280166, + 279802, + 279856, + 279922, + 279926, + 279805, + 280388, + 280165, + 280170, + 279927, + 279921, + 280244, + 279801, + 280164, + 280389, + 279928, + 279800, + 280163, + 280171, + 279806, + 279920, + 280390, + 280243, + 279929, + 280162, + 279799, + 279930, + 280391, + 280172, + 280161, + 279807, + 279919, + 279931, + 279798, + 280160, + 280392, + 279932, + 280173, + 279797, + 280227, + 280159, + 280042, + 279918, + 280393, + 279933, + 279808, + 280158, + 279796, + 280174, + 279934, + 279917, + 280226, + 280397, + 280157, + 279936, + 280156, + 279795, + 280175, + 280401, + 279809, + 279916, + 279937, + 280225, + 280155, + 279794, + 280405, + 279938, + 280176, + 280154, + 279793, + 279939, + 279810, + 279915, + 280406, + 280153, + 279940, + 280152, + 280177, + 280221, + 279792, + 280415, + 279914, + 279941, + 280150, + 279791, + 280416, + 280178, + 279811, + 279913, + 156026, + 280220, + 280149, + 279942, + 280419, + 280148, + 279855, + 279943, + 279790, + 280179, + 279944, + 279812, + 279912, + 280147, + 280151, + 279789, + 280420, + 280146, + 279945, + 280180, + 279788, + 280431, + 279813, + 279911, + 280145, + 279946, + 280435, + 280144, + 280181, + 280125, + 279947, + 279787, + 280143, + 279910, + 279948, + 279786, + 280436, + 280182, + 279814, + 280142, + 279909, + 280121, + 279949, + 279785, + 280444, + 280141, + 279950, + 280183, + 280445, + 279815, + 279908, + 280140, + 280037, + 279951, + 279784, + 280139, + 279952, + 280184, + 279783, + 280463, + 290065, + 280138, + 279816, + 279907, + 279953, + 279782, + 280464, + 280137, + 156001, + 280185, + 280029, + 279954, + 280136, + 279906, + 279955, + 279781, + 280135, + 280186, + 279817, + 279905, + 279935, + 279956, + 279780, + 280497, + 280134, + 279957, + 279779, + 280187, + 280501, + 279818, + 279904, + 279901, + 280133, + 279958, + 280502, + 280132, + 279959, + 280188, + 279778, + 280239, + 280131, + 279819, + 279903, + 279960, + 279777, + 280525, + 280130, + 280189, + 279961, + 279879, + 279776, + 280526, + 279902, + 280129, + 279962, + 280549, + 280128, + 280190, + 279820, + 279900, + 279876, + 279963, + 279772, + 280127, + 279964, + 280550, + 280191, + 279771, + 280126, + 279821, + 279899, + 279965, + 291035, + 279770, + 279853, + 280124, + 280192, + 279775, + 279966, + 280123, + 279822, + 279898, + 279967, + 280589, + 279767, + 280122, + 280193, + 279968, + 279774, + 280590, + 279766, + 280120, + 279897, + 279969, + 280654, + 280119, + 280194, + 279823, + 279896, + 279773, + 279765, + 279970, + 280118, + 280674, + 279971, + 279762, + 280047, + 280195, + 280117, + 279824, + 280291, + 280675, + 279972, + 279761, + 280116, + 280676, + 280196, + 279769, + 279973, + 280115, + 279760, + 279825, + 279895, + 279974, + 280114, + 280751, + 280197, + 279975, + 279768, + 279759, + 280113, + 279894, + 155985, + 279976, + 279758, + 280112, + 280198, + 279826, + 279893, + 279764, + 149148, + 279977, + 280111, + 279756, + 279978, + 280199, + 280110, + 156023, + 279979, + 279827, + 279892, + 279755, + 280109, + 156007, + 279980, + 280200, + 279763, + 280108, + 279754, + 149164, + 279828, + 279891, + 280107, + 279981, + 279753, + 280201, + 279982, + 279757, + 280106, + 149163, + 279890, + 279983, + 279752, + 280105, + 156005, + 280202, + 279829, + 279889, + 279744, + 279984, + 280104, + 279751, + 149175, + 280103, + 280203, + 279985, + 279750, + 279986, + 279852, + 279830, + 279888, + 280102, + 148861, + 279987, + 279749, + 280044, + 280204, + 279742, + 280101, + 155991, + 279831, + 279887, + 280100, + 279988, + 279748, + 148875, + 280205, + 280099, + 279741, + 279989, + 279747, + 279886, + 280098, + 279990, + 156000, + 280206, + 279991, + 280097, + 279832, + 279885, + 279730, + 279746, + 149158, + 280096, + 279992, + 280207, + 279745, + 148886, + 280095, + 279833, + 279884, + 279993, + 279743, + 280094, + 279994, + 280208, + 279722, + 155999, + 279995, + 280093, + 279834, + 279883, + 279740, + 148865, + 280092, + 148858, + 280209, + 279996, + 279721, + 279739, + 148231, + 280091, + 279882, + 279997, + 279738, + 280090, + 280210, + 279998, + 279835, + 279720, + 279881, + 148880, + 280089, + 279999, + 279737, + 280211, + 148870, + 280088, + 280000, + 279836, + 279880, + 279736, + 149155, + 280087, + 280001, + 280212, + 279715, + 279735, + 280086, + 280002, + 149169, + 279837, + 279878, + 280085, + 280003, + 280213, + 279734, + 279713, + 148860, + 280084, + 280004, + 279877, + 279733, + 155992, + 280083, + 280214, + 280005, + 279732, + 279838, + 279704, + 279875, + 280082, + 280006, + 149159, + 280081, + 280215, + 280007, + 280238, + 279731, + 149172, + 279839, + 279874, + 280080, + 280008, + 279729, + 280216, + 279703, + 149153, + 280079, + 280009, + 279728, + 280078, + 279840, + 279873, + 155996, + 280010, + 280217, + 156013, + 280077, + 149151, + 280011, + 279727, + 279872, + 148874, + 280076, + 280012, + 280218, + 279726, + 148871, + 279841, + 155997, + 279871, + 280075, + 280013, + 280074, + 280219, + 280014, + 279725, + 155987, + 280073, + 279842, + 279870, + 280015, + 290067, + 279724, + 280222, + 155986, + 280072, + 280016, + 290068, + 279723, + 280071, + 279843, + 279869, + 280017, + 280223, + 280070, + 246836, + 290069, + 280018, + 279719, + 279868, + 280069, + 280019, + 280224, + 279718, + 149161, + 280068, + 149168, + 279844, + 279867, + 280020, + 279717, + 280067, + 280228, + 156003, + 280021, + 280066, + 279845, + 279866, + 280022, + 279716, + 149173, + 280043, + 280229, + 280065, + 156012, + 280023, + 279714, + 279857, + 149157, + 280064, + 279865, + 280024, + 279712, + 280230, + 280063, + 149156, + 148864, + 280025, + 279846, + 280062, + 279864, + 280026, + 279711, + 280231, + 148888, + 280061, + 280027, + 156027, + 279847, + 279863, + 148883, + 279710, + 280060, + 280232, + 280028, + 280059, + 279709, + 156008, + 279848, + 279862, + 280030, + 280058, + 280233, + 155993, + 280031, + 149165, + 279708, + 280057, + 280032, + 279861, + 149146, + 279707, + 280234, + 280056, + 148879, + 280033, + 280055, + 279849, + 279706, + 279860, + 149167, + 280034, + 280235, + 280054, + 280035, + 155989, + 156021, + 280046, + 279850, + 279859, + 279705, + 280053, + 280036, + 280236, + 148227, + 279702, + 280052, + 280038, + 279851, + 279858, + 280051, + 279701, + 280237, + 155995, + 290084, + 280039, + 280050, + 280040, + 156024, + 279700, + 280049, + 279854, + 280041, + 156009, + 280048, + 148890, + 280045, + 280168, + 279804, + 279923, + 280263, + 279924, + 279803, + 280167, + 280320, + 280169, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.315817+00:00", + }, + { + "code": "219", + "created_at": "2021-08-10T06:17:45.487347+00:00", + "display_name": "LCT Paid", + "id": 147709, + "is_enabled": True, + "name": "LCT Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 279926, + 279899, + 279980, + 280140, + 280674, + 155999, + 149169, + 279908, + 279999, + 280045, + 280114, + 280549, + 280031, + 280751, + 280039, + 279915, + 280406, + 279800, + 279991, + 155993, + 280188, + 279887, + 148871, + 149161, + 279804, + 156007, + 279971, + 280068, + 280109, + 279922, + 279995, + 280197, + 279733, + 280233, + 279815, + 280202, + 280153, + 279940, + 280205, + 280089, + 280119, + 280093, + 149168, + 280389, + 280445, + 279844, + 280194, + 279975, + 280058, + 156005, + 279867, + 280183, + 279747, + 279755, + 280105, + 280204, + 279969, + 148880, + 279950, + 280030, + 280141, + 280162, + 280152, + 280177, + 290084, + 280020, + 279856, + 279862, + 279775, + 279717, + 279959, + 156000, + 279881, + 279965, + 279848, + 280167, + 280067, + 280132, + 156008, + 279731, + 279924, + 279746, + 280221, + 280444, + 279923, + 279834, + 279841, + 279785, + 155997, + 279792, + 280415, + 280008, + 280100, + 279768, + 279709, + 279749, + 155995, + 279914, + 279759, + 279949, + 280502, + 279883, + 279941, + 279962, + 280228, + 279886, + 280121, + 280059, + 280237, + 280103, + 280002, + 279720, + 279909, + 279734, + 280028, + 279892, + 148858, + 156003, + 279799, + 280150, + 279752, + 280021, + 280004, + 279740, + 279814, + 279871, + 280066, + 280102, + 280182, + 280239, + 279791, + 279835, + 279930, + 280232, + 280416, + 280007, + 280142, + 280178, + 280041, + 280113, + 280060, + 280391, + 280127, + 280436, + 280172, + 279827, + 279786, + 280129, + 279979, + 279811, + 279762, + 279845, + 148865, + 280195, + 280206, + 279894, + 155985, + 279958, + 148883, + 279710, + 279701, + 279852, + 279866, + 291035, + 279913, + 279863, + 280133, + 280022, + 279998, + 149158, + 279716, + 279948, + 279876, + 280092, + 279847, + 279976, + 280075, + 280220, + 156026, + 279910, + 280010, + 149173, + 279901, + 156023, + 280110, + 279902, + 280143, + 280161, + 280149, + 279807, + 279942, + 279806, + 280065, + 148875, + 279787, + 280213, + 280199, + 156027, + 280051, + 280229, + 280104, + 279897, + 280210, + 280027, + 280209, + 279904, + 279947, + 280013, + 280125, + 279858, + 279790, + 279855, + 280419, + 280590, + 279758, + 280061, + 280086, + 156012, + 280043, + 279725, + 280148, + 279943, + 280550, + 279744, + 280112, + 279989, + 148888, + 280198, + 279996, + 280074, + 280181, + 280090, + 279984, + 279774, + 280231, + 280144, + 280096, + 280179, + 279851, + 280023, + 279944, + 280117, + 279711, + 280654, + 279714, + 280435, + 280168, + 280026, + 279802, + 149157, + 279812, + 279735, + 279738, + 280064, + 155996, + 148861, + 279946, + 279983, + 279721, + 280145, + 279919, + 279911, + 279890, + 279978, + 279756, + 279900, + 280203, + 279997, + 279912, + 279826, + 279818, + 280147, + 279864, + 279824, + 279988, + 280062, + 279931, + 279865, + 280215, + 279813, + 279889, + 279739, + 280501, + 279857, + 280526, + 279846, + 280431, + 280038, + 279788, + 280388, + 280025, + 279987, + 279893, + 280111, + 155992, + 280024, + 279798, + 280151, + 280219, + 279712, + 279803, + 280191, + 148864, + 279882, + 280160, + 279977, + 280392, + 279789, + 280420, + 279776, + 280230, + 148231, + 280217, + 279764, + 149148, + 149156, + 280014, + 279921, + 280091, + 279992, + 280146, + 279945, + 279823, + 279748, + 280063, + 280180, + 279715, + 279750, + 279932, + 279703, + 280187, + 280052, + 279770, + 279779, + 279702, + 280081, + 279957, + 280134, + 280009, + 148227, + 280173, + 155987, + 279854, + 149163, + 156013, + 280164, + 280106, + 280080, + 280212, + 279986, + 280291, + 280073, + 149159, + 280236, + 280077, + 280036, + 280207, + 279879, + 280497, + 280098, + 279780, + 280124, + 279797, + 279805, + 280192, + 280227, + 279842, + 279700, + 279830, + 280001, + 280003, + 279745, + 279985, + 280159, + 279801, + 279757, + 279728, + 280675, + 156009, + 280053, + 280083, + 279870, + 279956, + 279713, + 279918, + 280042, + 280393, + 279964, + 149151, + 279705, + 279966, + 279935, + 279972, + 279933, + 279771, + 280097, + 279961, + 279982, + 279853, + 279905, + 148886, + 280006, + 280015, + 149175, + 290067, + 280320, + 279859, + 279874, + 280087, + 279724, + 280189, + 279850, + 280262, + 279817, + 280163, + 280158, + 280186, + 279968, + 280078, + 280135, + 280130, + 280095, + 280011, + 156021, + 279820, + 280222, + 149155, + 280123, + 155989, + 279796, + 279990, + 155986, + 279822, + 280201, + 279963, + 279753, + 279896, + 279781, + 279727, + 280174, + 280170, + 279761, + 280072, + 280214, + 280035, + 279808, + 279885, + 148890, + 279833, + 280525, + 280169, + 279955, + 280116, + 279934, + 279925, + 280676, + 280054, + 280048, + 280196, + 280046, + 279906, + 280082, + 280235, + 279736, + 279840, + 279917, + 279777, + 280136, + 280085, + 279884, + 280263, + 279769, + 279875, + 280016, + 279729, + 280034, + 279877, + 280226, + 280397, + 280193, + 279872, + 279880, + 280122, + 279981, + 290068, + 280107, + 280171, + 279723, + 280084, + 280496, + 148874, + 149167, + 280071, + 280076, + 280157, + 279936, + 279773, + 279836, + 279860, + 279839, + 279954, + 280029, + 279898, + 279891, + 279706, + 279993, + 279967, + 279973, + 155991, + 280049, + 279869, + 280185, + 280047, + 279849, + 280137, + 280101, + 280589, + 280156, + 279795, + 280175, + 279767, + 280017, + 280055, + 280216, + 280464, + 279970, + 279743, + 280126, + 279821, + 279782, + 279741, + 280223, + 280000, + 279960, + 280033, + 280401, + 149153, + 279953, + 279809, + 280005, + 148879, + 279766, + 156001, + 280070, + 279907, + 279903, + 279742, + 279730, + 280094, + 279704, + 279916, + 279937, + 148860, + 280115, + 280056, + 279819, + 246836, + 279816, + 279760, + 280238, + 279828, + 280131, + 279825, + 279751, + 280138, + 279873, + 149164, + 279838, + 280225, + 280108, + 280165, + 280088, + 279732, + 290069, + 280120, + 280234, + 279707, + 279994, + 279878, + 280018, + 279719, + 279832, + 280463, + 279831, + 280190, + 149146, + 148870, + 156024, + 280155, + 279843, + 280012, + 279794, + 279754, + 280128, + 279783, + 279868, + 280405, + 280040, + 280211, + 279861, + 280218, + 279927, + 279938, + 279763, + 279772, + 280208, + 279928, + 280184, + 279888, + 280069, + 279952, + 279837, + 280032, + 280139, + 279895, + 149172, + 280154, + 280176, + 279829, + 279974, + 280044, + 290065, + 279920, + 279722, + 280244, + 280390, + 279784, + 280099, + 279765, + 280057, + 279726, + 280019, + 279951, + 279778, + 279793, + 280079, + 280037, + 280243, + 279737, + 280200, + 279939, + 280166, + 279708, + 279929, + 280224, + 280118, + 149165, + 279810, + 280050, + 279718, + 280574, + 280527, + 280609, + 280634, + 280288, + 280582, + 280537, + 280615, + 148872, + 280349, + 280247, + 280535, + 280524, + 280343, + 280315, + 280441, + 280572, + 280278, + 280340, + 148876, + 280260, + 254109, + 280369, + 280499, + 280337, + 280451, + 280531, + 280596, + 280552, + 280402, + 148889, + 280652, + 280756, + 280433, + 148229, + 280563, + 280466, + 280600, + 148884, + 156002, + 280348, + 280326, + 280607, + 280688, + 280739, + 280693, + 280403, + 280584, + 280314, + 280539, + 280439, + 280667, + 280310, + 156022, + 280358, + 155990, + 280575, + 280336, + 280733, + 280641, + 280705, + 280725, + 280268, + 280742, + 156025, + 280586, + 156016, + 280678, + 280428, + 280553, + 149152, + 280425, + 280655, + 280542, + 280438, + 280335, + 280749, + 280565, + 280738, + 280511, + 280434, + 280515, + 280592, + 280290, + 280383, + 148226, + 280516, + 149143, + 280342, + 280712, + 280608, + 280684, + 280264, + 280612, + 280624, + 280571, + 280760, + 280661, + 280656, + 280414, + 280540, + 280302, + 280701, + 280475, + 155998, + 280443, + 148859, + 280595, + 280359, + 280465, + 280517, + 280500, + 280653, + 280726, + 156028, + 280644, + 280301, + 280404, + 280757, + 280547, + 280319, + 280394, + 280276, + 148863, + 280274, + 280456, + 280368, + 280561, + 280605, + 280716, + 280246, + 280327, + 280599, + 149174, + 280371, + 280298, + 280377, + 280283, + 280658, + 280583, + 280567, + 148878, + 280490, + 280544, + 280280, + 280462, + 280695, + 280507, + 280687, + 280645, + 280323, + 280292, + 280334, + 280474, + 156004, + 280277, + 280523, + 280440, + 280495, + 280737, + 280744, + 280471, + 280427, + 280285, + 148869, + 280333, + 280635, + 149149, + 280300, + 280347, + 280407, + 280400, + 280551, + 280508, + 280713, + 280437, + 280647, + 280631, + 280593, + 280534, + 290929, + 280528, + 280303, + 280384, + 280611, + 149154, + 280452, + 280408, + 280321, + 280681, + 280626, + 280518, + 280413, + 280353, + 280461, + 280591, + 148882, + 156014, + 280395, + 280692, + 280522, + 280698, + 280564, + 148230, + 280312, + 280636, + 149150, + 280479, + 280566, + 280266, + 149170, + 280660, + 280432, + 280242, + 148224, + 280480, + 280519, + 280598, + 280305, + 280258, + 280470, + 280346, + 280282, + 280622, + 280455, + 155984, + 280578, + 280657, + 148868, + 280747, + 280374, + 280736, + 280562, + 280734, + 280686, + 280513, + 280240, + 280640, + 280708, + 280651, + 280761, + 290930, + 280758, + 280418, + 290928, + 149171, + 148885, + 280457, + 280361, + 280730, + 155994, + 156019, + 280629, + 280503, + 149160, + 280610, + 280248, + 280324, + 280332, + 280659, + 280385, + 280728, + 280696, + 280367, + 280543, + 280573, + 280740, + 280722, + 280602, + 280275, + 156011, + 280412, + 148877, + 280296, + 280628, + 280556, + 280597, + 280587, + 280409, + 156015, + 280328, + 280271, + 280613, + 280588, + 280714, + 280252, + 280621, + 280473, + 280623, + 149144, + 280570, + 280254, + 280429, + 280520, + 280530, + 280458, + 280668, + 280309, + 280541, + 280378, + 280331, + 280671, + 280753, + 280410, + 280752, + 280743, + 148873, + 280460, + 280711, + 280494, + 280245, + 280662, + 280614, + 280665, + 280627, + 156020, + 280363, + 280509, + 280272, + 280719, + 280281, + 280555, + 280330, + 280339, + 280727, + 156006, + 280478, + 280630, + 280417, + 280267, + 280345, + 280715, + 280279, + 280666, + 280450, + 280459, + 280639, + 280741, + 280569, + 280472, + 280325, + 280424, + 280735, + 280710, + 280329, + 280594, + 280287, + 280304, + 280489, + 280532, + 280454, + 156018, + 280521, + 280483, + 280510, + 280356, + 280638, + 280481, + 280685, + 148862, + 280467, + 280411, + 280352, + 155988, + 280642, + 162016, + 280585, + 280399, + 280386, + 280557, + 280257, + 280269, + 280491, + 280577, + 280265, + 149147, + 280442, + 280754, + 280322, + 280289, + 280421, + 280546, + 280718, + 280295, + 280344, + 280706, + 280311, + 280672, + 280313, + 280576, + 280294, + 280487, + 280663, + 149166, + 280514, + 148228, + 280273, + 148225, + 280379, + 280649, + 280673, + 280376, + 280256, + 148867, + 280580, + 280341, + 156010, + 280504, + 280270, + 280601, + 280338, + 280750, + 280259, + 280373, + 280512, + 280364, + 280664, + 280485, + 148223, + 280317, + 280746, + 280299, + 280426, + 280447, + 280637, + 280370, + 280351, + 148866, + 280720, + 280670, + 280423, + 280762, + 290932, + 280620, + 280486, + 280619, + 280617, + 280683, + 280669, + 280380, + 280306, + 280680, + 280581, + 280477, + 280468, + 280484, + 280387, + 280354, + 280360, + 280251, + 280396, + 280533, + 280748, + 148222, + 280697, + 280755, + 280538, + 280261, + 149162, + 280308, + 280255, + 280446, + 149145, + 280606, + 280721, + 280476, + 280375, + 280449, + 280703, + 280694, + 280643, + 280616, + 280625, + 280648, + 280699, + 280560, + 280731, + 280679, + 280632, + 280548, + 280448, + 280677, + 280545, + 280498, + 280249, + 280689, + 280316, + 148887, + 280702, + 280350, + 280536, + 280469, + 280650, + 280682, + 280704, + 280723, + 280603, + 280381, + 280253, + 280690, + 280709, + 280372, + 280318, + 280558, + 280646, + 280241, + 280763, + 280529, + 280293, + 280568, + 280505, + 280729, + 280732, + 280707, + 280493, + 280618, + 280482, + 280488, + 280633, + 280745, + 280286, + 280430, + 280700, + 280398, + 280297, + 148881, + 280366, + 280453, + 280506, + 280357, + 280422, + 280717, + 280691, + 280382, + 280492, + 280365, + 280554, + 280579, + 280284, + 280250, + 280355, + 280724, + 280604, + 280559, + 280362, + 280759, + 280307, + 290931, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.315817+00:00", + }, + { + "code": "221", + "created_at": "2021-08-10T06:17:45.487347+00:00", + "display_name": "WET Paid", + "id": 147710, + "is_enabled": True, + "name": "WET Paid", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280634, + 280582, + 280371, + 280633, + 280493, + 280605, + 280555, + 280664, + 149149, + 280703, + 280359, + 280678, + 280758, + 280372, + 280483, + 280750, + 280426, + 148881, + 280536, + 280358, + 148867, + 280583, + 280578, + 148222, + 280494, + 280552, + 280257, + 280294, + 280373, + 280617, + 280270, + 280697, + 280253, + 280482, + 280677, + 280357, + 280624, + 280759, + 280749, + 156019, + 280644, + 290931, + 280566, + 280647, + 280495, + 280374, + 280556, + 280662, + 280356, + 280433, + 280295, + 280375, + 280704, + 280498, + 148878, + 149143, + 280696, + 280258, + 280481, + 280611, + 280748, + 280252, + 280355, + 280760, + 280480, + 280376, + 280437, + 280551, + 280354, + 280318, + 280577, + 280499, + 280563, + 280705, + 280290, + 280584, + 280500, + 280695, + 280377, + 148869, + 280353, + 280479, + 280747, + 280761, + 280503, + 280296, + 280450, + 280378, + 280607, + 280478, + 280665, + 280352, + 280557, + 280585, + 280311, + 280289, + 149147, + 280273, + 280576, + 280706, + 148228, + 280379, + 280504, + 148866, + 280259, + 280477, + 280625, + 280746, + 280351, + 280762, + 280619, + 280380, + 290932, + 280251, + 280694, + 280449, + 149162, + 280241, + 280476, + 280643, + 280533, + 280648, + 280548, + 280316, + 280604, + 280350, + 280381, + 280558, + 280763, + 280729, + 280707, + 280505, + 280745, + 280297, + 280506, + 280276, + 280382, + 280250, + 280349, + 280288, + 280693, + 280260, + 148889, + 280348, + 280575, + 280586, + 280547, + 280725, + 280608, + 156028, + 280661, + 280475, + 280307, + 280383, + 148226, + 280298, + 280474, + 280744, + 280507, + 280347, + 280508, + 280427, + 280384, + 280692, + 149170, + 280346, + 148868, + 280708, + 148885, + 280598, + 280385, + 280628, + 280587, + 280473, + 280275, + 280743, + 149160, + 280509, + 280345, + 280472, + 280666, + 280287, + 280510, + 280642, + 280386, + 280344, + 280649, + 280299, + 280620, + 280720, + 280387, + 280670, + 280261, + 280616, + 280632, + 280442, + 280249, + 280637, + 280603, + 280709, + 156010, + 280539, + 280286, + 280691, + 280574, + 280343, + 280559, + 148229, + 280742, + 280342, + 280428, + 280394, + 155998, + 280511, + 280532, + 280471, + 280300, + 280626, + 280395, + 280470, + 280722, + 280248, + 280573, + 280588, + 148873, + 280741, + 280546, + 156022, + 162016, + 280308, + 280710, + 280341, + 280512, + 280396, + 280560, + 280469, + 280690, + 280313, + 280398, + 280565, + 280340, + 155990, + 280264, + 280660, + 280285, + 280655, + 148224, + 280740, + 280513, + 280339, + 280591, + 280271, + 280399, + 148225, + 280468, + 280545, + 280650, + 280315, + 280641, + 156011, + 280400, + 280301, + 280711, + 280467, + 280689, + 280284, + 280635, + 280514, + 156018, + 280739, + 280338, + 280265, + 280515, + 280609, + 280247, + 280615, + 148876, + 280572, + 280337, + 280402, + 280688, + 280466, + 156002, + 280310, + 148884, + 280403, + 280336, + 149152, + 280623, + 280667, + 156016, + 280434, + 280335, + 280738, + 280592, + 280712, + 280571, + 280516, + 280302, + 280465, + 280517, + 280443, + 280404, + 148863, + 280246, + 280561, + 280462, + 280319, + 280283, + 280277, + 280544, + 280687, + 280334, + 280737, + 280333, + 280407, + 280713, + 280593, + 280303, + 280408, + 280461, + 280518, + 148230, + 280673, + 149150, + 280266, + 280519, + 280282, + 280564, + 155984, + 280686, + 280736, + 280640, + 280651, + 290928, + 280659, + 280332, + 280728, + 280610, + 280543, + 280602, + 148877, + 280409, + 280714, + 280460, + 280570, + 280520, + 280331, + 280410, + 280245, + 280309, + 280272, + 156020, + 280330, + 156006, + 280267, + 280459, + 280630, + 280735, + 280304, + 280521, + 280671, + 280685, + 280411, + 155988, + 290930, + 280329, + 280594, + 280638, + 280569, + 280613, + 280715, + 280458, + 280281, + 280668, + 280621, + 280328, + 280429, + 280412, + 155994, + 280457, + 280657, + 280734, + 280305, + 280242, + 280413, + 280599, + 149154, + 290929, + 280681, + 280631, + 280522, + 280523, + 280280, + 280327, + 280716, + 280456, + 280595, + 280240, + 280414, + 280684, + 280542, + 280726, + 280268, + 280531, + 280733, + 280672, + 280601, + 280326, + 280652, + 280455, + 254109, + 280524, + 280417, + 280629, + 280600, + 280639, + 156025, + 280430, + 156014, + 280717, + 280658, + 280538, + 280568, + 280325, + 280446, + 280418, + 148859, + 280534, + 280527, + 280448, + 280683, + 280732, + 280306, + 280541, + 280421, + 280269, + 280454, + 280279, + 280324, + 149171, + 280528, + 280323, + 280567, + 280596, + 280721, + 280422, + 148872, + 280453, + 280314, + 280529, + 280682, + 280731, + 149145, + 280322, + 280447, + 280423, + 280718, + 280669, + 280727, + 280424, + 148862, + 280614, + 280530, + 280730, + 280597, + 148882, + 280562, + 280636, + 280452, + 280440, + 280612, + 280653, + 280656, + 280425, + 280439, + 280723, + 280451, + 280321, + 280278, + 280554, + 280488, + 280365, + 280700, + 280724, + 280366, + 280618, + 148887, + 280606, + 280255, + 280755, + 280581, + 280680, + 280364, + 280580, + 149166, + 280663, + 280487, + 280754, + 280489, + 148223, + 280363, + 280622, + 280367, + 280292, + 280490, + 280368, + 280553, + 280438, + 280701, + 280756, + 280627, + 280679, + 280312, + 280645, + 280256, + 280753, + 280699, + 280362, + 280432, + 280646, + 280486, + 280254, + 280361, + 280535, + 280719, + 280369, + 280702, + 280293, + 149144, + 280370, + 280485, + 280274, + 156015, + 280317, + 280540, + 280757, + 149174, + 156004, + 280752, + 280537, + 280491, + 280492, + 280698, + 280484, + 280579, + 280441, + 280360, + 280496, + 280127, + 280163, + 280654, + 279969, + 279853, + 279897, + 279964, + 279729, + 280120, + 280008, + 280004, + 279885, + 280550, + 280191, + 280080, + 279771, + 279874, + 279839, + 279877, + 280126, + 279821, + 279766, + 280171, + 149172, + 279899, + 279733, + 279775, + 279731, + 280007, + 279965, + 291035, + 280590, + 280215, + 279774, + 279806, + 155992, + 279770, + 280081, + 149159, + 280124, + 280083, + 280170, + 280192, + 279966, + 280006, + 279700, + 279968, + 279856, + 280123, + 279822, + 280214, + 280082, + 279875, + 280193, + 280122, + 279898, + 279967, + 279767, + 279730, + 280589, + 280165, + 280005, + 279704, + 279838, + 279732, + 156024, + 280040, + 279920, + 279829, + 280390, + 280243, + 280050, + 280039, + 279929, + 280048, + 280202, + 280162, + 156005, + 280105, + 290084, + 279747, + 279746, + 155995, + 280237, + 279799, + 279752, + 279930, + 280391, + 280172, + 279701, + 149158, + 279989, + 280161, + 279807, + 280262, + 280051, + 279858, + 279851, + 280096, + 279919, + 279983, + 279890, + 279931, + 280038, + 279798, + 280160, + 280392, + 279750, + 279992, + 279932, + 280052, + 279702, + 148227, + 149163, + 280173, + 280106, + 280236, + 280036, + 280207, + 280044, + 279797, + 280227, + 280159, + 279745, + 279757, + 280053, + 279918, + 280393, + 280320, + 279705, + 149175, + 279982, + 279933, + 148886, + 279859, + 279850, + 280158, + 279796, + 279801, + 280095, + 148890, + 156021, + 155989, + 280201, + 280042, + 279753, + 279990, + 280174, + 280035, + 279808, + 279833, + 279934, + 280054, + 280235, + 279917, + 279985, + 279884, + 280046, + 280034, + 280226, + 280397, + 279830, + 279981, + 280107, + 149167, + 280157, + 279936, + 279860, + 279795, + 279993, + 279706, + 279849, + 280156, + 280175, + 279888, + 279743, + 280055, + 279891, + 280033, + 280401, + 279809, + 148879, + 279741, + 280094, + 279916, + 279937, + 280056, + 279828, + 279852, + 149164, + 280225, + 280108, + 279751, + 280234, + 279994, + 279707, + 149146, + 280155, + 279794, + 279754, + 280405, + 279861, + 279938, + 280208, + 280032, + 280154, + 280176, + 279722, + 279763, + 280166, + 280057, + 279793, + 280099, + 280200, + 279708, + 149165, + 279810, + 279980, + 280244, + 155999, + 280031, + 279915, + 280406, + 155993, + 280205, + 156007, + 279939, + 280233, + 280153, + 280093, + 280109, + 279940, + 280058, + 280030, + 279755, + 279995, + 280152, + 280177, + 279862, + 148858, + 279848, + 156008, + 280167, + 280221, + 279792, + 279834, + 156000, + 280415, + 279914, + 279883, + 279941, + 280059, + 279709, + 280028, + 280150, + 280102, + 279740, + 279892, + 279791, + 280232, + 280416, + 280178, + 280060, + 279986, + 279827, + 279979, + 279811, + 148865, + 148883, + 279710, + 279913, + 279863, + 279847, + 280092, + 280220, + 148875, + 156023, + 280027, + 280149, + 279855, + 279942, + 280199, + 280110, + 156027, + 280209, + 280104, + 279790, + 280419, + 280061, + 280148, + 279943, + 148888, + 279996, + 280231, + 156026, + 280179, + 279802, + 279711, + 280026, + 279812, + 279912, + 279721, + 148861, + 279978, + 279756, + 280147, + 279864, + 280062, + 280203, + 279739, + 279927, + 279846, + 280151, + 280025, + 280111, + 279987, + 279944, + 148864, + 279977, + 279789, + 280420, + 148231, + 149156, + 280146, + 279945, + 280180, + 280091, + 280063, + 279748, + 149148, + 280230, + 279857, + 279788, + 279882, + 279921, + 279764, + 279712, + 280024, + 279893, + 279988, + 279803, + 280431, + 279813, + 279865, + 279826, + 279997, + 279911, + 280043, + 280145, + 279946, + 280064, + 149157, + 279738, + 279984, + 280435, + 279714, + 280023, + 280144, + 280090, + 280198, + 280112, + 280181, + 280125, + 156012, + 279758, + 279744, + 279947, + 280210, + 280229, + 279787, + 280065, + 280143, + 149173, + 279910, + 279976, + 279948, + 279998, + 279716, + 279749, + 280022, + 279786, + 279866, + 279845, + 155985, + 279894, + 280436, + 280142, + 280113, + 279835, + 280206, + 280182, + 280066, + 279814, + 280021, + 156003, + 279909, + 279720, + 280121, + 280228, + 279924, + 279949, + 279759, + 279785, + 279768, + 280444, + 280100, + 279881, + 280067, + 280169, + 279717, + 280020, + 280141, + 279950, + 148880, + 290065, + 280183, + 279867, + 279975, + 279844, + 280445, + 279922, + 149168, + 280204, + 280089, + 279815, + 280197, + 280068, + 149161, + 280751, + 280114, + 279999, + 279991, + 279908, + 280140, + 279718, + 280224, + 279737, + 280045, + 280103, + 279926, + 280037, + 279951, + 280019, + 279784, + 279887, + 279974, + 279895, + 280139, + 279952, + 280069, + 280211, + 280184, + 279868, + 279783, + 279843, + 279831, + 148870, + 280463, + 279719, + 280018, + 290069, + 280138, + 280088, + 279825, + 279760, + 279742, + 156001, + 279816, + 246836, + 280115, + 279907, + 280070, + 279953, + 280000, + 280101, + 280223, + 279782, + 280464, + 280017, + 280137, + 280185, + 279973, + 279869, + 280029, + 279836, + 155991, + 279954, + 280071, + 279723, + 280263, + 279880, + 280016, + 279769, + 290068, + 280136, + 279906, + 279736, + 280196, + 280676, + 280116, + 156009, + 279955, + 279781, + 279761, + 279886, + 280072, + 155986, + 149155, + 280222, + 280135, + 280186, + 279817, + 279724, + 280097, + 280087, + 290067, + 280015, + 279905, + 279972, + 279935, + 279956, + 280675, + 279925, + 279870, + 280001, + 279842, + 279780, + 280497, + 279805, + 280073, + 280291, + 280164, + 155987, + 280212, + 280134, + 279957, + 279779, + 280239, + 279715, + 280168, + 280014, + 280187, + 280219, + 280501, + 279824, + 279818, + 280388, + 279889, + 279735, + 280117, + 280074, + 279725, + 280013, + 280086, + 279904, + 280133, + 279901, + 280075, + 280041, + 280195, + 279762, + 279958, + 279871, + 280002, + 280502, + 155997, + 279841, + 280132, + 279959, + 279971, + 148871, + 279923, + 280188, + 280389, + 280674, + 280118, + 279778, + 279726, + 279837, + 280218, + 280131, + 280012, + 279878, + 279819, + 279903, + 279832, + 279970, + 280047, + 149169, + 279960, + 280076, + 148874, + 279872, + 279777, + 280098, + 280085, + 279773, + 280525, + 279727, + 279896, + 279928, + 280011, + 280130, + 280189, + 279961, + 155996, + 280003, + 149151, + 279879, + 280077, + 156013, + 280217, + 279823, + 279776, + 280526, + 280213, + 279854, + 279902, + 280010, + 280129, + 279734, + 280194, + 279800, + 280119, + 279962, + 280549, + 279765, + 280238, + 280128, + 280190, + 279873, + 279840, + 279820, + 280049, + 279713, + 280078, + 279728, + 280009, + 279804, + 279900, + 279876, + 280079, + 149153, + 148860, + 279963, + 279703, + 280216, + 279772, + 280084, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.315817+00:00", + }, + { + "code": "223", + "created_at": "2021-08-10T06:17:45.487347+00:00", + "display_name": "ABN Withholding", + "id": 147711, + "is_enabled": True, + "name": "ABN Withholding", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280140, + 280243, + 279810, + 280037, + 279980, + 280099, + 279923, + 279718, + 280224, + 280390, + 149165, + 279991, + 279737, + 279962, + 148858, + 279726, + 280114, + 280218, + 279829, + 279853, + 280200, + 279793, + 279837, + 279951, + 280019, + 280103, + 280057, + 279926, + 279784, + 280171, + 279763, + 279722, + 279920, + 279974, + 280131, + 280176, + 280154, + 280079, + 279895, + 279887, + 280139, + 280012, + 280166, + 280032, + 280549, + 279952, + 279938, + 280040, + 280069, + 279783, + 280208, + 279861, + 280405, + 156024, + 280211, + 279831, + 279878, + 280184, + 279985, + 280128, + 279868, + 156001, + 279732, + 279754, + 279843, + 279838, + 279704, + 279825, + 279794, + 280155, + 279899, + 148870, + 149146, + 279707, + 279819, + 280463, + 279751, + 279903, + 280018, + 149153, + 279994, + 280234, + 290069, + 280005, + 279719, + 280138, + 280589, + 279742, + 280088, + 279765, + 280108, + 149164, + 279970, + 280225, + 279828, + 279772, + 279760, + 279767, + 279967, + 279741, + 280008, + 279816, + 280056, + 279898, + 246836, + 279937, + 149172, + 280115, + 280094, + 279907, + 149169, + 279916, + 279809, + 279832, + 280070, + 148879, + 280401, + 279821, + 279953, + 280033, + 279730, + 280000, + 280084, + 280223, + 280076, + 280055, + 279782, + 148874, + 279891, + 279743, + 279766, + 280017, + 280122, + 280175, + 280464, + 280137, + 279960, + 280156, + 280046, + 279849, + 155996, + 280185, + 279706, + 279888, + 279973, + 279875, + 279993, + 148860, + 279869, + 280029, + 279872, + 279795, + 279860, + 279936, + 279777, + 279836, + 279873, + 280126, + 279954, + 280157, + 280085, + 280071, + 149167, + 279830, + 280496, + 280263, + 280107, + 280049, + 279723, + 280397, + 280016, + 280165, + 155991, + 279880, + 280082, + 279981, + 279877, + 280034, + 290068, + 280100, + 280676, + 280226, + 279773, + 279822, + 280042, + 280136, + 280214, + 279884, + 279906, + 280190, + 156009, + 279736, + 280525, + 279917, + 280235, + 280196, + 280193, + 280054, + 279839, + 279934, + 279808, + 279727, + 280116, + 280011, + 279990, + 279700, + 279955, + 279781, + 279729, + 279833, + 280035, + 280174, + 279896, + 279761, + 279820, + 279874, + 280072, + 279753, + 280201, + 280123, + 155986, + 280222, + 155989, + 280130, + 149155, + 280097, + 279964, + 156021, + 280135, + 279966, + 280095, + 279796, + 279968, + 280186, + 280158, + 279713, + 280238, + 279817, + 279850, + 280189, + 279724, + 280006, + 280087, + 280654, + 279859, + 279933, + 280015, + 290067, + 279961, + 279771, + 148886, + 279905, + 280192, + 148890, + 279982, + 279972, + 280083, + 280393, + 279935, + 279963, + 279705, + 279918, + 280003, + 279956, + 280053, + 149175, + 280675, + 279928, + 279757, + 279769, + 280078, + 149151, + 280320, + 279745, + 279840, + 280001, + 280164, + 279870, + 279842, + 279879, + 280159, + 280227, + 279780, + 279804, + 279797, + 280239, + 280207, + 280124, + 280497, + 280045, + 280236, + 280080, + 280036, + 280077, + 280291, + 156013, + 280073, + 280134, + 155987, + 279897, + 280168, + 280106, + 149159, + 280212, + 280173, + 149163, + 279805, + 280217, + 148227, + 279702, + 279728, + 279957, + 279779, + 280081, + 280052, + 279823, + 279932, + 280014, + 280041, + 279715, + 280009, + 279992, + 279770, + 280047, + 280392, + 279806, + 280187, + 280180, + 279857, + 279945, + 280091, + 280219, + 280146, + 149156, + 279776, + 280063, + 280230, + 280160, + 149148, + 279798, + 279987, + 148231, + 280038, + 280420, + 280169, + 280043, + 279788, + 280127, + 279931, + 279748, + 279882, + 279824, + 279789, + 155992, + 279750, + 279764, + 279988, + 148864, + 279944, + 280501, + 279712, + 280024, + 279890, + 280111, + 279977, + 280170, + 279893, + 279818, + 280191, + 280025, + 280151, + 280526, + 280431, + 279846, + 279739, + 279735, + 279813, + 279803, + 280062, + 279774, + 279865, + 279911, + 279864, + 279826, + 279983, + 280147, + 279921, + 148861, + 280048, + 279997, + 279756, + 279919, + 279978, + 280590, + 280145, + 280117, + 279927, + 279721, + 279889, + 279912, + 280096, + 280064, + 279946, + 149157, + 279703, + 279984, + 279738, + 280074, + 279812, + 279851, + 156026, + 279787, + 280026, + 280213, + 280435, + 279711, + 279725, + 279714, + 280023, + 280013, + 280179, + 280144, + 279900, + 279802, + 280231, + 280090, + 280098, + 280203, + 279996, + 279749, + 280198, + 280086, + 280104, + 148888, + 279902, + 280112, + 279943, + 279858, + 280181, + 280148, + 280125, + 279807, + 280061, + 280388, + 280419, + 279904, + 279758, + 280216, + 156012, + 279790, + 280209, + 280051, + 280229, + 156027, + 280133, + 280210, + 279744, + 280215, + 280110, + 279947, + 279901, + 280199, + 279942, + 280010, + 280065, + 280143, + 280161, + 280149, + 149173, + 149158, + 156023, + 279910, + 280550, + 280027, + 280044, + 279976, + 279701, + 280220, + 280092, + 280262, + 279948, + 148875, + 279847, + 291035, + 279998, + 280195, + 280129, + 279716, + 280022, + 280391, + 279863, + 279786, + 280172, + 279913, + 279876, + 279866, + 279845, + 279762, + 279710, + 155985, + 279930, + 148883, + 279986, + 279965, + 279894, + 148865, + 279811, + 280060, + 279827, + 279958, + 280436, + 280142, + 279989, + 280178, + 279752, + 280416, + 280232, + 279854, + 279835, + 279871, + 279791, + 279799, + 280182, + 279892, + 279734, + 280066, + 279855, + 280002, + 280021, + 279925, + 279740, + 279814, + 156003, + 280075, + 280150, + 279924, + 279909, + 280237, + 280028, + 280121, + 280206, + 279720, + 280163, + 279709, + 280502, + 280113, + 280059, + 279979, + 280228, + 279747, + 279941, + 280007, + 279883, + 155997, + 156000, + 279841, + 279759, + 279914, + 279949, + 279785, + 279731, + 280167, + 280105, + 279768, + 280415, + 279834, + 290065, + 279792, + 155995, + 280221, + 156008, + 280132, + 279881, + 279800, + 279848, + 279746, + 280067, + 280444, + 290084, + 279862, + 280194, + 279717, + 280020, + 156005, + 280177, + 280141, + 279971, + 280152, + 279801, + 280101, + 279975, + 280004, + 279995, + 280202, + 148880, + 279755, + 279950, + 279959, + 280030, + 148871, + 280058, + 279775, + 279867, + 280162, + 279940, + 279844, + 279885, + 279852, + 279922, + 280183, + 280109, + 279929, + 280445, + 279856, + 280102, + 280120, + 280188, + 280089, + 280039, + 280093, + 149168, + 280153, + 280674, + 279815, + 280204, + 280197, + 280119, + 280233, + 280244, + 279939, + 280050, + 280068, + 149161, + 279886, + 156007, + 155993, + 280406, + 280751, + 279733, + 279915, + 280031, + 280118, + 279708, + 280205, + 280389, + 279999, + 279778, + 279908, + 279969, + 155999, + 280434, + 280609, + 280247, + 280679, + 280417, + 280515, + 280615, + 280265, + 280514, + 280484, + 280629, + 156018, + 280524, + 280376, + 280639, + 280437, + 280739, + 280635, + 280673, + 280551, + 156025, + 280284, + 280689, + 280760, + 280467, + 280711, + 280538, + 280301, + 280400, + 156004, + 156014, + 280641, + 280430, + 280338, + 156011, + 280645, + 280717, + 280658, + 280605, + 280480, + 280568, + 280355, + 280650, + 280271, + 280545, + 148225, + 280468, + 280315, + 280399, + 280325, + 280611, + 280591, + 280339, + 280748, + 280513, + 280740, + 280483, + 280418, + 280313, + 280285, + 280660, + 280448, + 280264, + 280256, + 148859, + 155990, + 280481, + 280340, + 280753, + 280527, + 280683, + 280703, + 280398, + 280252, + 280732, + 280258, + 280565, + 280469, + 280560, + 280396, + 280690, + 149143, + 280306, + 280512, + 280655, + 280541, + 148878, + 148224, + 280341, + 280710, + 280699, + 162016, + 280372, + 280269, + 280454, + 280362, + 280588, + 280614, + 280314, + 280279, + 280535, + 280741, + 280308, + 280613, + 148873, + 280546, + 280324, + 280696, + 149171, + 280421, + 280573, + 280498, + 280248, + 280470, + 280446, + 280720, + 280395, + 280626, + 280254, + 280511, + 280300, + 280428, + 280528, + 280323, + 280752, + 280471, + 280567, + 280539, + 155998, + 280394, + 280721, + 280342, + 280742, + 148229, + 280704, + 280596, + 280559, + 280343, + 280493, + 280722, + 280691, + 280646, + 280422, + 280375, + 148872, + 280453, + 280486, + 280666, + 280637, + 280537, + 280758, + 280286, + 156010, + 280295, + 280529, + 280709, + 280682, + 280356, + 280603, + 280442, + 280731, + 280647, + 280632, + 280670, + 280447, + 149145, + 280664, + 280616, + 280261, + 280387, + 280249, + 280322, + 280662, + 280556, + 280620, + 280574, + 149144, + 280423, + 280299, + 280532, + 280649, + 280344, + 280361, + 280718, + 280727, + 280510, + 280240, + 280625, + 280371, + 280386, + 280642, + 280374, + 280307, + 280287, + 280495, + 280424, + 280472, + 280633, + 148862, + 280669, + 280345, + 280509, + 280644, + 149160, + 280275, + 280743, + 280598, + 280587, + 280473, + 280628, + 280385, + 290931, + 280730, + 280491, + 148885, + 280708, + 280432, + 148868, + 280749, + 280597, + 280346, + 149170, + 280612, + 280692, + 280508, + 156019, + 148882, + 280427, + 280433, + 280562, + 280369, + 280452, + 280759, + 280384, + 280347, + 280636, + 280507, + 280530, + 280440, + 280357, + 280744, + 280474, + 280298, + 280719, + 148226, + 280383, + 280312, + 280653, + 280475, + 280270, + 280656, + 280622, + 280608, + 280725, + 280547, + 280678, + 280425, + 280586, + 280723, + 280575, + 280439, + 280702, + 156028, + 280661, + 280485, + 148889, + 280451, + 280360, + 280260, + 280293, + 280278, + 280492, + 280348, + 280693, + 280288, + 280365, + 280558, + 280250, + 280533, + 280677, + 280554, + 280488, + 280482, + 280253, + 280382, + 280700, + 280257, + 280698, + 280506, + 280297, + 280370, + 280366, + 280505, + 280745, + 280618, + 280697, + 280707, + 280763, + 280724, + 148867, + 280729, + 280381, + 290932, + 280349, + 148887, + 280441, + 280350, + 280604, + 280548, + 280321, + 280648, + 280476, + 280373, + 280606, + 280643, + 149162, + 280294, + 280255, + 280316, + 280566, + 280755, + 280694, + 280251, + 280619, + 156022, + 280449, + 148222, + 280581, + 280680, + 280552, + 280380, + 280276, + 280762, + 280351, + 280504, + 280746, + 280364, + 280494, + 280477, + 280259, + 280580, + 280583, + 280241, + 280706, + 280379, + 148228, + 156015, + 149166, + 280663, + 280359, + 149147, + 280487, + 149149, + 148866, + 280576, + 280754, + 280426, + 280289, + 280585, + 280557, + 280352, + 280311, + 280378, + 280274, + 280489, + 155988, + 290930, + 280555, + 280411, + 280685, + 280521, + 280304, + 280672, + 280329, + 280665, + 280630, + 280735, + 280363, + 280540, + 280569, + 280478, + 280309, + 280459, + 280607, + 156006, + 280267, + 280578, + 280715, + 280458, + 280296, + 280638, + 280281, + 280503, + 280330, + 156020, + 280410, + 280594, + 280331, + 280245, + 280617, + 280520, + 280564, + 280668, + 280460, + 280714, + 280367, + 280621, + 280328, + 280761, + 280409, + 280273, + 148877, + 280570, + 280624, + 280412, + 280602, + 280610, + 280429, + 280332, + 280543, + 280747, + 155994, + 280457, + 280479, + 280659, + 290928, + 280651, + 280599, + 280640, + 280242, + 280353, + 280734, + 148869, + 280728, + 280686, + 155984, + 280282, + 280519, + 280579, + 280305, + 149150, + 280292, + 280266, + 280736, + 148230, + 280536, + 280518, + 280461, + 148223, + 280413, + 280408, + 280377, + 149154, + 280757, + 280272, + 280303, + 280593, + 280490, + 290929, + 280553, + 280631, + 280438, + 280443, + 280713, + 280407, + 280333, + 280450, + 280522, + 280737, + 280319, + 280695, + 280523, + 280684, + 280334, + 280623, + 280681, + 280280, + 148881, + 280687, + 280544, + 280283, + 280462, + 280327, + 280368, + 280277, + 280561, + 280358, + 280716, + 280456, + 280750, + 148863, + 280657, + 280404, + 280246, + 280517, + 280465, + 280500, + 280595, + 280584, + 280302, + 280516, + 280582, + 280414, + 280531, + 280571, + 280701, + 280712, + 280592, + 280542, + 280563, + 280335, + 156016, + 280290, + 148884, + 280667, + 280318, + 280268, + 280455, + 280705, + 280733, + 280499, + 280738, + 149152, + 280726, + 149174, + 280336, + 280601, + 280756, + 280403, + 280326, + 280634, + 156002, + 280671, + 280466, + 280402, + 280627, + 280652, + 280688, + 280317, + 280534, + 280337, + 280600, + 280310, + 280577, + 254109, + 280572, + 148876, + 280354, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.315817+00:00", + }, + { + "code": "225", + "created_at": "2021-08-10T06:17:45.487347+00:00", + "display_name": "Pay As You Go Withholding", + "id": 147712, + "is_enabled": True, + "name": "Pay As You Go Withholding", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280314, + 156022, + 280536, + 280600, + 280309, + 280315, + 280598, + 280316, + 148222, + 149144, + 280317, + 280318, + 156028, + 280308, + 280319, + 280638, + 280625, + 280321, + 280307, + 280597, + 280636, + 148862, + 280322, + 149145, + 148872, + 280596, + 280323, + 280324, + 280306, + 148859, + 280325, + 156014, + 280639, + 280305, + 280326, + 280601, + 280595, + 280327, + 149154, + 155994, + 280328, + 280594, + 280329, + 280304, + 156006, + 280330, + 280331, + 148877, + 280602, + 280623, + 280332, + 280640, + 149150, + 148230, + 280303, + 280593, + 280333, + 280334, + 148863, + 280302, + 280592, + 280335, + 280336, + 156002, + 280337, + 148876, + 156018, + 280635, + 280301, + 280641, + 280338, + 280591, + 280339, + 155990, + 280340, + 280341, + 280588, + 148873, + 280300, + 155998, + 280342, + 280343, + 156010, + 280603, + 280299, + 280344, + 280642, + 280345, + 280587, + 148885, + 280346, + 280532, + 149170, + 280347, + 280298, + 148226, + 280586, + 280348, + 280297, + 280763, + 280349, + 280350, + 280604, + 280643, + 280762, + 280351, + 148228, + 280585, + 280352, + 280296, + 280761, + 280353, + 280584, + 280634, + 280354, + 280760, + 280355, + 148878, + 280295, + 280356, + 280644, + 280759, + 280357, + 280294, + 280540, + 280583, + 280358, + 280758, + 280359, + 280605, + 280582, + 280360, + 280757, + 156015, + 280293, + 280361, + 280362, + 280645, + 280624, + 280756, + 280292, + 280363, + 280364, + 280581, + 280755, + 148887, + 280365, + 280366, + 280606, + 280680, + 280580, + 280754, + 280367, + 280368, + 280679, + 280753, + 280646, + 280369, + 280370, + 280752, + 149174, + 280579, + 280371, + 280633, + 280678, + 280750, + 280578, + 280372, + 280373, + 280677, + 280749, + 280374, + 280647, + 280375, + 149143, + 280748, + 280376, + 280577, + 280290, + 280377, + 280747, + 148866, + 280607, + 280378, + 280289, + 280576, + 280379, + 280746, + 280380, + 149162, + 280648, + 280381, + 280745, + 280288, + 280533, + 280382, + 280575, + 280608, + 280383, + 280744, + 280384, + 148868, + 280385, + 280743, + 280287, + 280386, + 280649, + 280574, + 280387, + 280632, + 280286, + 280742, + 280394, + 280395, + 280573, + 280741, + 162016, + 280396, + 280398, + 280285, + 280740, + 280399, + 280650, + 280400, + 280284, + 280739, + 280609, + 280572, + 280402, + 280403, + 280738, + 156016, + 280571, + 280404, + 280283, + 280737, + 280407, + 280408, + 280736, + 280282, + 280651, + 280610, + 280570, + 280409, + 280410, + 156020, + 280735, + 280411, + 280569, + 280281, + 280412, + 280734, + 280240, + 280413, + 280631, + 280280, + 280414, + 280733, + 280652, + 280417, + 156025, + 280568, + 280418, + 280732, + 280279, + 280421, + 280567, + 280422, + 280731, + 280423, + 280424, + 280730, + 148882, + 280278, + 280673, + 280425, + 280653, + 280566, + 280426, + 280611, + 280277, + 280729, + 280427, + 280428, + 280565, + 148884, + 280728, + 280429, + 280430, + 280727, + 280276, + 280432, + 280655, + 280433, + 280612, + 280726, + 280630, + 280564, + 280434, + 148224, + 280275, + 280725, + 290932, + 280437, + 280274, + 280438, + 280724, + 280439, + 280622, + 280440, + 280656, + 280723, + 280441, + 149149, + 290931, + 280273, + 280442, + 280722, + 280443, + 280272, + 290930, + 280446, + 280721, + 280613, + 280447, + 280448, + 280657, + 156011, + 280271, + 280720, + 280449, + 280450, + 280563, + 280270, + 280719, + 280451, + 280452, + 280562, + 280718, + 280453, + 149171, + 280614, + 280454, + 280269, + 280658, + 280717, + 280629, + 280455, + 280268, + 280456, + 280716, + 290929, + 280457, + 280458, + 280715, + 280534, + 155988, + 280459, + 280267, + 280460, + 280714, + 280659, + 290928, + 280266, + 280461, + 280713, + 280462, + 280561, + 280465, + 280712, + 149152, + 280466, + 280615, + 280265, + 280467, + 280711, + 280468, + 280660, + 280264, + 280469, + 280560, + 280710, + 280470, + 280471, + 148229, + 280559, + 280709, + 280616, + 280261, + 280472, + 280473, + 280628, + 280708, + 280474, + 280475, + 280661, + 148889, + 280260, + 280558, + 280707, + 280476, + 280477, + 280259, + 280706, + 280241, + 280557, + 280478, + 280479, + 280539, + 148869, + 280705, + 280480, + 280481, + 280258, + 280704, + 280662, + 280556, + 280482, + 280257, + 280617, + 280483, + 280703, + 280555, + 156004, + 280484, + 280485, + 280702, + 280486, + 280256, + 280701, + 280487, + 280663, + 280255, + 280618, + 280488, + 280554, + 280700, + 149166, + 280489, + 280490, + 280553, + 280627, + 280699, + 280254, + 280491, + 148867, + 280492, + 280698, + 280493, + 280664, + 148881, + 280494, + 280552, + 280697, + 280253, + 280535, + 280495, + 280498, + 280696, + 280252, + 280551, + 280499, + 280500, + 280695, + 280503, + 280665, + 149147, + 280504, + 280619, + 280251, + 280694, + 280548, + 280505, + 280506, + 280250, + 280693, + 280547, + 280507, + 280508, + 280692, + 149160, + 280509, + 280510, + 280620, + 280249, + 280666, + 280691, + 280511, + 280626, + 280248, + 280546, + 280512, + 280690, + 280513, + 148225, + 280545, + 280689, + 280514, + 280515, + 280247, + 280688, + 280667, + 280516, + 280246, + 280517, + 280544, + 280687, + 280518, + 280519, + 155984, + 280686, + 280543, + 280520, + 280672, + 280245, + 280521, + 280685, + 280668, + 280621, + 280242, + 280522, + 280523, + 280684, + 280542, + 254109, + 280524, + 280538, + 280527, + 280683, + 280541, + 280528, + 280529, + 280682, + 280669, + 280530, + 280671, + 280537, + 280531, + 280681, + 280670, + 280311, + 148223, + 280312, + 156019, + 280637, + 280313, + 280310, + 280599, + 279773, + 280203, + 280098, + 280103, + 149175, + 279990, + 279751, + 156000, + 280104, + 280044, + 279984, + 279744, + 279801, + 280206, + 279991, + 280097, + 279889, + 279832, + 279885, + 279730, + 279829, + 156005, + 280202, + 279852, + 279746, + 280105, + 279752, + 149158, + 280096, + 279983, + 279890, + 149163, + 279992, + 280106, + 280207, + 279745, + 148890, + 279757, + 279982, + 148886, + 280095, + 280201, + 279753, + 279833, + 279884, + 279981, + 280107, + 279993, + 279743, + 279891, + 280094, + 279828, + 148858, + 149164, + 280108, + 279994, + 279754, + 280208, + 279722, + 279763, + 280200, + 279980, + 155999, + 156007, + 280093, + 280244, + 280109, + 279995, + 279755, + 279834, + 279883, + 279979, + 279740, + 279892, + 279827, + 148865, + 280092, + 156023, + 280199, + 280110, + 280209, + 279927, + 279996, + 279721, + 279978, + 279756, + 279739, + 279977, + 280111, + 148231, + 280091, + 149148, + 279882, + 279764, + 279893, + 279826, + 279997, + 279738, + 279921, + 280090, + 280198, + 280112, + 279758, + 280210, + 279976, + 279998, + 155985, + 279894, + 279835, + 279720, + 280113, + 279759, + 279768, + 279881, + 279975, + 148880, + 280089, + 280197, + 280238, + 280751, + 279999, + 279737, + 280114, + 279974, + 279895, + 280211, + 279825, + 148870, + 280088, + 279760, + 280115, + 280000, + 279736, + 279973, + 279836, + 279880, + 280676, + 280196, + 280116, + 279761, + 149155, + 280087, + 279972, + 280675, + 279769, + 280168, + 280001, + 280291, + 280212, + 279715, + 279824, + 279735, + 280117, + 280086, + 280195, + 279762, + 280002, + 279971, + 280674, + 280118, + 279837, + 279878, + 279970, + 149169, + 280085, + 279896, + 280003, + 279823, + 280213, + 279734, + 280194, + 280047, + 280119, + 279765, + 279713, + 148860, + 280084, + 280654, + 279969, + 279897, + 280120, + 280004, + 279877, + 280170, + 279766, + 279733, + 280590, + 279774, + 155992, + 280083, + 279968, + 280193, + 280214, + 280122, + 279767, + 280005, + 279732, + 279838, + 279704, + 280589, + 279967, + 279875, + 279898, + 280082, + 280165, + 279822, + 280123, + 279966, + 280006, + 280192, + 280124, + 149159, + 280081, + 279770, + 280215, + 291035, + 279965, + 280007, + 279731, + 279775, + 279899, + 149172, + 279821, + 280126, + 279839, + 279874, + 279771, + 280080, + 280191, + 280550, + 280008, + 279729, + 279964, + 280127, + 280216, + 279703, + 279772, + 279963, + 149153, + 280079, + 279876, + 279900, + 280009, + 279728, + 280078, + 279804, + 279820, + 280190, + 279873, + 280128, + 280549, + 279962, + 280129, + 280010, + 279902, + 279853, + 280526, + 279776, + 280217, + 156013, + 280077, + 280042, + 279840, + 149151, + 279879, + 279961, + 280189, + 280130, + 280011, + 279727, + 280525, + 279777, + 279872, + 279960, + 148874, + 280076, + 279903, + 279819, + 280012, + 155996, + 280131, + 279923, + 280218, + 279726, + 279778, + 280188, + 148871, + 279959, + 280132, + 155997, + 280502, + 280075, + 279841, + 279871, + 279958, + 280388, + 279901, + 280133, + 279904, + 280013, + 279725, + 280074, + 279818, + 280501, + 280219, + 280187, + 280014, + 279805, + 279779, + 279957, + 155987, + 280073, + 280134, + 280497, + 279780, + 279842, + 279870, + 279956, + 279935, + 279905, + 280015, + 290067, + 279724, + 280045, + 279817, + 280186, + 280135, + 280222, + 155986, + 280239, + 280072, + 279781, + 279955, + 279906, + 280136, + 280016, + 290068, + 279723, + 280496, + 280071, + 280263, + 279954, + 280029, + 279869, + 280185, + 280137, + 280464, + 280017, + 279782, + 280223, + 279953, + 280070, + 279907, + 246836, + 279816, + 280138, + 279719, + 290069, + 280463, + 280018, + 279843, + 280184, + 279868, + 156001, + 279783, + 280069, + 279926, + 279952, + 280139, + 280019, + 279784, + 279951, + 280224, + 279718, + 280037, + 280140, + 279908, + 149161, + 280068, + 279815, + 149168, + 280445, + 280183, + 279844, + 279867, + 279922, + 279950, + 280141, + 280020, + 279717, + 280444, + 280067, + 279785, + 279949, + 280228, + 280121, + 279909, + 156003, + 279814, + 279924, + 280021, + 280066, + 280182, + 280142, + 290065, + 280436, + 279845, + 279866, + 279786, + 280022, + 279716, + 279948, + 279910, + 149173, + 280143, + 280065, + 279947, + 280229, + 156012, + 280125, + 280181, + 280144, + 280023, + 279714, + 280435, + 279787, + 149157, + 279946, + 280064, + 279803, + 280145, + 279911, + 279865, + 279813, + 280431, + 280024, + 279712, + 279788, + 280230, + 280043, + 280063, + 280180, + 279945, + 280146, + 149156, + 280420, + 279789, + 148864, + 279944, + 280025, + 279846, + 279857, + 280062, + 280151, + 279864, + 280147, + 156026, + 279912, + 279812, + 280026, + 279711, + 280179, + 280231, + 279943, + 279802, + 148888, + 280148, + 280061, + 280419, + 279790, + 156027, + 279856, + 279942, + 280149, + 280027, + 280220, + 279847, + 279863, + 279913, + 279710, + 148883, + 279811, + 280060, + 280178, + 280416, + 280232, + 279791, + 280150, + 279855, + 280028, + 279709, + 280059, + 280167, + 279941, + 279914, + 280415, + 279792, + 280221, + 156008, + 279848, + 279862, + 280177, + 280152, + 280169, + 280030, + 280058, + 279940, + 280153, + 279939, + 280233, + 155993, + 280406, + 279915, + 280031, + 279708, + 279810, + 149165, + 279793, + 280057, + 280176, + 280154, + 280032, + 279938, + 279861, + 280166, + 280405, + 279707, + 280155, + 149146, + 280056, + 279794, + 280234, + 280225, + 279937, + 279916, + 279809, + 148879, + 280401, + 280046, + 280033, + 280055, + 280175, + 280156, + 279849, + 279706, + 279795, + 279860, + 279936, + 280157, + 149167, + 280397, + 280034, + 280226, + 280235, + 279917, + 280054, + 279934, + 279808, + 280035, + 280174, + 155989, + 156021, + 279796, + 280158, + 279850, + 279859, + 279933, + 280393, + 279705, + 279918, + 280053, + 280159, + 280227, + 280320, + 279797, + 280236, + 280036, + 280173, + 279932, + 148227, + 279702, + 280052, + 280392, + 280160, + 279798, + 280038, + 279931, + 279919, + 279851, + 279858, + 279807, + 280051, + 280161, + 279701, + 280391, + 280172, + 279930, + 279799, + 280262, + 280237, + 155995, + 290084, + 280162, + 279929, + 280039, + 280050, + 280243, + 280390, + 279920, + 280040, + 156024, + 279700, + 279806, + 280171, + 280163, + 280049, + 279800, + 279854, + 279925, + 279928, + 280389, + 280041, + 280164, + 156009, + 280100, + 155991, + 279742, + 279831, + 279887, + 280204, + 280101, + 279749, + 279988, + 279748, + 279987, + 148861, + 148875, + 279986, + 280102, + 280205, + 280099, + 279741, + 280048, + 279888, + 279830, + 279750, + 279989, + 279747, + 279985, + 279886, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:55.315817+00:00", + }, + { + "code": "74", + "created_at": "2021-04-22T06:17:45.101318+00:00", + "display_name": "Dues and Subscriptions", + "id": 136502, + "is_enabled": True, + "name": "Dues and Subscriptions", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 279975, + 280223, + 279856, + 279904, + 279953, + 280075, + 279901, + 280133, + 279907, + 280070, + 246836, + 279958, + 279816, + 279871, + 280138, + 280502, + 280018, + 279746, + 155997, + 279841, + 279719, + 280388, + 280132, + 280463, + 279831, + 279959, + 279783, + 148871, + 280105, + 290069, + 279868, + 280188, + 280263, + 280184, + 280069, + 279952, + 279778, + 279726, + 280218, + 280139, + 280012, + 280131, + 279784, + 280019, + 279887, + 279951, + 279819, + 279923, + 280037, + 280224, + 279804, + 279903, + 279718, + 280140, + 279960, + 280076, + 148874, + 279872, + 279801, + 279777, + 280239, + 279908, + 149161, + 280204, + 280525, + 280068, + 279815, + 149168, + 279727, + 280011, + 280130, + 279926, + 280445, + 280189, + 279844, + 279867, + 280183, + 279961, + 279950, + 149151, + 279879, + 280141, + 280077, + 156013, + 280217, + 279776, + 280020, + 280526, + 279717, + 280067, + 156005, + 280444, + 280100, + 279785, + 279902, + 280228, + 280010, + 279949, + 280129, + 280121, + 279962, + 279909, + 156003, + 280142, + 280549, + 156009, + 280021, + 280128, + 279814, + 280066, + 280190, + 279873, + 279840, + 280182, + 279820, + 155996, + 280078, + 279728, + 280009, + 280436, + 280238, + 279900, + 279786, + 279845, + 279866, + 279876, + 280043, + 280022, + 279716, + 280079, + 280202, + 279963, + 280165, + 149153, + 279948, + 279988, + 279703, + 280216, + 279985, + 279772, + 279910, + 149173, + 280127, + 280143, + 279787, + 279964, + 280229, + 279729, + 280008, + 280065, + 279947, + 279748, + 280550, + 280125, + 156012, + 280191, + 280080, + 291035, + 280181, + 279771, + 279874, + 279839, + 280126, + 280144, + 279857, + 280023, + 279821, + 279714, + 280435, + 149172, + 279899, + 280048, + 149157, + 280064, + 279946, + 279987, + 280145, + 279965, + 279731, + 280007, + 279911, + 279865, + 279813, + 280081, + 280215, + 279770, + 280431, + 149159, + 280124, + 279788, + 280024, + 279712, + 280230, + 280063, + 280192, + 280180, + 279775, + 279945, + 279966, + 280006, + 280146, + 149156, + 148861, + 279922, + 280123, + 279853, + 280420, + 279789, + 148864, + 279822, + 280082, + 279875, + 279898, + 280151, + 280025, + 279846, + 280062, + 279967, + 279864, + 280589, + 279704, + 279838, + 279829, + 280147, + 279732, + 280005, + 279767, + 279912, + 279812, + 280122, + 280026, + 279855, + 279924, + 279944, + 279803, + 280179, + 280193, + 279886, + 280214, + 279968, + 279790, + 280231, + 280083, + 155992, + 279774, + 148888, + 279711, + 280590, + 280170, + 279943, + 279733, + 280148, + 280061, + 279730, + 279766, + 279885, + 279877, + 280004, + 280120, + 279832, + 280419, + 279897, + 280027, + 156027, + 280149, + 279942, + 279969, + 280220, + 280654, + 280084, + 148860, + 279847, + 279863, + 279713, + 279913, + 148875, + 280119, + 148883, + 279710, + 280194, + 279734, + 280213, + 279889, + 279802, + 279811, + 280060, + 280178, + 279823, + 156026, + 280003, + 280416, + 280232, + 279896, + 279791, + 280085, + 279773, + 280150, + 279765, + 279852, + 280028, + 280059, + 279941, + 279970, + 279878, + 279914, + 279709, + 279837, + 280118, + 280097, + 280415, + 280206, + 280674, + 279792, + 149169, + 279971, + 280221, + 280167, + 156008, + 280002, + 279762, + 280168, + 279848, + 279862, + 280195, + 280177, + 279744, + 280086, + 279735, + 280152, + 280117, + 280030, + 280058, + 279940, + 280047, + 279824, + 279715, + 280212, + 280153, + 280291, + 280233, + 155993, + 280001, + 280675, + 280406, + 279972, + 279915, + 280102, + 280087, + 149155, + 280031, + 279761, + 149165, + 279810, + 279708, + 279939, + 279984, + 280116, + 279793, + 280057, + 280154, + 280676, + 280176, + 280196, + 279736, + 279769, + 280205, + 280032, + 279938, + 279880, + 279836, + 279973, + 280099, + 279861, + 280000, + 280405, + 279927, + 280115, + 290084, + 279794, + 279991, + 279925, + 279760, + 280155, + 279825, + 280088, + 148870, + 280211, + 149146, + 280045, + 279895, + 279707, + 280234, + 280225, + 279974, + 280056, + 280166, + 279937, + 279916, + 279737, + 279999, + 280114, + 148879, + 280751, + 279809, + 280203, + 280401, + 280197, + 280089, + 280033, + 280055, + 280013, + 280175, + 148880, + 279888, + 279881, + 279741, + 279768, + 148890, + 279795, + 280156, + 279759, + 280104, + 279849, + 279706, + 279720, + 279835, + 279860, + 280113, + 279936, + 280157, + 279894, + 149167, + 155985, + 280397, + 279998, + 279976, + 280169, + 280226, + 280034, + 280210, + 279917, + 279921, + 279758, + 280235, + 280054, + 280112, + 280035, + 280174, + 280198, + 280090, + 156000, + 279738, + 279934, + 279796, + 155989, + 156021, + 279826, + 279997, + 280158, + 279808, + 279893, + 280046, + 279882, + 279764, + 279850, + 279859, + 149148, + 279830, + 280091, + 148231, + 279933, + 279705, + 279977, + 279918, + 280111, + 280053, + 280393, + 279739, + 148858, + 279756, + 280159, + 280042, + 279751, + 279978, + 279721, + 279996, + 280227, + 279797, + 280036, + 280209, + 280199, + 280236, + 280173, + 280110, + 148227, + 280052, + 279932, + 156023, + 280092, + 148865, + 279702, + 280392, + 279986, + 279979, + 279827, + 280160, + 279740, + 279798, + 279892, + 280038, + 279931, + 279883, + 279834, + 279919, + 279755, + 279851, + 279858, + 280093, + 279995, + 280109, + 280051, + 279807, + 156007, + 279750, + 155999, + 280161, + 279980, + 279701, + 280172, + 280200, + 280262, + 280391, + 279722, + 280208, + 279763, + 279930, + 279994, + 280108, + 149175, + 279799, + 280320, + 279754, + 280237, + 155995, + 280162, + 279990, + 149164, + 280039, + 280050, + 279929, + 279828, + 280094, + 279743, + 279993, + 279891, + 280243, + 280390, + 279920, + 280040, + 280107, + 290065, + 156024, + 279700, + 279981, + 280244, + 279884, + 279833, + 279989, + 279806, + 279753, + 279747, + 280171, + 280201, + 280163, + 280049, + 280095, + 148886, + 279982, + 279800, + 279854, + 279757, + 279928, + 279745, + 280207, + 280106, + 280098, + 280389, + 280041, + 149163, + 280164, + 279992, + 280103, + 155991, + 279890, + 279749, + 279983, + 280096, + 149158, + 280186, + 280135, + 279817, + 290067, + 280222, + 155986, + 279724, + 280015, + 279905, + 279781, + 280072, + 279935, + 280101, + 279955, + 279956, + 279870, + 279842, + 280136, + 279780, + 280044, + 279906, + 280497, + 279805, + 280016, + 279723, + 280496, + 280073, + 155987, + 280134, + 279752, + 280071, + 279957, + 279954, + 156001, + 280029, + 279843, + 279869, + 279779, + 280187, + 279725, + 280014, + 280219, + 280185, + 280501, + 279742, + 280137, + 290068, + 280017, + 280464, + 279818, + 279782, + 280074, + 280432, + 280613, + 280721, + 280433, + 280612, + 280446, + 280726, + 280272, + 280564, + 290931, + 280434, + 280443, + 280622, + 280673, + 148224, + 280722, + 280442, + 280275, + 280725, + 280273, + 280437, + 280630, + 149149, + 280307, + 280274, + 280438, + 280441, + 290932, + 280723, + 280724, + 280439, + 280656, + 280671, + 280440, + 280636, + 280536, + 280597, + 280530, + 156022, + 148862, + 280322, + 280669, + 149145, + 280682, + 280529, + 148872, + 280596, + 280323, + 280528, + 280324, + 280541, + 280683, + 280306, + 280600, + 148859, + 280325, + 280527, + 280538, + 156014, + 280639, + 280326, + 280524, + 280599, + 254109, + 280542, + 280684, + 280595, + 280327, + 280523, + 149154, + 280242, + 280305, + 155994, + 280328, + 280522, + 280621, + 280329, + 280668, + 280594, + 280685, + 280304, + 280521, + 156006, + 280330, + 280245, + 280331, + 280520, + 148877, + 280602, + 280309, + 280543, + 280332, + 280686, + 280640, + 155984, + 149150, + 280519, + 148230, + 280518, + 280303, + 280544, + 280593, + 280333, + 280687, + 280334, + 280246, + 148863, + 280517, + 280302, + 280310, + 280592, + 280335, + 280516, + 280336, + 280667, + 280688, + 156002, + 280337, + 148876, + 280247, + 280338, + 280515, + 156018, + 280689, + 280315, + 280635, + 280514, + 280301, + 280532, + 280641, + 280545, + 148225, + 280339, + 280314, + 280513, + 280591, + 280690, + 155990, + 280623, + 280340, + 280512, + 280341, + 280546, + 148873, + 280313, + 280588, + 280248, + 280626, + 280300, + 155998, + 280342, + 280511, + 280343, + 280691, + 280603, + 280249, + 280299, + 156010, + 280642, + 280344, + 280620, + 280637, + 280510, + 280345, + 280666, + 280509, + 280587, + 149160, + 148885, + 280346, + 280692, + 149170, + 280598, + 280508, + 280347, + 280507, + 280298, + 280547, + 148226, + 280693, + 280586, + 280348, + 280250, + 280349, + 280604, + 280297, + 280506, + 280316, + 280763, + 280505, + 280350, + 280548, + 280694, + 280643, + 280251, + 280762, + 280619, + 280351, + 148228, + 280504, + 149147, + 280585, + 280352, + 280665, + 280296, + 280503, + 280761, + 280353, + 280695, + 280500, + 280584, + 280499, + 280634, + 280354, + 280551, + 280252, + 280625, + 280760, + 280624, + 280355, + 280696, + 280356, + 148878, + 156019, + 280498, + 280295, + 280495, + 280644, + 280672, + 280552, + 280759, + 280357, + 280253, + 280697, + 280294, + 280583, + 280358, + 148881, + 280494, + 280758, + 280359, + 280664, + 280605, + 280493, + 280698, + 280360, + 149144, + 280582, + 280492, + 156015, + 280491, + 280699, + 280293, + 280757, + 280361, + 280254, + 280362, + 280645, + 280627, + 280553, + 280292, + 280756, + 280490, + 280363, + 280364, + 149166, + 280535, + 280489, + 280581, + 280755, + 280365, + 280540, + 148887, + 280700, + 148222, + 280554, + 280366, + 280618, + 280255, + 280606, + 280488, + 280680, + 280580, + 280754, + 280367, + 280663, + 280368, + 280701, + 280487, + 280679, + 280256, + 280753, + 280646, + 280317, + 280486, + 280369, + 280702, + 280370, + 280485, + 280555, + 149174, + 156004, + 280752, + 280579, + 280484, + 280371, + 148223, + 280633, + 280703, + 280678, + 280372, + 280483, + 280750, + 280578, + 280312, + 280257, + 280373, + 280617, + 280677, + 280482, + 280749, + 280556, + 280647, + 280374, + 280662, + 280704, + 280375, + 149143, + 280318, + 280258, + 280481, + 280748, + 280376, + 280480, + 280577, + 280533, + 280607, + 280705, + 280290, + 280377, + 148869, + 280479, + 280747, + 280378, + 280478, + 280557, + 280289, + 280706, + 280379, + 280259, + 280746, + 280648, + 280380, + 280311, + 280477, + 149162, + 280476, + 280576, + 280381, + 280558, + 148866, + 280707, + 280745, + 280382, + 280260, + 280670, + 280288, + 148889, + 280575, + 280383, + 280608, + 280475, + 280241, + 280661, + 280744, + 280384, + 156028, + 280474, + 280708, + 148868, + 280385, + 280628, + 280473, + 280743, + 280287, + 280386, + 280472, + 280649, + 280709, + 280261, + 280387, + 280632, + 280616, + 280286, + 280559, + 280574, + 148229, + 280742, + 280394, + 280471, + 280395, + 280539, + 280470, + 280573, + 280710, + 162016, + 280560, + 280741, + 280396, + 148867, + 280398, + 280469, + 280264, + 280308, + 280285, + 280660, + 280740, + 280399, + 280650, + 280468, + 280400, + 280711, + 280467, + 280284, + 280739, + 280265, + 280609, + 280615, + 280572, + 280402, + 280466, + 280403, + 156016, + 280319, + 149152, + 280738, + 280712, + 280571, + 280561, + 280404, + 280465, + 290928, + 280283, + 280713, + 280737, + 280407, + 280462, + 280408, + 280461, + 280651, + 280266, + 280282, + 280736, + 280610, + 280659, + 280409, + 280714, + 280570, + 280410, + 156020, + 280638, + 280460, + 280267, + 280459, + 280735, + 290929, + 280411, + 155988, + 280715, + 280281, + 280569, + 280412, + 280458, + 280457, + 280681, + 280734, + 280413, + 280631, + 280716, + 280280, + 280456, + 280414, + 280268, + 280733, + 280652, + 280417, + 280629, + 156025, + 280531, + 280455, + 280717, + 280568, + 280418, + 280658, + 280269, + 280732, + 280421, + 280279, + 149171, + 280454, + 280567, + 280422, + 280453, + 280731, + 280423, + 280321, + 280718, + 280240, + 280424, + 280562, + 280614, + 280730, + 148882, + 280653, + 280425, + 280452, + 280278, + 280451, + 280719, + 280534, + 280270, + 280426, + 280566, + 280611, + 280563, + 280450, + 290930, + 280729, + 280427, + 280537, + 280449, + 280720, + 280428, + 280271, + 280565, + 148884, + 156011, + 280277, + 280728, + 280429, + 280657, + 280430, + 280448, + 280601, + 280727, + 280447, + 280276, + 280655, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:45:27.527000+00:00", + }, + { + "code": "94", + "created_at": "2021-04-13T03:30:14.829244+00:00", + "display_name": "Train-Airplane-Cart", + "id": 135708, + "is_enabled": True, + "name": "Train-Airplane-Cart", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280611, + 280349, + 148876, + 280359, + 280288, + 280260, + 280452, + 280443, + 280337, + 280439, + 280604, + 280402, + 156002, + 280466, + 280554, + 280403, + 280688, + 280382, + 280371, + 280667, + 148884, + 280316, + 148866, + 280319, + 280336, + 280366, + 280516, + 280297, + 280759, + 156011, + 156016, + 280484, + 280506, + 148222, + 149152, + 280335, + 280745, + 280592, + 280707, + 280273, + 280255, + 280738, + 280434, + 280712, + 280571, + 280763, + 280482, + 280302, + 280310, + 280381, + 280540, + 280517, + 280729, + 280505, + 280724, + 280561, + 148863, + 280404, + 280465, + 290928, + 280283, + 148887, + 280350, + 280537, + 280246, + 148867, + 280334, + 280678, + 280576, + 280713, + 280357, + 280548, + 280558, + 280270, + 280687, + 280606, + 280737, + 280407, + 280277, + 280365, + 280333, + 280593, + 280493, + 280694, + 290930, + 280755, + 280613, + 280278, + 280643, + 280462, + 290931, + 280544, + 280703, + 280476, + 280311, + 149162, + 280697, + 280303, + 280408, + 280518, + 280618, + 280251, + 280539, + 280461, + 280519, + 280651, + 148230, + 280700, + 280477, + 280380, + 280699, + 280253, + 149150, + 280564, + 280648, + 280633, + 280491, + 280762, + 280677, + 280266, + 155984, + 280432, + 280450, + 280619, + 280581, + 280282, + 280736, + 280640, + 280535, + 280351, + 280686, + 280610, + 280659, + 280309, + 280276, + 280637, + 280746, + 280259, + 280488, + 280332, + 280728, + 280543, + 280555, + 148228, + 280617, + 280714, + 280379, + 280312, + 280602, + 280680, + 148877, + 280504, + 280373, + 280409, + 280520, + 280681, + 280289, + 280706, + 280307, + 280489, + 149147, + 149166, + 280570, + 280621, + 280410, + 280557, + 280451, + 280563, + 280585, + 280294, + 280638, + 280331, + 280272, + 280245, + 280664, + 280352, + 156020, + 280460, + 280330, + 156006, + 280267, + 280459, + 280735, + 280521, + 280364, + 280478, + 280304, + 280378, + 280566, + 280665, + 280580, + 280240, + 290929, + 280754, + 280411, + 155988, + 280685, + 280367, + 280296, + 148223, + 280594, + 280668, + 280726, + 280329, + 280578, + 280715, + 280281, + 280569, + 280503, + 280257, + 280522, + 280412, + 280599, + 280328, + 155994, + 280458, + 156015, + 280747, + 280363, + 280457, + 280761, + 280490, + 280305, + 280734, + 280429, + 280723, + 280695, + 280242, + 280413, + 280663, + 280353, + 280721, + 280479, + 280631, + 149154, + 280756, + 280292, + 280630, + 148869, + 280523, + 280377, + 280583, + 280657, + 280716, + 280280, + 280622, + 149174, + 280500, + 280701, + 280368, + 280487, + 280290, + 280705, + 156004, + 280327, + 280584, + 280358, + 280595, + 280414, + 280456, + 280684, + 280268, + 280607, + 280719, + 280542, + 280524, + 280733, + 254109, + 280652, + 280629, + 280499, + 280553, + 280417, + 280326, + 156025, + 280455, + 280698, + 280639, + 156014, + 280256, + 280679, + 280634, + 280605, + 280717, + 280531, + 280551, + 280568, + 280750, + 280354, + 280446, + 280577, + 280538, + 280527, + 280655, + 280418, + 280426, + 280430, + 280317, + 280480, + 280376, + 280325, + 148859, + 280483, + 280601, + 280658, + 280752, + 280252, + 148881, + 280492, + 280269, + 280306, + 280448, + 280732, + 280600, + 280645, + 280627, + 280760, + 280753, + 280683, + 280421, + 280624, + 280433, + 280279, + 280541, + 280372, + 280355, + 149171, + 280481, + 280324, + 280528, + 280582, + 156019, + 280748, + 280454, + 280362, + 280696, + 280567, + 280323, + 280494, + 280258, + 280596, + 280529, + 280579, + 280356, + 149149, + 280646, + 148872, + 280422, + 280486, + 148878, + 280453, + 280718, + 280321, + 149143, + 290932, + 280727, + 280682, + 280731, + 280533, + 280318, + 280375, + 280254, + 280498, + 280361, + 149145, + 280536, + 280510, + 280704, + 280345, + 280442, + 280287, + 280437, + 280386, + 280472, + 280620, + 280757, + 280666, + 280344, + 280438, + 280649, + 280314, + 280295, + 280673, + 280642, + 156010, + 280299, + 280709, + 280261, + 280387, + 280509, + 280293, + 280669, + 280632, + 280616, + 156022, + 280743, + 280275, + 280473, + 280603, + 280274, + 280423, + 280286, + 280587, + 280322, + 280249, + 280623, + 280385, + 280662, + 280449, + 149160, + 280758, + 280559, + 280691, + 280574, + 280628, + 148862, + 280343, + 280511, + 280742, + 148885, + 280424, + 280342, + 155998, + 280394, + 148229, + 280612, + 280346, + 280300, + 156028, + 148868, + 280374, + 280471, + 280313, + 280395, + 280470, + 280360, + 280692, + 280427, + 280626, + 280573, + 280588, + 280647, + 149170, + 280369, + 280708, + 280702, + 280720, + 280248, + 280710, + 280241, + 148873, + 162016, + 280562, + 280474, + 280384, + 280530, + 280546, + 280560, + 280741, + 280428, + 280341, + 280370, + 280347, + 280512, + 280534, + 280396, + 280398, + 280469, + 280598, + 280508, + 280644, + 280340, + 155990, + 280264, + 280285, + 280614, + 280547, + 280597, + 280744, + 280722, + 280690, + 280591, + 280507, + 280636, + 280625, + 280447, + 280661, + 280513, + 280670, + 280725, + 280298, + 148882, + 280660, + 280308, + 280740, + 280271, + 280485, + 280565, + 280339, + 280399, + 280495, + 280475, + 280608, + 280383, + 148225, + 148226, + 280441, + 280650, + 280545, + 280730, + 280468, + 148224, + 280301, + 280672, + 280693, + 280400, + 280514, + 280711, + 280656, + 280467, + 280671, + 280749, + 280586, + 280575, + 280635, + 280440, + 280284, + 280689, + 280532, + 280641, + 149144, + 280348, + 156018, + 280739, + 280552, + 148889, + 280315, + 280653, + 280515, + 280265, + 280338, + 280609, + 280615, + 280425, + 280250, + 280556, + 280247, + 280572, + 279822, + 279805, + 279757, + 280161, + 280177, + 279865, + 279917, + 280167, + 280210, + 279945, + 156003, + 279776, + 280236, + 279733, + 279862, + 279780, + 149164, + 279758, + 279730, + 280195, + 279813, + 279986, + 280237, + 279726, + 280235, + 279848, + 280464, + 280054, + 280010, + 280070, + 280148, + 280151, + 279856, + 280081, + 279762, + 280076, + 279799, + 279854, + 279746, + 279921, + 279961, + 280112, + 280066, + 280168, + 280436, + 156001, + 280215, + 149156, + 280035, + 279943, + 279800, + 279743, + 280002, + 280589, + 279804, + 280174, + 280021, + 280013, + 279912, + 279721, + 156008, + 279711, + 280198, + 279960, + 280393, + 280221, + 280009, + 280090, + 279971, + 280206, + 279833, + 279980, + 279906, + 280185, + 279738, + 148861, + 149169, + 280674, + 148886, + 155989, + 279770, + 279934, + 279875, + 279792, + 148888, + 280020, + 156000, + 280129, + 155999, + 280223, + 279774, + 280078, + 279796, + 279982, + 279950, + 279767, + 156021, + 280123, + 280012, + 280082, + 280170, + 279979, + 279901, + 279826, + 280497, + 280415, + 280208, + 279997, + 280431, + 280118, + 156024, + 280016, + 280097, + 279837, + 279864, + 155992, + 279718, + 280203, + 280392, + 279853, + 280158, + 149159, + 279701, + 279808, + 148858, + 279728, + 280142, + 280209, + 279709, + 280049, + 279893, + 280083, + 279907, + 279914, + 279723, + 279878, + 280095, + 279990, + 280005, + 280262, + 155995, + 279820, + 156026, + 280018, + 280094, + 148865, + 280590, + 279882, + 279970, + 279850, + 280163, + 280050, + 279764, + 156013, + 280496, + 280172, + 280124, + 280141, + 149151, + 279941, + 279772, + 280137, + 280092, + 279782, + 280165, + 280059, + 279859, + 279903, + 280420, + 279910, + 280028, + 280391, + 280036, + 280073, + 279765, + 280024, + 149173, + 280043, + 279852, + 280216, + 290067, + 280150, + 280134, + 279803, + 280131, + 149148, + 280127, + 280218, + 279773, + 280238, + 279788, + 280085, + 280143, + 279791, + 156023, + 279896, + 279801, + 279703, + 279739, + 280201, + 280071, + 279790, + 279787, + 279898, + 279857, + 280416, + 279753, + 280224, + 280231, + 279964, + 279959, + 279904, + 280232, + 279981, + 280025, + 280003, + 280230, + 280229, + 155987, + 279885, + 279855, + 279797, + 280037, + 280159, + 279729, + 279752, + 280063, + 280008, + 279978, + 280091, + 279783, + 280065, + 279802, + 279948, + 280128, + 280182, + 280263, + 155996, + 279823, + 279932, + 280244, + 280550, + 279889, + 280178, + 280140, + 148231, + 280060, + 279748, + 279968, + 279811, + 279789, + 280125, + 280192, + 149153, + 280228, + 148871, + 291035, + 156012, + 279841, + 279957, + 280119, + 280549, + 279947, + 280501, + 279742, + 280219, + 280052, + 280213, + 280444, + 280191, + 280069, + 280463, + 279828, + 279933, + 279963, + 279734, + 280180, + 279967, + 280194, + 280214, + 280080, + 279710, + 279954, + 279700, + 148883, + 279913, + 279923, + 280181, + 280179, + 279747, + 280029, + 279771, + 279712, + 280110, + 280046, + 279716, + 279719, + 148875, + 279879, + 279831, + 280022, + 279705, + 280133, + 279984, + 279985, + 279814, + 279830, + 279713, + 280147, + 279874, + 279775, + 280202, + 279839, + 279818, + 280239, + 280144, + 279886, + 280126, + 280193, + 279863, + 279785, + 279884, + 279876, + 279819, + 279825, + 279847, + 280320, + 280088, + 280186, + 279840, + 148870, + 279977, + 279919, + 279994, + 279991, + 280211, + 279843, + 280155, + 279760, + 279929, + 280075, + 290068, + 279717, + 149168, + 280023, + 149146, + 148227, + 279794, + 280139, + 279727, + 280079, + 279895, + 148860, + 280405, + 279755, + 149158, + 280084, + 279958, + 279707, + 279838, + 280135, + 280115, + 280096, + 279821, + 279871, + 280204, + 280105, + 290069, + 279861, + 280654, + 280234, + 280011, + 279714, + 280099, + 280000, + 279887, + 280225, + 280435, + 280166, + 279834, + 280062, + 279817, + 279962, + 280220, + 279974, + 279927, + 280045, + 279973, + 279883, + 280171, + 280056, + 279873, + 279836, + 279851, + 279749, + 280227, + 280130, + 279937, + 149172, + 279880, + 279944, + 279779, + 279938, + 279815, + 280032, + 279751, + 279916, + 148864, + 280103, + 280222, + 279858, + 155986, + 279966, + 279737, + 279769, + 280042, + 279999, + 279778, + 279866, + 280114, + 280200, + 280205, + 279736, + 279890, + 280068, + 279763, + 280502, + 280196, + 279993, + 279931, + 148879, + 279806, + 280100, + 280176, + 149157, + 280751, + 279724, + 280526, + 279969, + 280390, + 279899, + 155991, + 280121, + 280676, + 280044, + 279809, + 280026, + 280015, + 280093, + 280154, + 279983, + 279942, + 279869, + 280038, + 149175, + 279951, + 280138, + 280057, + 280525, + 290084, + 279905, + 148890, + 280074, + 280197, + 280445, + 280067, + 280188, + 279722, + 280109, + 280116, + 280149, + 280089, + 155997, + 280006, + 280033, + 279939, + 280132, + 280055, + 280064, + 279708, + 279810, + 279888, + 156009, + 280162, + 149165, + 279918, + 279975, + 279946, + 279761, + 149161, + 279952, + 279781, + 280101, + 280175, + 279725, + 279892, + 290065, + 279786, + 280401, + 280243, + 279992, + 280108, + 149155, + 280017, + 279881, + 246836, + 148880, + 280122, + 280087, + 280031, + 280164, + 279915, + 280173, + 279972, + 280051, + 280120, + 279930, + 279768, + 280190, + 280072, + 279731, + 156027, + 280027, + 149163, + 279832, + 279995, + 279920, + 279897, + 279795, + 279807, + 280406, + 280048, + 279777, + 280102, + 280145, + 280156, + 279740, + 279868, + 279812, + 279759, + 280217, + 279909, + 280675, + 279935, + 280189, + 279849, + 280047, + 279754, + 279706, + 279987, + 155993, + 280419, + 280389, + 280104, + 280041, + 280001, + 280233, + 280199, + 279720, + 280187, + 280388, + 279835, + 279955, + 279844, + 280113, + 279704, + 279798, + 279750, + 279965, + 280146, + 279860, + 280053, + 280291, + 280169, + 280106, + 280212, + 279936, + 280111, + 148874, + 280004, + 280007, + 279922, + 279715, + 280040, + 279956, + 279900, + 280153, + 280019, + 155985, + 279996, + 279793, + 156007, + 280098, + 279824, + 279702, + 279953, + 280157, + 279816, + 279872, + 279924, + 279940, + 279867, + 279894, + 279877, + 279870, + 280160, + 280014, + 280207, + 279949, + 280039, + 280058, + 280061, + 149167, + 279926, + 280030, + 279829, + 279891, + 279744, + 279842, + 279911, + 280183, + 280397, + 280184, + 280117, + 156005, + 279845, + 279998, + 279988, + 279745, + 279908, + 279989, + 279735, + 279732, + 280226, + 279846, + 279928, + 279902, + 280086, + 279766, + 279976, + 280107, + 279756, + 280152, + 280136, + 279925, + 279741, + 279827, + 280034, + 279784, + 280077, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:45:25.128753+00:00", + }, + { + "code": "86", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Postage & Delivery", + "id": 133654, + "is_enabled": True, + "name": "Postage & Delivery", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280547, + 280278, + 280279, + 280666, + 280544, + 148882, + 280668, + 280625, + 280548, + 280543, + 280542, + 280280, + 280277, + 280669, + 156025, + 280541, + 280551, + 280665, + 280670, + 280540, + 280281, + 280539, + 280552, + 280671, + 280538, + 280282, + 280537, + 156020, + 280553, + 148224, + 280672, + 280276, + 280664, + 280536, + 280283, + 280535, + 280554, + 280673, + 280534, + 280533, + 280284, + 280681, + 156016, + 280555, + 280275, + 280663, + 280532, + 280531, + 280285, + 280556, + 280682, + 280530, + 280529, + 280683, + 280286, + 280528, + 280557, + 162016, + 280662, + 149149, + 280527, + 280274, + 280684, + 280558, + 280287, + 280524, + 280762, + 280523, + 280685, + 280522, + 280288, + 280559, + 148868, + 280661, + 280521, + 280273, + 280686, + 280520, + 280560, + 280289, + 280519, + 149162, + 280687, + 280518, + 280290, + 280763, + 280561, + 280517, + 280660, + 280688, + 280516, + 156011, + 280623, + 280689, + 280515, + 290928, + 280677, + 280272, + 149143, + 280514, + 280690, + 280513, + 290929, + 280659, + 280678, + 280512, + 280691, + 280511, + 280562, + 280679, + 280271, + 280658, + 280510, + 149174, + 280692, + 280509, + 280563, + 280680, + 280508, + 280693, + 280507, + 280506, + 290930, + 280292, + 149171, + 280657, + 280270, + 280694, + 148887, + 280505, + 290931, + 280504, + 280293, + 280695, + 280503, + 280500, + 290932, + 280294, + 280696, + 280656, + 280269, + 156015, + 280499, + 280498, + 280564, + 280697, + 280350, + 280295, + 280495, + 280494, + 280698, + 280565, + 280296, + 280655, + 280493, + 155988, + 148878, + 280492, + 280566, + 280699, + 280491, + 280268, + 280297, + 280490, + 148228, + 280567, + 280700, + 280653, + 280489, + 280701, + 280488, + 280298, + 280568, + 280487, + 280702, + 280267, + 280486, + 280299, + 280240, + 149170, + 280569, + 280485, + 280652, + 280703, + 280484, + 280300, + 280483, + 280570, + 280704, + 149152, + 280266, + 280482, + 280301, + 148873, + 280481, + 280571, + 280651, + 280705, + 280480, + 280302, + 280479, + 280572, + 280706, + 148876, + 280478, + 280265, + 280477, + 280303, + 280573, + 280241, + 280650, + 280707, + 280476, + 280475, + 280304, + 280708, + 280574, + 148230, + 280474, + 148229, + 280264, + 280473, + 280709, + 280575, + 280649, + 280305, + 280472, + 280471, + 280710, + 280306, + 280576, + 280470, + 149154, + 280469, + 280711, + 280468, + 280577, + 280648, + 280307, + 148889, + 280467, + 280261, + 149145, + 280712, + 280622, + 280466, + 280578, + 280308, + 280647, + 280713, + 280465, + 280462, + 280579, + 280714, + 280461, + 280309, + 149144, + 280460, + 280715, + 280580, + 280260, + 280646, + 280459, + 280310, + 280458, + 280581, + 280716, + 280457, + 280311, + 148869, + 148223, + 280456, + 280582, + 280259, + 280717, + 280645, + 280455, + 280312, + 280454, + 280583, + 280718, + 280453, + 280452, + 280313, + 156019, + 280719, + 280584, + 280451, + 280644, + 280258, + 280314, + 280450, + 280720, + 280585, + 280449, + 280448, + 280315, + 280721, + 156022, + 280447, + 280586, + 156004, + 280643, + 280257, + 280446, + 280316, + 280722, + 280587, + 280443, + 280442, + 280723, + 280317, + 148222, + 280441, + 280353, + 280588, + 280440, + 280642, + 280724, + 280318, + 280439, + 280591, + 280725, + 280438, + 280256, + 280437, + 280319, + 156028, + 280726, + 280592, + 280434, + 280641, + 280352, + 149166, + 280433, + 280321, + 280727, + 280593, + 280432, + 280430, + 280255, + 280322, + 280728, + 280429, + 280594, + 148862, + 280640, + 280428, + 280729, + 280323, + 280427, + 280595, + 148872, + 280426, + 148881, + 280254, + 280730, + 280425, + 280596, + 280324, + 280639, + 280424, + 280731, + 280423, + 280325, + 280597, + 148859, + 280422, + 280732, + 280253, + 280421, + 280326, + 280418, + 280598, + 280638, + 156014, + 280733, + 280417, + 280414, + 280599, + 280327, + 280734, + 149147, + 280252, + 280413, + 280412, + 280600, + 280637, + 280328, + 280735, + 148867, + 155994, + 280411, + 280410, + 280601, + 280736, + 280329, + 280409, + 280408, + 280737, + 280330, + 280602, + 280636, + 280407, + 156006, + 280251, + 280738, + 280404, + 280603, + 280403, + 280331, + 280635, + 280739, + 149160, + 280402, + 280400, + 280604, + 280332, + 148877, + 280250, + 280740, + 280399, + 280398, + 280605, + 280333, + 280741, + 280634, + 280396, + 149150, + 280395, + 280606, + 280742, + 280334, + 280394, + 280387, + 280743, + 280607, + 280249, + 280386, + 280633, + 280335, + 148863, + 280385, + 280608, + 280744, + 280384, + 280336, + 148225, + 280248, + 280383, + 280745, + 280609, + 280382, + 280632, + 280337, + 280381, + 156002, + 280746, + 280610, + 280380, + 280379, + 280338, + 280747, + 280378, + 280611, + 280247, + 280631, + 280377, + 280339, + 280748, + 156018, + 280612, + 280376, + 280375, + 280749, + 155984, + 280340, + 280374, + 155990, + 280613, + 280246, + 280630, + 280750, + 280373, + 280341, + 280372, + 280614, + 280752, + 280371, + 280370, + 280342, + 280753, + 280369, + 280615, + 155998, + 280629, + 280368, + 280245, + 280343, + 280616, + 280754, + 280367, + 280366, + 280755, + 280344, + 280365, + 280617, + 254109, + 280628, + 156010, + 280364, + 280756, + 280345, + 280363, + 280618, + 280362, + 280242, + 280757, + 280361, + 280346, + 148885, + 280619, + 280360, + 280627, + 280758, + 148866, + 280359, + 280347, + 280620, + 280358, + 280759, + 280624, + 280357, + 280348, + 280356, + 280621, + 280626, + 148226, + 280760, + 280355, + 280354, + 280351, + 280349, + 280761, + 280546, + 148884, + 280667, + 280545, + 148871, + 279966, + 280199, + 279979, + 279870, + 279988, + 280238, + 279963, + 280124, + 280032, + 280196, + 279773, + 279893, + 156023, + 279927, + 279776, + 280224, + 279750, + 280050, + 280549, + 279896, + 280589, + 280129, + 280006, + 280013, + 148875, + 280033, + 279962, + 280195, + 279770, + 279708, + 279749, + 280075, + 279764, + 279824, + 279774, + 148870, + 279777, + 280045, + 246836, + 280130, + 280038, + 280200, + 280100, + 279897, + 149146, + 279868, + 279961, + 280194, + 279967, + 280102, + 280526, + 279892, + 279823, + 279898, + 280058, + 279845, + 280082, + 280193, + 280123, + 149164, + 280131, + 155987, + 279726, + 279828, + 279989, + 148861, + 279713, + 279960, + 279775, + 279733, + 149167, + 156001, + 279778, + 280161, + 280228, + 280525, + 280021, + 280590, + 279701, + 280031, + 279763, + 280099, + 279822, + 280132, + 279899, + 280201, + 280192, + 280222, + 279767, + 279867, + 279731, + 279959, + 279876, + 279986, + 279748, + 279779, + 279900, + 279968, + 149168, + 280502, + 280191, + 280133, + 280077, + 280067, + 290065, + 279709, + 280014, + 280229, + 280122, + 279958, + 279700, + 279707, + 279821, + 279879, + 155997, + 279891, + 280214, + 279902, + 279990, + 279866, + 279780, + 280074, + 149165, + 279829, + 279798, + 156024, + 280134, + 156000, + 280190, + 290067, + 279957, + 280083, + 279737, + 280654, + 279820, + 279932, + 280501, + 279704, + 279871, + 148874, + 280086, + 279755, + 279903, + 280202, + 280098, + 280189, + 280135, + 279725, + 279901, + 279846, + 279969, + 279751, + 280497, + 280011, + 280005, + 280120, + 279747, + 279956, + 280030, + 280055, + 279781, + 280188, + 279890, + 279819, + 279904, + 156012, + 280136, + 280015, + 280103, + 279757, + 279838, + 279991, + 280073, + 280219, + 279766, + 280230, + 279955, + 279935, + 280496, + 280059, + 280041, + 280049, + 279830, + 279782, + 280389, + 279905, + 280137, + 155995, + 280203, + 149158, + 280187, + 279842, + 279710, + 279954, + 279818, + 280029, + 279865, + 279970, + 279906, + 279799, + 280097, + 156008, + 279783, + 279728, + 280119, + 280110, + 280138, + 280186, + 279889, + 279847, + 280464, + 155992, + 280034, + 279817, + 279985, + 279953, + 279907, + 280674, + 280231, + 280028, + 156009, + 280185, + 280037, + 280139, + 279992, + 290068, + 149156, + 280463, + 280184, + 279952, + 279765, + 148886, + 279784, + 279744, + 279878, + 279864, + 279908, + 280096, + 279746, + 279816, + 280140, + 280016, + 280204, + 280212, + 279872, + 280072, + 280445, + 280121, + 279971, + 279951, + 149151, + 280060, + 279888, + 279717, + 279909, + 280164, + 279848, + 280118, + 280183, + 279785, + 280232, + 280141, + 279831, + 279802, + 280104, + 279732, + 280048, + 279815, + 280125, + 279742, + 279993, + 279950, + 279999, + 279910, + 280675, + 279734, + 280182, + 280142, + 280061, + 279786, + 279863, + 280095, + 280078, + 279724, + 280205, + 280027, + 280444, + 279762, + 279814, + 279752, + 155989, + 279980, + 149175, + 279949, + 279911, + 156027, + 279972, + 280181, + 280151, + 280143, + 280218, + 149173, + 280044, + 279745, + 280117, + 280180, + 279711, + 280436, + 280233, + 279706, + 280039, + 279839, + 280239, + 279887, + 279948, + 279912, + 279855, + 148883, + 279787, + 280160, + 279862, + 279853, + 279813, + 279832, + 280220, + 280144, + 279929, + 280017, + 280071, + 280435, + 279994, + 280676, + 279841, + 280084, + 280010, + 279947, + 279913, + 280179, + 280116, + 279756, + 155999, + 280163, + 279812, + 279788, + 280206, + 279984, + 290069, + 280221, + 280145, + 279973, + 280004, + 149155, + 280094, + 279914, + 279886, + 279723, + 279946, + 280062, + 279849, + 280042, + 279741, + 280178, + 280146, + 280026, + 279789, + 280213, + 279833, + 279743, + 156013, + 279873, + 280431, + 279811, + 280234, + 279761, + 155993, + 279945, + 279915, + 280177, + 280225, + 280207, + 280147, + 279995, + 279856, + 280176, + 280035, + 279712, + 280115, + 279861, + 280001, + 280420, + 280018, + 279885, + 280109, + 279944, + 279916, + 148865, + 279974, + 280105, + 148888, + 280217, + 149157, + 279790, + 279850, + 280070, + 279810, + 280148, + 280226, + 280235, + 280054, + 280093, + 280419, + 280008, + 280175, + 279917, + 279928, + 280751, + 279943, + 280007, + 155996, + 279729, + 279809, + 280227, + 148890, + 279791, + 156005, + 279730, + 148879, + 280149, + 279918, + 279760, + 280215, + 280174, + 279996, + 279942, + 280025, + 279860, + 280150, + 280208, + 279808, + 148858, + 279792, + 279703, + 279884, + 149161, + 280066, + 280416, + 279919, + 279975, + 280051, + 280063, + 280092, + 279719, + 280114, + 279941, + 280173, + 280243, + 279834, + 279740, + 279840, + 279857, + 280152, + 279722, + 279851, + 280172, + 279714, + 280022, + 280209, + 280415, + 279920, + 279931, + 280236, + 155985, + 148231, + 279880, + 279852, + 279983, + 280085, + 280019, + 156021, + 148227, + 279875, + 280047, + 279940, + 280079, + 280165, + 279859, + 280392, + 279807, + 279793, + 279759, + 280000, + 280069, + 280244, + 279997, + 280153, + 280107, + 279874, + 148864, + 280406, + 279976, + 280171, + 279921, + 148860, + 280091, + 280009, + 280113, + 279939, + 280262, + 280154, + 279883, + 279806, + 279794, + 280237, + 280024, + 280080, + 279835, + 279922, + 279705, + 279854, + 279753, + 280170, + 279739, + 279938, + 280169, + 280155, + 280210, + 279754, + 149172, + 280043, + 280068, + 280064, + 149148, + 279805, + 279795, + 279858, + 156026, + 280405, + 280112, + 279923, + 279937, + 280263, + 280106, + 280020, + 280168, + 156007, + 280036, + 279998, + 280156, + 279977, + 280081, + 279702, + 279882, + 279715, + 280003, + 148880, + 279924, + 280159, + 279721, + 280401, + 280320, + 279804, + 279736, + 280090, + 279836, + 149163, + 279936, + 149153, + 280052, + 280065, + 280167, + 279796, + 280216, + 280002, + 279758, + 280157, + 280390, + 156003, + 280089, + 279925, + 280211, + 280087, + 280053, + 279718, + 279800, + 280111, + 280023, + 280391, + 279738, + 279934, + 280388, + 280158, + 279881, + 279930, + 279803, + 279797, + 149169, + 279837, + 279978, + 280397, + 279926, + 280162, + 280166, + 279982, + 279720, + 279716, + 279801, + 279933, + 279877, + 280126, + 280076, + 280056, + 279965, + 155986, + 279987, + 279894, + 280198, + 280223, + 291035, + 280012, + 280088, + 279843, + 279771, + 279981, + 279826, + 279895, + 155991, + 280046, + 280197, + 290084, + 280127, + 279768, + 279727, + 280108, + 280040, + 149159, + 279964, + 279769, + 280101, + 279772, + 279827, + 280393, + 279869, + 280550, + 280057, + 279825, + 280128, + 279735, + 280291, + 279844, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "70200", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Interest Expense", + "id": 133655, + "is_enabled": True, + "name": "Interest Expense", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "82", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Meals & Entertainment", + "id": 133656, + "is_enabled": True, + "name": "Meals & Entertainment", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280343, + 280757, + 280690, + 280364, + 280265, + 280576, + 280331, + 280477, + 280333, + 280514, + 280306, + 280529, + 280595, + 280303, + 280710, + 280683, + 280287, + 280635, + 280471, + 280739, + 280573, + 280558, + 280605, + 280286, + 280650, + 149160, + 280563, + 280707, + 280242, + 280684, + 280528, + 280398, + 280439, + 280402, + 280666, + 280727, + 280274, + 280362, + 280472, + 280476, + 280432, + 280305, + 280475, + 280400, + 162016, + 280649, + 280611, + 280304, + 280241, + 280557, + 280505, + 280708, + 280575, + 280756, + 280591, + 280399, + 280246, + 280709, + 280604, + 280473, + 280264, + 280740, + 280345, + 280618, + 280509, + 280574, + 280662, + 148872, + 148229, + 280332, + 148230, + 149143, + 280762, + 280250, + 280656, + 280527, + 280363, + 148877, + 149149, + 280474, + 280350, + 280271, + 280342, + 290931, + 280630, + 280373, + 280352, + 280728, + 280692, + 149174, + 156015, + 280750, + 280658, + 280425, + 280269, + 148222, + 280641, + 280322, + 280378, + 280317, + 280255, + 280753, + 149166, + 280723, + 280442, + 280761, + 280596, + 280747, + 280499, + 280324, + 280614, + 280498, + 280349, + 280280, + 280369, + 280639, + 280748, + 280443, + 280338, + 280564, + 280277, + 280587, + 280657, + 280697, + 280440, + 280424, + 280272, + 280351, + 280669, + 280295, + 280677, + 280722, + 280495, + 280316, + 280446, + 280353, + 280257, + 280731, + 280379, + 280512, + 280592, + 280615, + 280423, + 156011, + 156025, + 280643, + 280691, + 280380, + 290928, + 280541, + 280354, + 280726, + 280746, + 280694, + 280542, + 280325, + 156018, + 155998, + 280610, + 280551, + 280494, + 148859, + 156004, + 280698, + 156028, + 280515, + 280586, + 280447, + 280597, + 280371, + 280565, + 280665, + 280670, + 156022, + 280296, + 280355, + 280375, + 280422, + 280667, + 280629, + 280642, + 280655, + 280721, + 280760, + 280493, + 156002, + 280588, + 280315, + 280448, + 280449, + 155988, + 280732, + 280724, + 280689, + 280540, + 280281, + 280763, + 280516, + 280253, + 280381, + 149171, + 148226, + 280337, + 280339, + 280421, + 148878, + 280368, + 280585, + 280720, + 280640, + 280492, + 280314, + 280450, + 280566, + 280539, + 280326, + 280552, + 280292, + 280418, + 280699, + 280258, + 280632, + 280644, + 280504, + 280688, + 280660, + 280671, + 280598, + 280491, + 280382, + 280626, + 280451, + 280749, + 280268, + 280297, + 280638, + 280270, + 280245, + 280545, + 280584, + 280293, + 280517, + 280729, + 280621, + 280609, + 280538, + 148867, + 280282, + 280490, + 156014, + 280561, + 280511, + 280719, + 156019, + 280745, + 280278, + 280356, + 148228, + 280733, + 280730, + 280567, + 280700, + 280313, + 280452, + 280290, + 280428, + 280518, + 280417, + 280348, + 280453, + 280653, + 148882, + 280383, + 290930, + 280537, + 280248, + 280506, + 280414, + 280718, + 156020, + 280553, + 280687, + 280583, + 280454, + 280547, + 149162, + 148224, + 148225, + 280319, + 280312, + 280455, + 280599, + 280441, + 280489, + 280701, + 280357, + 280327, + 280562, + 280336, + 280437, + 280318, + 280645, + 280488, + 280298, + 280759, + 280623, + 280734, + 155984, + 280519, + 280276, + 280279, + 280624, + 280717, + 280259, + 280254, + 280695, + 280384, + 149147, + 280616, + 280664, + 280672, + 280744, + 280568, + 280252, + 280323, + 280582, + 280456, + 280612, + 280608, + 280289, + 280487, + 290929, + 280413, + 148223, + 280702, + 280754, + 280507, + 280536, + 280283, + 280267, + 280412, + 148869, + 280358, + 280486, + 280311, + 280457, + 280340, + 280299, + 280367, + 280544, + 149170, + 280716, + 148887, + 280385, + 280620, + 280600, + 280513, + 280429, + 280560, + 280520, + 280637, + 148863, + 280581, + 280458, + 280372, + 280535, + 280554, + 280427, + 280335, + 280569, + 280310, + 280328, + 280459, + 280646, + 280546, + 280735, + 280366, + 280433, + 280347, + 280485, + 280659, + 280652, + 280673, + 280703, + 280503, + 155994, + 280633, + 280260, + 280686, + 280321, + 280273, + 280411, + 280534, + 280359, + 280374, + 280484, + 280300, + 280386, + 280256, + 280377, + 280580, + 280715, + 280460, + 280521, + 280410, + 280249, + 280661, + 149144, + 280679, + 148866, + 280607, + 280678, + 148862, + 280533, + 280284, + 280483, + 280309, + 280461, + 280601, + 280570, + 148881, + 280500, + 280755, + 280704, + 280758, + 280714, + 280736, + 290932, + 280743, + 148868, + 280681, + 280329, + 149152, + 156016, + 280725, + 280365, + 280409, + 280266, + 280693, + 280579, + 280555, + 280462, + 280387, + 280482, + 280752, + 280559, + 280713, + 280465, + 280301, + 280275, + 280294, + 280408, + 280334, + 280344, + 280627, + 280647, + 280240, + 148873, + 280737, + 280394, + 280663, + 280593, + 148884, + 280308, + 155990, + 280360, + 280481, + 280631, + 280330, + 280571, + 280288, + 280508, + 280522, + 280619, + 280578, + 280625, + 280466, + 280742, + 280532, + 280602, + 280438, + 280651, + 280636, + 280705, + 280370, + 280712, + 149145, + 280617, + 280531, + 280285, + 280341, + 254109, + 280407, + 280548, + 280261, + 280606, + 280426, + 280480, + 156006, + 148889, + 280467, + 280696, + 280479, + 280302, + 148885, + 280251, + 280543, + 280430, + 156010, + 280572, + 280395, + 280307, + 280247, + 280648, + 280346, + 280577, + 280622, + 280468, + 280628, + 280594, + 280556, + 280738, + 148876, + 280668, + 280680, + 280404, + 149150, + 280682, + 280711, + 280469, + 280706, + 280376, + 280434, + 280685, + 280523, + 280396, + 280510, + 280530, + 149154, + 280524, + 280470, + 280613, + 280361, + 280603, + 280741, + 280478, + 280634, + 280403, + 280188, + 279785, + 280045, + 280134, + 148886, + 279796, + 280232, + 279999, + 280141, + 279878, + 156024, + 148870, + 279831, + 280104, + 279732, + 280048, + 279829, + 279815, + 149165, + 279825, + 280125, + 279742, + 280074, + 280002, + 279993, + 279950, + 280129, + 279758, + 279910, + 280675, + 279802, + 279780, + 280199, + 280182, + 280052, + 280142, + 279866, + 280061, + 279734, + 279863, + 279786, + 280157, + 279990, + 280095, + 279902, + 280078, + 279724, + 280027, + 280444, + 279762, + 156003, + 279891, + 279980, + 280205, + 279814, + 279752, + 155997, + 155989, + 279949, + 149175, + 156001, + 279925, + 279911, + 156027, + 279879, + 280390, + 279972, + 279821, + 280214, + 280181, + 280151, + 280143, + 280218, + 279700, + 280211, + 280010, + 279745, + 279750, + 280180, + 280117, + 149159, + 279958, + 280087, + 279711, + 280436, + 149173, + 280229, + 279717, + 280039, + 279706, + 280122, + 279718, + 280233, + 279887, + 279798, + 279856, + 279948, + 280044, + 279912, + 279966, + 280014, + 148883, + 280589, + 279931, + 279787, + 279862, + 280397, + 279709, + 279813, + 279839, + 279832, + 279707, + 280077, + 279800, + 280144, + 279841, + 280017, + 280160, + 280071, + 280111, + 149155, + 280435, + 280220, + 279994, + 280133, + 156023, + 280676, + 279756, + 280391, + 280191, + 280084, + 280179, + 279947, + 280023, + 279913, + 280502, + 280116, + 279964, + 155999, + 279812, + 279968, + 279896, + 279731, + 280206, + 279900, + 279788, + 279984, + 279853, + 279934, + 149168, + 280145, + 280163, + 280004, + 149157, + 280108, + 279973, + 280549, + 290069, + 280049, + 280221, + 280094, + 279779, + 279886, + 279914, + 279723, + 280388, + 279946, + 280213, + 279876, + 279735, + 280062, + 280101, + 279849, + 279748, + 280042, + 279741, + 280158, + 280178, + 279986, + 280146, + 155993, + 280026, + 279789, + 279743, + 279881, + 279833, + 279811, + 156013, + 279959, + 279755, + 280431, + 280050, + 279873, + 279837, + 280070, + 279761, + 279930, + 280234, + 279767, + 279945, + 280161, + 279915, + 280177, + 279803, + 279867, + 280225, + 155987, + 280207, + 280147, + 280201, + 279738, + 279995, + 280176, + 279769, + 279899, + 279797, + 279712, + 279861, + 280115, + 280132, + 280035, + 280420, + 148858, + 280018, + 279885, + 279822, + 279978, + 280021, + 279944, + 280001, + 279927, + 279916, + 148865, + 279855, + 280099, + 148888, + 279974, + 280109, + 280105, + 280192, + 280217, + 280040, + 279926, + 279790, + 279850, + 279810, + 280162, + 280222, + 280148, + 280128, + 280226, + 279701, + 280224, + 280054, + 280093, + 280419, + 280590, + 280175, + 280166, + 279929, + 148227, + 279917, + 280031, + 280235, + 279943, + 280751, + 280007, + 280228, + 279730, + 155996, + 280008, + 280525, + 279729, + 148890, + 279809, + 280227, + 279928, + 279982, + 156005, + 279763, + 279791, + 279772, + 148879, + 279733, + 280149, + 279778, + 279801, + 279918, + 280174, + 279760, + 149167, + 279720, + 280025, + 279996, + 279942, + 279860, + 279776, + 280058, + 280173, + 279989, + 280067, + 280208, + 280150, + 279808, + 279775, + 279792, + 279703, + 279884, + 279716, + 148861, + 279875, + 149161, + 279960, + 280088, + 280416, + 279828, + 279933, + 279975, + 279919, + 280215, + 280051, + 280066, + 280063, + 280092, + 279893, + 279726, + 279719, + 280114, + 279941, + 279773, + 279845, + 279877, + 280243, + 279740, + 280131, + 279869, + 279834, + 279840, + 280126, + 280107, + 280123, + 280172, + 280152, + 279722, + 280193, + 280000, + 280076, + 279714, + 279851, + 290084, + 280209, + 280415, + 279920, + 279898, + 280236, + 279880, + 155985, + 156021, + 155986, + 148231, + 279965, + 279983, + 279823, + 149164, + 279844, + 280196, + 280019, + 280056, + 279892, + 280047, + 280392, + 279940, + 280082, + 279859, + 280113, + 148864, + 279857, + 280079, + 279987, + 279807, + 280102, + 279759, + 280526, + 279793, + 280069, + 279894, + 280244, + 279967, + 280165, + 279827, + 280153, + 280032, + 280198, + 279874, + 279997, + 280085, + 280406, + 280194, + 279976, + 280171, + 280046, + 279961, + 280124, + 279921, + 148860, + 280091, + 280038, + 280009, + 280223, + 280080, + 279939, + 279868, + 291035, + 279897, + 280154, + 279883, + 279806, + 280200, + 279794, + 280262, + 280100, + 280012, + 280237, + 280024, + 279835, + 280130, + 279713, + 279922, + 149146, + 279705, + 280170, + 280238, + 279754, + 279739, + 279843, + 280022, + 279938, + 246836, + 280169, + 280550, + 279777, + 280155, + 280210, + 279753, + 149172, + 280043, + 279774, + 280068, + 279771, + 149148, + 279764, + 280064, + 279805, + 279963, + 279824, + 279795, + 279858, + 279826, + 280405, + 148871, + 280112, + 280075, + 156007, + 149169, + 279923, + 279854, + 156026, + 279937, + 279988, + 279708, + 280263, + 280168, + 279895, + 280020, + 280036, + 280106, + 280089, + 279770, + 280291, + 280156, + 279998, + 280195, + 279977, + 280159, + 279852, + 280081, + 155991, + 279981, + 280003, + 279702, + 279890, + 279704, + 279781, + 156012, + 279819, + 279882, + 279904, + 280030, + 280136, + 279962, + 280015, + 279956, + 279757, + 280496, + 280073, + 280103, + 280219, + 279766, + 280120, + 279991, + 279955, + 280197, + 279747, + 279935, + 279924, + 280055, + 280059, + 280230, + 280239, + 148880, + 280041, + 155995, + 279830, + 279979, + 279782, + 280011, + 279901, + 279721, + 279905, + 280137, + 280057, + 279749, + 280203, + 280389, + 280497, + 280187, + 279842, + 280005, + 280086, + 280401, + 279710, + 149158, + 279954, + 279751, + 279818, + 279870, + 279838, + 280029, + 279799, + 279865, + 280110, + 279846, + 279970, + 279906, + 279969, + 280097, + 280320, + 156008, + 279804, + 279783, + 280119, + 279725, + 280138, + 280186, + 280033, + 280135, + 279889, + 280464, + 279736, + 290065, + 279847, + 155992, + 279817, + 280034, + 280189, + 279985, + 149163, + 279953, + 280098, + 280090, + 279907, + 280202, + 280674, + 280127, + 280231, + 280028, + 279715, + 279728, + 280185, + 279903, + 280037, + 279836, + 280139, + 279992, + 156009, + 290068, + 149156, + 279871, + 280463, + 280184, + 279952, + 279765, + 148874, + 279936, + 279816, + 290067, + 279784, + 279864, + 279744, + 280393, + 280083, + 148875, + 280501, + 280096, + 279908, + 279746, + 149153, + 280654, + 280140, + 280016, + 279820, + 280072, + 279727, + 280204, + 279872, + 280065, + 280445, + 280121, + 279951, + 279957, + 280167, + 279971, + 280212, + 279932, + 149151, + 280013, + 280060, + 279888, + 279737, + 280164, + 280190, + 280183, + 280216, + 279909, + 280006, + 280118, + 280053, + 156000, + 279848, + 279768, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "186", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "ash", + "id": 133657, + "is_enabled": True, + "name": "ash", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280035, + 279910, + 280022, + 279938, + 280143, + 280420, + 279769, + 279966, + 246836, + 280169, + 290084, + 280132, + 280098, + 279777, + 280021, + 279758, + 280393, + 279797, + 280151, + 280155, + 280115, + 279712, + 279713, + 280217, + 279848, + 280210, + 279826, + 280176, + 279907, + 279753, + 279861, + 279995, + 148858, + 280083, + 279771, + 280147, + 280202, + 280043, + 279872, + 280068, + 279750, + 279899, + 279821, + 279867, + 280207, + 279839, + 280225, + 155987, + 280177, + 279915, + 280141, + 149148, + 280674, + 149172, + 279803, + 280074, + 279737, + 280064, + 279764, + 156007, + 279858, + 279805, + 280052, + 279767, + 280445, + 280028, + 279824, + 279945, + 279930, + 280183, + 279795, + 279972, + 280089, + 280234, + 279950, + 279755, + 279761, + 280070, + 280405, + 280181, + 280201, + 280231, + 280112, + 279925, + 279752, + 279963, + 280065, + 279728, + 280075, + 156027, + 279988, + 280161, + 279911, + 279923, + 280185, + 279993, + 279937, + 279879, + 279873, + 280127, + 279708, + 279903, + 279959, + 280431, + 149165, + 280263, + 280168, + 280108, + 156013, + 279811, + 279833, + 279881, + 279743, + 279789, + 149175, + 279748, + 280167, + 280020, + 279895, + 279986, + 279927, + 280026, + 280146, + 280037, + 280036, + 280159, + 279949, + 279742, + 155989, + 279854, + 279770, + 279870, + 279981, + 156001, + 279837, + 280139, + 280156, + 280158, + 279871, + 279998, + 279741, + 279836, + 280178, + 280042, + 279856, + 279977, + 279951, + 280106, + 279992, + 280081, + 155997, + 279849, + 279717, + 280195, + 156003, + 156026, + 280003, + 280190, + 280062, + 279876, + 155991, + 280388, + 280188, + 279707, + 279946, + 280125, + 279890, + 290068, + 279723, + 279853, + 279781, + 156009, + 149156, + 279914, + 156012, + 279878, + 279886, + 279819, + 280205, + 280088, + 279882, + 279779, + 280549, + 279891, + 280094, + 156000, + 279904, + 280221, + 280049, + 280164, + 290069, + 280163, + 280463, + 280136, + 290065, + 280030, + 279796, + 280213, + 279762, + 280015, + 279704, + 279973, + 149146, + 149168, + 279735, + 279757, + 280444, + 280004, + 280145, + 279956, + 279934, + 280496, + 280184, + 279984, + 279788, + 280206, + 280073, + 279815, + 279968, + 279814, + 280103, + 279962, + 280219, + 279715, + 279812, + 280197, + 279896, + 279766, + 280291, + 155999, + 148870, + 279952, + 155995, + 279785, + 279991, + 279900, + 279955, + 156023, + 279964, + 148875, + 280120, + 279765, + 280116, + 280502, + 279971, + 279935, + 279913, + 149169, + 279747, + 279936, + 279924, + 280191, + 280129, + 280059, + 280023, + 148874, + 280230, + 280002, + 279724, + 279947, + 279957, + 280041, + 148880, + 279802, + 280084, + 279702, + 280179, + 279816, + 279830, + 279901, + 279909, + 155993, + 279875, + 280676, + 279756, + 280078, + 279782, + 279999, + 279721, + 280187, + 280011, + 279902, + 280027, + 279994, + 279768, + 279905, + 280101, + 280133, + 280220, + 279731, + 279784, + 279864, + 280435, + 280048, + 280160, + 280157, + 280203, + 280137, + 279744, + 279932, + 280017, + 280111, + 280095, + 279800, + 279841, + 280497, + 279842, + 149151, + 280144, + 280401, + 280121, + 279829, + 280389, + 280005, + 279786, + 279832, + 280053, + 279990, + 149158, + 279846, + 279799, + 279954, + 280096, + 280032, + 279751, + 280110, + 280077, + 279798, + 280215, + 280232, + 279869, + 280114, + 279845, + 279941, + 280086, + 279818, + 279740, + 280131, + 279980, + 279726, + 149155, + 280243, + 148886, + 280107, + 280397, + 279908, + 279893, + 280006, + 279834, + 279719, + 280051, + 280066, + 279840, + 279787, + 280063, + 279863, + 279844, + 280029, + 280092, + 149153, + 280391, + 280172, + 279865, + 280123, + 280126, + 280238, + 279919, + 279710, + 279722, + 279709, + 279975, + 280076, + 279933, + 279828, + 280152, + 279746, + 148883, + 280193, + 279749, + 279960, + 280416, + 280000, + 148861, + 149161, + 279716, + 280060, + 279714, + 279884, + 279703, + 279866, + 279851, + 279792, + 280415, + 279880, + 280057, + 279773, + 279775, + 279862, + 280209, + 280212, + 279808, + 280150, + 280208, + 279898, + 280044, + 280067, + 279970, + 279920, + 279877, + 280173, + 279969, + 279989, + 280058, + 279912, + 280014, + 279772, + 155986, + 279942, + 279734, + 155985, + 279860, + 280236, + 156021, + 279906, + 279852, + 279996, + 279965, + 279720, + 280061, + 280097, + 279983, + 280654, + 279760, + 280174, + 280589, + 148231, + 280025, + 279888, + 279948, + 279855, + 279838, + 149167, + 156008, + 280019, + 280392, + 279918, + 279727, + 279887, + 279892, + 280056, + 280149, + 279823, + 280047, + 279804, + 279776, + 280128, + 279778, + 279928, + 280233, + 279940, + 280142, + 279791, + 280196, + 280122, + 279859, + 280501, + 279733, + 280082, + 280113, + 279718, + 148864, + 279706, + 279763, + 149159, + 280008, + 149173, + 280102, + 280046, + 156005, + 279889, + 280079, + 279987, + 279783, + 148879, + 279807, + 280119, + 279982, + 280227, + 280140, + 280525, + 149164, + 280045, + 279809, + 279729, + 280165, + 279759, + 280039, + 148890, + 280038, + 279825, + 155996, + 156024, + 279793, + 280526, + 280198, + 280069, + 280033, + 280228, + 279894, + 279929, + 279725, + 280007, + 290067, + 280244, + 279967, + 280751, + 280320, + 279813, + 279705, + 280013, + 280031, + 280138, + 280135, + 279943, + 280186, + 148227, + 280182, + 280153, + 279874, + 280235, + 280390, + 279997, + 279917, + 279730, + 280104, + 280085, + 280406, + 280016, + 280175, + 279827, + 280055, + 280080, + 280194, + 280590, + 280166, + 280118, + 279976, + 148860, + 280171, + 280087, + 280419, + 280436, + 279801, + 279711, + 279958, + 279883, + 280093, + 280071, + 279921, + 279857, + 280464, + 279931, + 280054, + 280091, + 280072, + 280226, + 280229, + 279961, + 280009, + 279831, + 279701, + 280222, + 280675, + 280148, + 280117, + 279939, + 279820, + 280214, + 291035, + 279847, + 279897, + 155992, + 280216, + 279810, + 279850, + 279926, + 280180, + 280154, + 279736, + 279790, + 280192, + 280001, + 279738, + 280200, + 279806, + 280090, + 280109, + 280105, + 279817, + 280224, + 280012, + 280099, + 279780, + 279794, + 280239, + 279974, + 279700, + 280262, + 279745, + 280211, + 280040, + 280134, + 280024, + 280034, + 148888, + 148865, + 280100, + 148871, + 280130, + 280124, + 280162, + 149163, + 279835, + 280237, + 279732, + 280204, + 279916, + 279985, + 279922, + 279978, + 279944, + 149157, + 280010, + 279822, + 280223, + 279868, + 279754, + 280550, + 280018, + 280170, + 280199, + 279885, + 280189, + 279979, + 279843, + 279774, + 279739, + 280218, + 280050, + 279953, + 280446, + 280343, + 280257, + 280248, + 280414, + 280306, + 280316, + 156020, + 280718, + 280651, + 280495, + 280553, + 280687, + 280506, + 280583, + 280722, + 280636, + 280454, + 280523, + 280398, + 280319, + 148225, + 280295, + 280548, + 148224, + 290929, + 280438, + 280278, + 280694, + 280312, + 280669, + 280705, + 280455, + 280350, + 280489, + 280272, + 280668, + 280599, + 280712, + 280351, + 280424, + 280476, + 149162, + 280657, + 280357, + 280697, + 280528, + 280327, + 280648, + 280336, + 149145, + 280587, + 280430, + 280645, + 280562, + 280488, + 280437, + 280677, + 280759, + 280298, + 280531, + 280277, + 280440, + 280701, + 280510, + 280734, + 280564, + 280617, + 155984, + 280276, + 280439, + 280396, + 280519, + 280717, + 280624, + 280338, + 280684, + 280259, + 280443, + 280384, + 280254, + 280407, + 280280, + 280279, + 149147, + 280695, + 280616, + 280744, + 280664, + 280639, + 280369, + 280242, + 280441, + 280252, + 280568, + 280261, + 280608, + 280582, + 280672, + 280498, + 280456, + 280666, + 280323, + 280324, + 280289, + 280606, + 280761, + 280487, + 280530, + 280285, + 280413, + 280614, + 280349, + 148223, + 280702, + 149166, + 280747, + 280547, + 280241, + 280536, + 280596, + 280707, + 280283, + 280754, + 280507, + 148869, + 280267, + 280433, + 280480, + 280612, + 280412, + 280477, + 280442, + 280486, + 280723, + 254109, + 280358, + 280748, + 280753, + 280311, + 280426, + 280317, + 280457, + 280299, + 280367, + 156006, + 280429, + 280340, + 149170, + 149160, + 280716, + 280650, + 280378, + 280479, + 280563, + 280620, + 280255, + 148889, + 280600, + 149154, + 280385, + 280513, + 280560, + 280286, + 280499, + 280322, + 280318, + 280625, + 280637, + 280467, + 148863, + 280581, + 148222, + 280634, + 280458, + 280605, + 280520, + 280427, + 280372, + 280535, + 148887, + 280269, + 280335, + 280331, + 148885, + 280310, + 280696, + 280728, + 280658, + 280546, + 280302, + 280328, + 280752, + 280646, + 280569, + 280366, + 280750, + 280347, + 280425, + 280735, + 280251, + 280485, + 156015, + 280554, + 280503, + 280690, + 280352, + 280544, + 280470, + 280652, + 149174, + 156010, + 280673, + 280692, + 280240, + 155994, + 280558, + 280459, + 280703, + 280342, + 290931, + 280633, + 280373, + 280260, + 280659, + 280686, + 280630, + 280623, + 280321, + 280273, + 280374, + 280411, + 280524, + 280534, + 280573, + 149143, + 280359, + 280307, + 280432, + 280484, + 280271, + 148872, + 280739, + 280300, + 280474, + 280386, + 280333, + 280580, + 149149, + 148877, + 280715, + 280346, + 280460, + 280576, + 280521, + 280377, + 280256, + 280250, + 280410, + 280483, + 280527, + 280594, + 280395, + 280500, + 280363, + 149144, + 280661, + 148881, + 148866, + 280247, + 280332, + 280607, + 280577, + 280403, + 280533, + 280471, + 148229, + 280628, + 148230, + 280361, + 280679, + 280309, + 280662, + 280613, + 280284, + 280509, + 280468, + 280601, + 280570, + 280376, + 280461, + 280572, + 280574, + 280762, + 280704, + 280758, + 280364, + 280755, + 280345, + 280714, + 280635, + 280618, + 280736, + 280603, + 280740, + 280743, + 280543, + 280264, + 280656, + 280473, + 148868, + 280681, + 290932, + 280641, + 280738, + 280329, + 280725, + 149152, + 156016, + 280365, + 280556, + 280693, + 280409, + 280591, + 280266, + 280680, + 148876, + 280579, + 280287, + 280555, + 280604, + 280399, + 280709, + 280462, + 280370, + 280387, + 280482, + 280741, + 280756, + 280249, + 280275, + 280559, + 280404, + 280341, + 280713, + 280246, + 280595, + 280465, + 280301, + 280575, + 280334, + 280622, + 280408, + 149150, + 280708, + 280294, + 280557, + 280647, + 280344, + 280593, + 280721, + 280760, + 280627, + 280493, + 280315, + 148873, + 280655, + 280685, + 280448, + 156002, + 280689, + 280355, + 280629, + 280304, + 148884, + 280422, + 280732, + 155988, + 280683, + 280737, + 280339, + 280540, + 280642, + 280281, + 280678, + 280296, + 280763, + 280649, + 280375, + 280710, + 280253, + 280394, + 280516, + 280449, + 149171, + 280724, + 280670, + 148862, + 280381, + 280663, + 148226, + 280337, + 280400, + 156022, + 280268, + 280368, + 280421, + 280711, + 148878, + 280288, + 280665, + 280585, + 280515, + 280730, + 280720, + 280265, + 156028, + 280545, + 280492, + 280611, + 155990, + 280565, + 280314, + 280597, + 280542, + 280308, + 280450, + 280292, + 280566, + 280640, + 280539, + 280475, + 280371, + 280326, + 280447, + 280552, + 280428, + 280688, + 280682, + 280418, + 280360, + 280586, + 280699, + 162016, + 280258, + 280504, + 280632, + 280698, + 280481, + 280644, + 280514, + 148859, + 280588, + 156018, + 280660, + 280671, + 280667, + 280491, + 280551, + 280469, + 280598, + 148867, + 280330, + 280610, + 280382, + 280305, + 280626, + 280451, + 280571, + 280325, + 156004, + 280749, + 280297, + 280638, + 280434, + 280245, + 280303, + 155998, + 280362, + 280727, + 280746, + 280584, + 280478, + 280706, + 280354, + 280508, + 280517, + 280621, + 280619, + 280609, + 280541, + 280729, + 280726, + 280293, + 280538, + 290928, + 280578, + 280282, + 280270, + 280490, + 280511, + 156014, + 280691, + 280561, + 280719, + 280380, + 280466, + 156019, + 280494, + 280745, + 148882, + 280643, + 280522, + 280356, + 280353, + 148228, + 280313, + 280423, + 280742, + 280733, + 280472, + 280567, + 280290, + 280615, + 280505, + 156025, + 280452, + 280700, + 280532, + 156011, + 280274, + 280518, + 280653, + 280417, + 280402, + 280348, + 280592, + 280453, + 290930, + 280529, + 280379, + 280602, + 280512, + 280631, + 280537, + 280731, + 280383, + 280757, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "60640", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Amortization Expense", + "id": 133658, + "is_enabled": True, + "name": "Amortization Expense", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "128", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Legal", + "id": 133659, + "is_enabled": True, + "name": "Legal", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280431, + 280262, + 279966, + 280100, + 279794, + 280010, + 279993, + 279875, + 280187, + 149169, + 280070, + 280218, + 279806, + 279868, + 279857, + 280213, + 280199, + 280139, + 279939, + 280525, + 280234, + 280091, + 279782, + 279870, + 280080, + 279972, + 149155, + 280014, + 279945, + 279893, + 279915, + 279950, + 149175, + 279910, + 155989, + 279882, + 279774, + 280124, + 280165, + 279721, + 280182, + 280205, + 279762, + 279952, + 280177, + 280044, + 279921, + 280171, + 148860, + 280098, + 279853, + 280406, + 148227, + 280009, + 280589, + 279980, + 280140, + 279750, + 280225, + 149173, + 280039, + 280041, + 279877, + 280045, + 280016, + 280085, + 280230, + 280147, + 279799, + 280078, + 280033, + 280006, + 280061, + 279997, + 279928, + 279995, + 290068, + 280675, + 279764, + 279861, + 246836, + 279742, + 279777, + 279770, + 280200, + 280153, + 280216, + 280189, + 280244, + 280069, + 280135, + 280176, + 279712, + 280037, + 279793, + 279807, + 279824, + 279735, + 279967, + 279759, + 280104, + 279817, + 279717, + 280420, + 280059, + 279831, + 148864, + 279859, + 280118, + 149148, + 280102, + 155987, + 280072, + 279810, + 279940, + 279888, + 279935, + 280018, + 279978, + 279874, + 280161, + 279734, + 279881, + 149159, + 279955, + 149151, + 279944, + 280047, + 279835, + 279916, + 279708, + 280038, + 279962, + 279971, + 280082, + 280132, + 280019, + 279892, + 280123, + 279828, + 279991, + 279872, + 148865, + 279958, + 148231, + 149172, + 148861, + 279863, + 280204, + 279744, + 155992, + 279765, + 279725, + 148888, + 279790, + 280073, + 149163, + 280022, + 279959, + 279850, + 279931, + 156021, + 280075, + 279763, + 280590, + 279713, + 280088, + 280027, + 280236, + 280148, + 280496, + 279701, + 279846, + 279728, + 279878, + 280229, + 279920, + 280415, + 279786, + 280001, + 279852, + 280674, + 280191, + 280222, + 280226, + 279836, + 280111, + 279767, + 280013, + 279985, + 280397, + 280201, + 280095, + 279851, + 280445, + 280005, + 279724, + 280034, + 280093, + 279732, + 279733, + 149167, + 280052, + 279714, + 280419, + 280497, + 280152, + 280172, + 279901, + 280175, + 290084, + 279756, + 279778, + 280243, + 280066, + 279838, + 279986, + 280162, + 279970, + 279999, + 279917, + 279779, + 279740, + 280015, + 280108, + 280235, + 279889, + 280142, + 279707, + 279968, + 279941, + 279847, + 279943, + 280077, + 280214, + 155996, + 280136, + 280203, + 280119, + 280122, + 279842, + 280067, + 148890, + 279737, + 279809, + 280129, + 280063, + 280392, + 280464, + 280227, + 149153, + 280092, + 279747, + 279891, + 155997, + 148879, + 155995, + 279919, + 156007, + 279791, + 279867, + 279830, + 279766, + 279904, + 280149, + 156024, + 279819, + 280219, + 279896, + 280416, + 280195, + 279829, + 280058, + 279715, + 279956, + 280103, + 279802, + 279719, + 279951, + 279757, + 279926, + 279918, + 280211, + 280654, + 279981, + 280549, + 156012, + 279890, + 280463, + 280000, + 279758, + 149161, + 280025, + 279814, + 279700, + 148874, + 280030, + 279781, + 279792, + 280086, + 156001, + 280120, + 279883, + 280174, + 280011, + 280050, + 279798, + 279871, + 279808, + 280079, + 279996, + 280053, + 280121, + 280150, + 280444, + 280202, + 280188, + 279751, + 279860, + 280173, + 290065, + 149164, + 279942, + 280224, + 279969, + 280055, + 280113, + 280186, + 279927, + 280185, + 156027, + 279718, + 279949, + 279911, + 280060, + 279976, + 280002, + 279776, + 279989, + 148870, + 279773, + 279983, + 279822, + 280181, + 279821, + 279775, + 280087, + 279801, + 279934, + 279925, + 280151, + 280138, + 280143, + 280040, + 279879, + 155985, + 280209, + 279722, + 280049, + 279745, + 156003, + 279988, + 280393, + 279963, + 279960, + 279803, + 279726, + 280157, + 279748, + 280180, + 279783, + 280215, + 280032, + 280159, + 279840, + 156008, + 280166, + 280107, + 279796, + 280167, + 279816, + 280183, + 280071, + 279711, + 279902, + 280436, + 280388, + 279854, + 280051, + 279909, + 279834, + 280065, + 279936, + 279784, + 279844, + 148871, + 279930, + 279975, + 279813, + 156026, + 280233, + 279785, + 280291, + 279990, + 279703, + 280128, + 279884, + 280099, + 279749, + 279702, + 280090, + 279848, + 155993, + 279825, + 279864, + 279736, + 280097, + 279992, + 280112, + 280089, + 280208, + 279760, + 280210, + 279948, + 279912, + 279862, + 280231, + 280320, + 280114, + 279906, + 280057, + 279845, + 279804, + 280023, + 280196, + 279716, + 280401, + 279710, + 280163, + 279787, + 280550, + 280192, + 279729, + 280144, + 279869, + 156005, + 279800, + 280017, + 279772, + 280021, + 148880, + 280212, + 279924, + 280435, + 279866, + 280007, + 280220, + 149168, + 279769, + 280028, + 280751, + 279730, + 280131, + 279964, + 279704, + 280036, + 279856, + 280020, + 280054, + 149165, + 280101, + 279977, + 280003, + 279780, + 279994, + 280106, + 280179, + 280096, + 279998, + 280193, + 279727, + 279705, + 280035, + 280390, + 280084, + 279865, + 280156, + 280008, + 279947, + 279900, + 280105, + 280168, + 280164, + 280127, + 279913, + 280197, + 280239, + 279974, + 279885, + 148886, + 155999, + 279876, + 280223, + 148875, + 280263, + 280115, + 280031, + 149146, + 280109, + 279937, + 280074, + 280134, + 279812, + 280217, + 149156, + 279788, + 279933, + 155991, + 279898, + 279923, + 280405, + 280526, + 279738, + 280145, + 280184, + 279895, + 280029, + 280207, + 279761, + 279954, + 279826, + 279731, + 280502, + 279795, + 279805, + 279753, + 279754, + 280004, + 279815, + 279752, + 280141, + 290069, + 279858, + 279818, + 291035, + 280221, + 280238, + 280198, + 279908, + 279873, + 279823, + 280232, + 280064, + 280094, + 279979, + 279914, + 156013, + 280194, + 279932, + 279833, + 280081, + 279741, + 156000, + 280056, + 279965, + 280158, + 280043, + 279886, + 279961, + 279723, + 280048, + 279837, + 155986, + 279946, + 279907, + 148858, + 280155, + 149158, + 280169, + 280133, + 280062, + 156023, + 279843, + 280501, + 279973, + 279849, + 279938, + 280160, + 280076, + 280068, + 279984, + 279899, + 280126, + 279720, + 280190, + 280178, + 279855, + 280389, + 280042, + 280125, + 280206, + 280116, + 280228, + 280146, + 279987, + 279739, + 279897, + 279894, + 280026, + 280170, + 148883, + 279743, + 279880, + 279789, + 280110, + 280676, + 279957, + 279929, + 279839, + 279841, + 280137, + 280012, + 279755, + 279797, + 279922, + 279771, + 279953, + 280046, + 156009, + 279811, + 280130, + 279832, + 279887, + 279746, + 149157, + 279982, + 279820, + 280237, + 280154, + 280024, + 279706, + 290067, + 279768, + 279903, + 279905, + 279827, + 280083, + 280117, + 279709, + 280391, + 280533, + 280678, + 280694, + 280350, + 280612, + 280270, + 280614, + 148887, + 280430, + 280512, + 280657, + 280691, + 280375, + 149171, + 280292, + 280749, + 280511, + 290930, + 280506, + 155984, + 280562, + 280507, + 280667, + 280340, + 280372, + 280441, + 280374, + 280679, + 280693, + 280341, + 155990, + 280508, + 280680, + 280510, + 280613, + 280563, + 280271, + 280246, + 280509, + 280425, + 280630, + 280373, + 280692, + 149174, + 280658, + 280750, + 280322, + 148222, + 280255, + 280726, + 280317, + 280723, + 280596, + 280349, + 280442, + 280324, + 280639, + 149166, + 280280, + 280443, + 280277, + 280428, + 280587, + 280351, + 280424, + 280761, + 280669, + 280592, + 280722, + 280316, + 280257, + 280731, + 156025, + 280423, + 280446, + 280643, + 280541, + 280354, + 156004, + 280325, + 280551, + 148859, + 280586, + 280447, + 280597, + 280665, + 156022, + 156028, + 280422, + 280542, + 280355, + 280721, + 280760, + 280315, + 280448, + 280732, + 280540, + 280281, + 280253, + 280449, + 280670, + 148226, + 280421, + 280585, + 280353, + 280720, + 280539, + 280314, + 280450, + 280418, + 280552, + 280258, + 280644, + 280671, + 280598, + 280626, + 280319, + 280638, + 280621, + 280640, + 280584, + 280451, + 280538, + 280326, + 280282, + 280729, + 156014, + 280719, + 156019, + 280356, + 280313, + 280733, + 280452, + 280417, + 280348, + 280453, + 280537, + 280718, + 156020, + 280414, + 280583, + 280553, + 280454, + 148224, + 280312, + 280455, + 280599, + 280357, + 280327, + 280645, + 280759, + 280276, + 280734, + 280437, + 280717, + 280259, + 280624, + 149147, + 280664, + 280252, + 280582, + 280456, + 280672, + 280413, + 148223, + 280433, + 280536, + 148869, + 280283, + 280412, + 280358, + 280311, + 280457, + 280620, + 280716, + 280763, + 280546, + 280600, + 280279, + 280427, + 280637, + 280581, + 280458, + 280535, + 280310, + 280646, + 280347, + 280735, + 280328, + 280554, + 155994, + 280459, + 280673, + 280260, + 280534, + 280411, + 280359, + 280715, + 280580, + 280758, + 280410, + 280460, + 148866, + 149144, + 280321, + 280309, + 280601, + 280284, + 280461, + 280714, + 280625, + 280736, + 280681, + 280725, + 280329, + 156016, + 280409, + 280579, + 280555, + 280636, + 280462, + 280275, + 280323, + 280713, + 280465, + 280408, + 280663, + 280647, + 280627, + 280737, + 280308, + 280241, + 280360, + 280548, + 280330, + 280578, + 280619, + 280466, + 280532, + 280602, + 280531, + 280712, + 149145, + 280438, + 280407, + 280261, + 280285, + 156006, + 148889, + 280467, + 280594, + 280251, + 148885, + 280307, + 280346, + 280577, + 280468, + 280738, + 280556, + 280404, + 280762, + 280711, + 280682, + 280469, + 280648, + 280530, + 149154, + 280666, + 280622, + 280470, + 280543, + 280603, + 280361, + 280757, + 280403, + 280591, + 280641, + 280576, + 280331, + 280529, + 280306, + 280710, + 280683, + 280635, + 280471, + 280595, + 280286, + 149160, + 280528, + 280739, + 162016, + 280402, + 280305, + 280472, + 280362, + 148867, + 280400, + 280649, + 280727, + 280575, + 280557, + 280709, + 280604, + 280618, + 280264, + 280473, + 280662, + 148229, + 280332, + 148872, + 280527, + 148877, + 280474, + 280250, + 280363, + 148230, + 280574, + 280345, + 280240, + 280740, + 149149, + 280756, + 280399, + 280708, + 280304, + 280475, + 280274, + 280242, + 280398, + 280476, + 280707, + 280605, + 280439, + 280684, + 280650, + 280558, + 280573, + 280303, + 280477, + 280287, + 280265, + 280668, + 280634, + 280364, + 280478, + 280741, + 148862, + 280333, + 280524, + 280623, + 280396, + 280523, + 280706, + 280685, + 149150, + 148876, + 280572, + 280628, + 280395, + 280426, + 280302, + 280479, + 254109, + 280480, + 280606, + 156010, + 280617, + 280705, + 280651, + 280522, + 280742, + 280432, + 280571, + 280481, + 280288, + 280394, + 148873, + 280344, + 280334, + 280301, + 280559, + 280249, + 280387, + 280266, + 280482, + 280365, + 280318, + 149152, + 280544, + 148868, + 148884, + 280743, + 280755, + 280704, + 280661, + 280570, + 280607, + 280483, + 148881, + 280521, + 280300, + 280386, + 280484, + 280273, + 280686, + 280633, + 280434, + 280703, + 280652, + 280593, + 280485, + 280366, + 280569, + 280335, + 280520, + 148863, + 280560, + 280385, + 149170, + 280367, + 280299, + 280486, + 280267, + 280754, + 280702, + 280487, + 280608, + 280254, + 280289, + 280568, + 280744, + 280616, + 280384, + 280278, + 280519, + 280701, + 280298, + 280488, + 280336, + 149162, + 280489, + 148225, + 280256, + 280687, + 280248, + 280343, + 280383, + 280653, + 280518, + 280700, + 280290, + 280429, + 280567, + 280745, + 280517, + 148228, + 280561, + 280490, + 280609, + 280245, + 280297, + 280382, + 148882, + 280491, + 280660, + 280632, + 280699, + 280688, + 280566, + 280492, + 148878, + 280368, + 280268, + 280337, + 280724, + 280516, + 280381, + 155988, + 156002, + 280493, + 280655, + 280515, + 280629, + 280296, + 280642, + 280565, + 280545, + 280698, + 280610, + 155998, + 280746, + 290928, + 280380, + 280494, + 280615, + 280728, + 280295, + 156011, + 280379, + 280495, + 280272, + 280697, + 280564, + 280338, + 280369, + 280498, + 280440, + 280747, + 280753, + 156018, + 280378, + 280677, + 280499, + 280269, + 280689, + 156015, + 280342, + 149143, + 280611, + 280514, + 280656, + 280696, + 280377, + 280690, + 280247, + 280294, + 280631, + 280370, + 290932, + 280500, + 280588, + 280503, + 280547, + 280513, + 280695, + 290929, + 280293, + 280504, + 280339, + 280371, + 280748, + 280730, + 280752, + 290931, + 280505, + 280659, + 280376, + 280352, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "143", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Inventory Returned Not Credited", + "id": 133660, + "is_enabled": True, + "name": "Inventory Returned Not Credited", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280264, + 280287, + 280315, + 280448, + 280617, + 156002, + 280520, + 280510, + 280473, + 280458, + 280540, + 280542, + 280509, + 148863, + 280732, + 280763, + 280581, + 280345, + 280339, + 280637, + 280485, + 280523, + 155988, + 280591, + 149166, + 280535, + 280662, + 280281, + 280253, + 280427, + 280595, + 280449, + 280268, + 280705, + 280385, + 280439, + 149145, + 280600, + 280381, + 280716, + 280670, + 280560, + 280712, + 280516, + 280650, + 280620, + 280368, + 280574, + 149171, + 280531, + 280337, + 149170, + 149154, + 280720, + 148872, + 148226, + 280363, + 280358, + 280421, + 280367, + 148230, + 148878, + 280585, + 280724, + 280492, + 280651, + 280299, + 280603, + 280539, + 148229, + 280457, + 280311, + 280432, + 280314, + 280546, + 280412, + 280469, + 280486, + 280576, + 280450, + 280283, + 148869, + 280566, + 280267, + 280332, + 280688, + 280434, + 280684, + 280754, + 280522, + 280425, + 280602, + 280504, + 280418, + 280552, + 280353, + 280536, + 280741, + 280532, + 280258, + 280706, + 280702, + 280372, + 280612, + 280527, + 148223, + 280699, + 280605, + 280413, + 280250, + 148882, + 280742, + 280433, + 280682, + 280672, + 280644, + 280254, + 280292, + 148877, + 280757, + 280456, + 280582, + 280466, + 280503, + 280608, + 280619, + 280632, + 280240, + 280671, + 280289, + 280279, + 280660, + 280477, + 280568, + 280678, + 280491, + 280598, + 280252, + 280278, + 280360, + 280749, + 280664, + 280474, + 280513, + 280744, + 280711, + 280319, + 280571, + 280382, + 280750, + 280616, + 280594, + 148867, + 280658, + 149147, + 280245, + 280626, + 280638, + 280286, + 280384, + 280352, + 280297, + 280330, + 280624, + 280578, + 280507, + 280437, + 280487, + 280563, + 280511, + 280621, + 280694, + 280584, + 280685, + 280519, + 280451, + 280259, + 280717, + 280609, + 149143, + 280538, + 280481, + 280701, + 149160, + 280734, + 280294, + 280326, + 280276, + 280490, + 280308, + 156014, + 280561, + 280514, + 280298, + 280340, + 280630, + 280293, + 280759, + 280373, + 280282, + 290931, + 280645, + 148228, + 280719, + 280488, + 280679, + 156019, + 280517, + 280288, + 280357, + 280429, + 280342, + 280327, + 280692, + 280336, + 149162, + 280562, + 280745, + 280331, + 280729, + 280313, + 280394, + 280599, + 156015, + 280455, + 280733, + 280489, + 149174, + 290929, + 280312, + 280689, + 280567, + 148224, + 280290, + 149150, + 280737, + 148225, + 280548, + 290930, + 280553, + 280356, + 156010, + 280454, + 280583, + 280613, + 280452, + 280695, + 280269, + 280506, + 280321, + 280687, + 280730, + 280700, + 280348, + 280256, + 280640, + 280707, + 280248, + 280653, + 280414, + 280322, + 280417, + 280453, + 280625, + 280627, + 280343, + 148222, + 156020, + 148873, + 280718, + 280543, + 280518, + 280537, + 280677, + 280499, + 155984, + 280614, + 280383, + 280404, + 280344, + 280726, + 280350, + 280524, + 280647, + 280663, + 280528, + 280408, + 280556, + 280738, + 280334, + 280270, + 280255, + 148887, + 148876, + 280378, + 280317, + 280529, + 280739, + 280659, + 156018, + 280762, + 280301, + 280631, + 280323, + 280752, + 280623, + 280465, + 280713, + 280668, + 280753, + 280440, + 280747, + 280376, + 280242, + 280249, + 280656, + 280275, + 280572, + 280723, + 280596, + 280476, + 280559, + 280333, + 280349, + 280544, + 280468, + 280442, + 280666, + 280387, + 280508, + 280369, + 280577, + 280462, + 280555, + 280636, + 162016, + 280498, + 280579, + 280628, + 280324, + 280426, + 280266, + 280398, + 280547, + 280318, + 280409, + 280364, + 280748, + 280639, + 155990, + 280395, + 280365, + 280710, + 280338, + 148862, + 280443, + 280402, + 149152, + 280277, + 280587, + 280307, + 280564, + 280303, + 280482, + 280271, + 280280, + 280329, + 280351, + 148868, + 280341, + 280681, + 280241, + 156016, + 280346, + 280697, + 148884, + 280424, + 280592, + 280669, + 280725, + 280272, + 280403, + 280505, + 280743, + 280470, + 280722, + 280736, + 280305, + 280661, + 280495, + 280247, + 280755, + 280370, + 280714, + 280265, + 280472, + 280704, + 280588, + 280512, + 280316, + 280274, + 280761, + 280362, + 280461, + 280475, + 280731, + 280284, + 280379, + 280478, + 280570, + 148885, + 156011, + 280295, + 280400, + 280601, + 280309, + 280641, + 156025, + 280251, + 280533, + 280649, + 280545, + 290932, + 280607, + 280696, + 280423, + 280446, + 280302, + 149144, + 148866, + 280304, + 280615, + 280635, + 280728, + 280575, + 280386, + 280460, + 280494, + 280657, + 280410, + 280430, + 280483, + 280611, + 280643, + 280693, + 280471, + 280521, + 280467, + 148889, + 280541, + 280758, + 156006, + 280371, + 280380, + 148881, + 280428, + 280708, + 280300, + 290928, + 280580, + 280479, + 280683, + 280257, + 155998, + 280746, + 280557, + 280634, + 280359, + 254109, + 280715, + 280680, + 280354, + 280411, + 280727, + 280484, + 280709, + 156004, + 280396, + 280273, + 280325, + 280604, + 280610, + 280534, + 280377, + 280691, + 148859, + 280573, + 280260, + 280361, + 280551, + 280698, + 280642, + 280480, + 280633, + 280441, + 280586, + 280648, + 280673, + 280597, + 280686, + 280565, + 280665, + 280399, + 280703, + 280756, + 280530, + 280459, + 155994, + 280285, + 280447, + 280375, + 280438, + 280554, + 280629, + 280652, + 149149, + 156022, + 280306, + 280740, + 280296, + 280422, + 156028, + 280606, + 280328, + 280355, + 280622, + 280667, + 280735, + 280347, + 280515, + 280374, + 280593, + 280655, + 280246, + 280569, + 280261, + 280407, + 280646, + 280310, + 280366, + 280558, + 280760, + 280618, + 280493, + 280500, + 280335, + 280690, + 280721, + 280189, + 290068, + 279934, + 279959, + 156009, + 279992, + 279748, + 279876, + 280139, + 280037, + 279976, + 280191, + 279779, + 290065, + 280049, + 280185, + 280231, + 149168, + 280028, + 279900, + 280023, + 280502, + 279907, + 280133, + 279953, + 279709, + 280014, + 279856, + 279874, + 279817, + 279958, + 155992, + 280229, + 279847, + 280464, + 279700, + 280186, + 279883, + 279821, + 280138, + 279879, + 279783, + 156008, + 279902, + 280110, + 279990, + 279800, + 280097, + 279906, + 279710, + 280389, + 279866, + 279932, + 280390, + 149165, + 279780, + 279865, + 279705, + 280074, + 280134, + 280029, + 279954, + 279818, + 156000, + 149158, + 280501, + 280190, + 280137, + 279957, + 279905, + 280053, + 279820, + 280083, + 279782, + 279903, + 280187, + 280098, + 280041, + 279925, + 280230, + 280162, + 280135, + 280059, + 279759, + 279935, + 290067, + 279955, + 279991, + 279799, + 279725, + 280073, + 279846, + 280496, + 280005, + 280497, + 279901, + 280397, + 280015, + 280136, + 279747, + 279904, + 279956, + 279819, + 280079, + 280030, + 279781, + 156012, + 280188, + 280113, + 155995, + 280002, + 279718, + 280052, + 279983, + 280080, + 280087, + 280209, + 156003, + 155985, + 279722, + 280215, + 280157, + 279801, + 156026, + 279796, + 279840, + 280167, + 279834, + 280065, + 280051, + 280159, + 279936, + 279975, + 279702, + 279703, + 279884, + 280090, + 279736, + 279737, + 280107, + 280208, + 279760, + 280320, + 280114, + 279852, + 279804, + 280401, + 279729, + 156005, + 148880, + 279924, + 280007, + 279704, + 280751, + 279730, + 280020, + 280054, + 280003, + 279998, + 280008, + 280035, + 280156, + 280105, + 280168, + 279974, + 279885, + 280109, + 280263, + 280115, + 279979, + 279937, + 280217, + 279923, + 280405, + 279731, + 280207, + 279761, + 279795, + 279805, + 279752, + 279755, + 279858, + 279873, + 279738, + 280064, + 156013, + 279833, + 279741, + 280043, + 279886, + 290084, + 156023, + 280155, + 148858, + 280169, + 279973, + 279938, + 279984, + 280068, + 279720, + 280206, + 280116, + 279739, + 280170, + 280676, + 279839, + 279841, + 279922, + 280154, + 280165, + 279832, + 279887, + 280237, + 279706, + 279982, + 280024, + 280262, + 280117, + 279794, + 280010, + 279880, + 279806, + 149169, + 279939, + 280213, + 279972, + 280091, + 149173, + 155989, + 279921, + 280205, + 279762, + 148860, + 280218, + 280406, + 280039, + 279980, + 280085, + 280171, + 280078, + 279997, + 280675, + 280153, + 279742, + 280244, + 280069, + 279793, + 279807, + 280104, + 279931, + 279831, + 280118, + 279978, + 279859, + 279888, + 279940, + 148864, + 149151, + 280047, + 279881, + 279971, + 280019, + 279872, + 148231, + 279875, + 280204, + 149155, + 279765, + 280022, + 279744, + 156021, + 279857, + 280236, + 279878, + 279728, + 279920, + 280044, + 280674, + 280415, + 279851, + 279985, + 280111, + 280066, + 279714, + 280034, + 279732, + 280152, + 280172, + 280243, + 279970, + 149175, + 279838, + 279740, + 279889, + 279941, + 280203, + 279842, + 280214, + 280063, + 280119, + 280092, + 279919, + 279830, + 279766, + 279802, + 280086, + 280416, + 280211, + 280103, + 279719, + 279757, + 149161, + 156001, + 279890, + 280392, + 280219, + 279758, + 279792, + 280120, + 280011, + 279808, + 280150, + 279715, + 279751, + 280173, + 279969, + 280055, + 149164, + 279860, + 280202, + 279996, + 279942, + 279871, + 280174, + 148874, + 279981, + 280025, + 280654, + 279918, + 279829, + 279798, + 156024, + 280149, + 279791, + 148879, + 155997, + 280227, + 279891, + 280122, + 149153, + 148890, + 155996, + 279809, + 280077, + 280001, + 279943, + 156007, + 279968, + 279707, + 280108, + 280235, + 280000, + 279917, + 279986, + 280419, + 149167, + 280093, + 280201, + 279767, + 279836, + 280175, + 280226, + 280222, + 280148, + 279701, + 279713, + 280590, + 279763, + 279850, + 279790, + 148888, + 149163, + 148861, + 148865, + 279828, + 279735, + 280123, + 279756, + 279916, + 279892, + 280161, + 280082, + 279944, + 280018, + 280038, + 149159, + 279853, + 280102, + 279810, + 280420, + 279967, + 279712, + 280033, + 280200, + 279770, + 280216, + 279928, + 279861, + 279764, + 280176, + 279995, + 280006, + 279877, + 280147, + 280225, + 279750, + 280391, + 280589, + 279717, + 280177, + 280199, + 280124, + 279915, + 279893, + 279945, + 279882, + 279870, + 280239, + 280234, + 280070, + 279966, + 280046, + 280431, + 279827, + 279768, + 279811, + 279771, + 149157, + 279789, + 280012, + 279743, + 280026, + 280036, + 279894, + 279929, + 280146, + 279987, + 280042, + 280126, + 280178, + 280076, + 279849, + 280062, + 279843, + 279946, + 279914, + 155986, + 279965, + 280056, + 279723, + 280221, + 280081, + 280198, + 280094, + 291035, + 290069, + 279826, + 279895, + 279977, + 280004, + 280145, + 149146, + 279788, + 155991, + 280223, + 279933, + 155999, + 279812, + 279913, + 279754, + 280197, + 280127, + 279947, + 280238, + 280084, + 280106, + 279727, + 280179, + 279994, + 279837, + 279964, + 280163, + 280101, + 280220, + 279769, + 279721, + 280435, + 279772, + 280017, + 279869, + 280144, + 280550, + 279716, + 279787, + 280196, + 280057, + 279862, + 279912, + 279825, + 279948, + 280112, + 279749, + 280128, + 155993, + 280233, + 280291, + 148227, + 148871, + 280393, + 279844, + 280388, + 279813, + 279711, + 280436, + 280071, + 280032, + 280180, + 280166, + 279963, + 279988, + 279745, + 280040, + 280143, + 280151, + 149148, + 148870, + 279776, + 279855, + 280181, + 279773, + 279911, + 279949, + 280224, + 280444, + 280050, + 279927, + 279814, + 279926, + 280549, + 280195, + 279896, + 280129, + 280142, + 280095, + 280013, + 279786, + 280027, + 280075, + 279863, + 149172, + 279962, + 279708, + 280067, + 279734, + 279824, + 280088, + 280061, + 246836, + 279777, + 280182, + 279774, + 279910, + 279950, + 279868, + 279993, + 280160, + 279724, + 279797, + 280100, + 280130, + 148883, + 279897, + 280125, + 156027, + 280048, + 279961, + 280194, + 280232, + 279753, + 279823, + 280141, + 280526, + 279898, + 279815, + 148875, + 279930, + 148886, + 280210, + 280193, + 280131, + 279845, + 279785, + 279848, + 280164, + 279909, + 279726, + 280183, + 279960, + 279775, + 280021, + 279989, + 280060, + 280121, + 280058, + 279835, + 279951, + 279778, + 279733, + 280445, + 280089, + 280016, + 280140, + 279999, + 280525, + 280009, + 280228, + 279746, + 279908, + 280212, + 279803, + 280031, + 280096, + 280192, + 279864, + 279784, + 280045, + 280099, + 279822, + 280132, + 280158, + 279816, + 279899, + 279952, + 280184, + 279854, + 279867, + 280463, + 280072, + 155987, + 149156, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "152", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Bill Exchange Rate Variance", + "id": 133661, + "is_enabled": True, + "name": "Bill Exchange Rate Variance", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280100, + 280024, + 279706, + 279709, + 279768, + 279887, + 279832, + 280083, + 279811, + 280237, + 280154, + 279724, + 279771, + 279820, + 280177, + 279789, + 280164, + 279841, + 280130, + 280012, + 279922, + 280676, + 280170, + 279905, + 279743, + 280262, + 279957, + 280026, + 279746, + 280076, + 279739, + 280125, + 279894, + 279925, + 280042, + 280146, + 280139, + 279720, + 279897, + 279987, + 279929, + 280116, + 279930, + 280206, + 280068, + 279984, + 280133, + 280126, + 279716, + 280137, + 280178, + 279849, + 280190, + 279938, + 279992, + 148858, + 280062, + 156007, + 156027, + 279973, + 280141, + 279843, + 279977, + 280169, + 279914, + 280155, + 279965, + 149158, + 279946, + 280088, + 279717, + 155986, + 280045, + 290084, + 279886, + 280228, + 156023, + 279741, + 280048, + 280056, + 156013, + 279753, + 279723, + 279833, + 280221, + 279961, + 280043, + 280009, + 280198, + 156000, + 279873, + 279839, + 280194, + 280094, + 280064, + 280081, + 291035, + 279899, + 279858, + 290069, + 280501, + 279805, + 279752, + 279755, + 279826, + 280232, + 279761, + 280207, + 279976, + 279895, + 280023, + 279907, + 280004, + 280145, + 279823, + 279795, + 279788, + 280405, + 149146, + 279959, + 279818, + 279923, + 279999, + 155991, + 279731, + 280217, + 279937, + 155999, + 280115, + 280263, + 280110, + 280223, + 279856, + 279954, + 279885, + 280526, + 279812, + 279913, + 279952, + 279705, + 280197, + 280134, + 279974, + 280109, + 280168, + 280031, + 280127, + 280106, + 280105, + 279898, + 279947, + 279876, + 280084, + 280074, + 280156, + 279900, + 279727, + 148875, + 280035, + 280238, + 280163, + 279998, + 280028, + 280179, + 279994, + 279737, + 280210, + 279815, + 279964, + 148886, + 279869, + 280003, + 149156, + 280220, + 280165, + 280101, + 280029, + 280054, + 280020, + 279730, + 279865, + 280751, + 148883, + 279769, + 280096, + 149157, + 280007, + 280193, + 279704, + 279803, + 279772, + 279721, + 280435, + 280017, + 279780, + 148227, + 156005, + 280144, + 149165, + 148880, + 280393, + 280192, + 279924, + 279787, + 279933, + 280550, + 279866, + 279729, + 279710, + 280184, + 279979, + 280401, + 280008, + 280196, + 279845, + 279804, + 280114, + 279906, + 280057, + 280388, + 280320, + 279785, + 279862, + 279912, + 149168, + 280107, + 279760, + 280208, + 279825, + 279848, + 279736, + 280131, + 279948, + 280090, + 280097, + 279749, + 280231, + 279884, + 148870, + 280159, + 279990, + 280128, + 280112, + 280502, + 155993, + 280233, + 279932, + 279703, + 280389, + 280291, + 279909, + 279801, + 279936, + 279975, + 279864, + 279902, + 279702, + 156008, + 279844, + 280390, + 279726, + 279813, + 279711, + 148871, + 279784, + 280051, + 279875, + 279783, + 280436, + 280065, + 280167, + 279748, + 280071, + 279840, + 280032, + 280183, + 279834, + 280143, + 279796, + 280060, + 280180, + 279883, + 279963, + 279960, + 280215, + 280157, + 156026, + 155987, + 279988, + 280166, + 279722, + 279879, + 279745, + 279754, + 155985, + 280138, + 280040, + 149148, + 280099, + 280080, + 280151, + 279775, + 156003, + 279983, + 279867, + 279821, + 280087, + 280209, + 279718, + 280239, + 279776, + 279989, + 280212, + 280181, + 279911, + 280185, + 279773, + 279854, + 280186, + 155995, + 280002, + 280397, + 280121, + 280113, + 280188, + 279835, + 280224, + 280055, + 279926, + 280173, + 279969, + 280392, + 279738, + 279949, + 279860, + 149164, + 280202, + 156012, + 279751, + 280150, + 279996, + 279779, + 279808, + 280050, + 279942, + 279981, + 279871, + 280464, + 279758, + 280011, + 280120, + 279781, + 279857, + 280219, + 279700, + 148874, + 280444, + 280174, + 279792, + 279890, + 280030, + 280025, + 149161, + 280654, + 280089, + 279719, + 279918, + 279814, + 279757, + 280103, + 279829, + 280158, + 280416, + 280149, + 280549, + 280211, + 280058, + 156024, + 280036, + 279799, + 279766, + 280227, + 279791, + 279819, + 279830, + 279715, + 279919, + 280195, + 148879, + 280108, + 155997, + 279822, + 156001, + 279956, + 280092, + 279927, + 279891, + 280214, + 280119, + 280001, + 280063, + 279842, + 279802, + 280079, + 280122, + 156009, + 279896, + 148890, + 155996, + 279747, + 280203, + 279951, + 279809, + 149153, + 280077, + 280129, + 280044, + 279904, + 279941, + 280142, + 279847, + 279968, + 280136, + 279838, + 280235, + 279889, + 279901, + 279707, + 280015, + 280005, + 280086, + 279943, + 155992, + 279917, + 280496, + 279740, + 149167, + 149175, + 279970, + 280049, + 279986, + 280243, + 280172, + 280152, + 280013, + 280162, + 279732, + 280419, + 280111, + 280095, + 279836, + 280201, + 279786, + 279985, + 280034, + 280021, + 279767, + 279846, + 280093, + 149172, + 280175, + 279851, + 280226, + 280075, + 279807, + 280415, + 280497, + 280222, + 279713, + 280674, + 280148, + 279800, + 279701, + 280052, + 279728, + 280191, + 279920, + 149155, + 280590, + 280073, + 280236, + 279735, + 156021, + 280160, + 279763, + 279855, + 279853, + 279850, + 279725, + 279744, + 279790, + 279778, + 279714, + 280200, + 279878, + 279765, + 280229, + 148888, + 279759, + 280161, + 280204, + 279962, + 148861, + 149163, + 148865, + 279934, + 148231, + 279828, + 279991, + 279872, + 279955, + 279881, + 280445, + 280123, + 279708, + 279928, + 279916, + 279958, + 148864, + 279863, + 279892, + 280027, + 280019, + 280061, + 280082, + 279971, + 280047, + 280022, + 279734, + 279944, + 280018, + 279733, + 290067, + 149159, + 279935, + 149151, + 279940, + 280038, + 279888, + 280000, + 279824, + 279859, + 279877, + 280102, + 280132, + 280118, + 279931, + 280135, + 279810, + 279831, + 290068, + 280420, + 279712, + 279978, + 279967, + 279817, + 280104, + 279880, + 280016, + 279793, + 280069, + 280244, + 280033, + 280067, + 246836, + 279852, + 279742, + 280072, + 279770, + 280189, + 280059, + 280153, + 279953, + 280066, + 279777, + 279764, + 280216, + 279861, + 280230, + 280176, + 279995, + 280098, + 280675, + 279980, + 279756, + 280006, + 280140, + 279997, + 279798, + 280171, + 280182, + 280147, + 279837, + 280078, + 280039, + 280589, + 280225, + 280463, + 280085, + 280391, + 279750, + 279774, + 280406, + 279797, + 279910, + 280218, + 279874, + 148860, + 279762, + 280041, + 280205, + 280199, + 280187, + 149169, + 279816, + 280124, + 279921, + 279915, + 279950, + 155989, + 280213, + 279903, + 279893, + 280091, + 279868, + 279945, + 290065, + 279870, + 279782, + 279972, + 279993, + 279882, + 280234, + 279908, + 279939, + 280046, + 279806, + 149173, + 280053, + 280070, + 280010, + 279966, + 280014, + 279794, + 280525, + 279982, + 280037, + 280431, + 280117, + 279827, + 280752, + 280634, + 280656, + 280403, + 280757, + 280364, + 280361, + 280591, + 280603, + 280741, + 280524, + 280750, + 280333, + 280470, + 280240, + 280523, + 280396, + 280648, + 280530, + 280478, + 280432, + 280270, + 280469, + 280682, + 280706, + 280321, + 280738, + 280711, + 280613, + 149150, + 280556, + 280404, + 280685, + 280426, + 280572, + 280468, + 280395, + 280247, + 280577, + 280307, + 280346, + 148876, + 280628, + 148885, + 254109, + 280302, + 280251, + 280428, + 280467, + 280479, + 156006, + 148889, + 280438, + 280666, + 280680, + 280480, + 280285, + 280261, + 280606, + 280407, + 280617, + 149145, + 148884, + 280705, + 280510, + 280712, + 280531, + 280651, + 280544, + 280602, + 280522, + 280762, + 280532, + 280466, + 280742, + 280679, + 280619, + 280360, + 280571, + 280690, + 280330, + 280578, + 280594, + 280481, + 280308, + 280394, + 280737, + 156010, + 280288, + 280627, + 148873, + 280344, + 280647, + 280548, + 280408, + 280631, + 280334, + 280323, + 148868, + 280663, + 280301, + 280465, + 280713, + 280249, + 280508, + 280275, + 280555, + 280559, + 280318, + 280387, + 280462, + 280636, + 280579, + 280667, + 280266, + 280409, + 280588, + 280365, + 155990, + 149152, + 280681, + 280329, + 280482, + 156016, + 280736, + 280743, + 280661, + 280755, + 280714, + 280704, + 280725, + 280461, + 280284, + 280570, + 290932, + 280601, + 280309, + 280641, + 280533, + 280607, + 149144, + 148866, + 280460, + 280386, + 280505, + 280483, + 280521, + 280693, + 280410, + 280758, + 280300, + 280441, + 280580, + 280273, + 280359, + 280241, + 280715, + 280341, + 280484, + 148881, + 280411, + 280534, + 280260, + 280763, + 280633, + 280673, + 280703, + 280352, + 280459, + 155994, + 280554, + 280652, + 280507, + 280686, + 280328, + 280735, + 280569, + 280625, + 280646, + 280310, + 280347, + 280335, + 280593, + 280366, + 280520, + 280500, + 280458, + 148863, + 280581, + 280485, + 280637, + 280535, + 280730, + 280385, + 280370, + 280600, + 280716, + 280427, + 280560, + 280620, + 149170, + 280283, + 280358, + 280367, + 280299, + 280513, + 280457, + 280311, + 280374, + 280412, + 280267, + 280754, + 280372, + 148869, + 280486, + 280536, + 280254, + 280702, + 148223, + 280546, + 280413, + 280678, + 280672, + 280278, + 280456, + 280582, + 280608, + 280503, + 280289, + 280568, + 280252, + 280664, + 280744, + 280433, + 280616, + 280694, + 149147, + 280384, + 280624, + 280437, + 280487, + 280259, + 280519, + 280734, + 280701, + 280340, + 280717, + 149162, + 280298, + 280276, + 280759, + 280645, + 280488, + 280357, + 280327, + 280562, + 280455, + 280599, + 148224, + 280489, + 280312, + 280553, + 280695, + 148225, + 280454, + 280336, + 280583, + 280430, + 280687, + 280248, + 280414, + 280343, + 155984, + 156020, + 280718, + 280518, + 280256, + 280383, + 280640, + 280453, + 280417, + 280653, + 280506, + 280348, + 280434, + 280700, + 280537, + 280452, + 280356, + 280567, + 280733, + 280313, + 280729, + 280282, + 156019, + 290930, + 280745, + 280290, + 280517, + 280293, + 148228, + 280429, + 280719, + 280561, + 156014, + 280612, + 280490, + 280326, + 280538, + 280609, + 148862, + 280451, + 280584, + 280621, + 280297, + 280638, + 280626, + 280245, + 280382, + 280749, + 280598, + 280671, + 280511, + 280491, + 280660, + 280319, + 280699, + 280552, + 280644, + 280632, + 280353, + 280258, + 280418, + 280724, + 280566, + 280504, + 280450, + 280314, + 280688, + 280539, + 280492, + 280585, + 148226, + 280292, + 280421, + 280720, + 280350, + 280337, + 280368, + 280516, + 149171, + 280670, + 280381, + 280449, + 148882, + 280268, + 280542, + 280253, + 149166, + 280281, + 155988, + 280732, + 280540, + 156002, + 280339, + 280448, + 280315, + 280493, + 280721, + 156028, + 280655, + 280760, + 280515, + 290929, + 280355, + 280296, + 280422, + 156022, + 280629, + 280447, + 280565, + 280375, + 280597, + 280586, + 280665, + 280698, + 280691, + 280551, + 148859, + 280354, + 280325, + 280610, + 280642, + 156004, + 280657, + 280746, + 155998, + 280257, + 290928, + 280380, + 280541, + 280643, + 280494, + 280728, + 280446, + 280615, + 148878, + 280371, + 280423, + 280295, + 156025, + 156011, + 280379, + 280279, + 280669, + 280731, + 280316, + 280495, + 280722, + 280272, + 280512, + 280280, + 280547, + 280697, + 280424, + 280592, + 280351, + 280545, + 280564, + 148887, + 280587, + 280277, + 280443, + 280376, + 280338, + 280639, + 280324, + 280442, + 280748, + 280498, + 280369, + 280596, + 280747, + 280753, + 280723, + 280349, + 280440, + 156018, + 280659, + 280378, + 280317, + 280255, + 280499, + 280677, + 148222, + 280322, + 280726, + 280269, + 280373, + 280689, + 149174, + 290931, + 156015, + 280342, + 280692, + 280630, + 149143, + 280294, + 280658, + 280474, + 280250, + 280696, + 148877, + 280527, + 280332, + 148229, + 280363, + 280574, + 280509, + 280662, + 148872, + 148230, + 280345, + 280425, + 280473, + 280264, + 280740, + 280618, + 280246, + 149149, + 280727, + 280304, + 280756, + 280604, + 280399, + 280614, + 280709, + 280557, + 280708, + 280761, + 280575, + 280611, + 280649, + 280400, + 280475, + 280362, + 280274, + 280472, + 280305, + 280398, + 280402, + 162016, + 148867, + 280514, + 280476, + 280242, + 280739, + 280528, + 280707, + 149160, + 280286, + 280668, + 280595, + 149154, + 280605, + 280271, + 280684, + 280650, + 280623, + 280683, + 280377, + 280558, + 280439, + 280573, + 280471, + 280622, + 280635, + 280303, + 280710, + 280529, + 280331, + 280543, + 280477, + 280563, + 280287, + 280576, + 280265, + 280306, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "158", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Unrealized Gain-Loss", + "id": 133662, + "is_enabled": True, + "name": "Unrealized Gain-Loss", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280740, + 148882, + 280315, + 156028, + 280335, + 280339, + 280347, + 148884, + 280493, + 280530, + 280721, + 280618, + 280310, + 149171, + 280569, + 280622, + 280655, + 280261, + 280477, + 280646, + 149149, + 280760, + 280355, + 280683, + 280735, + 280328, + 156022, + 290929, + 280428, + 280296, + 280304, + 280686, + 280691, + 280529, + 280422, + 280274, + 280652, + 280507, + 280756, + 280629, + 280447, + 280563, + 280565, + 280285, + 280554, + 155994, + 280703, + 280505, + 280246, + 280597, + 280604, + 280459, + 280673, + 280478, + 280586, + 280399, + 280375, + 280633, + 280698, + 280287, + 148881, + 280480, + 280665, + 280551, + 280603, + 280372, + 280260, + 148889, + 148859, + 280354, + 280557, + 280325, + 280438, + 280534, + 280411, + 280573, + 280610, + 280709, + 280341, + 280484, + 156006, + 280657, + 156004, + 280715, + 280547, + 280727, + 280359, + 280479, + 280746, + 280642, + 280758, + 280708, + 280257, + 280648, + 280580, + 280376, + 280693, + 280322, + 280300, + 280380, + 280467, + 280273, + 280763, + 280410, + 280270, + 280643, + 280251, + 290928, + 280483, + 280541, + 148866, + 280521, + 280396, + 280494, + 280575, + 280446, + 280512, + 280615, + 280471, + 280649, + 148878, + 280386, + 280460, + 280306, + 149144, + 280607, + 280302, + 280423, + 280533, + 280309, + 280371, + 280295, + 280761, + 280601, + 280752, + 254109, + 156025, + 280634, + 280725, + 280432, + 280669, + 280379, + 280400, + 280570, + 280362, + 280611, + 280731, + 280240, + 290932, + 156011, + 280461, + 280284, + 280576, + 280316, + 280714, + 280755, + 280475, + 280495, + 280743, + 280558, + 280272, + 148885, + 280736, + 280722, + 156016, + 280280, + 280543, + 280346, + 280425, + 280350, + 280704, + 280697, + 280472, + 280661, + 148887, + 280523, + 280424, + 280628, + 280441, + 148876, + 280351, + 280482, + 280623, + 280592, + 280564, + 280305, + 280329, + 280307, + 280681, + 280577, + 280587, + 155990, + 280398, + 280443, + 280439, + 149152, + 280277, + 280395, + 280365, + 280514, + 280338, + 280442, + 280579, + 280303, + 280639, + 280409, + 280266, + 280324, + 280402, + 280548, + 280247, + 280430, + 280636, + 280668, + 280498, + 280748, + 280462, + 162016, + 280369, + 155998, + 280387, + 280559, + 280753, + 280596, + 280750, + 280555, + 280275, + 280249, + 280318, + 280352, + 280747, + 280726, + 280667, + 280713, + 280465, + 280635, + 280723, + 280476, + 280349, + 280545, + 280739, + 156018, + 280572, + 280301, + 280694, + 280659, + 280333, + 280663, + 148868, + 280440, + 280378, + 280242, + 280288, + 280408, + 280468, + 280317, + 280334, + 280361, + 280647, + 280255, + 280631, + 280344, + 280323, + 280685, + 280499, + 148222, + 148873, + 280404, + 280677, + 280710, + 280588, + 280641, + 280528, + 280707, + 280627, + 156010, + 280470, + 280269, + 280383, + 280640, + 156020, + 280518, + 280556, + 280453, + 280718, + 290931, + 280433, + 280414, + 280737, + 280506, + 155984, + 149150, + 280653, + 280256, + 280689, + 280417, + 280248, + 280343, + 280373, + 280348, + 149174, + 280700, + 149160, + 280687, + 280583, + 280762, + 280452, + 280591, + 280336, + 280537, + 280356, + 280508, + 280454, + 148225, + 280553, + 280612, + 280567, + 280426, + 280312, + 280489, + 280729, + 280733, + 156015, + 280695, + 280599, + 280394, + 280313, + 280342, + 280282, + 280286, + 148224, + 156019, + 280532, + 280757, + 280455, + 280666, + 280745, + 280327, + 280692, + 280290, + 280517, + 280594, + 280357, + 280293, + 280488, + 280562, + 280308, + 280759, + 280595, + 148228, + 149143, + 280711, + 280645, + 280276, + 280298, + 280630, + 280625, + 280294, + 156014, + 280326, + 280331, + 149162, + 280481, + 280490, + 280429, + 280561, + 280690, + 280717, + 280719, + 280701, + 280578, + 280538, + 290930, + 280734, + 280330, + 280609, + 280738, + 280451, + 280658, + 280340, + 280519, + 280696, + 280584, + 280259, + 280403, + 280487, + 148862, + 280297, + 280474, + 280624, + 280749, + 280384, + 280571, + 280638, + 280621, + 280626, + 280619, + 280437, + 280664, + 280742, + 149147, + 280382, + 280250, + 280616, + 149154, + 280671, + 280744, + 280598, + 280678, + 280252, + 280546, + 280524, + 280353, + 280614, + 280582, + 148877, + 280491, + 280728, + 280245, + 280660, + 280466, + 280289, + 280511, + 280503, + 280613, + 280552, + 280434, + 280699, + 280527, + 280332, + 280319, + 280644, + 280679, + 280724, + 280632, + 280265, + 280608, + 280568, + 280456, + 280522, + 280258, + 280651, + 280413, + 280672, + 280536, + 280702, + 148223, + 148869, + 280254, + 280605, + 280418, + 280486, + 280267, + 280509, + 280566, + 280510, + 280374, + 148229, + 280450, + 280602, + 280412, + 280311, + 280364, + 280314, + 280363, + 280457, + 280345, + 280504, + 280299, + 280531, + 280492, + 280427, + 280688, + 280539, + 280754, + 280574, + 280585, + 148226, + 280271, + 280542, + 280712, + 280367, + 280513, + 280706, + 280279, + 280421, + 148867, + 280292, + 280358, + 149170, + 280705, + 280720, + 280670, + 280741, + 280620, + 280662, + 280337, + 280560, + 280370, + 280684, + 280368, + 280516, + 280469, + 280716, + 148230, + 280473, + 280278, + 280381, + 280377, + 280241, + 280730, + 280281, + 149166, + 280449, + 149145, + 280360, + 280385, + 280321, + 280268, + 280600, + 280656, + 280283, + 280407, + 280253, + 148872, + 280264, + 280535, + 280637, + 280732, + 155988, + 280650, + 280485, + 280581, + 280617, + 280500, + 148863, + 280593, + 280544, + 280540, + 280515, + 280448, + 156002, + 280606, + 280458, + 280680, + 280682, + 280520, + 280366, + 280169, + 279979, + 279880, + 279756, + 148227, + 280212, + 280110, + 280165, + 155995, + 279702, + 279704, + 279731, + 156023, + 279720, + 279982, + 279978, + 279881, + 280111, + 280211, + 279758, + 280036, + 280044, + 149153, + 279836, + 149163, + 280216, + 279882, + 279977, + 280081, + 280106, + 279717, + 279721, + 280112, + 149148, + 149172, + 280210, + 279753, + 279835, + 280009, + 279976, + 279874, + 279883, + 279705, + 280053, + 279759, + 280079, + 280113, + 280089, + 280209, + 279983, + 155985, + 280007, + 279722, + 279834, + 279840, + 280051, + 279975, + 279703, + 279884, + 280208, + 279760, + 280114, + 280159, + 279729, + 156005, + 280751, + 279730, + 280054, + 280035, + 280105, + 279974, + 279885, + 280115, + 279737, + 280217, + 280207, + 279761, + 279752, + 279854, + 279873, + 279833, + 279741, + 279886, + 279973, + 279984, + 280206, + 280116, + 280676, + 148858, + 149173, + 279841, + 279832, + 279887, + 279706, + 280117, + 280010, + 156013, + 279972, + 155989, + 280205, + 279762, + 280078, + 280218, + 280039, + 280675, + 279742, + 280104, + 279831, + 280118, + 279888, + 149151, + 279971, + 279872, + 280204, + 279765, + 279744, + 279728, + 149155, + 280674, + 280034, + 279985, + 279802, + 279732, + 279970, + 149175, + 279889, + 156001, + 280203, + 279842, + 280119, + 279830, + 279766, + 280103, + 279757, + 279890, + 280219, + 280011, + 279751, + 279969, + 280055, + 280202, + 280120, + 279871, + 148874, + 280654, + 279829, + 156024, + 279701, + 155997, + 279891, + 280122, + 280077, + 279968, + 279707, + 149167, + 279986, + 280201, + 279767, + 279735, + 280222, + 280161, + 280590, + 279763, + 280200, + 279828, + 148861, + 280123, + 280082, + 149159, + 279892, + 280102, + 279967, + 280033, + 279770, + 279764, + 280006, + 279857, + 280589, + 279750, + 279798, + 280046, + 280199, + 280124, + 279870, + 279893, + 279966, + 279827, + 279768, + 279771, + 280012, + 280076, + 279894, + 279987, + 280126, + 279965, + 279843, + 155986, + 280056, + 280198, + 291035, + 279826, + 279895, + 149146, + 155991, + 280223, + 280197, + 280127, + 279727, + 279869, + 279964, + 280101, + 280393, + 279769, + 279772, + 280238, + 280550, + 148870, + 280196, + 280057, + 279825, + 279749, + 280128, + 280291, + 279844, + 148871, + 280032, + 279963, + 279988, + 279738, + 280040, + 280050, + 279776, + 279773, + 280224, + 280549, + 280195, + 280129, + 279896, + 280013, + 280075, + 279962, + 279927, + 279708, + 279824, + 246836, + 279777, + 279774, + 279868, + 280100, + 280130, + 279897, + 280194, + 279961, + 279823, + 280526, + 148875, + 279898, + 280193, + 279845, + 280131, + 280088, + 279726, + 279960, + 279989, + 279775, + 280058, + 279778, + 279733, + 280525, + 280021, + 280228, + 280239, + 280031, + 280192, + 280099, + 279822, + 280132, + 279899, + 279867, + 155987, + 279959, + 279748, + 280502, + 279876, + 280191, + 280049, + 279779, + 149168, + 279900, + 280133, + 280014, + 279709, + 279958, + 280229, + 279700, + 279932, + 279821, + 279879, + 279902, + 279990, + 279866, + 149165, + 279780, + 280074, + 280134, + 280190, + 280501, + 156000, + 279957, + 279820, + 280083, + 280098, + 279903, + 280189, + 280135, + 290067, + 279725, + 280497, + 279846, + 280005, + 279901, + 279747, + 279799, + 279956, + 280030, + 279781, + 280188, + 279819, + 279856, + 156012, + 279904, + 280136, + 280015, + 280496, + 280073, + 279991, + 279955, + 279935, + 280230, + 280059, + 279931, + 280041, + 280187, + 279782, + 279905, + 280137, + 149158, + 279818, + 279954, + 280029, + 279865, + 279906, + 279710, + 155992, + 280097, + 156008, + 279783, + 280138, + 280186, + 280464, + 280389, + 279847, + 279817, + 279953, + 279746, + 279907, + 280028, + 280231, + 280185, + 280037, + 280139, + 279992, + 290068, + 156009, + 149156, + 280072, + 280463, + 280184, + 279952, + 279816, + 279864, + 279784, + 280096, + 280164, + 279999, + 279908, + 280140, + 280016, + 280445, + 279951, + 280121, + 280060, + 280183, + 279909, + 279848, + 279785, + 290065, + 148883, + 279815, + 148886, + 280232, + 280048, + 280141, + 156027, + 280125, + 279724, + 279950, + 279993, + 279910, + 280182, + 279734, + 280061, + 280027, + 279863, + 280095, + 280160, + 279786, + 280142, + 279814, + 280444, + 279949, + 279911, + 280181, + 280151, + 279745, + 280180, + 280143, + 280071, + 280436, + 279711, + 279813, + 280233, + 279948, + 155993, + 279912, + 279862, + 279787, + 280144, + 280017, + 280435, + 280220, + 279994, + 280179, + 280084, + 279947, + 279913, + 279812, + 280163, + 155999, + 279788, + 280145, + 280004, + 290069, + 280094, + 280221, + 279723, + 279946, + 279914, + 280062, + 279849, + 280178, + 280146, + 280042, + 280026, + 279743, + 279789, + 280177, + 279811, + 280431, + 280070, + 280234, + 279945, + 279915, + 280000, + 280225, + 280147, + 279995, + 280176, + 279861, + 279712, + 280420, + 279810, + 280018, + 279944, + 279916, + 148865, + 148888, + 279790, + 279928, + 279850, + 280148, + 280226, + 280175, + 280093, + 280419, + 279853, + 279917, + 279943, + 280235, + 279809, + 155996, + 148890, + 148879, + 280001, + 279791, + 280227, + 280149, + 279918, + 280025, + 280174, + 279942, + 280392, + 279996, + 279860, + 280173, + 279808, + 280150, + 279792, + 149161, + 279719, + 280416, + 279919, + 280092, + 280063, + 279941, + 279740, + 280086, + 280243, + 280172, + 280152, + 279851, + 279807, + 280415, + 279920, + 280236, + 156021, + 279714, + 148231, + 148864, + 280019, + 280047, + 279940, + 279859, + 280022, + 279793, + 280069, + 280244, + 279997, + 280153, + 149169, + 280171, + 280066, + 280085, + 280406, + 148860, + 280091, + 279921, + 279939, + 280024, + 279806, + 279794, + 280237, + 280154, + 279922, + 280170, + 280262, + 279739, + 280068, + 279938, + 279875, + 280155, + 290084, + 280043, + 279858, + 279805, + 279795, + 280405, + 279923, + 280064, + 279937, + 280263, + 280168, + 279998, + 280156, + 280003, + 280020, + 149157, + 148880, + 279924, + 280401, + 279804, + 280320, + 279801, + 279736, + 280090, + 279936, + 280065, + 280045, + 280167, + 279796, + 280157, + 156003, + 279718, + 280087, + 280002, + 156026, + 280397, + 280162, + 279925, + 280023, + 279800, + 279934, + 280158, + 279803, + 279930, + 279797, + 280067, + 280390, + 279926, + 280166, + 280388, + 279933, + 279716, + 279929, + 279877, + 280038, + 279713, + 280391, + 279981, + 279852, + 280108, + 280214, + 279838, + 279878, + 149164, + 279980, + 280213, + 279839, + 279755, + 280109, + 280008, + 280107, + 279855, + 280215, + 280080, + 279754, + 156007, + 279715, + 280052, + 279837, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "163", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Mfg WIP", + "id": 133663, + "is_enabled": True, + "name": "Mfg WIP", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280012, + 279720, + 279759, + 279939, + 279789, + 279709, + 149161, + 279921, + 279724, + 280177, + 279972, + 279771, + 155989, + 279932, + 279811, + 279882, + 280391, + 279875, + 280000, + 279768, + 280091, + 280100, + 280431, + 280187, + 279827, + 279867, + 280205, + 280070, + 279762, + 279966, + 279950, + 280066, + 148860, + 280041, + 279945, + 280085, + 280078, + 280228, + 279893, + 280162, + 280234, + 280098, + 280218, + 280042, + 280031, + 279982, + 279798, + 280216, + 279870, + 279903, + 280406, + 280039, + 279993, + 280124, + 280089, + 279915, + 280049, + 280171, + 280199, + 279756, + 280059, + 280213, + 279750, + 279868, + 280153, + 279877, + 280225, + 280525, + 279997, + 280589, + 280230, + 280675, + 280189, + 280147, + 280229, + 279742, + 149169, + 279774, + 280006, + 279908, + 280244, + 280046, + 290068, + 279995, + 279910, + 280069, + 280176, + 279793, + 279831, + 279748, + 280104, + 280135, + 279861, + 279935, + 279764, + 279979, + 279847, + 279770, + 280033, + 280182, + 280118, + 279967, + 280038, + 279712, + 290067, + 279980, + 279859, + 280113, + 279888, + 279800, + 280420, + 148227, + 279777, + 279940, + 290065, + 279810, + 149151, + 280019, + 279927, + 280102, + 246836, + 279971, + 279892, + 149159, + 279931, + 279824, + 280018, + 280212, + 279872, + 279978, + 279955, + 279944, + 149163, + 148864, + 148231, + 280088, + 280082, + 280204, + 279734, + 279765, + 280123, + 279714, + 279817, + 148861, + 279991, + 148865, + 280080, + 279744, + 279916, + 280061, + 149164, + 156021, + 280184, + 148888, + 149153, + 279828, + 279725, + 280047, + 280236, + 280200, + 280497, + 279779, + 279713, + 279880, + 279920, + 280027, + 279836, + 279850, + 280397, + 279728, + 279790, + 280140, + 280674, + 279763, + 280590, + 149155, + 156009, + 280073, + 280148, + 279700, + 280415, + 280222, + 280161, + 279863, + 279878, + 279807, + 280226, + 280067, + 279851, + 280034, + 279708, + 280175, + 279802, + 279985, + 279962, + 279732, + 279778, + 280093, + 280036, + 279767, + 280201, + 280015, + 279928, + 280152, + 280464, + 280419, + 280005, + 279881, + 156001, + 280185, + 279986, + 280086, + 280496, + 149167, + 279803, + 280203, + 279917, + 279799, + 280172, + 280243, + 280016, + 279970, + 279943, + 279981, + 149175, + 280095, + 279901, + 279707, + 279735, + 280013, + 280235, + 280136, + 280111, + 279968, + 280231, + 279889, + 279941, + 279846, + 279809, + 280063, + 280077, + 279717, + 279842, + 280239, + 280119, + 280092, + 279786, + 155996, + 279821, + 279919, + 279838, + 279904, + 148890, + 279830, + 279896, + 280122, + 279747, + 279733, + 279766, + 280129, + 279891, + 280103, + 280416, + 149172, + 148879, + 280108, + 155997, + 280142, + 279757, + 280392, + 279883, + 279701, + 279956, + 279719, + 279890, + 279791, + 280030, + 279792, + 280502, + 279740, + 280219, + 280011, + 279852, + 280001, + 279853, + 279814, + 156024, + 280150, + 156012, + 280149, + 280549, + 279855, + 280445, + 279829, + 280002, + 279751, + 280211, + 279918, + 279819, + 279808, + 279969, + 280186, + 280025, + 280055, + 280654, + 280444, + 279715, + 280138, + 280173, + 280195, + 280202, + 279781, + 280174, + 156026, + 148874, + 280214, + 279860, + 280188, + 280227, + 148875, + 279996, + 280120, + 279949, + 279942, + 279758, + 279871, + 280209, + 280224, + 280139, + 280087, + 279983, + 279783, + 280160, + 279952, + 279773, + 280215, + 279718, + 279911, + 279951, + 156003, + 279837, + 149168, + 280181, + 279959, + 280058, + 279776, + 280050, + 279879, + 279899, + 155985, + 280157, + 280007, + 280151, + 279775, + 280040, + 149165, + 279722, + 279796, + 280009, + 279745, + 279926, + 279834, + 280121, + 279988, + 280028, + 279840, + 279705, + 280180, + 279999, + 279963, + 279989, + 280167, + 280065, + 280051, + 280143, + 279960, + 279975, + 279936, + 279835, + 280071, + 280081, + 280032, + 280075, + 280060, + 280045, + 279703, + 279907, + 280436, + 280166, + 279884, + 156008, + 148871, + 280090, + 279736, + 279902, + 279711, + 280072, + 280208, + 280008, + 280183, + 279813, + 149148, + 279816, + 279844, + 280079, + 280320, + 279990, + 279948, + 279760, + 280291, + 279726, + 280114, + 279702, + 280233, + 155987, + 279729, + 280110, + 280401, + 155995, + 155993, + 280097, + 280023, + 280128, + 279749, + 279909, + 280132, + 279924, + 279825, + 155992, + 148880, + 279710, + 280112, + 279912, + 279906, + 156005, + 279822, + 279862, + 280131, + 279801, + 279856, + 280057, + 280196, + 280751, + 280021, + 279804, + 280550, + 279848, + 279787, + 280099, + 280159, + 280107, + 279866, + 149157, + 280238, + 280388, + 280144, + 279934, + 280020, + 148870, + 279730, + 279845, + 279753, + 280017, + 279785, + 280054, + 280003, + 279900, + 280435, + 280156, + 279772, + 279998, + 279780, + 279769, + 279876, + 280101, + 280035, + 280220, + 279865, + 280105, + 279864, + 279974, + 279964, + 279869, + 148883, + 279994, + 279930, + 279704, + 280168, + 280193, + 280179, + 280263, + 280029, + 279885, + 280158, + 280115, + 279937, + 279727, + 279815, + 280064, + 280133, + 280084, + 280037, + 279923, + 280074, + 280217, + 279947, + 279933, + 280109, + 280134, + 280127, + 280405, + 280197, + 279874, + 279925, + 279913, + 148886, + 279795, + 280207, + 280164, + 279812, + 279721, + 279761, + 279752, + 280106, + 279954, + 280223, + 279805, + 279898, + 155999, + 279854, + 280022, + 280526, + 155991, + 280393, + 149146, + 279858, + 279788, + 149156, + 279873, + 279784, + 280043, + 279731, + 280190, + 279977, + 279833, + 279823, + 280004, + 156007, + 280463, + 279895, + 279826, + 280163, + 280145, + 280501, + 279741, + 279746, + 279716, + 290069, + 280232, + 280155, + 280014, + 279737, + 291035, + 279886, + 279818, + 280094, + 149158, + 279976, + 290084, + 280198, + 280048, + 156000, + 279973, + 280169, + 280221, + 279961, + 280206, + 279938, + 280096, + 149173, + 280137, + 279723, + 280053, + 280194, + 280056, + 279984, + 155986, + 279755, + 280210, + 279946, + 279929, + 279957, + 280068, + 280116, + 279953, + 280165, + 279914, + 156027, + 280052, + 279843, + 279739, + 279965, + 279754, + 280062, + 280192, + 280262, + 279905, + 280676, + 280170, + 279922, + 279849, + 279820, + 279841, + 280154, + 280237, + 280141, + 279832, + 280191, + 280178, + 280044, + 279738, + 280126, + 279887, + 279958, + 148858, + 279897, + 279987, + 280083, + 279797, + 280390, + 280146, + 280125, + 279706, + 280026, + 280117, + 279894, + 279794, + 279839, + 280010, + 280076, + 279992, + 156013, + 279806, + 279782, + 279743, + 280389, + 279857, + 156023, + 280130, + 280024, + 280428, + 280641, + 280434, + 280592, + 156028, + 280319, + 280729, + 280427, + 280437, + 280725, + 280323, + 280438, + 280591, + 148884, + 280595, + 148872, + 280439, + 280426, + 148867, + 280318, + 148881, + 280254, + 280256, + 280724, + 280642, + 280440, + 280588, + 280730, + 280425, + 280441, + 148222, + 280317, + 280723, + 280596, + 280639, + 280442, + 280587, + 280324, + 280424, + 280443, + 280722, + 280316, + 280731, + 280423, + 280446, + 280643, + 280257, + 156004, + 280325, + 148859, + 280586, + 280597, + 280447, + 280422, + 156022, + 280721, + 280315, + 280448, + 280732, + 280253, + 280449, + 280720, + 280421, + 280585, + 280314, + 280450, + 280542, + 280418, + 280644, + 280258, + 280598, + 280638, + 280584, + 280353, + 280451, + 280719, + 280326, + 156014, + 156019, + 280313, + 280733, + 280452, + 280417, + 280453, + 280718, + 280414, + 280583, + 280454, + 280312, + 280599, + 280455, + 280327, + 280645, + 280717, + 280734, + 280259, + 280241, + 280546, + 149147, + 280252, + 280582, + 280456, + 280413, + 148223, + 148869, + 280412, + 280311, + 280457, + 280716, + 280600, + 280581, + 280637, + 280458, + 280310, + 280646, + 280735, + 280328, + 155994, + 280459, + 280260, + 280411, + 280715, + 280580, + 280410, + 280460, + 280763, + 149144, + 280714, + 280309, + 280601, + 280461, + 280736, + 280579, + 280548, + 280329, + 280409, + 280636, + 280462, + 280713, + 280465, + 280408, + 280647, + 280240, + 280737, + 280308, + 280578, + 280330, + 280466, + 280602, + 280712, + 149145, + 280407, + 280261, + 148889, + 156006, + 280467, + 280251, + 280307, + 280577, + 280468, + 280404, + 280711, + 280738, + 280469, + 280648, + 280470, + 280603, + 280403, + 280306, + 280576, + 280331, + 280710, + 280635, + 280543, + 280471, + 280622, + 149154, + 280761, + 149160, + 280739, + 280402, + 280305, + 280472, + 280400, + 280649, + 280575, + 280709, + 280604, + 280250, + 280264, + 280473, + 148229, + 280332, + 148877, + 280474, + 280574, + 148230, + 280740, + 280304, + 280399, + 280668, + 280708, + 280475, + 280398, + 280476, + 280707, + 280605, + 280650, + 280573, + 280303, + 280477, + 280634, + 280265, + 280741, + 280333, + 280396, + 280478, + 280706, + 149150, + 280572, + 280395, + 148876, + 280302, + 280479, + 280480, + 280606, + 280705, + 280651, + 280742, + 280571, + 280481, + 280394, + 148873, + 280334, + 280301, + 280249, + 280387, + 280266, + 149152, + 280482, + 280704, + 280743, + 280570, + 280607, + 280386, + 280483, + 280300, + 280484, + 280633, + 280703, + 280652, + 280569, + 280335, + 148863, + 280278, + 280485, + 280385, + 149170, + 280299, + 280267, + 280486, + 280702, + 280568, + 280608, + 280744, + 280384, + 280487, + 280701, + 280298, + 280488, + 280489, + 148225, + 280336, + 280248, + 280383, + 280653, + 280700, + 280567, + 280745, + 148228, + 280490, + 280609, + 280297, + 280382, + 280491, + 280699, + 280632, + 280566, + 280492, + 280337, + 280381, + 280268, + 155988, + 156002, + 280655, + 280493, + 280296, + 280565, + 148882, + 280698, + 280610, + 280746, + 280380, + 280494, + 148878, + 280295, + 280379, + 280495, + 280697, + 280564, + 280338, + 280498, + 280747, + 156018, + 280378, + 280499, + 280269, + 156015, + 280352, + 280294, + 280696, + 280611, + 280377, + 280656, + 280247, + 280631, + 280279, + 290932, + 280500, + 280503, + 280695, + 280293, + 280504, + 280339, + 280748, + 290931, + 280505, + 280376, + 280694, + 280612, + 280270, + 148887, + 280292, + 280657, + 280375, + 149171, + 280749, + 290930, + 280506, + 155984, + 280340, + 280374, + 280507, + 280693, + 155990, + 280508, + 280680, + 280350, + 280563, + 280613, + 280246, + 280667, + 280509, + 280630, + 280692, + 149174, + 280373, + 280658, + 280271, + 280750, + 280510, + 280679, + 280341, + 280562, + 280372, + 280511, + 280691, + 280614, + 280512, + 280678, + 280752, + 280371, + 290929, + 280513, + 280370, + 280690, + 280514, + 149143, + 280545, + 280342, + 280689, + 280677, + 280659, + 280753, + 155998, + 280369, + 280272, + 156011, + 280615, + 290928, + 280629, + 280515, + 280516, + 280368, + 280688, + 280660, + 280245, + 280561, + 280517, + 280290, + 280518, + 280343, + 280687, + 149162, + 280519, + 280616, + 280289, + 280754, + 280367, + 280560, + 280520, + 280366, + 280686, + 280273, + 280521, + 280755, + 280661, + 280559, + 280365, + 148868, + 280288, + 280344, + 156010, + 280522, + 280617, + 254109, + 280628, + 280544, + 280685, + 280523, + 280524, + 280364, + 280287, + 280558, + 280684, + 280242, + 280756, + 280274, + 149149, + 280345, + 280363, + 280527, + 280662, + 280557, + 280618, + 280362, + 162016, + 280528, + 280286, + 280683, + 280529, + 280757, + 280361, + 280530, + 280682, + 280556, + 280346, + 148885, + 280285, + 280360, + 280623, + 280531, + 280619, + 280627, + 280666, + 280663, + 280275, + 280532, + 280555, + 280762, + 280681, + 156016, + 280284, + 280533, + 148866, + 280758, + 280359, + 280534, + 280673, + 280554, + 280347, + 280535, + 280283, + 280620, + 280358, + 280536, + 280672, + 280624, + 280664, + 280276, + 148224, + 280759, + 280357, + 280553, + 156020, + 280348, + 280537, + 280356, + 280282, + 280538, + 280621, + 280671, + 280626, + 280552, + 280539, + 148226, + 280670, + 280281, + 280540, + 280760, + 280355, + 280547, + 280665, + 280551, + 280354, + 280541, + 156025, + 280669, + 280280, + 280351, + 280625, + 280277, + 280255, + 280349, + 280322, + 280430, + 280728, + 148862, + 280429, + 280593, + 280432, + 280727, + 280321, + 280594, + 280640, + 149166, + 280433, + 280726, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "6", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Undeposited Funds", + "id": 133664, + "is_enabled": True, + "name": "Undeposited Funds", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280758, + 280658, + 280335, + 280278, + 280569, + 280245, + 280340, + 280428, + 148223, + 280533, + 280308, + 280718, + 280686, + 280677, + 280530, + 280652, + 280359, + 280633, + 280491, + 280690, + 280382, + 280703, + 280515, + 280504, + 280423, + 280446, + 280715, + 280737, + 280484, + 280499, + 280300, + 280430, + 280273, + 148869, + 280614, + 148224, + 280297, + 280378, + 280246, + 280541, + 280556, + 280412, + 280483, + 280643, + 280593, + 280521, + 280627, + 280691, + 280438, + 280257, + 280260, + 280373, + 280607, + 280570, + 280411, + 280642, + 280251, + 280386, + 280591, + 280659, + 280467, + 156004, + 280311, + 280325, + 280755, + 280534, + 156018, + 148889, + 290932, + 280743, + 280704, + 280354, + 280661, + 280457, + 280647, + 280660, + 280276, + 280673, + 280349, + 148859, + 280358, + 280285, + 280551, + 280374, + 280509, + 280559, + 290929, + 280482, + 280459, + 155994, + 280465, + 280365, + 280717, + 149152, + 280408, + 280747, + 280631, + 280665, + 280507, + 280553, + 280266, + 280387, + 280663, + 280724, + 280554, + 280249, + 280656, + 280753, + 280414, + 280301, + 280586, + 280688, + 148881, + 148868, + 280546, + 280328, + 280597, + 280620, + 280588, + 280609, + 280288, + 280318, + 280427, + 280334, + 148862, + 280372, + 280447, + 280735, + 280734, + 280713, + 148873, + 280516, + 280344, + 280646, + 280310, + 280592, + 280492, + 280422, + 155998, + 280404, + 156010, + 280339, + 280347, + 149174, + 280481, + 280394, + 280716, + 280730, + 156022, + 280571, + 280762, + 280293, + 280261, + 280742, + 280407, + 280377, + 156028, + 280355, + 280369, + 280603, + 280522, + 280458, + 280728, + 280637, + 280581, + 280760, + 280275, + 280651, + 280705, + 280437, + 280535, + 156020, + 280561, + 280498, + 280600, + 280480, + 280721, + 280617, + 280566, + 280562, + 280664, + 280315, + 280259, + 280376, + 280283, + 280606, + 280448, + 148884, + 280490, + 280479, + 280302, + 280532, + 280338, + 254109, + 280322, + 280353, + 280547, + 280564, + 280350, + 280540, + 280270, + 148228, + 280726, + 280360, + 280628, + 280426, + 280582, + 148876, + 280395, + 280425, + 280441, + 280732, + 280572, + 280752, + 290931, + 280685, + 280695, + 280517, + 280312, + 149150, + 280555, + 280697, + 280625, + 280706, + 148222, + 280594, + 280599, + 280421, + 280290, + 280514, + 280478, + 280396, + 280462, + 280432, + 280523, + 280745, + 280341, + 280544, + 280567, + 280271, + 280253, + 280449, + 280636, + 280468, + 280333, + 280694, + 280630, + 280700, + 280241, + 280524, + 280255, + 149171, + 280281, + 280409, + 280653, + 280272, + 280611, + 280364, + 280383, + 280741, + 149166, + 149145, + 280648, + 280265, + 280634, + 280632, + 148867, + 280624, + 280495, + 280317, + 280287, + 280670, + 280455, + 280696, + 280693, + 280545, + 280477, + 280303, + 280489, + 148887, + 280248, + 280429, + 280343, + 280558, + 156011, + 280682, + 280573, + 280667, + 280505, + 280720, + 280723, + 280518, + 280602, + 280650, + 280585, + 280379, + 280681, + 280684, + 280596, + 280539, + 280577, + 280531, + 280605, + 280707, + 280329, + 280503, + 280687, + 280314, + 280450, + 280434, + 280579, + 280242, + 280294, + 280295, + 280641, + 280476, + 280398, + 280368, + 149147, + 280336, + 280639, + 280418, + 280763, + 280469, + 155990, + 280475, + 280708, + 148225, + 280399, + 280442, + 280508, + 280542, + 149143, + 280644, + 280756, + 280699, + 280488, + 280298, + 280552, + 148878, + 280274, + 280712, + 280736, + 149162, + 280258, + 280640, + 156016, + 149149, + 280583, + 280304, + 280678, + 280277, + 280679, + 280701, + 280307, + 280740, + 280668, + 280615, + 280598, + 280511, + 280327, + 148230, + 280574, + 280727, + 280345, + 280587, + 280513, + 280749, + 280363, + 280252, + 280279, + 280519, + 280666, + 280456, + 280324, + 280692, + 280689, + 280474, + 280626, + 280494, + 280748, + 280289, + 148877, + 280487, + 280384, + 280470, + 280649, + 280440, + 280284, + 280351, + 280439, + 280527, + 280371, + 290928, + 280671, + 280332, + 280323, + 148229, + 280744, + 280510, + 280461, + 280616, + 280466, + 280621, + 148872, + 280662, + 280268, + 280380, + 280319, + 280453, + 280256, + 280638, + 280292, + 280424, + 280557, + 280601, + 280473, + 280548, + 280608, + 280568, + 280264, + 280309, + 280584, + 280680, + 280612, + 280657, + 280618, + 280443, + 280357, + 280451, + 280604, + 280623, + 280709, + 280413, + 280746, + 280538, + 280575, + 280486, + 280247, + 280672, + 280240, + 280267, + 280719, + 280299, + 280400, + 280254, + 280326, + 280610, + 280754, + 280362, + 280714, + 148882, + 290930, + 156006, + 280698, + 280280, + 280472, + 280622, + 280305, + 156015, + 280402, + 280346, + 280367, + 156014, + 156019, + 162016, + 280337, + 280738, + 280506, + 280739, + 280250, + 280725, + 280563, + 280729, + 280352, + 280528, + 280381, + 280565, + 280282, + 280613, + 280342, + 149160, + 156002, + 149170, + 280370, + 280702, + 280313, + 280711, + 280316, + 280286, + 149144, + 280543, + 280619, + 280629, + 280733, + 280560, + 280512, + 280454, + 149154, + 280375, + 280356, + 280722, + 280385, + 280683, + 280595, + 280460, + 280759, + 280471, + 280635, + 280731, + 155984, + 280321, + 280710, + 280485, + 280296, + 148863, + 280537, + 280750, + 148866, + 280331, + 280761, + 148226, + 280529, + 280330, + 280578, + 280433, + 280576, + 280410, + 280669, + 280520, + 280306, + 155988, + 280493, + 280403, + 280269, + 148885, + 280348, + 280500, + 280757, + 280536, + 156025, + 280580, + 280417, + 280655, + 280645, + 280361, + 280366, + 280452, + 279742, + 279959, + 290068, + 149156, + 155987, + 280164, + 280072, + 280463, + 280079, + 280021, + 280184, + 279867, + 280088, + 279952, + 279899, + 279816, + 280212, + 280132, + 280099, + 279864, + 279822, + 280158, + 279784, + 280096, + 280192, + 156026, + 280228, + 280031, + 279908, + 279778, + 279803, + 280140, + 279733, + 280016, + 280445, + 148875, + 280525, + 279951, + 280009, + 280058, + 279775, + 280121, + 279989, + 280060, + 280183, + 279835, + 279960, + 279726, + 279909, + 280131, + 279717, + 279848, + 279845, + 279785, + 279754, + 148883, + 279815, + 279930, + 280193, + 279898, + 148886, + 280526, + 279738, + 279823, + 279753, + 280232, + 280048, + 279961, + 156027, + 280194, + 280141, + 279897, + 280125, + 280130, + 279724, + 279797, + 279950, + 280100, + 279927, + 279993, + 279868, + 279774, + 280210, + 279910, + 280182, + 279777, + 279824, + 280166, + 279734, + 280061, + 280027, + 280067, + 279708, + 279863, + 279962, + 246836, + 279857, + 280013, + 280095, + 279896, + 279786, + 280129, + 280142, + 279814, + 280549, + 280444, + 149172, + 280224, + 279949, + 280195, + 280390, + 279773, + 279911, + 280181, + 280081, + 279776, + 290065, + 280050, + 280040, + 280151, + 279745, + 279988, + 280160, + 280180, + 279926, + 279963, + 280143, + 280071, + 280075, + 280436, + 148871, + 279756, + 279711, + 279813, + 279844, + 280291, + 279948, + 280238, + 280233, + 155993, + 280112, + 280128, + 279931, + 279749, + 279825, + 280032, + 279912, + 279862, + 280044, + 280057, + 280196, + 280165, + 279787, + 280550, + 280144, + 279772, + 280388, + 280017, + 280435, + 279769, + 148870, + 280220, + 280101, + 279721, + 279994, + 280179, + 279869, + 279964, + 279727, + 279933, + 280084, + 279947, + 280127, + 280197, + 156007, + 279913, + 279812, + 280223, + 280106, + 155999, + 155991, + 279788, + 149146, + 280000, + 280004, + 279895, + 280145, + 279826, + 280393, + 290069, + 280094, + 279716, + 291035, + 280163, + 280198, + 280221, + 280070, + 279723, + 279929, + 280056, + 279946, + 155986, + 279843, + 279914, + 279977, + 280062, + 279965, + 279849, + 280026, + 280178, + 280126, + 279854, + 279987, + 279798, + 279894, + 280146, + 280076, + 279743, + 279882, + 280012, + 279771, + 279789, + 280177, + 279811, + 279768, + 280431, + 149148, + 279827, + 279966, + 279945, + 279893, + 280216, + 280234, + 280042, + 279870, + 280124, + 279915, + 280199, + 279750, + 280225, + 280589, + 279877, + 280147, + 280176, + 280006, + 279995, + 279764, + 279861, + 280038, + 279770, + 280033, + 279712, + 279810, + 280420, + 279967, + 280046, + 279892, + 280102, + 149159, + 149163, + 280018, + 279944, + 280082, + 280123, + 148861, + 149153, + 148865, + 279916, + 148888, + 279828, + 280200, + 148227, + 279763, + 279850, + 279790, + 280222, + 279836, + 280148, + 280590, + 280226, + 280175, + 279767, + 280093, + 280201, + 280419, + 280036, + 279986, + 280161, + 149167, + 279917, + 279943, + 279928, + 279707, + 279981, + 280235, + 279968, + 279809, + 280077, + 279880, + 155996, + 148890, + 280122, + 279735, + 280392, + 279891, + 148879, + 155997, + 280108, + 279701, + 279791, + 279740, + 156024, + 279713, + 280149, + 280001, + 279829, + 279918, + 280025, + 280654, + 279860, + 148874, + 280174, + 279758, + 279853, + 280227, + 279942, + 279871, + 280120, + 280214, + 279996, + 280202, + 280055, + 280173, + 279969, + 279808, + 279751, + 280150, + 280011, + 280219, + 279890, + 280211, + 279792, + 279757, + 279719, + 279766, + 280416, + 279838, + 280103, + 279830, + 279919, + 280092, + 279715, + 280119, + 279842, + 279941, + 280111, + 279889, + 280063, + 149175, + 279970, + 149155, + 279855, + 280243, + 280172, + 279881, + 280203, + 279732, + 280152, + 279985, + 279851, + 279807, + 280034, + 280086, + 280415, + 279878, + 280674, + 279920, + 279728, + 156001, + 280236, + 280047, + 156021, + 279744, + 279765, + 149164, + 279714, + 279802, + 148231, + 148864, + 279872, + 279852, + 279971, + 279940, + 279980, + 279888, + 279859, + 280118, + 280204, + 280104, + 149169, + 279831, + 279978, + 279793, + 280019, + 280069, + 148858, + 280244, + 280089, + 149151, + 280675, + 279997, + 280213, + 280153, + 280171, + 279979, + 280039, + 279982, + 280406, + 280218, + 280085, + 148860, + 280078, + 279762, + 280205, + 280091, + 155989, + 280066, + 279720, + 279921, + 149161, + 279939, + 279972, + 156013, + 280024, + 279806, + 279875, + 280010, + 280117, + 279794, + 279706, + 279887, + 279839, + 280237, + 279832, + 280154, + 279841, + 156023, + 279922, + 280170, + 280239, + 279737, + 280676, + 280262, + 279739, + 280116, + 280068, + 279984, + 279938, + 279755, + 280206, + 280169, + 279973, + 279886, + 290084, + 280022, + 279741, + 280043, + 280155, + 279833, + 279805, + 279858, + 279731, + 279873, + 279761, + 279752, + 280052, + 279795, + 280405, + 280207, + 280217, + 280109, + 279923, + 280064, + 279937, + 280115, + 279885, + 280110, + 280263, + 280168, + 279974, + 280159, + 149157, + 280105, + 280035, + 279998, + 279704, + 280156, + 280003, + 280054, + 279801, + 279730, + 280107, + 280020, + 279804, + 156005, + 280751, + 148880, + 279924, + 280045, + 280401, + 279729, + 280114, + 279760, + 280391, + 280320, + 280208, + 280008, + 279736, + 280090, + 279884, + 279703, + 279936, + 279975, + 280051, + 279837, + 280065, + 280167, + 279702, + 279840, + 279834, + 279796, + 279722, + 280157, + 280007, + 155985, + 156003, + 279718, + 279983, + 149173, + 280215, + 280087, + 280209, + 280188, + 279781, + 279819, + 280002, + 279846, + 280030, + 279956, + 280113, + 279904, + 279747, + 280080, + 280136, + 279901, + 280496, + 280397, + 280005, + 279799, + 280015, + 280497, + 279955, + 279725, + 280073, + 279991, + 290067, + 156012, + 279935, + 280135, + 280189, + 279903, + 279759, + 280230, + 280059, + 280162, + 280041, + 280187, + 280098, + 280083, + 279782, + 279820, + 280053, + 279905, + 279957, + 280137, + 279818, + 156000, + 149158, + 155995, + 280501, + 279954, + 280190, + 280134, + 279925, + 280029, + 279865, + 279780, + 279866, + 279902, + 279705, + 279906, + 280023, + 155992, + 279710, + 280097, + 279990, + 156008, + 149165, + 279879, + 279783, + 280074, + 279883, + 280138, + 280186, + 279821, + 280464, + 279709, + 279700, + 279817, + 280229, + 279800, + 279958, + 279953, + 279847, + 280014, + 279746, + 280133, + 279900, + 279874, + 279907, + 280028, + 279779, + 279932, + 280389, + 149168, + 280231, + 279856, + 280185, + 280191, + 279934, + 279999, + 279876, + 280139, + 279748, + 279992, + 280037, + 280049, + 280502, + 279976, + 156009, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "12200", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Allowance For Doubtful Accounts", + "id": 133665, + "is_enabled": True, + "name": "Allowance For Doubtful Accounts", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "9", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Other Receivables", + "id": 133666, + "is_enabled": True, + "name": "Other Receivables", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280731, + 280694, + 280376, + 280505, + 290929, + 280545, + 280748, + 280752, + 280371, + 280588, + 290931, + 280504, + 280339, + 280293, + 280695, + 280503, + 280500, + 280370, + 290932, + 280513, + 280631, + 280247, + 280656, + 280611, + 280440, + 280514, + 280696, + 149143, + 280689, + 280294, + 156015, + 280377, + 280342, + 280642, + 280269, + 280677, + 280499, + 280279, + 280378, + 156018, + 280747, + 280753, + 155998, + 280434, + 280369, + 280498, + 280338, + 280659, + 280564, + 280697, + 280495, + 280272, + 156011, + 280728, + 148882, + 280379, + 280295, + 148878, + 280494, + 280615, + 290928, + 280380, + 280746, + 280610, + 280698, + 280629, + 280565, + 280493, + 280655, + 280515, + 155988, + 280268, + 280381, + 148862, + 280516, + 280368, + 280337, + 280296, + 280492, + 280688, + 280566, + 280632, + 280699, + 280491, + 280245, + 280724, + 280352, + 280297, + 280490, + 280660, + 280609, + 280561, + 148228, + 280382, + 280745, + 280517, + 280290, + 280429, + 280567, + 156002, + 280653, + 280700, + 280383, + 280489, + 280343, + 280518, + 280687, + 280248, + 280336, + 148225, + 280488, + 149162, + 280298, + 280701, + 280487, + 280256, + 280519, + 280289, + 280384, + 280744, + 280616, + 280608, + 280568, + 280486, + 280267, + 280754, + 280367, + 280299, + 149170, + 280560, + 280254, + 280702, + 280385, + 280485, + 148863, + 280335, + 280520, + 280366, + 280569, + 280652, + 280686, + 280593, + 280633, + 280703, + 280484, + 280278, + 280273, + 280300, + 280483, + 280521, + 280607, + 280570, + 280386, + 280743, + 280755, + 280661, + 280704, + 280482, + 280559, + 148881, + 280365, + 149152, + 280266, + 280387, + 280249, + 280334, + 148868, + 280288, + 280301, + 148873, + 280344, + 156010, + 280318, + 280481, + 280394, + 280742, + 280571, + 280651, + 280522, + 280685, + 280705, + 280480, + 280617, + 280606, + 280479, + 280439, + 254109, + 280302, + 148876, + 280628, + 280395, + 280641, + 280572, + 149150, + 280706, + 280478, + 280523, + 280396, + 280333, + 280741, + 280524, + 280364, + 280432, + 280265, + 280634, + 280287, + 280477, + 280303, + 280558, + 280426, + 280573, + 280650, + 280684, + 280605, + 280707, + 280242, + 280476, + 280398, + 280475, + 280544, + 280399, + 280708, + 280756, + 280727, + 280274, + 149149, + 280740, + 280304, + 148230, + 280363, + 280574, + 280474, + 280649, + 280668, + 148877, + 280332, + 280527, + 148229, + 280622, + 280662, + 280473, + 280557, + 280264, + 280604, + 148872, + 280618, + 280709, + 280345, + 280575, + 280543, + 280362, + 280400, + 280472, + 280402, + 280739, + 280250, + 280595, + 280528, + 149160, + 162016, + 280286, + 280305, + 149154, + 280683, + 280471, + 280635, + 280710, + 280331, + 280529, + 280576, + 280306, + 280403, + 280321, + 280757, + 280361, + 280603, + 280470, + 280648, + 280469, + 280530, + 280682, + 280738, + 280711, + 280556, + 280404, + 280468, + 280285, + 280761, + 280577, + 280307, + 280346, + 148885, + 280591, + 280467, + 280349, + 148889, + 280261, + 280360, + 149145, + 280251, + 280602, + 280438, + 280531, + 280712, + 280466, + 280407, + 156006, + 280330, + 280619, + 280578, + 280763, + 280737, + 280627, + 280308, + 280647, + 280465, + 280323, + 280663, + 280408, + 280713, + 280462, + 280275, + 280532, + 280555, + 280636, + 280409, + 280329, + 280681, + 280594, + 280579, + 280736, + 156016, + 280284, + 280461, + 280601, + 280309, + 280714, + 149144, + 280460, + 148866, + 280410, + 280758, + 280359, + 280725, + 280580, + 280715, + 280666, + 280533, + 280260, + 280548, + 280411, + 280534, + 280673, + 280459, + 155994, + 280554, + 280437, + 280328, + 280735, + 280646, + 280310, + 280458, + 280600, + 280535, + 280283, + 280581, + 280716, + 280620, + 280347, + 280358, + 280457, + 280311, + 280240, + 280412, + 148869, + 280623, + 148223, + 280259, + 280427, + 280536, + 148226, + 280672, + 280456, + 280762, + 280252, + 149147, + 280637, + 280624, + 280582, + 280353, + 280413, + 280664, + 280734, + 280717, + 280276, + 148224, + 149166, + 280455, + 280645, + 280759, + 280357, + 280640, + 280327, + 280599, + 280546, + 280312, + 280553, + 280454, + 280583, + 280414, + 156020, + 280718, + 280453, + 280452, + 280417, + 280428, + 280348, + 280729, + 280537, + 280356, + 280733, + 280313, + 156019, + 280625, + 280282, + 156014, + 280671, + 280326, + 280719, + 148884, + 280451, + 280584, + 280542, + 280621, + 280538, + 280626, + 280319, + 280638, + 280598, + 280547, + 280258, + 280644, + 280552, + 280450, + 280418, + 280314, + 280585, + 280241, + 280720, + 280539, + 280670, + 280449, + 280281, + 280253, + 280421, + 280732, + 280448, + 156028, + 280315, + 280721, + 280760, + 280355, + 148867, + 156022, + 280540, + 280422, + 280447, + 280597, + 280665, + 280551, + 280592, + 280586, + 148859, + 280325, + 280354, + 156004, + 280257, + 280643, + 280446, + 280541, + 280423, + 156025, + 280669, + 280722, + 280280, + 280316, + 280443, + 280424, + 280433, + 280351, + 280324, + 280587, + 280277, + 280442, + 280639, + 280596, + 280723, + 280317, + 280726, + 148222, + 280441, + 280322, + 280255, + 149174, + 280373, + 280692, + 280509, + 280667, + 280630, + 280658, + 280246, + 280425, + 280271, + 280613, + 280750, + 280563, + 280680, + 280510, + 280679, + 280730, + 280508, + 155990, + 280341, + 280693, + 280507, + 280562, + 280372, + 280374, + 280340, + 155984, + 280506, + 280350, + 280749, + 290930, + 280511, + 280691, + 280375, + 149171, + 280657, + 280292, + 148887, + 280270, + 280614, + 280430, + 280512, + 280690, + 280678, + 280612, + 280141, + 280044, + 280046, + 280045, + 156026, + 279854, + 280238, + 279852, + 279858, + 290084, + 280237, + 279859, + 156021, + 280236, + 279851, + 279860, + 148879, + 280235, + 279850, + 279861, + 280234, + 279849, + 279862, + 155993, + 280233, + 279863, + 156027, + 280232, + 279848, + 279864, + 149156, + 280231, + 279847, + 279865, + 280230, + 279846, + 279866, + 156012, + 280229, + 149168, + 279867, + 280228, + 279845, + 279868, + 279856, + 246836, + 280224, + 279844, + 279869, + 280223, + 155986, + 279843, + 279870, + 280222, + 155997, + 279871, + 280219, + 279842, + 279872, + 149151, + 280218, + 279841, + 279873, + 280217, + 279703, + 279840, + 279874, + 280216, + 279704, + 279875, + 280215, + 279839, + 279877, + 279713, + 280214, + 279838, + 279878, + 280213, + 279715, + 279837, + 279880, + 280212, + 279720, + 279881, + 280211, + 279836, + 279882, + 279721, + 280210, + 279835, + 279883, + 280209, + 279722, + 279834, + 279884, + 280208, + 279730, + 279885, + 280207, + 279833, + 279886, + 279741, + 280206, + 279832, + 279887, + 280205, + 279742, + 280204, + 279831, + 279888, + 279744, + 280203, + 279889, + 279830, + 279757, + 279890, + 280202, + 279829, + 279891, + 280201, + 279763, + 280200, + 279828, + 279892, + 279764, + 280199, + 279893, + 279827, + 279768, + 279894, + 280198, + 279826, + 279895, + 280197, + 279769, + 280196, + 279825, + 280291, + 279773, + 280195, + 279896, + 279824, + 279774, + 279897, + 280194, + 279823, + 279898, + 280193, + 279775, + 280192, + 279822, + 279899, + 279876, + 280191, + 279900, + 279821, + 279879, + 279902, + 280190, + 279820, + 279903, + 280189, + 279901, + 280188, + 279819, + 279904, + 279935, + 280187, + 279905, + 279818, + 280029, + 279906, + 280186, + 279817, + 279907, + 280185, + 280037, + 280184, + 279816, + 279908, + 280121, + 280183, + 279909, + 279815, + 280125, + 279910, + 280182, + 280181, + 279814, + 279911, + 280151, + 280180, + 279813, + 279912, + 280220, + 280179, + 279913, + 290065, + 279812, + 279914, + 280178, + 280221, + 280177, + 279811, + 279915, + 280225, + 280176, + 279810, + 279916, + 280226, + 280175, + 279917, + 279809, + 279918, + 280174, + 280227, + 280173, + 279808, + 279919, + 280243, + 280172, + 279807, + 279920, + 280244, + 280171, + 279921, + 279806, + 279922, + 280170, + 280262, + 280169, + 279805, + 279923, + 280263, + 280168, + 279804, + 279924, + 280320, + 280167, + 279925, + 279803, + 280166, + 279926, + 280388, + 280165, + 279802, + 279927, + 280389, + 280164, + 279801, + 279928, + 280390, + 280163, + 279929, + 279800, + 280162, + 279930, + 280391, + 280161, + 279799, + 279931, + 280392, + 280160, + 279932, + 280393, + 279798, + 280159, + 279933, + 279797, + 280158, + 279934, + 280397, + 280157, + 279796, + 279936, + 280401, + 280156, + 279937, + 280405, + 279795, + 280155, + 279938, + 280154, + 279794, + 279939, + 280406, + 280153, + 279793, + 279940, + 280415, + 280152, + 279853, + 279941, + 280416, + 279792, + 280150, + 279942, + 280149, + 279791, + 279943, + 280419, + 280148, + 279790, + 279944, + 280420, + 280147, + 279945, + 280431, + 279789, + 280146, + 279946, + 280145, + 279788, + 279947, + 280435, + 280144, + 279787, + 279948, + 280436, + 280143, + 279949, + 280444, + 280142, + 279786, + 279950, + 279785, + 279951, + 280445, + 280140, + 279784, + 279952, + 280463, + 280139, + 279953, + 280464, + 280138, + 279783, + 279954, + 280137, + 279782, + 279955, + 280496, + 280136, + 279781, + 279956, + 280497, + 280135, + 279957, + 280501, + 280134, + 279780, + 279958, + 280133, + 279779, + 279959, + 280502, + 280132, + 279778, + 279960, + 280525, + 280131, + 280526, + 279961, + 280130, + 279777, + 279962, + 280129, + 280549, + 279776, + 279963, + 280128, + 280550, + 279772, + 279964, + 280127, + 291035, + 279965, + 280126, + 279771, + 279966, + 280124, + 280589, + 279770, + 279967, + 280123, + 280590, + 279767, + 279968, + 280122, + 280654, + 280120, + 279969, + 279766, + 280119, + 279970, + 280674, + 279765, + 279971, + 280118, + 280675, + 279762, + 280117, + 279972, + 280116, + 279973, + 280676, + 279761, + 280115, + 279974, + 280751, + 280114, + 279760, + 279975, + 155985, + 280113, + 279759, + 279976, + 280112, + 279977, + 149148, + 279758, + 280111, + 279978, + 156023, + 280110, + 279756, + 279979, + 279855, + 156007, + 280109, + 279755, + 279980, + 280108, + 279981, + 149164, + 280107, + 279754, + 279982, + 149163, + 280106, + 279753, + 279983, + 156005, + 280105, + 279752, + 279984, + 280104, + 279985, + 149175, + 280103, + 279751, + 279986, + 148861, + 280102, + 279750, + 279987, + 155991, + 280101, + 279749, + 279988, + 280100, + 279989, + 148875, + 280099, + 279748, + 279990, + 156000, + 280098, + 279747, + 279991, + 149158, + 280097, + 279746, + 279992, + 280096, + 148886, + 279993, + 280095, + 279745, + 279994, + 155999, + 280094, + 279743, + 279995, + 148865, + 280093, + 279740, + 279996, + 280092, + 148231, + 279997, + 280091, + 279739, + 279998, + 148880, + 280090, + 279738, + 279999, + 148870, + 280089, + 279737, + 280000, + 280088, + 149155, + 280001, + 280087, + 279736, + 280002, + 149169, + 280086, + 279735, + 280003, + 148860, + 280085, + 280004, + 280084, + 279734, + 155992, + 280005, + 280083, + 279733, + 280006, + 149159, + 280082, + 279732, + 280007, + 149172, + 280081, + 280008, + 280080, + 279731, + 149153, + 280009, + 280079, + 279729, + 280010, + 156013, + 280078, + 279728, + 280011, + 148874, + 280077, + 280012, + 280076, + 279727, + 148871, + 280075, + 280013, + 279726, + 155987, + 280014, + 279857, + 280074, + 290067, + 280073, + 279725, + 280015, + 290068, + 280072, + 280016, + 279724, + 280071, + 280017, + 290069, + 280070, + 279723, + 280018, + 279719, + 280019, + 280069, + 149161, + 280068, + 280020, + 279718, + 156003, + 280067, + 280021, + 149173, + 279717, + 280022, + 280066, + 279716, + 280023, + 280065, + 149157, + 280064, + 280024, + 148864, + 279714, + 280063, + 280025, + 148888, + 279712, + 280026, + 280062, + 279711, + 280027, + 280061, + 148883, + 280060, + 280028, + 156008, + 279710, + 280059, + 280030, + 149165, + 279709, + 280031, + 280058, + 280057, + 279708, + 280032, + 149146, + 280056, + 280033, + 149167, + 279707, + 280055, + 280034, + 155989, + 279706, + 280035, + 280054, + 280239, + 280053, + 279705, + 280036, + 148227, + 280052, + 280038, + 155995, + 279702, + 280051, + 280039, + 156024, + 279701, + 280040, + 280050, + 280049, + 279700, + 280041, + 156009, + 280048, + 280042, + 155996, + 148890, + 280047, + 280043, + 156001, + 148858, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "12500", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Employee Advances", + "id": 133667, + "is_enabled": True, + "name": "Employee Advances", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": None, + "sub_category": None, + "system_category": None, + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "code": "12", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Prepaid Expenses", + "id": 133668, + "is_enabled": True, + "name": "Prepaid Expenses", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280608, + 280240, + 280241, + 280242, + 280245, + 280246, + 280247, + 280248, + 280249, + 280250, + 280251, + 280252, + 280253, + 280254, + 280255, + 280256, + 280257, + 280258, + 280259, + 280260, + 280261, + 280264, + 280265, + 280266, + 280267, + 280268, + 280269, + 280270, + 280271, + 280272, + 280273, + 280274, + 280275, + 280276, + 280277, + 280278, + 280279, + 280280, + 280281, + 280282, + 280283, + 280284, + 280285, + 280286, + 280287, + 280288, + 280289, + 280290, + 280677, + 280678, + 280679, + 280680, + 280292, + 280293, + 280294, + 280295, + 280296, + 280297, + 280298, + 280299, + 280300, + 280301, + 280302, + 280303, + 280304, + 280305, + 280306, + 280307, + 280308, + 280309, + 280310, + 280311, + 280312, + 280313, + 280314, + 280315, + 280316, + 280317, + 280318, + 280319, + 280321, + 280322, + 280323, + 280324, + 280325, + 280326, + 280327, + 280328, + 280329, + 280330, + 280331, + 280332, + 280333, + 280334, + 280335, + 280336, + 280337, + 280338, + 280339, + 280340, + 280341, + 280342, + 280343, + 280344, + 280345, + 280346, + 280347, + 280348, + 280349, + 280350, + 280351, + 280352, + 280353, + 280354, + 280355, + 280356, + 280357, + 280358, + 280359, + 280360, + 280361, + 280362, + 280363, + 280364, + 280365, + 280366, + 280367, + 280368, + 280369, + 280370, + 280371, + 280372, + 280373, + 280374, + 280375, + 280376, + 280377, + 280378, + 280379, + 280380, + 280381, + 280382, + 280383, + 280384, + 280385, + 280386, + 280387, + 280394, + 280395, + 280396, + 280398, + 280399, + 280400, + 280402, + 280403, + 280404, + 280407, + 280408, + 280409, + 280410, + 280411, + 280412, + 280413, + 280414, + 280417, + 280418, + 280421, + 280422, + 280423, + 280424, + 280425, + 280426, + 280427, + 280428, + 280429, + 280430, + 280432, + 280433, + 280434, + 280437, + 280438, + 280439, + 280440, + 280441, + 280442, + 280443, + 280446, + 280447, + 280448, + 280449, + 280450, + 280451, + 280452, + 280453, + 280454, + 280455, + 280456, + 280457, + 280458, + 280459, + 280460, + 280461, + 280462, + 280465, + 280466, + 280467, + 280468, + 280469, + 280470, + 280471, + 280472, + 280473, + 280474, + 280475, + 280476, + 280477, + 280478, + 280479, + 280480, + 280481, + 280482, + 280483, + 280484, + 280485, + 280486, + 280487, + 280488, + 280489, + 280490, + 280491, + 280492, + 280493, + 280494, + 280495, + 280498, + 280499, + 280500, + 280503, + 280504, + 280505, + 280506, + 280507, + 280508, + 280509, + 280510, + 280511, + 280512, + 280513, + 280514, + 280515, + 280516, + 280517, + 280518, + 280519, + 280520, + 280521, + 280522, + 280523, + 280524, + 280527, + 280528, + 280529, + 280530, + 280531, + 280532, + 280533, + 280534, + 280535, + 280536, + 280537, + 280538, + 280539, + 280540, + 280541, + 280542, + 280543, + 280544, + 280545, + 280546, + 280547, + 280548, + 280551, + 280552, + 280553, + 280554, + 280555, + 280556, + 280557, + 280558, + 280559, + 280560, + 280561, + 290928, + 290929, + 280562, + 280563, + 290930, + 290931, + 290932, + 280564, + 280565, + 280566, + 280567, + 280568, + 280569, + 280570, + 280571, + 280572, + 280573, + 280574, + 280575, + 280576, + 280577, + 280578, + 280579, + 280580, + 280581, + 280582, + 280583, + 280584, + 280585, + 280586, + 280587, + 280588, + 280591, + 280592, + 280593, + 280594, + 280595, + 280596, + 280597, + 280598, + 280599, + 280600, + 280601, + 280602, + 280603, + 280604, + 280605, + 280606, + 280607, + 280609, + 280610, + 280611, + 280612, + 280613, + 280614, + 280615, + 280616, + 280617, + 280618, + 280619, + 280620, + 280621, + 280622, + 280623, + 280624, + 280625, + 280626, + 280627, + 280628, + 280629, + 280630, + 280631, + 280632, + 280633, + 280634, + 280635, + 280636, + 280637, + 280638, + 280639, + 280640, + 280641, + 280642, + 280643, + 280644, + 280645, + 280646, + 280647, + 280648, + 280649, + 280650, + 280651, + 280652, + 280653, + 280655, + 280656, + 280657, + 280658, + 280659, + 280660, + 280661, + 280662, + 280663, + 280664, + 280665, + 280666, + 280667, + 280668, + 280669, + 280670, + 280671, + 280672, + 280673, + 280681, + 280682, + 280683, + 280684, + 280685, + 280686, + 280687, + 280688, + 280689, + 280690, + 280691, + 280692, + 280693, + 280694, + 280695, + 280696, + 280697, + 280698, + 280699, + 280700, + 280701, + 280702, + 280703, + 280704, + 280705, + 280706, + 280707, + 280708, + 280709, + 280710, + 280711, + 280712, + 280713, + 280714, + 280715, + 280716, + 280717, + 280718, + 280719, + 280720, + 280721, + 280722, + 280723, + 280724, + 280725, + 280726, + 280727, + 280728, + 280729, + 280730, + 280731, + 280732, + 280733, + 280734, + 280735, + 280736, + 280737, + 280738, + 280739, + 280740, + 280741, + 280742, + 280743, + 280744, + 280745, + 280746, + 280747, + 280748, + 280749, + 280750, + 280752, + 280753, + 280754, + 280755, + 280756, + 280757, + 280758, + 280759, + 280760, + 280761, + 280762, + 280763, + 148226, + 148885, + 156010, + 155998, + 155990, + 156018, + 156002, + 148863, + 149150, + 148877, + 156006, + 155994, + 156014, + 148859, + 148872, + 148862, + 156028, + 148222, + 156022, + 156019, + 148223, + 149144, + 149145, + 149154, + 148230, + 148876, + 148873, + 149170, + 148228, + 148878, + 156015, + 148887, + 149174, + 149143, + 149162, + 148868, + 162016, + 156016, + 156020, + 156025, + 148882, + 148884, + 148224, + 149149, + 156011, + 149171, + 155988, + 149152, + 148229, + 148889, + 148869, + 156004, + 149166, + 148881, + 149147, + 149160, + 148225, + 155984, + 254109, + 148866, + 148867, + 280091, + 279981, + 280108, + 280117, + 280200, + 280239, + 279908, + 280020, + 279828, + 280090, + 290067, + 279816, + 280150, + 279892, + 279996, + 279762, + 280033, + 279764, + 280078, + 279858, + 280184, + 280037, + 280185, + 279740, + 279980, + 279755, + 279783, + 280044, + 280028, + 280135, + 280199, + 279893, + 156013, + 280109, + 279972, + 279907, + 279827, + 279768, + 280008, + 279817, + 279863, + 279894, + 280010, + 279957, + 280186, + 280056, + 280401, + 156008, + 280116, + 280198, + 156027, + 280043, + 279973, + 156021, + 280080, + 280238, + 279826, + 279895, + 279710, + 156001, + 279906, + 280029, + 280093, + 156007, + 280018, + 149146, + 279936, + 280197, + 279789, + 280676, + 279979, + 279756, + 279818, + 279769, + 279905, + 280187, + 280048, + 280196, + 280110, + 280059, + 290084, + 279731, + 279796, + 279761, + 279935, + 280501, + 280032, + 279825, + 280291, + 280115, + 279773, + 280146, + 279974, + 280232, + 156023, + 279855, + 279904, + 279819, + 279848, + 280195, + 280188, + 279978, + 279758, + 280751, + 279859, + 279896, + 279864, + 280030, + 279901, + 279824, + 280157, + 280111, + 279718, + 279729, + 279708, + 280189, + 279903, + 280057, + 149156, + 279774, + 279820, + 149153, + 279954, + 280114, + 279897, + 280190, + 279760, + 280134, + 280194, + 279975, + 148880, + 279902, + 279823, + 280088, + 279879, + 280397, + 280079, + 279898, + 149165, + 280237, + 155985, + 149148, + 279709, + 279734, + 280193, + 279775, + 279821, + 279900, + 279792, + 279977, + 280112, + 280113, + 280058, + 280191, + 279876, + 280000, + 279759, + 279780, + 280031, + 279976, + 280192, + 279851, + 279899, + 280009, + 148865, + 279822, + 156009, + 279934, + 280463, + 280231, + 280235, + 280074, + 279995, + 279743, + 149155, + 279946, + 279847, + 279865, + 280419, + 279797, + 280158, + 280045, + 280094, + 279719, + 156003, + 155987, + 280041, + 280067, + 279723, + 280230, + 279933, + 279852, + 280004, + 280416, + 280014, + 279846, + 279866, + 280159, + 156012, + 280137, + 279958, + 280393, + 280021, + 290068, + 155999, + 280229, + 279700, + 279952, + 279932, + 155996, + 280133, + 280084, + 280049, + 279784, + 279867, + 280139, + 279798, + 280001, + 280160, + 279779, + 279941, + 279994, + 279745, + 149168, + 279959, + 280392, + 280228, + 280095, + 280070, + 280502, + 279931, + 279944, + 279845, + 279868, + 280152, + 279799, + 280161, + 246836, + 279782, + 279717, + 280132, + 280042, + 280391, + 280224, + 280050, + 290069, + 279930, + 279778, + 279960, + 279993, + 148886, + 280096, + 280140, + 280162, + 279800, + 280040, + 279726, + 148890, + 279844, + 279869, + 279955, + 149173, + 279856, + 280525, + 279997, + 279861, + 279929, + 279992, + 279746, + 280415, + 279735, + 280223, + 155986, + 280163, + 280390, + 280097, + 280145, + 280022, + 155992, + 280131, + 279843, + 279870, + 279857, + 279961, + 280066, + 156026, + 279928, + 280222, + 155997, + 280016, + 279701, + 280464, + 280526, + 279801, + 280164, + 280389, + 279940, + 156024, + 280130, + 279871, + 279927, + 149158, + 279802, + 148860, + 280219, + 279777, + 280165, + 279788, + 279991, + 279747, + 279962, + 279716, + 279842, + 279872, + 279947, + 280086, + 280005, + 280420, + 280013, + 149151, + 279793, + 280388, + 279926, + 280039, + 280098, + 280166, + 279803, + 280083, + 280435, + 279790, + 280129, + 280218, + 280549, + 279925, + 280019, + 279841, + 279873, + 280023, + 280015, + 280217, + 279776, + 156000, + 279703, + 279854, + 279963, + 280167, + 280051, + 279943, + 280065, + 280075, + 148879, + 280017, + 279990, + 279748, + 280320, + 279924, + 280496, + 279840, + 279874, + 280099, + 280445, + 279804, + 149169, + 148871, + 280216, + 279704, + 280168, + 279702, + 280263, + 149157, + 280064, + 280069, + 155995, + 148858, + 279875, + 280089, + 280144, + 279733, + 280128, + 148875, + 280550, + 279923, + 279853, + 280215, + 279805, + 280169, + 279772, + 279791, + 279989, + 280100, + 280153, + 279964, + 279839, + 279877, + 280406, + 280262, + 279727, + 280038, + 279951, + 279713, + 279922, + 280170, + 279785, + 279988, + 279749, + 280147, + 279806, + 148870, + 280024, + 280214, + 280156, + 280127, + 279850, + 279838, + 280101, + 280234, + 279878, + 291035, + 279921, + 279787, + 280213, + 279715, + 279965, + 280171, + 280244, + 155991, + 280052, + 279948, + 280126, + 148864, + 279837, + 279714, + 280136, + 279987, + 279750, + 280076, + 279920, + 279880, + 279807, + 148227, + 280006, + 280141, + 279860, + 280012, + 280172, + 280243, + 280436, + 280212, + 279720, + 280149, + 280102, + 279939, + 280002, + 279771, + 279881, + 149159, + 280063, + 280046, + 279919, + 280211, + 279966, + 280236, + 279794, + 280036, + 279836, + 279808, + 280173, + 280082, + 279882, + 280071, + 280124, + 279721, + 279942, + 280589, + 280227, + 279781, + 280210, + 280174, + 280025, + 148861, + 279918, + 279835, + 279883, + 279956, + 279809, + 279917, + 280143, + 279986, + 279751, + 279737, + 279705, + 279770, + 280053, + 279949, + 280103, + 280072, + 279967, + 280175, + 280226, + 279916, + 280209, + 279722, + 280123, + 280154, + 279834, + 280590, + 148888, + 279712, + 149175, + 279884, + 279810, + 280208, + 279730, + 279724, + 280176, + 280054, + 279739, + 279767, + 279732, + 280497, + 280225, + 279999, + 279968, + 280085, + 279985, + 280104, + 149161, + 290065, + 279915, + 279945, + 280035, + 279950, + 279885, + 279811, + 280207, + 280122, + 279833, + 280077, + 279998, + 279786, + 279984, + 279752, + 279953, + 280177, + 279738, + 279886, + 280068, + 280221, + 279741, + 280105, + 280138, + 280178, + 280026, + 148874, + 280444, + 280206, + 279832, + 279887, + 280142, + 280062, + 280120, + 279914, + 156005, + 279706, + 279938, + 279812, + 280007, + 280011, + 279849, + 155989, + 279969, + 279913, + 280205, + 279742, + 280179, + 280654, + 279725, + 279983, + 279753, + 280220, + 280087, + 279912, + 280155, + 280204, + 279711, + 149172, + 279813, + 280431, + 279831, + 279888, + 148231, + 279766, + 279744, + 280180, + 280119, + 280034, + 279970, + 280047, + 280092, + 280081, + 280151, + 280148, + 280106, + 279795, + 279911, + 280203, + 279889, + 280674, + 279814, + 280405, + 279830, + 279890, + 279728, + 280181, + 279862, + 149163, + 279757, + 280027, + 280055, + 280061, + 279736, + 280125, + 280073, + 279982, + 279754, + 280182, + 279910, + 155993, + 280202, + 279815, + 279829, + 280107, + 279765, + 279891, + 279937, + 279971, + 279707, + 148883, + 279909, + 280118, + 149167, + 280675, + 280183, + 149164, + 280233, + 280201, + 279763, + 280060, + 280121, + 280003, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "14", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Note Receivable-Current", + "id": 133669, + "is_enabled": True, + "name": "Note Receivable-Current", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 279932, + 280139, + 280042, + 279790, + 280018, + 290068, + 279944, + 280420, + 280147, + 280072, + 279945, + 279857, + 280431, + 280146, + 279789, + 280463, + 279946, + 279723, + 279952, + 279784, + 279997, + 280070, + 290069, + 280140, + 280145, + 280016, + 279788, + 279947, + 280435, + 280017, + 280445, + 280144, + 280234, + 279951, + 279785, + 279787, + 279948, + 280141, + 280436, + 280071, + 280143, + 279949, + 279724, + 156026, + 279950, + 279786, + 279849, + 280142, + 280444, + 148231, + 280092, + 279862, + 155993, + 280233, + 279996, + 279740, + 279848, + 279863, + 156027, + 280093, + 280088, + 280048, + 280232, + 279864, + 149156, + 279734, + 156009, + 148865, + 280231, + 279995, + 279743, + 279847, + 279865, + 280094, + 149155, + 280041, + 280230, + 279846, + 280004, + 279866, + 156012, + 280229, + 155999, + 279700, + 280084, + 279852, + 280049, + 279867, + 279994, + 279745, + 280001, + 149168, + 280228, + 280095, + 279845, + 279868, + 246836, + 280224, + 280050, + 279993, + 148886, + 280096, + 280040, + 279844, + 279869, + 280223, + 279735, + 279992, + 279746, + 155986, + 279856, + 280097, + 155992, + 279843, + 279870, + 279858, + 280222, + 155997, + 279701, + 156024, + 279871, + 149158, + 280219, + 279991, + 279747, + 279842, + 279872, + 280005, + 280086, + 149151, + 280039, + 280083, + 280218, + 280098, + 279841, + 279873, + 280217, + 156000, + 279703, + 280051, + 279990, + 279748, + 149169, + 279840, + 279874, + 280099, + 280216, + 279704, + 279702, + 155995, + 279875, + 279737, + 279733, + 148875, + 280215, + 279839, + 279989, + 280100, + 279877, + 280038, + 148858, + 279713, + 148870, + 279988, + 279749, + 280214, + 279838, + 280101, + 279878, + 280213, + 279715, + 155991, + 280052, + 279837, + 279987, + 279750, + 279880, + 148227, + 280006, + 280002, + 280212, + 279720, + 280102, + 149159, + 279881, + 280211, + 280036, + 279836, + 280082, + 279882, + 279721, + 280210, + 148861, + 279835, + 279883, + 280087, + 279986, + 279751, + 279705, + 280053, + 280103, + 280209, + 279722, + 279834, + 149175, + 279884, + 280208, + 279730, + 279999, + 279732, + 280054, + 279985, + 280104, + 280035, + 280207, + 279885, + 279833, + 279984, + 279752, + 279886, + 279741, + 280105, + 279738, + 280206, + 279832, + 279887, + 156005, + 279706, + 280007, + 155989, + 280205, + 279742, + 279983, + 279753, + 280204, + 149172, + 279831, + 279888, + 279744, + 280034, + 280081, + 280203, + 280106, + 279889, + 279830, + 279890, + 279736, + 149163, + 279757, + 280055, + 279982, + 279754, + 280202, + 279829, + 280107, + 279891, + 279707, + 149167, + 149164, + 280201, + 279763, + 279981, + 280200, + 279828, + 279731, + 280108, + 280090, + 279892, + 280033, + 279764, + 279980, + 279755, + 280199, + 279893, + 280109, + 279827, + 280008, + 280043, + 279894, + 279768, + 280056, + 280198, + 279826, + 280080, + 279895, + 156007, + 149146, + 280239, + 280197, + 280044, + 279979, + 279756, + 279769, + 280196, + 280110, + 280238, + 279825, + 280032, + 280291, + 290084, + 156023, + 279773, + 280195, + 279978, + 279758, + 279896, + 279824, + 279855, + 280111, + 279708, + 280057, + 149153, + 279774, + 279897, + 280194, + 279823, + 280237, + 280079, + 279898, + 149148, + 280193, + 279775, + 279977, + 280112, + 280058, + 280031, + 280192, + 280009, + 279851, + 279822, + 279899, + 279976, + 279759, + 279876, + 280191, + 280113, + 279900, + 279821, + 279709, + 148880, + 155985, + 149165, + 279879, + 279902, + 279975, + 279760, + 280190, + 280114, + 279820, + 279903, + 280189, + 279729, + 279901, + 280030, + 280188, + 280751, + 279819, + 279904, + 279859, + 279974, + 280115, + 279935, + 279761, + 156001, + 280059, + 280187, + 279905, + 279818, + 280676, + 279906, + 279710, + 279973, + 280116, + 156021, + 156008, + 280186, + 280029, + 280000, + 280010, + 279817, + 279907, + 279972, + 280028, + 156013, + 280185, + 280037, + 280184, + 280078, + 279762, + 279816, + 279908, + 280117, + 280121, + 280060, + 280183, + 280003, + 280675, + 279909, + 148883, + 279971, + 280118, + 279765, + 279815, + 279910, + 280182, + 280125, + 280061, + 280027, + 280181, + 279728, + 279814, + 280674, + 279911, + 280151, + 279970, + 280119, + 280047, + 280180, + 279813, + 279766, + 279711, + 279912, + 280220, + 280654, + 280179, + 279913, + 279969, + 280011, + 279812, + 279914, + 280120, + 280062, + 280178, + 148874, + 279998, + 280026, + 280221, + 280177, + 280077, + 280122, + 279811, + 279915, + 279968, + 279767, + 280225, + 280176, + 279810, + 279712, + 148888, + 279739, + 280590, + 280123, + 279916, + 290065, + 280226, + 280175, + 279967, + 279770, + 279917, + 279809, + 279918, + 280025, + 280046, + 280174, + 280227, + 280236, + 280589, + 280124, + 280173, + 279808, + 279966, + 279919, + 280063, + 279771, + 148864, + 280243, + 280172, + 280012, + 279807, + 279920, + 279860, + 280076, + 279714, + 280126, + 280244, + 280171, + 279965, + 279921, + 291035, + 280127, + 280024, + 279806, + 280170, + 279727, + 279922, + 280262, + 280091, + 279964, + 280169, + 279772, + 279805, + 279923, + 280550, + 280128, + 280064, + 149157, + 280263, + 280168, + 148871, + 279804, + 279924, + 280320, + 280167, + 280075, + 280065, + 148879, + 279963, + 279776, + 280023, + 279925, + 280549, + 280129, + 279803, + 280166, + 279926, + 280388, + 280013, + 279716, + 280165, + 279962, + 279802, + 279777, + 279927, + 280130, + 148860, + 280389, + 280164, + 279801, + 280526, + 279928, + 280066, + 279961, + 280131, + 280089, + 280022, + 280390, + 280163, + 280525, + 279929, + 149173, + 279800, + 279726, + 280162, + 148890, + 279960, + 279778, + 279930, + 280391, + 280132, + 279717, + 280161, + 279799, + 280502, + 279931, + 280392, + 279959, + 279779, + 155996, + 280160, + 279798, + 280133, + 280021, + 280393, + 280159, + 279958, + 280014, + 279933, + 280045, + 280067, + 155987, + 156003, + 280158, + 279797, + 280235, + 280074, + 279934, + 279780, + 280397, + 280134, + 279718, + 280157, + 279796, + 280501, + 279936, + 279850, + 279957, + 280401, + 280135, + 290067, + 280020, + 280156, + 279795, + 279937, + 280073, + 280405, + 280155, + 280085, + 279725, + 279854, + 279938, + 280068, + 149161, + 280497, + 280154, + 279956, + 279781, + 279794, + 279939, + 279853, + 280136, + 280406, + 280153, + 279793, + 280069, + 280496, + 280015, + 280019, + 279940, + 280415, + 279955, + 279782, + 279861, + 280152, + 280137, + 279941, + 280416, + 279719, + 279792, + 279954, + 279783, + 280150, + 280138, + 279942, + 280149, + 279791, + 279943, + 280464, + 280419, + 279953, + 280148, + 280362, + 280284, + 280705, + 280481, + 280757, + 280747, + 280493, + 280625, + 280359, + 280482, + 280664, + 280384, + 280293, + 280610, + 280592, + 148887, + 280577, + 280492, + 280699, + 280411, + 156016, + 280285, + 280557, + 280534, + 280653, + 280657, + 280292, + 280607, + 280632, + 280704, + 280737, + 280240, + 280408, + 280483, + 280433, + 280554, + 280286, + 280427, + 280484, + 280576, + 280340, + 280410, + 280491, + 280680, + 149174, + 280671, + 280347, + 280703, + 280529, + 162016, + 280287, + 280758, + 280736, + 280349, + 280538, + 280490, + 280700, + 280679, + 280556, + 280288, + 280360, + 280645, + 280409, + 280678, + 149143, + 280489, + 280555, + 280623, + 280485, + 280745, + 280383, + 280609, + 280633, + 280702, + 280486, + 280663, + 280571, + 148868, + 280289, + 149150, + 280488, + 280701, + 280677, + 280361, + 280608, + 280727, + 280487, + 149162, + 280290, + 280583, + 280328, + 280346, + 280596, + 280643, + 280656, + 155990, + 280341, + 148885, + 280327, + 156014, + 280432, + 280528, + 280721, + 280448, + 280449, + 280333, + 280591, + 280655, + 280342, + 148877, + 280326, + 280424, + 280731, + 280345, + 156010, + 280430, + 280334, + 280728, + 148859, + 280543, + 280624, + 280720, + 280450, + 280439, + 155998, + 280343, + 280642, + 280639, + 290930, + 280451, + 280429, + 280566, + 280729, + 280325, + 280423, + 280428, + 280344, + 280324, + 148872, + 280396, + 280425, + 280763, + 280752, + 280580, + 280350, + 280574, + 149147, + 280253, + 280719, + 280452, + 280647, + 280524, + 280597, + 280254, + 280523, + 280685, + 280593, + 280627, + 280323, + 148862, + 280568, + 280563, + 280453, + 280658, + 290932, + 280536, + 280322, + 280522, + 280741, + 280351, + 280438, + 280521, + 280686, + 280398, + 280598, + 280725, + 148881, + 280255, + 280371, + 280321, + 280749, + 156028, + 280375, + 280668, + 280718, + 280454, + 148866, + 280455, + 280332, + 280619, + 280544, + 280319, + 280250, + 149166, + 280256, + 280422, + 280732, + 280246, + 280717, + 280456, + 280370, + 280257, + 148863, + 280336, + 280245, + 280638, + 280542, + 280387, + 280457, + 280520, + 280753, + 280621, + 280318, + 280519, + 280687, + 148222, + 280723, + 280442, + 280618, + 280562, + 280317, + 156004, + 280258, + 280386, + 280716, + 280586, + 280730, + 280672, + 280599, + 280426, + 280650, + 280545, + 280259, + 280458, + 280316, + 254109, + 156022, + 280670, + 280518, + 280762, + 280352, + 280649, + 280459, + 280372, + 280628, + 280443, + 290929, + 280369, + 280517, + 280688, + 280626, + 280399, + 280564, + 148869, + 280260, + 280315, + 280376, + 280715, + 280659, + 280261, + 280421, + 280314, + 280516, + 156019, + 280587, + 280353, + 148889, + 280368, + 280460, + 280515, + 280689, + 280313, + 280249, + 280535, + 148225, + 280569, + 280640, + 280617, + 280264, + 280754, + 280540, + 280373, + 280714, + 280667, + 280461, + 280242, + 280743, + 280637, + 280312, + 148223, + 148229, + 280265, + 280600, + 280575, + 280740, + 280514, + 280546, + 156002, + 280622, + 280266, + 280418, + 280400, + 280462, + 280337, + 280733, + 280724, + 280616, + 280641, + 280713, + 280465, + 280513, + 280690, + 280527, + 280646, + 280248, + 280311, + 149152, + 280267, + 280331, + 280310, + 149144, + 280601, + 280440, + 156006, + 280512, + 280547, + 280268, + 280629, + 290928, + 280466, + 280750, + 280537, + 280573, + 280585, + 280761, + 280682, + 280309, + 280712, + 280467, + 280691, + 148226, + 280367, + 280348, + 280581, + 280354, + 280746, + 155988, + 280269, + 280308, + 280511, + 149145, + 280385, + 280381, + 280594, + 280270, + 280660, + 280468, + 280510, + 280692, + 280722, + 280417, + 280307, + 280446, + 280615, + 280355, + 280306, + 280739, + 148867, + 149154, + 280402, + 280711, + 280469, + 280532, + 149171, + 280271, + 280636, + 280744, + 280666, + 280509, + 280602, + 280272, + 280437, + 280241, + 280561, + 280470, + 280508, + 280693, + 280644, + 280305, + 280330, + 280614, + 280710, + 280548, + 280366, + 280755, + 280471, + 280251, + 156011, + 280338, + 280304, + 148230, + 280273, + 280414, + 280541, + 280684, + 280603, + 280734, + 280274, + 290931, + 280472, + 280630, + 280380, + 280403, + 280507, + 280560, + 280652, + 280588, + 280506, + 280694, + 280303, + 148876, + 280335, + 149149, + 280709, + 280473, + 280382, + 280302, + 280551, + 280275, + 280434, + 280474, + 280726, + 148873, + 280673, + 280760, + 280661, + 280505, + 280365, + 280572, + 280578, + 148224, + 280276, + 280356, + 280301, + 280504, + 280695, + 280582, + 280595, + 280613, + 280708, + 280475, + 280565, + 280681, + 280635, + 280277, + 280357, + 280533, + 280748, + 280300, + 149170, + 280604, + 280503, + 280377, + 155984, + 280738, + 280476, + 280395, + 148884, + 280278, + 280665, + 280404, + 280413, + 149160, + 280612, + 280299, + 280559, + 280500, + 280696, + 280412, + 280279, + 280735, + 280374, + 280683, + 280298, + 148228, + 156018, + 280552, + 280339, + 280742, + 280364, + 280605, + 280756, + 280669, + 280631, + 280579, + 280707, + 280477, + 280530, + 280394, + 280441, + 280499, + 280407, + 280478, + 148882, + 280280, + 280759, + 280447, + 280297, + 280620, + 280498, + 280697, + 280558, + 280358, + 280651, + 280296, + 148878, + 156025, + 280281, + 280648, + 280570, + 280553, + 280329, + 280706, + 280479, + 155994, + 280282, + 280378, + 280480, + 280531, + 280495, + 280363, + 280295, + 280662, + 280611, + 280494, + 280698, + 280247, + 280634, + 280294, + 156015, + 156020, + 280283, + 280567, + 280584, + 280539, + 280606, + 280252, + 280379, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "60", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Merchandise", + "id": 133670, + "is_enabled": True, + "name": "Merchandise", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280329, + 280357, + 280306, + 280284, + 280626, + 280653, + 280705, + 280651, + 280276, + 280418, + 280454, + 280757, + 280481, + 280250, + 280295, + 280447, + 280569, + 280493, + 149154, + 280356, + 280300, + 280375, + 280384, + 280617, + 280359, + 280650, + 254109, + 280301, + 280664, + 280264, + 280482, + 280545, + 280443, + 280747, + 280711, + 148225, + 280293, + 280735, + 280592, + 280732, + 280610, + 280402, + 280312, + 280364, + 148887, + 280373, + 280718, + 280247, + 149170, + 280492, + 280636, + 155994, + 280577, + 280599, + 280754, + 280411, + 280698, + 280259, + 280557, + 280252, + 280542, + 156016, + 149171, + 280714, + 280285, + 280604, + 280725, + 280495, + 280271, + 280723, + 280667, + 280292, + 280446, + 280347, + 280699, + 280458, + 280638, + 280756, + 280461, + 280607, + 280503, + 280469, + 280632, + 280365, + 280433, + 280534, + 280578, + 280704, + 280319, + 280762, + 280737, + 280540, + 280637, + 280474, + 280744, + 280408, + 280666, + 280483, + 280553, + 280527, + 280339, + 280316, + 280491, + 280358, + 280554, + 280437, + 280286, + 280504, + 148878, + 280410, + 280509, + 280484, + 280605, + 148229, + 280377, + 280671, + 280624, + 280340, + 280265, + 156022, + 280602, + 280576, + 280240, + 156002, + 280363, + 280680, + 280272, + 148223, + 280533, + 149174, + 280600, + 280457, + 280740, + 280490, + 280631, + 280682, + 280703, + 280371, + 280336, + 280414, + 280514, + 280657, + 280518, + 162016, + 280738, + 280546, + 280287, + 280275, + 280706, + 280758, + 280520, + 280561, + 280582, + 280679, + 280251, + 280294, + 280266, + 280470, + 280700, + 280649, + 148867, + 280395, + 280575, + 280556, + 280379, + 280400, + 280352, + 280288, + 149166, + 280427, + 280508, + 280360, + 280248, + 280505, + 280645, + 280742, + 280538, + 280707, + 280409, + 149150, + 280532, + 280678, + 280693, + 280462, + 280753, + 280337, + 280489, + 280459, + 280606, + 280555, + 148884, + 280733, + 280644, + 149143, + 280558, + 280745, + 280683, + 280616, + 280485, + 148873, + 280330, + 280278, + 280622, + 280736, + 280318, + 280529, + 280628, + 280256, + 280633, + 156025, + 280641, + 280609, + 280713, + 280305, + 290929, + 280702, + 280349, + 280283, + 280595, + 280486, + 280245, + 280372, + 280614, + 280513, + 280668, + 148868, + 280413, + 280690, + 280289, + 280369, + 280613, + 280571, + 280465, + 280383, + 280422, + 280710, + 280670, + 280677, + 280426, + 280455, + 280488, + 280477, + 280646, + 280701, + 280620, + 280432, + 280366, + 280663, + 280517, + 280311, + 280361, + 280519, + 280548, + 280608, + 280665, + 280434, + 280688, + 280583, + 280673, + 280662, + 280487, + 280310, + 280623, + 280727, + 280331, + 149162, + 280755, + 280687, + 280290, + 149152, + 156015, + 280541, + 280282, + 280328, + 280267, + 280708, + 280404, + 280346, + 280304, + 280656, + 280499, + 280596, + 280362, + 280241, + 280476, + 149144, + 156011, + 280743, + 155990, + 280421, + 280281, + 280341, + 280601, + 280684, + 280327, + 280407, + 280246, + 156014, + 148869, + 280531, + 280643, + 148230, + 280724, + 280338, + 290928, + 148885, + 280394, + 280572, + 280721, + 280512, + 280579, + 280448, + 280333, + 280260, + 280441, + 148222, + 280345, + 280528, + 280273, + 280449, + 280268, + 280547, + 280559, + 280591, + 280629, + 280655, + 280564, + 280242, + 280697, + 280315, + 280326, + 280588, + 280342, + 280672, + 280478, + 280399, + 280424, + 280573, + 280471, + 280669, + 280648, + 280731, + 148877, + 280621, + 280430, + 280440, + 156010, + 280466, + 280370, + 280603, + 280728, + 280715, + 280585, + 280612, + 156006, + 148859, + 280380, + 280376, + 280479, + 280543, + 280695, + 280332, + 280544, + 280439, + 280720, + 148866, + 290931, + 148882, + 280712, + 155998, + 280274, + 280761, + 280343, + 280299, + 280659, + 280450, + 280309, + 280537, + 280562, + 280611, + 280642, + 280619, + 280334, + 280639, + 148863, + 280412, + 280423, + 280261, + 280467, + 290930, + 280472, + 280618, + 280451, + 280691, + 280661, + 280429, + 280507, + 280280, + 280566, + 148226, + 280475, + 280382, + 280729, + 280630, + 280746, + 280386, + 280325, + 280500, + 280367, + 280594, + 280567, + 280428, + 280530, + 280314, + 280344, + 280717, + 280696, + 280581, + 280587, + 280324, + 156028, + 280354, + 280425, + 280536, + 280516, + 280560, + 149160, + 148872, + 280396, + 280317, + 280748, + 280403, + 155988, + 280574, + 280763, + 280570, + 280378, + 280269, + 280580, + 280647, + 280759, + 280350, + 156019, + 280635, + 280681, + 149147, + 280652, + 280308, + 280253, + 280279, + 280385, + 280719, + 280734, + 280442, + 280368, + 280760, + 280511, + 156004, + 156018, + 149145, + 280524, + 280335, + 280452, + 280506, + 280387, + 280597, + 280726, + 280752, + 280254, + 280258, + 148889, + 280593, + 280456, + 280523, + 280270, + 280694, + 280685, + 280353, + 280722, + 156020, + 155984, + 280627, + 280660, + 290932, + 148224, + 280563, + 280277, + 280381, + 280323, + 280303, + 280494, + 148862, + 280468, + 280374, + 280568, + 148876, + 280750, + 280453, + 280535, + 280510, + 280298, + 280460, + 280658, + 280692, + 280716, + 280625, + 280322, + 280249, + 280417, + 280709, + 280438, + 148228, + 280522, + 280297, + 280741, + 280730, + 280257, + 149149, + 280351, + 280515, + 280584, + 280307, + 280521, + 280565, + 280539, + 280686, + 280689, + 280586, + 280473, + 280398, + 280749, + 280615, + 280598, + 280480, + 280552, + 280640, + 148881, + 280355, + 280302, + 280255, + 280348, + 280498, + 280296, + 280321, + 280739, + 280634, + 280313, + 280551, + 280121, + 279763, + 280156, + 280060, + 280183, + 280431, + 149164, + 280043, + 280675, + 280233, + 280201, + 149167, + 279909, + 148883, + 279795, + 279707, + 280003, + 279971, + 279891, + 280107, + 279765, + 279815, + 279945, + 279829, + 280202, + 279937, + 279910, + 280118, + 280000, + 280182, + 279754, + 279982, + 155993, + 280125, + 280055, + 280085, + 280181, + 280027, + 279757, + 280073, + 149163, + 280044, + 279728, + 279953, + 279890, + 279814, + 279830, + 280674, + 279862, + 279889, + 279736, + 280106, + 279854, + 279911, + 280203, + 280151, + 280081, + 279970, + 280138, + 280034, + 280119, + 280405, + 280180, + 279744, + 279813, + 280092, + 279888, + 148231, + 279766, + 280047, + 279831, + 149172, + 279711, + 280204, + 280061, + 280155, + 279912, + 279753, + 280220, + 280654, + 279983, + 280179, + 279742, + 280205, + 280234, + 156021, + 279969, + 155989, + 279913, + 280007, + 279725, + 280011, + 279812, + 280072, + 279706, + 156005, + 280444, + 280120, + 279914, + 280178, + 279738, + 280062, + 279887, + 279832, + 280206, + 280142, + 148874, + 279942, + 280026, + 279938, + 279741, + 280105, + 279886, + 280221, + 280177, + 279752, + 279984, + 280077, + 279786, + 279833, + 280122, + 279811, + 280068, + 279885, + 280207, + 280035, + 279915, + 148888, + 280104, + 279985, + 279968, + 280054, + 279732, + 279767, + 149161, + 280225, + 280176, + 279730, + 279810, + 279950, + 280208, + 279884, + 149175, + 279712, + 279999, + 280497, + 280590, + 280149, + 279834, + 279849, + 280123, + 279739, + 279722, + 280046, + 280209, + 279724, + 279916, + 280226, + 280175, + 280154, + 279967, + 280018, + 280103, + 280053, + 279705, + 279770, + 279751, + 279986, + 279917, + 290065, + 279809, + 279853, + 280174, + 279883, + 279835, + 279918, + 280025, + 279794, + 148861, + 279949, + 280087, + 280210, + 279956, + 280227, + 280236, + 280173, + 280589, + 280143, + 279721, + 279882, + 280082, + 279808, + 280071, + 279836, + 280036, + 279966, + 280211, + 280124, + 279781, + 279919, + 279881, + 149159, + 280063, + 279720, + 156026, + 279771, + 148864, + 280102, + 280212, + 280243, + 280172, + 280436, + 280012, + 280006, + 148227, + 279807, + 280141, + 279880, + 280002, + 279791, + 279920, + 279939, + 280076, + 279750, + 279987, + 279714, + 279837, + 280126, + 279860, + 280052, + 155991, + 279948, + 280244, + 280171, + 280147, + 148858, + 279965, + 280136, + 279715, + 280213, + 279921, + 291035, + 279878, + 280101, + 279838, + 279785, + 280127, + 280024, + 279951, + 280214, + 279806, + 279749, + 280170, + 280406, + 279988, + 279713, + 279727, + 280038, + 279922, + 279877, + 280153, + 280262, + 280169, + 279964, + 148870, + 279787, + 280100, + 279989, + 279772, + 280091, + 279805, + 279839, + 280215, + 279793, + 279923, + 280550, + 280420, + 148875, + 279875, + 280144, + 280128, + 279733, + 155995, + 280064, + 149157, + 279790, + 279702, + 280069, + 280263, + 280168, + 279704, + 280216, + 148871, + 279874, + 279804, + 280496, + 280099, + 279840, + 279924, + 280445, + 280320, + 280167, + 279748, + 279990, + 280075, + 149169, + 280051, + 280065, + 280019, + 279963, + 280017, + 279703, + 156000, + 280023, + 148879, + 279776, + 280217, + 279873, + 279841, + 279925, + 280549, + 280015, + 280098, + 280129, + 279803, + 280083, + 280166, + 280464, + 280086, + 280218, + 280039, + 280435, + 279926, + 279857, + 149151, + 280388, + 280005, + 280013, + 279872, + 279947, + 279716, + 280165, + 279962, + 280016, + 279747, + 279991, + 279858, + 279802, + 279842, + 279940, + 279777, + 280219, + 279871, + 149158, + 279788, + 279927, + 280130, + 156024, + 280145, + 280389, + 280164, + 279801, + 148860, + 280526, + 280415, + 279701, + 155997, + 280222, + 290069, + 279928, + 279856, + 279961, + 279955, + 279870, + 280066, + 155992, + 279944, + 280131, + 280022, + 280140, + 280097, + 279843, + 280390, + 280163, + 155986, + 279746, + 279992, + 280525, + 279943, + 280223, + 279782, + 279929, + 149173, + 279869, + 279800, + 279844, + 279726, + 280040, + 279735, + 280162, + 280096, + 148886, + 280152, + 279960, + 279993, + 280070, + 279778, + 148890, + 279930, + 280050, + 279737, + 280391, + 280224, + 280132, + 246836, + 279784, + 279717, + 280161, + 279952, + 279868, + 279799, + 279852, + 279845, + 280001, + 280502, + 290068, + 280095, + 280228, + 280137, + 279931, + 280392, + 280160, + 155996, + 279959, + 279861, + 149168, + 279745, + 279994, + 280139, + 279779, + 279941, + 279798, + 279997, + 279867, + 280049, + 280084, + 279723, + 280133, + 279700, + 280021, + 280419, + 155999, + 280045, + 279932, + 280229, + 280416, + 280393, + 280159, + 279958, + 156012, + 279866, + 149155, + 279946, + 280014, + 280004, + 279846, + 279933, + 279719, + 280230, + 280067, + 280041, + 279792, + 155987, + 280235, + 156003, + 280094, + 280158, + 280463, + 279797, + 279865, + 279743, + 279995, + 280074, + 279847, + 280231, + 148865, + 279954, + 279780, + 279934, + 279734, + 280148, + 280397, + 156009, + 280009, + 279899, + 279851, + 279976, + 279822, + 280192, + 280031, + 280134, + 279759, + 279876, + 280191, + 280058, + 280113, + 148880, + 280112, + 279977, + 279900, + 279821, + 149156, + 279775, + 280193, + 279709, + 279855, + 149165, + 279789, + 155985, + 279718, + 149148, + 279898, + 280079, + 279879, + 279823, + 280157, + 279975, + 280150, + 280239, + 280194, + 279864, + 279760, + 279774, + 279902, + 280190, + 280232, + 279897, + 280237, + 280114, + 149153, + 279820, + 279796, + 280238, + 280057, + 279903, + 280189, + 279850, + 279708, + 279729, + 280111, + 279824, + 280501, + 279901, + 280030, + 280146, + 279896, + 156001, + 280188, + 280751, + 279758, + 279978, + 290084, + 279819, + 280048, + 280195, + 279773, + 156027, + 279974, + 156023, + 280291, + 280042, + 280115, + 279859, + 279904, + 280032, + 279936, + 279935, + 279825, + 279761, + 280093, + 280110, + 280059, + 280187, + 279783, + 280196, + 279769, + 279905, + 279818, + 279957, + 279756, + 279979, + 280676, + 280197, + 156007, + 149146, + 279863, + 279906, + 279895, + 280088, + 280080, + 279973, + 279826, + 280198, + 280401, + 280116, + 279710, + 156008, + 280056, + 280186, + 279740, + 279768, + 280029, + 280135, + 279894, + 280010, + 279817, + 280008, + 279827, + 279996, + 280028, + 279972, + 280089, + 280109, + 279893, + 290067, + 156013, + 279998, + 279755, + 279907, + 280185, + 279980, + 280090, + 280199, + 280037, + 280184, + 280078, + 280020, + 279764, + 280033, + 279892, + 279762, + 279816, + 280108, + 279731, + 279828, + 279908, + 280200, + 279848, + 280117, + 279981, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "61", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Service", + "id": 133671, + "is_enabled": True, + "name": "Service", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 279934, + 279763, + 280435, + 279894, + 280083, + 280060, + 148883, + 280183, + 280166, + 279734, + 280184, + 149164, + 279904, + 279848, + 280675, + 280135, + 280218, + 280009, + 280201, + 280032, + 149167, + 279707, + 279795, + 280238, + 279909, + 279926, + 280039, + 149151, + 279891, + 279815, + 279976, + 279971, + 156009, + 279945, + 280117, + 280043, + 280233, + 280107, + 280005, + 155993, + 279899, + 279765, + 280003, + 279947, + 280010, + 280013, + 279829, + 279872, + 280202, + 280388, + 279935, + 279910, + 279747, + 280118, + 279998, + 280182, + 279822, + 279937, + 279754, + 279716, + 280165, + 279982, + 279997, + 280016, + 280125, + 280181, + 280055, + 279962, + 279825, + 280192, + 280027, + 279855, + 280073, + 279757, + 279936, + 279991, + 280146, + 279802, + 279728, + 279761, + 280139, + 149163, + 279890, + 279759, + 279814, + 279842, + 279862, + 280031, + 279830, + 279889, + 280674, + 280058, + 279777, + 280134, + 280219, + 280106, + 279871, + 279859, + 279876, + 279911, + 280191, + 280203, + 280000, + 279854, + 279927, + 279970, + 149158, + 280001, + 280081, + 279736, + 279856, + 280034, + 280092, + 279940, + 280119, + 279850, + 280151, + 280180, + 280130, + 280405, + 279744, + 279788, + 279813, + 280110, + 279775, + 279888, + 148880, + 280389, + 280164, + 279766, + 279851, + 280145, + 149172, + 156024, + 279831, + 280155, + 155997, + 279711, + 279801, + 280112, + 280061, + 280204, + 279944, + 279701, + 279912, + 279753, + 280397, + 280138, + 280526, + 280047, + 280654, + 280008, + 148231, + 280113, + 280220, + 280179, + 279863, + 279737, + 279983, + 279742, + 280199, + 280059, + 280222, + 149156, + 279969, + 280187, + 279725, + 280205, + 279928, + 279738, + 279900, + 280007, + 280097, + 279955, + 148860, + 280011, + 156021, + 279913, + 279812, + 279961, + 279821, + 155989, + 279706, + 279764, + 279870, + 280444, + 156005, + 280109, + 155986, + 280120, + 280236, + 279977, + 279914, + 280178, + 155992, + 280078, + 279887, + 279790, + 280196, + 280062, + 280193, + 280131, + 280142, + 279832, + 280140, + 280066, + 280022, + 148874, + 279864, + 280026, + 279769, + 279852, + 280206, + 279741, + 279709, + 280105, + 280028, + 279886, + 279843, + 279938, + 290069, + 280221, + 280177, + 149165, + 279786, + 279752, + 280390, + 280163, + 280077, + 279957, + 280070, + 279984, + 279731, + 279811, + 279833, + 279942, + 279746, + 280122, + 279885, + 155985, + 279905, + 279992, + 280525, + 280207, + 279818, + 280068, + 279972, + 279915, + 148888, + 149148, + 280104, + 280223, + 279718, + 279968, + 279898, + 279853, + 279985, + 280035, + 280054, + 279929, + 149173, + 149161, + 280121, + 279767, + 279732, + 279782, + 279869, + 280225, + 280176, + 156001, + 280149, + 279730, + 279800, + 279810, + 279756, + 279943, + 280157, + 279884, + 280046, + 279726, + 280088, + 279950, + 280415, + 279712, + 149175, + 280497, + 279844, + 280079, + 280590, + 279908, + 280096, + 280208, + 280162, + 279834, + 279722, + 280676, + 280152, + 280123, + 279823, + 279975, + 148886, + 279827, + 279960, + 279783, + 279916, + 279724, + 280209, + 280053, + 280154, + 290068, + 280226, + 280175, + 279979, + 279993, + 279999, + 279739, + 279967, + 279735, + 280040, + 280103, + 280020, + 280194, + 279705, + 279778, + 279849, + 279774, + 279770, + 279751, + 280050, + 279723, + 279949, + 280197, + 279917, + 279930, + 279809, + 279893, + 279760, + 279986, + 279883, + 280174, + 279792, + 156007, + 280391, + 279794, + 280033, + 279918, + 280025, + 280224, + 279784, + 279902, + 148861, + 280132, + 279956, + 148890, + 279835, + 290065, + 246836, + 280210, + 280190, + 279892, + 280227, + 280173, + 279828, + 279727, + 279717, + 280072, + 280589, + 280045, + 280161, + 279721, + 279897, + 279882, + 149146, + 280143, + 280071, + 279868, + 280082, + 279808, + 279879, + 279799, + 280087, + 280239, + 279836, + 279952, + 279966, + 279820, + 280089, + 280036, + 279895, + 149153, + 280124, + 280211, + 279881, + 280095, + 155996, + 279919, + 280502, + 149159, + 279796, + 279781, + 156013, + 280063, + 148864, + 279720, + 280114, + 280431, + 280090, + 279771, + 280102, + 279973, + 279791, + 279931, + 280228, + 280436, + 149168, + 280243, + 280172, + 280137, + 279755, + 280212, + 148858, + 280006, + 280141, + 280392, + 280012, + 280160, + 280057, + 279807, + 280234, + 279959, + 148227, + 279880, + 279708, + 279789, + 280080, + 279745, + 279920, + 279750, + 279903, + 280076, + 280189, + 279939, + 279981, + 279826, + 279987, + 280002, + 280018, + 279779, + 279714, + 279762, + 279837, + 280052, + 279948, + 279941, + 280126, + 279994, + 279867, + 279798, + 155991, + 280237, + 280111, + 280244, + 280171, + 279729, + 280049, + 279858, + 279907, + 279715, + 279860, + 279965, + 280501, + 280084, + 280108, + 280116, + 280213, + 280136, + 280133, + 279921, + 279806, + 280024, + 279878, + 291035, + 279845, + 279785, + 279700, + 280101, + 279824, + 280021, + 279896, + 280401, + 280127, + 279838, + 290067, + 155999, + 279901, + 280214, + 280030, + 280147, + 279749, + 279932, + 280170, + 149155, + 279710, + 156008, + 279988, + 279713, + 279816, + 280393, + 280406, + 280159, + 280038, + 280153, + 290084, + 279922, + 279877, + 280416, + 280229, + 279958, + 280262, + 280169, + 279740, + 280420, + 279964, + 279946, + 279951, + 156012, + 280100, + 280188, + 279866, + 280198, + 279787, + 280232, + 279772, + 280004, + 279989, + 148870, + 279805, + 279758, + 279793, + 280751, + 279839, + 280014, + 280215, + 280235, + 280056, + 280091, + 280550, + 280048, + 280419, + 279875, + 279980, + 148875, + 279933, + 279906, + 279846, + 280128, + 279978, + 279733, + 279719, + 280144, + 280186, + 280064, + 279923, + 155995, + 149157, + 280230, + 279819, + 279702, + 280200, + 280085, + 155987, + 280263, + 280168, + 279768, + 156026, + 279704, + 280067, + 156003, + 279804, + 280216, + 279874, + 280496, + 280195, + 148871, + 280148, + 280094, + 279773, + 280099, + 280041, + 280158, + 279840, + 280042, + 279996, + 279924, + 280051, + 279748, + 156027, + 279865, + 280320, + 280167, + 279797, + 280445, + 279953, + 280463, + 280075, + 279974, + 280069, + 279990, + 279743, + 280156, + 280019, + 280093, + 280065, + 279703, + 280023, + 280150, + 279963, + 280074, + 280029, + 279861, + 279995, + 156023, + 279847, + 156000, + 149169, + 280017, + 280291, + 279776, + 148879, + 279857, + 279954, + 280217, + 279873, + 280231, + 280185, + 280464, + 280037, + 279925, + 280549, + 279817, + 279780, + 279841, + 280086, + 280098, + 148865, + 280015, + 280115, + 280129, + 280044, + 279803, + 280332, + 156028, + 280551, + 280246, + 280718, + 280668, + 280567, + 280454, + 280250, + 280275, + 280375, + 280455, + 280619, + 280760, + 280422, + 280697, + 280319, + 280723, + 280724, + 149166, + 280256, + 148863, + 280494, + 148873, + 280542, + 280370, + 280382, + 280544, + 280717, + 280578, + 280257, + 280365, + 280456, + 280732, + 280638, + 280681, + 280474, + 280726, + 280457, + 280520, + 280505, + 280648, + 280318, + 280358, + 280336, + 280672, + 280753, + 280519, + 280572, + 280687, + 148222, + 280421, + 280621, + 280562, + 280296, + 280618, + 280661, + 280586, + 280317, + 156004, + 148224, + 280258, + 280716, + 156015, + 280276, + 280379, + 280301, + 280545, + 280442, + 280259, + 280599, + 280458, + 280650, + 280725, + 280762, + 280316, + 280504, + 280649, + 156022, + 149160, + 280518, + 280673, + 156025, + 280587, + 280369, + 280356, + 280352, + 290929, + 280708, + 280628, + 280613, + 280386, + 280373, + 280517, + 280698, + 280620, + 280688, + 280426, + 148869, + 280748, + 280582, + 280260, + 280315, + 280588, + 280399, + 280564, + 280715, + 280695, + 280248, + 280376, + 280659, + 280281, + 280261, + 280730, + 280314, + 280329, + 280516, + 280635, + 280640, + 280368, + 156019, + 148878, + 280459, + 280249, + 148889, + 280653, + 280353, + 280277, + 280460, + 280515, + 280689, + 280313, + 280418, + 280357, + 280300, + 280569, + 280617, + 280651, + 280706, + 280264, + 280312, + 280752, + 149170, + 280754, + 280530, + 280714, + 280443, + 280667, + 280565, + 280624, + 280503, + 280461, + 148225, + 280637, + 280682, + 280740, + 280553, + 280335, + 280738, + 156002, + 148229, + 280604, + 280265, + 280475, + 280294, + 280540, + 280514, + 280395, + 280546, + 280600, + 280377, + 280266, + 254109, + 280400, + 280575, + 148884, + 280462, + 148223, + 280384, + 280616, + 280362, + 280372, + 280733, + 280626, + 280713, + 280278, + 280641, + 280513, + 280413, + 280690, + 280533, + 280622, + 280311, + 280646, + 280665, + 280331, + 280465, + 280761, + 280310, + 149152, + 280267, + 280595, + 149144, + 280476, + 280282, + 280601, + 290928, + 280512, + 280404, + 280559, + 280629, + 280412, + 280394, + 280299, + 280532, + 280573, + 280612, + 280547, + 280466, + 280585, + 156006, + 280268, + 148226, + 280712, + 280309, + 280479, + 280367, + 280742, + 280594, + 280500, + 280691, + 280467, + 280746, + 280511, + 280537, + 280385, + 280696, + 156018, + 280251, + 155988, + 280269, + 280440, + 280308, + 280581, + 280722, + 280337, + 280279, + 280707, + 149145, + 280354, + 280240, + 280570, + 156020, + 280270, + 280660, + 280669, + 280298, + 280510, + 280363, + 280692, + 280417, + 280381, + 280307, + 280750, + 280378, + 280468, + 280364, + 280615, + 280743, + 280739, + 280355, + 280306, + 280705, + 280284, + 280552, + 280295, + 280529, + 148228, + 280481, + 280493, + 280757, + 280347, + 149154, + 280711, + 280348, + 280592, + 280664, + 280666, + 280482, + 280359, + 280293, + 280610, + 280735, + 148887, + 280636, + 280492, + 280411, + 280577, + 149171, + 280557, + 156016, + 280495, + 280285, + 280447, + 280292, + 280271, + 155984, + 280699, + 280433, + 280683, + 280607, + 280632, + 280704, + 280756, + 280737, + 280671, + 280402, + 280437, + 280483, + 280410, + 280491, + 280469, + 280286, + 280509, + 280408, + 280374, + 280554, + 280484, + 280534, + 280680, + 280576, + 280272, + 149174, + 280340, + 280490, + 280703, + 280602, + 280414, + 280758, + 162016, + 280744, + 280631, + 280287, + 280657, + 280561, + 280679, + 280339, + 280605, + 280700, + 280252, + 280470, + 280556, + 149150, + 280645, + 280508, + 280288, + 280360, + 280745, + 280409, + 280678, + 280693, + 280427, + 280489, + 280330, + 280555, + 280247, + 149143, + 280644, + 280441, + 280485, + 280623, + 280538, + 280736, + 280541, + 280633, + 280333, + 280609, + 280305, + 280702, + 280480, + 280486, + 280614, + 280349, + 148868, + 155994, + 280710, + 280289, + 280328, + 280571, + 280677, + 280361, + 280432, + 280488, + 280366, + 280701, + 280663, + 280383, + 280477, + 280608, + 280747, + 280583, + 280283, + 280487, + 149162, + 280499, + 280290, + 280727, + 280656, + 280304, + 280536, + 280371, + 280596, + 156011, + 280327, + 155990, + 280662, + 280548, + 280341, + 280625, + 156014, + 280643, + 280647, + 280721, + 280684, + 280755, + 280655, + 280448, + 280345, + 280449, + 280273, + 280591, + 280338, + 148230, + 280424, + 280528, + 280326, + 280611, + 280342, + 280478, + 290931, + 280471, + 280430, + 280380, + 156010, + 280446, + 280728, + 280439, + 280731, + 280603, + 148859, + 148882, + 280543, + 280720, + 280531, + 155998, + 280274, + 280343, + 148885, + 280450, + 280639, + 280241, + 280642, + 280606, + 280423, + 280670, + 290930, + 280507, + 280334, + 280429, + 148877, + 280325, + 280729, + 280566, + 280630, + 280451, + 280280, + 280242, + 280652, + 280344, + 280425, + 280763, + 280324, + 280387, + 280428, + 280560, + 280245, + 280396, + 148872, + 280403, + 280759, + 280346, + 280719, + 280472, + 149147, + 280539, + 280253, + 290932, + 280579, + 280506, + 280580, + 280527, + 280535, + 280593, + 280524, + 280303, + 280597, + 280407, + 280254, + 280350, + 280523, + 280584, + 280685, + 280694, + 280452, + 280627, + 280563, + 280574, + 280323, + 280297, + 148862, + 148876, + 280453, + 280568, + 148866, + 280734, + 280658, + 280322, + 280709, + 280438, + 280741, + 280522, + 149149, + 280749, + 280351, + 280521, + 280558, + 280634, + 280686, + 148867, + 280473, + 280598, + 280498, + 148881, + 280302, + 280255, + 280321, + 280434, + 280398, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + { + "code": "62", + "created_at": "2021-03-30T06:17:45.260578+00:00", + "display_name": "Salaries & Wages", + "id": 133672, + "is_enabled": True, + "name": "Salaries & Wages", + "org_id": "orNoatdUnm1w", + "restricted_project_ids": [ + 280601, + 149150, + 280334, + 280347, + 280335, + 280656, + 280439, + 148885, + 280684, + 280593, + 280438, + 148863, + 280336, + 280725, + 280564, + 280426, + 156002, + 280241, + 280641, + 280647, + 155984, + 280437, + 280337, + 280346, + 280338, + 280620, + 280434, + 280726, + 280565, + 280588, + 156018, + 280339, + 280752, + 280567, + 280592, + 280433, + 280340, + 280427, + 280252, + 280432, + 280727, + 280247, + 155990, + 280341, + 280242, + 280345, + 280655, + 280591, + 280342, + 280430, + 156010, + 280728, + 280543, + 155998, + 280343, + 280642, + 280429, + 280729, + 280566, + 280344, + 280428, + 280396, + 280535, + 149147, + 280253, + 280580, + 280524, + 280523, + 280685, + 280627, + 280254, + 280749, + 280741, + 280522, + 280521, + 148881, + 280255, + 280398, + 280668, + 280686, + 280619, + 280370, + 280375, + 149166, + 280256, + 280544, + 280257, + 280672, + 280520, + 280519, + 280687, + 280753, + 280618, + 156004, + 280258, + 280248, + 280573, + 280545, + 280259, + 280650, + 280649, + 280518, + 280369, + 280628, + 280373, + 280517, + 280688, + 148869, + 280260, + 280399, + 280261, + 280516, + 280376, + 280368, + 148889, + 280515, + 280689, + 280617, + 280264, + 280740, + 280667, + 280754, + 280669, + 280514, + 148229, + 280265, + 280546, + 280540, + 280575, + 280616, + 280266, + 280646, + 280513, + 280690, + 280400, + 149152, + 280267, + 280394, + 280512, + 280629, + 280547, + 280529, + 254109, + 280268, + 280367, + 280691, + 280385, + 280511, + 155988, + 280269, + 280581, + 280537, + 280510, + 280270, + 280692, + 280615, + 280739, + 280666, + 149171, + 280271, + 280402, + 280509, + 280272, + 280744, + 280508, + 280693, + 280366, + 280614, + 156011, + 280548, + 280743, + 280273, + 280750, + 280755, + 280507, + 280274, + 280630, + 280403, + 280506, + 280694, + 149149, + 280572, + 280551, + 280275, + 280578, + 280365, + 280505, + 148224, + 280504, + 280748, + 280613, + 280276, + 280582, + 280673, + 280695, + 280277, + 280503, + 280738, + 280665, + 148884, + 280278, + 280625, + 280377, + 280404, + 280612, + 280500, + 280696, + 280279, + 280364, + 280552, + 280756, + 280631, + 280499, + 148882, + 280280, + 280407, + 280498, + 280697, + 156025, + 280281, + 280384, + 280553, + 280651, + 280282, + 280363, + 280495, + 280378, + 280611, + 280494, + 280698, + 156020, + 280283, + 280579, + 280362, + 280284, + 280493, + 280757, + 280664, + 280610, + 280530, + 280492, + 156016, + 280285, + 280374, + 280737, + 280671, + 280699, + 280632, + 280491, + 280286, + 280408, + 280554, + 280490, + 280576, + 162016, + 280287, + 280645, + 280700, + 280288, + 280489, + 280555, + 280409, + 280609, + 280538, + 148868, + 280289, + 280361, + 280488, + 280701, + 280571, + 149162, + 280290, + 280487, + 280747, + 280583, + 280608, + 280383, + 280663, + 280677, + 280486, + 280633, + 280702, + 280736, + 280485, + 149143, + 280678, + 280360, + 280556, + 280679, + 280745, + 280484, + 280703, + 280758, + 280534, + 149174, + 280680, + 280623, + 280483, + 280410, + 280607, + 280704, + 280292, + 280557, + 280577, + 280411, + 148887, + 280293, + 280359, + 280482, + 280481, + 280742, + 280606, + 280705, + 148866, + 156015, + 280294, + 280634, + 280379, + 280584, + 280662, + 280539, + 280480, + 280295, + 280570, + 280479, + 280706, + 148878, + 280296, + 280358, + 280558, + 280297, + 280648, + 280759, + 280478, + 280477, + 280536, + 280735, + 280605, + 148228, + 280298, + 280707, + 280299, + 280412, + 280533, + 280559, + 148867, + 280476, + 280475, + 280357, + 280604, + 149170, + 280300, + 280635, + 280413, + 280708, + 280395, + 280356, + 280301, + 280382, + 280661, + 280474, + 148873, + 280760, + 280302, + 280473, + 280709, + 280734, + 148876, + 280303, + 280472, + 280560, + 280652, + 280681, + 280603, + 280471, + 280240, + 280380, + 148230, + 280304, + 280710, + 280305, + 280644, + 280470, + 280541, + 280561, + 280414, + 280602, + 280469, + 280636, + 280711, + 280387, + 149154, + 280306, + 280355, + 280381, + 280468, + 280307, + 280417, + 280660, + 280354, + 149145, + 280308, + 280467, + 280309, + 280746, + 280712, + 280585, + 280466, + 280626, + 290928, + 149144, + 280310, + 280622, + 280683, + 280761, + 280465, + 280311, + 280713, + 280372, + 280733, + 148223, + 280462, + 280600, + 280637, + 148225, + 280569, + 280461, + 280714, + 280312, + 280313, + 280353, + 280460, + 280459, + 280418, + 280249, + 280670, + 156019, + 280314, + 280659, + 280715, + 280315, + 290929, + 280352, + 156022, + 280316, + 280458, + 280762, + 280599, + 280716, + 280317, + 280586, + 280621, + 280562, + 280421, + 280457, + 148222, + 280318, + 280456, + 280638, + 280732, + 280717, + 280319, + 280422, + 280455, + 280454, + 280718, + 280250, + 156028, + 280321, + 280246, + 280598, + 280351, + 280322, + 280658, + 280568, + 280453, + 280574, + 148862, + 280323, + 280563, + 280542, + 280452, + 280350, + 280597, + 280719, + 148872, + 280324, + 280763, + 280245, + 280451, + 280325, + 290930, + 280423, + 280450, + 280639, + 280720, + 148859, + 280731, + 280528, + 280326, + 280449, + 280643, + 280448, + 156014, + 280327, + 280371, + 280596, + 280424, + 280721, + 280386, + 280349, + 280328, + 280657, + 280447, + 280532, + 149160, + 155994, + 280329, + 280653, + 280446, + 280595, + 290931, + 280330, + 280348, + 280722, + 280251, + 148226, + 156006, + 280331, + 280443, + 280640, + 280587, + 280442, + 280624, + 280723, + 280332, + 290932, + 148877, + 280333, + 280425, + 280682, + 280441, + 280531, + 280527, + 280594, + 280440, + 280724, + 280730, + 279737, + 280089, + 279735, + 148870, + 279999, + 279738, + 280090, + 148880, + 279998, + 280003, + 279739, + 280091, + 148860, + 280085, + 279997, + 148231, + 280092, + 279996, + 279740, + 280093, + 279734, + 148865, + 279995, + 279743, + 280094, + 280004, + 155999, + 280084, + 279994, + 279745, + 280095, + 148886, + 279993, + 280096, + 279992, + 279746, + 155992, + 280097, + 149158, + 279991, + 279747, + 279852, + 280005, + 280083, + 280098, + 156000, + 279990, + 279748, + 280099, + 148875, + 279733, + 279989, + 280100, + 279988, + 279749, + 280101, + 155991, + 279987, + 279750, + 280006, + 280102, + 149159, + 280082, + 148861, + 279986, + 279751, + 280103, + 149175, + 279732, + 279985, + 280104, + 279984, + 279752, + 280105, + 156005, + 280007, + 279983, + 279753, + 149172, + 280081, + 280106, + 149163, + 279982, + 279754, + 280107, + 149164, + 279981, + 279731, + 280108, + 279980, + 279755, + 280109, + 280008, + 280080, + 156007, + 279979, + 279756, + 280110, + 156023, + 279978, + 279758, + 280111, + 149153, + 280079, + 149148, + 279977, + 280112, + 279976, + 280009, + 280238, + 279759, + 279855, + 280113, + 155985, + 279975, + 279760, + 280114, + 279729, + 280751, + 279974, + 280115, + 279761, + 280676, + 279973, + 280116, + 279972, + 280010, + 156013, + 280078, + 279762, + 280117, + 280675, + 279971, + 279765, + 280118, + 279728, + 280674, + 279970, + 280119, + 279766, + 280654, + 279969, + 280011, + 280120, + 148874, + 280077, + 280122, + 279968, + 279767, + 280590, + 280123, + 279967, + 279770, + 279727, + 280589, + 279966, + 280124, + 279771, + 280012, + 280076, + 280126, + 279965, + 291035, + 280127, + 279964, + 279772, + 280550, + 280128, + 148871, + 280075, + 279963, + 280549, + 279776, + 280129, + 279962, + 280013, + 279777, + 280130, + 280526, + 279961, + 280131, + 280525, + 279726, + 279960, + 279778, + 280132, + 280502, + 279959, + 279779, + 280133, + 279958, + 280014, + 155987, + 280074, + 279854, + 279780, + 280134, + 280501, + 279957, + 280135, + 290067, + 280073, + 279725, + 280497, + 279956, + 279781, + 280136, + 280496, + 280015, + 279955, + 279782, + 280137, + 279954, + 279783, + 280138, + 280464, + 279953, + 280139, + 290068, + 280072, + 280463, + 279952, + 279784, + 280140, + 280016, + 280445, + 279951, + 279785, + 280141, + 279724, + 279950, + 279786, + 280142, + 280444, + 279949, + 280143, + 280071, + 280436, + 279948, + 279787, + 280144, + 280017, + 280435, + 279947, + 279788, + 280145, + 156026, + 290069, + 280070, + 279857, + 279723, + 279946, + 279789, + 280146, + 280431, + 279945, + 280147, + 280420, + 279944, + 280018, + 279790, + 280148, + 280419, + 279943, + 279791, + 280149, + 279942, + 280150, + 279719, + 280416, + 279941, + 279792, + 280152, + 280415, + 279940, + 280019, + 280069, + 279793, + 280153, + 280406, + 279939, + 279794, + 280154, + 149161, + 280068, + 279938, + 280155, + 280405, + 279853, + 279937, + 279795, + 280156, + 280020, + 280401, + 279936, + 279796, + 280157, + 279718, + 280397, + 279934, + 279797, + 280158, + 156003, + 280067, + 279933, + 280159, + 280393, + 279932, + 280021, + 279798, + 280160, + 280392, + 279931, + 279799, + 280161, + 279717, + 280045, + 280391, + 279930, + 280162, + 279800, + 149173, + 279929, + 280163, + 280390, + 280022, + 280066, + 279928, + 279801, + 280164, + 280389, + 279927, + 279802, + 280165, + 279716, + 280388, + 279926, + 280166, + 279803, + 279925, + 280023, + 280065, + 280167, + 280320, + 279924, + 279804, + 280168, + 280263, + 149157, + 279923, + 280064, + 279805, + 280169, + 280262, + 279922, + 280170, + 280024, + 279806, + 279921, + 280171, + 280244, + 279920, + 279714, + 279807, + 280172, + 280243, + 290065, + 148864, + 280063, + 279919, + 279808, + 280173, + 280227, + 280025, + 279918, + 280174, + 279809, + 279917, + 280175, + 280226, + 279916, + 279712, + 279810, + 280176, + 280225, + 148888, + 279915, + 279811, + 280177, + 280221, + 280046, + 280026, + 280062, + 280178, + 279914, + 279812, + 279913, + 280179, + 280220, + 279912, + 280061, + 279711, + 279813, + 280180, + 280151, + 279911, + 279814, + 280027, + 280181, + 280125, + 280182, + 279910, + 279815, + 279909, + 280183, + 148883, + 280060, + 280121, + 279908, + 279816, + 280184, + 280037, + 279907, + 280028, + 279817, + 280185, + 280239, + 280029, + 280186, + 279906, + 279710, + 279818, + 279905, + 280187, + 156008, + 280059, + 279935, + 279904, + 279819, + 280188, + 280030, + 279901, + 280189, + 279903, + 279820, + 279879, + 280190, + 279902, + 149165, + 279709, + 156001, + 279821, + 279900, + 280191, + 279876, + 279899, + 279822, + 280192, + 280031, + 280058, + 279775, + 280193, + 279898, + 279823, + 280194, + 279774, + 279897, + 280057, + 279708, + 279824, + 279896, + 280195, + 279773, + 280291, + 280032, + 279825, + 280196, + 279769, + 280197, + 149146, + 279895, + 279826, + 280198, + 280056, + 279768, + 279894, + 279827, + 279893, + 280199, + 279764, + 280033, + 279892, + 279828, + 280200, + 279763, + 280201, + 149167, + 279707, + 279891, + 279829, + 280202, + 280055, + 279757, + 279890, + 279830, + 279889, + 280203, + 280034, + 279744, + 279888, + 279831, + 280204, + 279742, + 280205, + 155989, + 279706, + 279887, + 279832, + 280206, + 279741, + 279886, + 279833, + 279885, + 280207, + 280035, + 280054, + 279730, + 279884, + 279834, + 280208, + 279722, + 280209, + 280053, + 279705, + 279883, + 279835, + 280210, + 279721, + 279882, + 148858, + 280036, + 279836, + 280211, + 279881, + 279720, + 280212, + 148227, + 279880, + 279837, + 280052, + 279715, + 280213, + 279878, + 279838, + 280214, + 279713, + 280038, + 279877, + 279839, + 280215, + 279875, + 155995, + 279702, + 279704, + 280216, + 279874, + 279840, + 280051, + 279703, + 280217, + 279873, + 279841, + 280218, + 280039, + 149151, + 279872, + 279842, + 280219, + 279856, + 279871, + 155997, + 156024, + 279701, + 280222, + 155986, + 279870, + 279843, + 280223, + 279869, + 279844, + 280040, + 280050, + 280224, + 246836, + 279868, + 280228, + 149168, + 279867, + 280049, + 279845, + 279700, + 280229, + 156012, + 279866, + 279846, + 280230, + 280041, + 279865, + 279847, + 280231, + 149156, + 156009, + 279864, + 280232, + 280048, + 156027, + 279863, + 279848, + 280233, + 155993, + 279862, + 279849, + 280042, + 280234, + 279861, + 279850, + 280235, + 280044, + 155996, + 148890, + 148879, + 279860, + 280236, + 156021, + 280047, + 279859, + 279851, + 280237, + 290084, + 280043, + 279736, + 280087, + 279858, + 280002, + 149169, + 280086, + 280001, + 149155, + 280088, + 280000, + ], + "sub_category": None, + "system_category": None, + "updated_at": "2022-05-05T17:48:51.900866+00:00", + }, + ] + } + ], + "get_all_cost_centers": # !/usr/bin/python + # -*- coding: utf-8 -*- + [ + { + "data": [ + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - 01: San Francisco, Id - 2", + "id": 9587, + "is_enabled": True, + "name": "01: San Francisco", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - 02: Boston, Id - 1", + "id": 9588, + "is_enabled": True, + "name": "02: Boston", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - Bir Billing, Id - 13", + "id": 9589, + "is_enabled": True, + "name": "Bir Billing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - Custom Location, Id - 9", + "id": 9590, + "is_enabled": True, + "name": "Custom Location", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - Fyle, Id - 7", + "id": 9591, + "is_enabled": True, + "name": "Fyle", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - hubajuba, Id - 8", + "id": 9592, + "is_enabled": True, + "name": "hubajuba", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - hukiju, Id - 10", + "id": 9593, + "is_enabled": True, + "name": "hukiju", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - Mars, Id - 15", + "id": 9594, + "is_enabled": True, + "name": "Mars", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - Nilesh's Location, Id - 11", + "id": 9595, + "is_enabled": True, + "name": "Nilesh's Location", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - njiy, Id - 14", + "id": 9596, + "is_enabled": True, + "name": "njiy", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - Overstock, Id - 3", + "id": 9597, + "is_enabled": True, + "name": "Overstock", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - QA Hold, Id - 5", + "id": 9598, + "is_enabled": True, + "name": "QA Hold", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - Receiving Insp., Id - 4", + "id": 9599, + "is_enabled": True, + "name": "Receiving Insp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - UK Location, Id - 12", + "id": 9600, + "is_enabled": True, + "name": "UK Location", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2022-05-09T10:49:26.333255+00:00", + "description": "Cost Center - VendorTest, Id - 6", + "id": 9601, + "is_enabled": True, + "name": "VendorTest", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2022-05-09T10:49:26.333255+00:00", + }, + { + "code": None, + "created_at": "2021-12-15T10:43:45.165486+00:00", + "description": "LOLOOOOOooo", + "id": 9354, + "is_enabled": True, + "name": "Platform CCCCCC - 19999", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2021-12-15T10:43:45.165486+00:00", + }, + { + "code": None, + "created_at": "2021-10-26T15:07:00.464491+00:00", + "description": "Cost Center - Avenged Sevenfold, Id - 5", + "id": 9305, + "is_enabled": True, + "name": "Avenged Sevenfold", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2021-10-26T15:07:00.464491+00:00", + }, + { + "code": None, + "created_at": "2021-10-26T15:07:00.464491+00:00", + "description": "Cost Center - Lamb of God, Id - 3", + "id": 9306, + "is_enabled": True, + "name": "Lamb of God", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2021-10-26T15:07:00.464491+00:00", + }, + { + "code": None, + "created_at": "2021-10-26T15:07:00.464491+00:00", + "description": "Cost Center - Megadeth, Id - 1", + "id": 9307, + "is_enabled": True, + "name": "Megadeth", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2021-10-26T15:07:00.464491+00:00", + }, + { + "code": None, + "created_at": "2021-10-26T15:07:00.464491+00:00", + "description": "Cost Center - Metallica, Id - 2", + "id": 9308, + "is_enabled": True, + "name": "Metallica", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2021-10-26T15:07:00.464491+00:00", + }, + { + "code": None, + "created_at": "2021-10-26T15:07:00.464491+00:00", + "description": "Cost Center - Opeth, Id - 4", + "id": 9309, + "is_enabled": True, + "name": "Opeth", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "updated_at": "2021-10-26T15:07:00.464491+00:00", + }, + { + "code": "82758", + "created_at": "2020-09-02T08:05:57.677861+00:00", + "description": "", + "id": 6589, + "is_enabled": True, + "name": "F & A", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:58.677861+00:00", + }, + { + "code": "30868", + "created_at": "2020-09-02T08:05:55.963835+00:00", + "description": "", + "id": 6588, + "is_enabled": True, + "name": "Internal", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:56.963835+00:00", + }, + { + "code": "77240", + "created_at": "2020-09-02T08:05:55.630647+00:00", + "description": "", + "id": 6587, + "is_enabled": True, + "name": "Corporate", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:56.630647+00:00", + }, + { + "code": "62958", + "created_at": "2020-09-02T08:05:55.303377+00:00", + "description": "", + "id": 6586, + "is_enabled": True, + "name": "Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:56.303377+00:00", + }, + { + "code": "35260", + "created_at": "2020-09-02T08:05:54.957871+00:00", + "description": "", + "id": 6585, + "is_enabled": True, + "name": "Office", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:55.957871+00:00", + }, + { + "code": "52111", + "created_at": "2020-09-02T08:05:54.629473+00:00", + "description": "", + "id": 6584, + "is_enabled": True, + "name": "Head", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:55.629473+00:00", + }, + { + "code": "14530", + "created_at": "2020-09-02T08:05:54.288304+00:00", + "description": "", + "id": 6583, + "is_enabled": True, + "name": "OPS & Retail", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:55.288304+00:00", + }, + { + "code": "00207", + "created_at": "2020-09-02T08:05:53.943911+00:00", + "description": "", + "id": 6582, + "is_enabled": True, + "name": "Administration", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:54.943911+00:00", + }, + { + "code": "48163", + "created_at": "2020-09-02T08:05:53.620144+00:00", + "description": "", + "id": 6581, + "is_enabled": True, + "name": "Treasury", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:54.620144+00:00", + }, + { + "code": "38594", + "created_at": "2020-09-02T08:05:53.286029+00:00", + "description": "", + "id": 6580, + "is_enabled": True, + "name": "Sales and Cross", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": [ + "usqywo0f3nBY", + "us3o3Yl7A5Uq", + "usiUCyQYp2N2", + "usenjNn1QU1A", + "us5LYztuG20F", + "usuycevSQL2z", + "ushzyZgwhV7M", + "use1hqDbsybg", + "us5qnHSldfcB", + "us6bdTBqx1iZ", + "usJunSVNaFGE", + "usZU7tBgtPVH", + "us49CBDOfTLC", + ], + "updated_at": "2020-09-02T08:05:54.286029+00:00", + }, + ] + } + ], + "get_all_projects": # !/usr/bin/python + # -*- coding: utf-8 -*- + [ + { + "data": [ + { + "approver_user_ids": [], + "approver_users": [], + "code": "Template-FF", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - Fixed Fee Project with Five Tasks, Id - Template-FF", + "display_name": "Fixed Fee Project with Five Tasks", + "id": 300177, + "is_enabled": True, + "name": "Fixed Fee Project with Five Tasks", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10078", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - Fyle NetSuite Integration, Id - 10078", + "display_name": "Fyle NetSuite Integration", + "id": 300178, + "is_enabled": True, + "name": "Fyle NetSuite Integration", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10077", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - Fyle Sage Intacct Integration, Id - 10077", + "display_name": "Fyle Sage Intacct Integration", + "id": 300179, + "is_enabled": True, + "name": "Fyle Sage Intacct Integration", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10000", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - General Overhead, Id - 10000", + "display_name": "General Overhead", + "id": 300180, + "is_enabled": True, + "name": "General Overhead", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10025", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - General Overhead-Current, Id - 10025", + "display_name": "General Overhead-Current", + "id": 300181, + "is_enabled": True, + "name": "General Overhead-Current", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10083", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - labhvam, Id - 10083", + "display_name": "labhvam", + "id": 300182, + "is_enabled": True, + "name": "labhvam", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10080", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - Mobile App Redesign, Id - 10080", + "display_name": "Mobile App Redesign", + "id": 300183, + "is_enabled": True, + "name": "Mobile App Redesign", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10081", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - Platform APIs, Id - 10081", + "display_name": "Platform APIs", + "id": 300184, + "is_enabled": True, + "name": "Platform APIs", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "10082", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - Support Taxes, Id - 10082", + "display_name": "Support Taxes", + "id": 300185, + "is_enabled": True, + "name": "Support Taxes", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [], + "approver_users": [], + "code": "Template-TM", + "created_at": "2022-08-10T16:50:50.914909+00:00", + "description": "Sage Intacct Project - T&M Project with Five Tasks, Id - Template-TM", + "display_name": "T&M Project with Five Tasks", + "id": 300186, + "is_enabled": True, + "name": "T&M Project with Five Tasks", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-08-10T16:50:50.914909+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "14449", + "created_at": "2022-03-18T09:04:58.414064+00:00", + "description": "Project - Project Sravan, Id - 14449", + "display_name": "Project Sravan", + "id": 291035, + "is_enabled": True, + "name": "Project Sravan", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-03-18T09:04:58.414064+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "465", + "created_at": "2022-02-10T08:05:06.127907+00:00", + "description": "Project - Penister Hospital Fabricators, Id - 465", + "display_name": "Penister Hospital Fabricators", + "id": 290931, + "is_enabled": True, + "name": "Penister Hospital Fabricators", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-02-10T08:05:06.127907+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1505", + "created_at": "2022-02-10T08:05:06.127907+00:00", + "description": "Project - Rogers Communication, Id - 1505", + "display_name": "Rogers Communication", + "id": 290932, + "is_enabled": True, + "name": "Rogers Communication", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-02-10T08:05:06.127907+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1547", + "created_at": "2022-02-10T08:05:02.989188+00:00", + "description": "Project - FA-HB Inc., Id - 1547", + "display_name": "FA-HB Inc.", + "id": 290930, + "is_enabled": True, + "name": "FA-HB Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-02-10T08:05:02.989188+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1249", + "created_at": "2022-02-10T08:04:56.661256+00:00", + "description": "Project - AB&I Holdings, Id - 1249", + "display_name": "AB&I Holdings", + "id": 290928, + "is_enabled": True, + "name": "AB&I Holdings", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-02-10T08:04:56.661256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1491", + "created_at": "2022-02-10T08:04:56.661256+00:00", + "description": "Project - Alpart, Id - 1491", + "display_name": "Alpart", + "id": 290929, + "is_enabled": True, + "name": "Alpart", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-02-10T08:04:56.661256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "14045", + "created_at": "2022-01-21T08:04:53.290095+00:00", + "description": "Project - Wow Company, Id - 14045", + "display_name": "Wow Company", + "id": 290084, + "is_enabled": True, + "name": "Wow Company", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-01-21T08:04:53.290095+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": None, + "created_at": "2022-01-12T05:57:06.832363+00:00", + "description": None, + "display_name": "Parent Project with Sub Project", + "id": 290069, + "is_enabled": True, + "name": "Parent Project with Sub Project", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-01-12T05:57:08.620524+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": None, + "created_at": "2022-01-12T05:56:54.681118+00:00", + "description": None, + "display_name": "Parent Project with Sub Project / Sub Project 2", + "id": 290068, + "is_enabled": True, + "name": "Parent Project with Sub Project", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": "Sub Project 2", + "updated_at": "2022-01-12T05:56:56.428752+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": None, + "created_at": "2022-01-12T05:56:38.461931+00:00", + "description": None, + "display_name": "Parent Project with Sub Project / Sub Project 1", + "id": 290067, + "is_enabled": True, + "name": "Parent Project with Sub Project", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": "Sub Project 1", + "updated_at": "2022-01-12T05:56:40.262033+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "13815", + "created_at": "2022-01-11T14:36:14.140465+00:00", + "description": "Project - Nilesh Pant, Id - 13815", + "display_name": "Nilesh Pant", + "id": 290065, + "is_enabled": True, + "name": "Nilesh Pant", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2022-01-11T14:36:14.140465+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": None, + "created_at": "2021-12-01T10:01:48.215109+00:00", + "description": None, + "display_name": "Integrations / Xero", + "id": 290006, + "is_enabled": True, + "name": "Integrations", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": "Xero", + "updated_at": "2021-12-01T10:01:48.377496+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": None, + "created_at": "2021-12-01T10:00:17.659628+00:00", + "description": None, + "display_name": "Integrations", + "id": 290005, + "is_enabled": True, + "name": "Integrations", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-12-01T10:00:17.852458+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1271", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - UniExchange, Id - 1271", + "display_name": "UniExchange", + "id": 280677, + "is_enabled": True, + "name": "UniExchange", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "863", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Unnold Hospital Co., Id - 863", + "display_name": "Unnold Hospital Co.", + "id": 280678, + "is_enabled": True, + "name": "Unnold Hospital Co.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1212", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Upper 49th, Id - 1212", + "display_name": "Upper 49th", + "id": 280679, + "is_enabled": True, + "name": "Upper 49th", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "251", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Ursery Publishing Group, Id - 251", + "display_name": "Ursery Publishing Group", + "id": 280680, + "is_enabled": True, + "name": "Ursery Publishing Group", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "527", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Urwin Leasing Group, Id - 527", + "display_name": "Urwin Leasing Group", + "id": 280681, + "is_enabled": True, + "name": "Urwin Leasing Group", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "293", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Valley Center Catering Leasing, Id - 293", + "display_name": "Valley Center Catering Leasing", + "id": 280682, + "is_enabled": True, + "name": "Valley Center Catering Leasing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "559", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vanaken Apartments Holding Corp., Id - 559", + "display_name": "Vanaken Apartments Holding Corp.", + "id": 280683, + "is_enabled": True, + "name": "Vanaken Apartments Holding Corp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "797", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vanasse Antiques Networking, Id - 797", + "display_name": "Vanasse Antiques Networking", + "id": 280684, + "is_enabled": True, + "name": "Vanasse Antiques Networking", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "507", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vance Construction and Associates, Id - 507", + "display_name": "Vance Construction and Associates", + "id": 280685, + "is_enabled": True, + "name": "Vance Construction and Associates", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "503", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vanwyngaarden Title Systems, Id - 503", + "display_name": "Vanwyngaarden Title Systems", + "id": 280686, + "is_enabled": True, + "name": "Vanwyngaarden Title Systems", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "866", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vegas Tours, Id - 866", + "display_name": "Vegas Tours", + "id": 280687, + "is_enabled": True, + "name": "Vegas Tours", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "287", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vellekamp Title Distributors, Id - 287", + "display_name": "Vellekamp Title Distributors", + "id": 280688, + "is_enabled": True, + "name": "Vellekamp Title Distributors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "448", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Veradale Telecom Manufacturing, Id - 448", + "display_name": "Veradale Telecom Manufacturing", + "id": 280689, + "is_enabled": True, + "name": "Veradale Telecom Manufacturing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "336", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vermont Attorneys Company, Id - 336", + "display_name": "Vermont Attorneys Company", + "id": 280690, + "is_enabled": True, + "name": "Vermont Attorneys Company", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "712", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Verrelli Construction -, Id - 712", + "display_name": "Verrelli Construction -", + "id": 280691, + "is_enabled": True, + "name": "Verrelli Construction -", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1278", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vertex, Id - 1278", + "display_name": "Vertex", + "id": 280692, + "is_enabled": True, + "name": "Vertex", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "249", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vessel Painting Holding Corp., Id - 249", + "display_name": "Vessel Painting Holding Corp.", + "id": 280693, + "is_enabled": True, + "name": "Vessel Painting Holding Corp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "301", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Villanova Lumber Systems, Id - 301", + "display_name": "Villanova Lumber Systems", + "id": 280694, + "is_enabled": True, + "name": "Villanova Lumber Systems", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "637", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Virginia Beach Hospital Manufacturing, Id - 637", + "display_name": "Virginia Beach Hospital Manufacturing", + "id": 280695, + "is_enabled": True, + "name": "Virginia Beach Hospital Manufacturing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "854", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vista Lumber Agency, Id - 854", + "display_name": "Vista Lumber Agency", + "id": 280696, + "is_enabled": True, + "name": "Vista Lumber Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "314", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vivas Electric Sales, Id - 314", + "display_name": "Vivas Electric Sales", + "id": 280697, + "is_enabled": True, + "name": "Vivas Electric Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1136", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Vodaphone, Id - 1136", + "display_name": "Vodaphone", + "id": 280698, + "is_enabled": True, + "name": "Vodaphone", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "239", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Volden Publishing Systems, Id - 239", + "display_name": "Volden Publishing Systems", + "id": 280699, + "is_enabled": True, + "name": "Volden Publishing Systems", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "795", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Volmar Liquors and Associates, Id - 795", + "display_name": "Volmar Liquors and Associates", + "id": 280700, + "is_enabled": True, + "name": "Volmar Liquors and Associates", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "582", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Volmink Builders Inc., Id - 582", + "display_name": "Volmink Builders Inc.", + "id": 280701, + "is_enabled": True, + "name": "Volmink Builders Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "338", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wagenheim Painting and Associates, Id - 338", + "display_name": "Wagenheim Painting and Associates", + "id": 280702, + "is_enabled": True, + "name": "Wagenheim Painting and Associates", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "658", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wahlers Lumber Management, Id - 658", + "display_name": "Wahlers Lumber Management", + "id": 280703, + "is_enabled": True, + "name": "Wahlers Lumber Management", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "156", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wallace Printers, Id - 156", + "display_name": "Wallace Printers", + "id": 280704, + "is_enabled": True, + "name": "Wallace Printers", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1135", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Walter Martin, Id - 1135", + "display_name": "Walter Martin", + "id": 280705, + "is_enabled": True, + "name": "Walter Martin", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "883", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Walters Production Company, Id - 883", + "display_name": "Walters Production Company", + "id": 280706, + "is_enabled": True, + "name": "Walters Production Company", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "261", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wapp Hardware Sales, Id - 261", + "display_name": "Wapp Hardware Sales", + "id": 280707, + "is_enabled": True, + "name": "Wapp Hardware Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "598", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Warnberg Automotive and Associates, Id - 598", + "display_name": "Warnberg Automotive and Associates", + "id": 280708, + "is_enabled": True, + "name": "Warnberg Automotive and Associates", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "773", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Warwick Lumber, Id - 773", + "display_name": "Warwick Lumber", + "id": 280709, + "is_enabled": True, + "name": "Warwick Lumber", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "509", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wasager Wine Sales, Id - 509", + "display_name": "Wasager Wine Sales", + "id": 280710, + "is_enabled": True, + "name": "Wasager Wine Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "843", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wassenaar Construction Services, Id - 843", + "display_name": "Wassenaar Construction Services", + "id": 280711, + "is_enabled": True, + "name": "Wassenaar Construction Services", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1308", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Watertown Hicks, Id - 1308", + "display_name": "Watertown Hicks", + "id": 280712, + "is_enabled": True, + "name": "Watertown Hicks", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "651", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Weare and Norvell Painting Co., Id - 651", + "display_name": "Weare and Norvell Painting Co.", + "id": 280713, + "is_enabled": True, + "name": "Weare and Norvell Painting Co.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1439", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Webmaster Gproxy, Id - 1439", + "display_name": "Webmaster Gproxy", + "id": 280714, + "is_enabled": True, + "name": "Webmaster Gproxy", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "579", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Webster Electric, Id - 579", + "display_name": "Webster Electric", + "id": 280715, + "is_enabled": True, + "name": "Webster Electric", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "596", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wedge Automotive Fabricators, Id - 596", + "display_name": "Wedge Automotive Fabricators", + "id": 280716, + "is_enabled": True, + "name": "Wedge Automotive Fabricators", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "715", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wenatchee Builders Fabricators, Id - 715", + "display_name": "Wenatchee Builders Fabricators", + "id": 280717, + "is_enabled": True, + "name": "Wenatchee Builders Fabricators", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "760", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wence Antiques Rentals, Id - 760", + "display_name": "Wence Antiques Rentals", + "id": 280718, + "is_enabled": True, + "name": "Wence Antiques Rentals", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "281", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wendler Markets Leasing, Id - 281", + "display_name": "Wendler Markets Leasing", + "id": 280719, + "is_enabled": True, + "name": "Wendler Markets Leasing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "371", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - West Covina Builders Distributors, Id - 371", + "display_name": "West Covina Builders Distributors", + "id": 280720, + "is_enabled": True, + "name": "West Covina Builders Distributors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "767", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Westminster Lumber Sales, Id - 767", + "display_name": "Westminster Lumber Sales", + "id": 280721, + "is_enabled": True, + "name": "Westminster Lumber Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "778", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Westminster Lumber Sales 1, Id - 778", + "display_name": "Westminster Lumber Sales 1", + "id": 280722, + "is_enabled": True, + "name": "Westminster Lumber Sales 1", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "749", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - West Palm Beach Painting Manufacturing, Id - 749", + "display_name": "West Palm Beach Painting Manufacturing", + "id": 280723, + "is_enabled": True, + "name": "West Palm Beach Painting Manufacturing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "677", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wethersfield Hardware Dynamics, Id - 677", + "display_name": "Wethersfield Hardware Dynamics", + "id": 280724, + "is_enabled": True, + "name": "Wethersfield Hardware Dynamics", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "348", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wettlaufer Construction Systems, Id - 348", + "display_name": "Wettlaufer Construction Systems", + "id": 280725, + "is_enabled": True, + "name": "Wettlaufer Construction Systems", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "626", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wever Apartments -, Id - 626", + "display_name": "Wever Apartments -", + "id": 280726, + "is_enabled": True, + "name": "Wever Apartments -", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "495", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Whetzell and Maymon Antiques Sales, Id - 495", + "display_name": "Whetzell and Maymon Antiques Sales", + "id": 280727, + "is_enabled": True, + "name": "Whetzell and Maymon Antiques Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "729", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Whittier Hardware -, Id - 729", + "display_name": "Whittier Hardware -", + "id": 280728, + "is_enabled": True, + "name": "Whittier Hardware -", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1282", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Whole Oats Markets, Id - 1282", + "display_name": "Whole Oats Markets", + "id": 280729, + "is_enabled": True, + "name": "Whole Oats Markets", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "674", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wickenhauser Hardware Management, Id - 674", + "display_name": "Wickenhauser Hardware Management", + "id": 280730, + "is_enabled": True, + "name": "Wickenhauser Hardware Management", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "452", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wicklund Leasing Corporation, Id - 452", + "display_name": "Wicklund Leasing Corporation", + "id": 280731, + "is_enabled": True, + "name": "Wicklund Leasing Corporation", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "425", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wiesel Construction Dynamics, Id - 425", + "display_name": "Wiesel Construction Dynamics", + "id": 280732, + "is_enabled": True, + "name": "Wiesel Construction Dynamics", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1390", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wiggles Inc., Id - 1390", + "display_name": "Wiggles Inc.", + "id": 280733, + "is_enabled": True, + "name": "Wiggles Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "521", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wilkey Markets Group, Id - 521", + "display_name": "Wilkey Markets Group", + "id": 280734, + "is_enabled": True, + "name": "Wilkey Markets Group", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1066", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Williams Electronics and Communications, Id - 1066", + "display_name": "Williams Electronics and Communications", + "id": 280735, + "is_enabled": True, + "name": "Williams Electronics and Communications", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "93", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Williams Wireless World, Id - 93", + "display_name": "Williams Wireless World", + "id": 280736, + "is_enabled": True, + "name": "Williams Wireless World", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "876", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Will's Leather Co., Id - 876", + "display_name": "Will's Leather Co.", + "id": 280737, + "is_enabled": True, + "name": "Will's Leather Co.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "532", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wilner Liquors, Id - 532", + "display_name": "Wilner Liquors", + "id": 280738, + "is_enabled": True, + "name": "Wilner Liquors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "193", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wilson Kaplan, Id - 193", + "display_name": "Wilson Kaplan", + "id": 280739, + "is_enabled": True, + "name": "Wilson Kaplan", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "716", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Windisch Title Corporation, Id - 716", + "display_name": "Windisch Title Corporation", + "id": 280740, + "is_enabled": True, + "name": "Windisch Title Corporation", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "625", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Witten Antiques Services, Id - 625", + "display_name": "Witten Antiques Services", + "id": 280741, + "is_enabled": True, + "name": "Witten Antiques Services", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "441", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wolfenden Markets Holding Corp., Id - 441", + "display_name": "Wolfenden Markets Holding Corp.", + "id": 280742, + "is_enabled": True, + "name": "Wolfenden Markets Holding Corp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "641", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wollan Software Rentals, Id - 641", + "display_name": "Wollan Software Rentals", + "id": 280743, + "is_enabled": True, + "name": "Wollan Software Rentals", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1203", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wood-Mizer, Id - 1203", + "display_name": "Wood-Mizer", + "id": 280744, + "is_enabled": True, + "name": "Wood-Mizer", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "198", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Woods Publishing Co., Id - 198", + "display_name": "Woods Publishing Co.", + "id": 280745, + "is_enabled": True, + "name": "Woods Publishing Co.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1045", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wood Wonders Funiture, Id - 1045", + "display_name": "Wood Wonders Funiture", + "id": 280746, + "is_enabled": True, + "name": "Wood Wonders Funiture", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "645", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Woon Hardware Networking, Id - 645", + "display_name": "Woon Hardware Networking", + "id": 280747, + "is_enabled": True, + "name": "Woon Hardware Networking", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "549", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Wraight Software and Associates, Id - 549", + "display_name": "Wraight Software and Associates", + "id": 280748, + "is_enabled": True, + "name": "Wraight Software and Associates", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1166", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - X Eye Corp, Id - 1166", + "display_name": "X Eye Corp", + "id": 280749, + "is_enabled": True, + "name": "X Eye Corp", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "536", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Yahl Markets Incorporated, Id - 536", + "display_name": "Yahl Markets Incorporated", + "id": 280750, + "is_enabled": True, + "name": "Yahl Markets Incorporated", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "850", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Yanity Apartments and Associates, Id - 850", + "display_name": "Yanity Apartments and Associates", + "id": 280751, + "is_enabled": True, + "name": "Yanity Apartments and Associates", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "440", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Yarnell Catering Holding Corp., Id - 440", + "display_name": "Yarnell Catering Holding Corp.", + "id": 280752, + "is_enabled": True, + "name": "Yarnell Catering Holding Corp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "481", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Yockey Markets Inc., Id - 481", + "display_name": "Yockey Markets Inc.", + "id": 280753, + "is_enabled": True, + "name": "Yockey Markets Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "886", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Yong Yi, Id - 886", + "display_name": "Yong Yi", + "id": 280754, + "is_enabled": True, + "name": "Yong Yi", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "984", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Y-Tec Manufacturing, Id - 984", + "display_name": "Y-Tec Manufacturing", + "id": 280755, + "is_enabled": True, + "name": "Y-Tec Manufacturing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "692", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Yucca Valley Camping, Id - 692", + "display_name": "Yucca Valley Camping", + "id": 280756, + "is_enabled": True, + "name": "Yucca Valley Camping", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "319", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Yucca Valley Title Agency, Id - 319", + "display_name": "Yucca Valley Title Agency", + "id": 280757, + "is_enabled": True, + "name": "Yucca Valley Title Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "743", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Zearfoss Windows Group, Id - 743", + "display_name": "Zearfoss Windows Group", + "id": 280758, + "is_enabled": True, + "name": "Zearfoss Windows Group", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "500", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Zechiel _ Management, Id - 500", + "display_name": "Zechiel _ Management", + "id": 280759, + "is_enabled": True, + "name": "Zechiel _ Management", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "354", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Zombro Telecom Leasing, Id - 354", + "display_name": "Zombro Telecom Leasing", + "id": 280760, + "is_enabled": True, + "name": "Zombro Telecom Leasing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "413", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Zucca Electric Agency, Id - 413", + "display_name": "Zucca Electric Agency", + "id": 280761, + "is_enabled": True, + "name": "Zucca Electric Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "594", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Zucconi Telecom Sales, Id - 594", + "display_name": "Zucconi Telecom Sales", + "id": 280762, + "is_enabled": True, + "name": "Zucconi Telecom Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "449", + "created_at": "2021-08-11T08:15:31.577584+00:00", + "description": "Project - Zurasky Markets Dynamics, Id - 449", + "display_name": "Zurasky Markets Dynamics", + "id": 280763, + "is_enabled": True, + "name": "Zurasky Markets Dynamics", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "568", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Russell Telecom, Id - 568", + "display_name": "Russell Telecom", + "id": 280484, + "is_enabled": True, + "name": "Russell Telecom", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1125", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Russ Mygrant, Id - 1125", + "display_name": "Russ Mygrant", + "id": 280485, + "is_enabled": True, + "name": "Russ Mygrant", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "392", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Ruts Construction Holding Corp., Id - 392", + "display_name": "Ruts Construction Holding Corp.", + "id": 280486, + "is_enabled": True, + "name": "Ruts Construction Holding Corp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "326", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Saenger _ Inc., Id - 326", + "display_name": "Saenger _ Inc.", + "id": 280487, + "is_enabled": True, + "name": "Saenger _ Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "633", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Salisbury Attorneys Group, Id - 633", + "display_name": "Salisbury Attorneys Group", + "id": 280488, + "is_enabled": True, + "name": "Salisbury Attorneys Group", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "187", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sally Ward, Id - 187", + "display_name": "Sally Ward", + "id": 280489, + "is_enabled": True, + "name": "Sally Ward", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1217", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Samantha Walker, Id - 1217", + "display_name": "Samantha Walker", + "id": 280490, + "is_enabled": True, + "name": "Samantha Walker", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1369", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sam Brown, Id - 1369", + "display_name": "Sam Brown", + "id": 280491, + "is_enabled": True, + "name": "Sam Brown", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "556", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - San Angelo Automotive Rentals, Id - 556", + "display_name": "San Angelo Automotive Rentals", + "id": 280492, + "is_enabled": True, + "name": "San Angelo Automotive Rentals", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "444", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - San Diego Plumbing Distributors, Id - 444", + "display_name": "San Diego Plumbing Distributors", + "id": 280493, + "is_enabled": True, + "name": "San Diego Plumbing Distributors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "728", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - San Diego Windows Agency, Id - 728", + "display_name": "San Diego Windows Agency", + "id": 280494, + "is_enabled": True, + "name": "San Diego Windows Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1236", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sandoval Products Inc, Id - 1236", + "display_name": "Sandoval Products Inc", + "id": 280495, + "is_enabled": True, + "name": "Sandoval Products Inc", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "88", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sandra Burns, Id - 88", + "display_name": "Sandra Burns", + "id": 280496, + "is_enabled": True, + "name": "Sandra Burns", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "644", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sandwich Antiques Services, Id - 644", + "display_name": "Sandwich Antiques Services", + "id": 280497, + "is_enabled": True, + "name": "Sandwich Antiques Services", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "366", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sandwich Telecom Sales, Id - 366", + "display_name": "Sandwich Telecom Sales", + "id": 280498, + "is_enabled": True, + "name": "Sandwich Telecom Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "153", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sandy King, Id - 153", + "display_name": "Sandy King", + "id": 280499, + "is_enabled": True, + "name": "Sandy King", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "882", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sandy Whines, Id - 882", + "display_name": "Sandy Whines", + "id": 280500, + "is_enabled": True, + "name": "Sandy Whines", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1036", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - San Francisco Design Center, Id - 1036", + "display_name": "San Francisco Design Center", + "id": 280501, + "is_enabled": True, + "name": "San Francisco Design Center", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "587", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - San Luis Obispo Construction Inc., Id - 587", + "display_name": "San Luis Obispo Construction Inc.", + "id": 280502, + "is_enabled": True, + "name": "San Luis Obispo Construction Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "683", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Santa Ana Telecom Management, Id - 683", + "display_name": "Santa Ana Telecom Management", + "id": 280503, + "is_enabled": True, + "name": "Santa Ana Telecom Management", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "255", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Santa Fe Springs Construction Corporation, Id - 255", + "display_name": "Santa Fe Springs Construction Corporation", + "id": 280504, + "is_enabled": True, + "name": "Santa Fe Springs Construction Corporation", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "713", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Santa Maria Lumber Inc., Id - 713", + "display_name": "Santa Maria Lumber Inc.", + "id": 280505, + "is_enabled": True, + "name": "Santa Maria Lumber Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "427", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Santa Monica Attorneys Manufacturing, Id - 427", + "display_name": "Santa Monica Attorneys Manufacturing", + "id": 280506, + "is_enabled": True, + "name": "Santa Monica Attorneys Manufacturing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "794", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sarasota Software Rentals, Id - 794", + "display_name": "Sarasota Software Rentals", + "id": 280507, + "is_enabled": True, + "name": "Sarasota Software Rentals", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "412", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sarchett Antiques Networking, Id - 412", + "display_name": "Sarchett Antiques Networking", + "id": 280508, + "is_enabled": True, + "name": "Sarchett Antiques Networking", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "612", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sawatzky Catering Rentals, Id - 612", + "display_name": "Sawatzky Catering Rentals", + "id": 280509, + "is_enabled": True, + "name": "Sawatzky Catering Rentals", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "744", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sax Lumber Co., Id - 744", + "display_name": "Sax Lumber Co.", + "id": 280510, + "is_enabled": True, + "name": "Sax Lumber Co.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "686", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Scalley Construction Inc., Id - 686", + "display_name": "Scalley Construction Inc.", + "id": 280511, + "is_enabled": True, + "name": "Scalley Construction Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "514", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Schlicker Metal Fabricators Fabricators, Id - 514", + "display_name": "Schlicker Metal Fabricators Fabricators", + "id": 280512, + "is_enabled": True, + "name": "Schlicker Metal Fabricators Fabricators", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "445", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Schmauder Markets Corporation, Id - 445", + "display_name": "Schmauder Markets Corporation", + "id": 280513, + "is_enabled": True, + "name": "Schmauder Markets Corporation", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "908", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Schmidt Sporting Goods, Id - 908", + "display_name": "Schmidt Sporting Goods", + "id": 280514, + "is_enabled": True, + "name": "Schmidt Sporting Goods", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "830", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Schneck Automotive Group, Id - 830", + "display_name": "Schneck Automotive Group", + "id": 280515, + "is_enabled": True, + "name": "Schneck Automotive Group", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "426", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Scholl Catering -, Id - 426", + "display_name": "Scholl Catering -", + "id": 280516, + "is_enabled": True, + "name": "Scholl Catering -", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "334", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Schreck Hardware Systems, Id - 334", + "display_name": "Schreck Hardware Systems", + "id": 280517, + "is_enabled": True, + "name": "Schreck Hardware Systems", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "836", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Schwarzenbach Attorneys Systems, Id - 836", + "display_name": "Schwarzenbach Attorneys Systems", + "id": 280518, + "is_enabled": True, + "name": "Schwarzenbach Attorneys Systems", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "511", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Scottsbluff Lumber -, Id - 511", + "display_name": "Scottsbluff Lumber -", + "id": 280519, + "is_enabled": True, + "name": "Scottsbluff Lumber -", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "684", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Scottsbluff Plumbing Rentals, Id - 684", + "display_name": "Scottsbluff Plumbing Rentals", + "id": 280520, + "is_enabled": True, + "name": "Scottsbluff Plumbing Rentals", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "347", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Scullion Telecom Agency, Id - 347", + "display_name": "Scullion Telecom Agency", + "id": 280521, + "is_enabled": True, + "name": "Scullion Telecom Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "143", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sebastian Inc., Id - 143", + "display_name": "Sebastian Inc.", + "id": 280522, + "is_enabled": True, + "name": "Sebastian Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "835", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sebek Builders Distributors, Id - 835", + "display_name": "Sebek Builders Distributors", + "id": 280523, + "is_enabled": True, + "name": "Sebek Builders Distributors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1225", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sedlak Inc, Id - 1225", + "display_name": "Sedlak Inc", + "id": 280524, + "is_enabled": True, + "name": "Sedlak Inc", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "697", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Seecharan and Horten Hardware Manufacturing, Id - 697", + "display_name": "Seecharan and Horten Hardware Manufacturing", + "id": 280525, + "is_enabled": True, + "name": "Seecharan and Horten Hardware Manufacturing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "141", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Seena Rose, Id - 141", + "display_name": "Seena Rose", + "id": 280526, + "is_enabled": True, + "name": "Seena Rose", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "726", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Seilhymer Antiques Distributors, Id - 726", + "display_name": "Seilhymer Antiques Distributors", + "id": 280527, + "is_enabled": True, + "name": "Seilhymer Antiques Distributors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "628", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Selders Distributors, Id - 628", + "display_name": "Selders Distributors", + "id": 280528, + "is_enabled": True, + "name": "Selders Distributors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "410", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Selia Metal Fabricators Company, Id - 410", + "display_name": "Selia Metal Fabricators Company", + "id": 280529, + "is_enabled": True, + "name": "Selia Metal Fabricators Company", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "554", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Seney Windows Agency, Id - 554", + "display_name": "Seney Windows Agency", + "id": 280530, + "is_enabled": True, + "name": "Seney Windows Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "856", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sequim Automotive Systems, Id - 856", + "display_name": "Sequim Automotive Systems", + "id": 280531, + "is_enabled": True, + "name": "Sequim Automotive Systems", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "457", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Seyler Title Distributors, Id - 457", + "display_name": "Seyler Title Distributors", + "id": 280532, + "is_enabled": True, + "name": "Seyler Title Distributors", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "860", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Shackelton Hospital Sales, Id - 860", + "display_name": "Shackelton Hospital Sales", + "id": 280533, + "is_enabled": True, + "name": "Shackelton Hospital Sales", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "204", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sharon Stone, Id - 204", + "display_name": "Sharon Stone", + "id": 280534, + "is_enabled": True, + "name": "Sharon Stone", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "750", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sheinbein Construction Fabricators, Id - 750", + "display_name": "Sheinbein Construction Fabricators", + "id": 280535, + "is_enabled": True, + "name": "Sheinbein Construction Fabricators", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "266", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Shininger Lumber Holding Corp., Id - 266", + "display_name": "Shininger Lumber Holding Corp.", + "id": 280536, + "is_enabled": True, + "name": "Shininger Lumber Holding Corp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "313", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Shutter Title Services, Id - 313", + "display_name": "Shutter Title Services", + "id": 280537, + "is_enabled": True, + "name": "Shutter Title Services", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "523", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Siddiq Software -, Id - 523", + "display_name": "Siddiq Software -", + "id": 280538, + "is_enabled": True, + "name": "Siddiq Software -", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1198", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Simatry, Id - 1198", + "display_name": "Simatry", + "id": 280539, + "is_enabled": True, + "name": "Simatry", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "455", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Simi Valley Telecom Dynamics, Id - 455", + "display_name": "Simi Valley Telecom Dynamics", + "id": 280540, + "is_enabled": True, + "name": "Simi Valley Telecom Dynamics", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "547", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sindt Electric, Id - 547", + "display_name": "Sindt Electric", + "id": 280541, + "is_enabled": True, + "name": "Sindt Electric", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "732", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Skibo Construction Dynamics, Id - 732", + "display_name": "Skibo Construction Dynamics", + "id": 280542, + "is_enabled": True, + "name": "Skibo Construction Dynamics", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "476", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Slankard Automotive, Id - 476", + "display_name": "Slankard Automotive", + "id": 280543, + "is_enabled": True, + "name": "Slankard Automotive", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "504", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Slatter Metal Fabricators Inc., Id - 504", + "display_name": "Slatter Metal Fabricators Inc.", + "id": 280544, + "is_enabled": True, + "name": "Slatter Metal Fabricators Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1176", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - SlingShot Communications, Id - 1176", + "display_name": "SlingShot Communications", + "id": 280545, + "is_enabled": True, + "name": "SlingShot Communications", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "717", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sloman and Zeccardi Builders Agency, Id - 717", + "display_name": "Sloman and Zeccardi Builders Agency", + "id": 280546, + "is_enabled": True, + "name": "Sloman and Zeccardi Builders Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "264", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Smelley _ Manufacturing, Id - 264", + "display_name": "Smelley _ Manufacturing", + "id": 280547, + "is_enabled": True, + "name": "Smelley _ Manufacturing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1290", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Smith East, Id - 1290", + "display_name": "Smith East", + "id": 280548, + "is_enabled": True, + "name": "Smith East", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1049", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Smith Inc., Id - 1049", + "display_name": "Smith Inc.", + "id": 280549, + "is_enabled": True, + "name": "Smith Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1065", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Smith Photographic Equipment, Id - 1065", + "display_name": "Smith Photographic Equipment", + "id": 280550, + "is_enabled": True, + "name": "Smith Photographic Equipment", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1429", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Smith West, Id - 1429", + "display_name": "Smith West", + "id": 280551, + "is_enabled": True, + "name": "Smith West", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "808", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Snode and Draper Leasing Rentals, Id - 808", + "display_name": "Snode and Draper Leasing Rentals", + "id": 280552, + "is_enabled": True, + "name": "Snode and Draper Leasing Rentals", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "363", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Soares Builders Inc., Id - 363", + "display_name": "Soares Builders Inc.", + "id": 280553, + "is_enabled": True, + "name": "Soares Builders Inc.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1210", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Solidd Group Ltd, Id - 1210", + "display_name": "Solidd Group Ltd", + "id": 280554, + "is_enabled": True, + "name": "Solidd Group Ltd", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1168", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Soltrus, Id - 1168", + "display_name": "Soltrus", + "id": 280555, + "is_enabled": True, + "name": "Soltrus", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "719", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Solymani Electric Leasing, Id - 719", + "display_name": "Solymani Electric Leasing", + "id": 280556, + "is_enabled": True, + "name": "Solymani Electric Leasing", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "243", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sossong Plumbing Holding Corp., Id - 243", + "display_name": "Sossong Plumbing Holding Corp.", + "id": 280557, + "is_enabled": True, + "name": "Sossong Plumbing Holding Corp.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1427", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - South East, Id - 1427", + "display_name": "South East", + "id": 280558, + "is_enabled": True, + "name": "South East", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1227", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Spany ltd, Id - 1227", + "display_name": "Spany ltd", + "id": 280559, + "is_enabled": True, + "name": "Spany ltd", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "954", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Spectrum Eye, Id - 954", + "display_name": "Spectrum Eye", + "id": 280560, + "is_enabled": True, + "name": "Spectrum Eye", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1003", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sports Authority, Id - 1003", + "display_name": "Sports Authority", + "id": 280561, + "is_enabled": True, + "name": "Sports Authority", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1004", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Sport Station, Id - 1004", + "display_name": "Sport Station", + "id": 280562, + "is_enabled": True, + "name": "Sport Station", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "280", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Spurgin Telecom Agency, Id - 280", + "display_name": "Spurgin Telecom Agency", + "id": 280563, + "is_enabled": True, + "name": "Spurgin Telecom Agency", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1262", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - SS&C, Id - 1262", + "display_name": "SS&C", + "id": 280564, + "is_enabled": True, + "name": "SS&C", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "756", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Stai Publishing -, Id - 756", + "display_name": "Stai Publishing -", + "id": 280565, + "is_enabled": True, + "name": "Stai Publishing -", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "727", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Stampe Leasing and Associates, Id - 727", + "display_name": "Stampe Leasing and Associates", + "id": 280566, + "is_enabled": True, + "name": "Stampe Leasing and Associates", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1276", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Stantec Inc, Id - 1276", + "display_name": "Stantec Inc", + "id": 280567, + "is_enabled": True, + "name": "Stantec Inc", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1103", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Star Structural, Id - 1103", + "display_name": "Star Structural", + "id": 280568, + "is_enabled": True, + "name": "Star Structural", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "1141", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Steacy Tech Inc, Id - 1141", + "display_name": "Steacy Tech Inc", + "id": 280569, + "is_enabled": True, + "name": "Steacy Tech Inc", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "581", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Steep and Cloud Liquors Co., Id - 581", + "display_name": "Steep and Cloud Liquors Co.", + "id": 280570, + "is_enabled": True, + "name": "Steep and Cloud Liquors Co.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "613", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Steffensmeier Markets Co., Id - 613", + "display_name": "Steffensmeier Markets Co.", + "id": 280571, + "is_enabled": True, + "name": "Steffensmeier Markets Co.", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "846", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Steinberg Electric Networking, Id - 846", + "display_name": "Steinberg Electric Networking", + "id": 280572, + "is_enabled": True, + "name": "Steinberg Electric Networking", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + { + "approver_user_ids": [None, None], + "approver_users": [], + "code": "160", + "created_at": "2021-08-11T08:15:27.838114+00:00", + "description": "Project - Stella Sebastian Inc, Id - 160", + "display_name": "Stella Sebastian Inc", + "id": 280573, + "is_enabled": True, + "name": "Stella Sebastian Inc", + "org_id": "orNoatdUnm1w", + "restricted_spender_user_ids": None, + "sub_project": None, + "updated_at": "2021-09-29T10:46:33.242256+00:00", + }, + ] + } ], - 'get_all_reimbursements': #!/usr/bin/python -# -*- coding: utf-8 -*- -[{'data': [ - { - 'amount': 121, - 'code': None, - 'created_at': '2022-05-06T06:32:51.665316', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimv8ED0Yzxi0', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': None, - 'purpose': 'C/2022/05/R/6;Ashwin', - 'reimbursement_number': 'P/2022/05/R/6', - 'settlement_id': 'set0mrwTTgoHA', - 'updated_at': '2022-05-06T06:32:51.665316', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 665, - 'code': None, - 'created_at': '2022-05-05T09:55:14.040636', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimIWuET63w9n', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': None, - 'purpose': 'C/2022/05/R/5;Ashwin', - 'reimbursement_number': 'P/2022/05/R/5', - 'settlement_id': 'setfqoiqUVRYd', - 'updated_at': '2022-05-05T09:55:14.040636', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 122, - 'code': None, - 'created_at': '2022-05-05T09:03:33.334235', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimo1VO1yzyK6', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': None, - 'purpose': 'C/2022/05/R/4;Ashwin', - 'reimbursement_number': 'P/2022/05/R/4', - 'settlement_id': 'setUzZd9WDh4b', - 'updated_at': '2022-05-05T09:03:33.334235', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 111, - 'code': None, - 'created_at': '2022-05-05T08:49:14.027707', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimThZc9jwVDM', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': None, - 'purpose': 'C/2022/05/R/3;Ashwin', - 'reimbursement_number': 'P/2022/05/R/3', - 'settlement_id': 'set0LnL005MA7', - 'updated_at': '2022-05-05T08:49:14.027707', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 123, - 'code': None, - 'created_at': '2022-05-05T08:44:32.094519', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimvj3so5zBl7', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': None, - 'purpose': 'C/2022/05/R/2;Ashwin', - 'reimbursement_number': 'P/2022/05/R/2', - 'settlement_id': 'setlBZs14zpck', - 'updated_at': '2022-05-05T08:44:32.094519', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 21, - 'code': None, - 'created_at': '2022-05-05T08:30:19.675720', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimt2WBhq8FIg', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': None, - 'purpose': 'C/2022/05/R/1;Ashwin', - 'reimbursement_number': 'P/2022/05/R/1', - 'settlement_id': 'setU99Vr8cLZg', - 'updated_at': '2022-05-05T08:30:19.675720', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 324, - 'code': None, - 'created_at': '2022-02-23T09:06:54.845834', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimoigbgSgsGN', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-02-23T09:16:35.259812', - 'purpose': 'C/2022/02/R/1;Ashwin', - 'reimbursement_number': 'P/2022/02/R/2', - 'settlement_id': 'setm4TBEFI6Vs', - 'updated_at': '2022-02-23T09:16:35.259812', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 234266, - 'code': None, - 'created_at': '2022-01-12T08:08:48.920745', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimgZdOVQHTIl', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-02-23T08:58:48.122998', - 'purpose': 'C/2022/01/R/4;Ashwin', - 'reimbursement_number': 'P/2022/01/R/7', - 'settlement_id': 'setShxt8XtpDe', - 'updated_at': '2022-02-23T08:58:48.122998', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 0, - 'code': None, - 'created_at': '2022-01-12T07:25:21.389657', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimppRFvo8yxG', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-01-12T07:58:38.351034', - 'purpose': 'C/2022/01/R/3;Ashwin', - 'reimbursement_number': 'P/2022/01/R/6', - 'settlement_id': 'settezAUEL2MM', - 'updated_at': '2022-01-12T07:58:38.351034', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 0, - 'code': None, - 'created_at': '2022-01-12T07:14:35.442914', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimD3iyLcfZOn', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-01-12T07:58:38.351034', - 'purpose': 'C/2022/01/R/2;Ashwin', - 'reimbursement_number': 'P/2022/01/R/5', - 'settlement_id': 'setZiw3U2jZJN', - 'updated_at': '2022-01-12T07:58:38.351034', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 0, - 'code': None, - 'created_at': '2022-01-12T06:31:31.297625', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimNzT75miwZW', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-01-12T06:31:48.998005', - 'purpose': 'C/2022/01/R/1;Ashwin', - 'reimbursement_number': 'P/2022/01/R/4', - 'settlement_id': 'setm0EsvpnMdC', - 'updated_at': '2022-01-12T06:31:48.998005', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 8101, - 'code': None, - 'created_at': '2022-01-11T07:40:14.448043', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouI4K0DWCGYO', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'admin1@fyleforqvd.com', - 'full_name': 'Theresa Brown', 'id': 'us6bdTBqx1iZ' - }, - 'user_id': 'us6bdTBqx1iZ', - }, - 'employee_id': 'ouI4K0DWCGYO', - 'id': 'reimMiX47Aowb9', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-01-11T07:40:28.141818', - 'purpose': 'C/2020/09/R/2;Theresa Brown', - 'reimbursement_number': 'P/2022/01/R/3', - 'settlement_id': 'set4MukzhDoWV', - 'updated_at': '2022-01-11T07:40:28.141818', - 'user_id': 'us6bdTBqx1iZ', - }, - { - 'amount': 4508, - 'code': None, - 'created_at': '2022-01-11T07:05:19.982840', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'ouFo7ij9y58X', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user3@fyleforqvd.com', - 'full_name': 'Natalie Pope', 'id': 'usZU7tBgtPVH' - }, - 'user_id': 'usZU7tBgtPVH', - }, - 'employee_id': 'ouFo7ij9y58X', - 'id': 'reim84qiG9U8CA', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-01-11T07:05:32.093093', - 'purpose': 'C/2020/09/R/18;Natalie Pope', - 'reimbursement_number': 'P/2022/01/R/2', - 'settlement_id': 'setOHwW08X65f', - 'updated_at': '2022-01-11T07:05:32.093093', - 'user_id': 'usZU7tBgtPVH', - }, - { - 'amount': 4943, - 'code': None, - 'created_at': '2022-01-11T07:05:19.982840', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oupCGhU3azOj', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user10@fyleforqvd.com', - 'full_name': 'Matthew Estrada', - 'id': 'usiUCyQYp2N2'}, - 'user_id': 'usiUCyQYp2N2', - }, - 'employee_id': 'oupCGhU3azOj', - 'id': 'reime8ghoTzddu', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2022-01-11T07:05:32.093093', - 'purpose': 'C/2020/09/R/6;Matthew Estrada', - 'reimbursement_number': 'P/2022/01/R/1', - 'settlement_id': 'set9A2RqCjYYv', - 'updated_at': '2022-01-11T07:05:32.093093', - 'user_id': 'usiUCyQYp2N2', - }, - { - 'amount': 4199, - 'code': None, - 'created_at': '2021-11-18T03:47:54.607214', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouHoRakEut14', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user2@fyleforqvd.com', - 'full_name': 'Brian Foster', 'id': 'usn71kjcQibs' - }, - 'user_id': 'usn71kjcQibs', - }, - 'employee_id': 'ouHoRakEut14', - 'id': 'reimsfnlDufFGx', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:49:10.277535', - 'purpose': 'C/2020/09/R/14;Brian Foster', - 'reimbursement_number': 'P/2021/11/R/5', - 'settlement_id': 'setIg1rCStOIp', - 'updated_at': '2021-11-18T03:49:10.277535', - 'user_id': 'usn71kjcQibs', - }, - { - 'amount': 5486, - 'code': None, - 'created_at': '2021-11-18T03:47:54.607214', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 1', - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'id': 'ourWIYik4Igq', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user1@fyleforqvd.com', - 'full_name': 'Joshua Wood', 'id': 'usenjNn1QU1A'}, - 'user_id': 'usenjNn1QU1A', - }, - 'employee_id': 'ourWIYik4Igq', - 'id': 'reimWkDdw9LMlO', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:48:57.535498', - 'purpose': 'C/2020/09/R/10;Joshua Wood', - 'reimbursement_number': 'P/2021/11/R/6', - 'settlement_id': 'setRs2XBtFzfR', - 'updated_at': '2021-11-18T03:48:57.535498', - 'user_id': 'usenjNn1QU1A', - }, - { - 'amount': 6427, - 'code': None, - 'created_at': '2021-11-18T03:46:43.738353', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouydH1D1p8yA', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user4@fyleforqvd.com', - 'full_name': 'Samantha Washington', - 'id': 'us5LYztuG20F'}, - 'user_id': 'us5LYztuG20F', - }, - 'employee_id': 'ouydH1D1p8yA', - 'id': 'reimhFeIwSsip1', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:47:12.717605', - 'purpose': 'C/2020/09/R/22;Samantha Washington', - 'reimbursement_number': 'P/2021/11/R/4', - 'settlement_id': 'set08NdKebHfF', - 'updated_at': '2021-11-18T03:47:12.717605', - 'user_id': 'us5LYztuG20F', - }, - { - 'amount': 7287, - 'code': None, - 'created_at': '2021-11-18T03:16:58.706065', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuS57oGeQ2M', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user5@fyleforqvd.com', - 'full_name': 'Chris Curtis', 'id': 'us49CBDOfTLC' - }, - 'user_id': 'us49CBDOfTLC', - }, - 'employee_id': 'ouuS57oGeQ2M', - 'id': 'reimwcGJzxkKAc', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:47:12.717605', - 'purpose': 'C/2020/09/R/26;Chris Curtis', - 'reimbursement_number': 'P/2021/11/R/3', - 'settlement_id': 'setPCjJuoFwdA', - 'updated_at': '2021-11-18T03:47:12.717605', - 'user_id': 'us49CBDOfTLC', - }, - { - 'amount': 14009, - 'code': None, - 'created_at': '2021-11-18T03:13:55.852980', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 1', - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'id': 'ouBnHryuMUmD', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user6@fyleforqvd.com', - 'full_name': 'Victor Martinez', - 'id': 'usuycevSQL2z'}, - 'user_id': 'usuycevSQL2z', - }, - 'employee_id': 'ouBnHryuMUmD', - 'id': 'reimJAJVxJyl8X', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:14:21.236926', - 'purpose': 'C/2020/09/R/31;C/2020/09/R/30;C/2020/09/R/32;Victor Martinez' - , - 'reimbursement_number': 'P/2021/11/R/2', - 'settlement_id': 'setjty3tgI1sU', - 'updated_at': '2021-11-18T03:14:21.236926', - 'user_id': 'usuycevSQL2z', - }, - { - 'amount': 7661, - 'code': None, - 'created_at': '2021-11-18T03:13:55.852980', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oug6iN9ulsQ4', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user7@fyleforqvd.com', - 'full_name': 'James Taylor', 'id': 'ushzyZgwhV7M' - }, - 'user_id': 'ushzyZgwhV7M', - }, - 'employee_id': 'oug6iN9ulsQ4', - 'id': 'reimKTwb5XRiyk', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:14:07.645484', - 'purpose': 'C/2020/09/R/34;James Taylor', - 'reimbursement_number': 'P/2021/11/R/1', - 'settlement_id': 'setpHBwU9v69u', - 'updated_at': '2021-11-18T03:14:07.645484', - 'user_id': 'ushzyZgwhV7M', - }, - { - 'amount': 34, - 'code': None, - 'created_at': '2021-10-26T15:10:32.509717', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimk0HhL4YJDq', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:11:59.920394', - 'purpose': 'C/2021/10/R/4;Ashwin', - 'reimbursement_number': 'P/2021/10/R/4', - 'settlement_id': 'setfKGscIrCrV', - 'updated_at': '2021-11-18T03:11:59.920394', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 432, - 'code': None, - 'created_at': '2021-10-26T10:36:33.491684', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimCeI4oaV5HC', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:11:59.920394', - 'purpose': 'C/2021/10/R/3;Ashwin', - 'reimbursement_number': 'P/2021/10/R/3', - 'settlement_id': 'setGpb5rj33pT', - 'updated_at': '2021-11-18T03:11:59.920394', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 321, - 'code': None, - 'created_at': '2021-10-26T08:50:33.709669', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimYTNgVBeyif', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:11:59.920394', - 'purpose': 'C/2021/10/R/2;Ashwin', - 'reimbursement_number': 'P/2021/10/R/2', - 'settlement_id': 'setxbATGW3Fp1', - 'updated_at': '2021-11-18T03:11:59.920394', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 234, - 'code': None, - 'created_at': '2021-10-26T08:39:11.422588', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimiCpVFDDAlw', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-11-18T03:11:59.920394', - 'purpose': 'C/2021/10/R/1;Ashwin', - 'reimbursement_number': 'P/2021/10/R/1', - 'settlement_id': 'setbOZqoTS2pj', - 'updated_at': '2021-11-18T03:11:59.920394', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 1000, - 'code': None, - 'created_at': '2021-09-30T11:00:24.021125', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimQ9a3CfIzGm', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-09-30T11:00:47.770445', - 'purpose': 'C/2021/09/R/3;Ashwin', - 'reimbursement_number': 'P/2021/09/R/3', - 'settlement_id': 'setN44y9Y7yq6', - 'updated_at': '2021-09-30T11:00:47.770445', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 0, - 'code': None, - 'created_at': '2021-09-07T08:20:50.975383', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimgc6F2MlMxJ', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-09-30T11:00:47.770445', - 'purpose': 'C/2021/09/R/2;Ashwin', - 'reimbursement_number': 'P/2021/09/R/2', - 'settlement_id': 'setm4FGFIsgZO', - 'updated_at': '2021-09-30T11:00:47.770445', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 4000, - 'code': None, - 'created_at': '2021-09-07T07:48:17.396948', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimruay6IV9wY', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-09-30T11:00:47.770445', - 'purpose': 'C/2021/09/R/1;Ashwin from NetSuite', - 'reimbursement_number': 'P/2021/09/R/1', - 'settlement_id': 'settOu9MQDCjb', - 'updated_at': '2021-09-30T11:00:47.770445', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 125, - 'code': None, - 'created_at': '2021-08-25T09:58:55.336337', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimd8Ky05cEaV', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:59:01.453493', - 'purpose': 'C/2021/08/R/1;C/2021/08/R/2;Ashwin from NetSuite', - 'reimbursement_number': 'P/2021/08/R/1', - 'settlement_id': 'setrE0AnpfLR6', - 'updated_at': '2021-08-25T09:59:01.453493', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 23, - 'code': None, - 'created_at': '2021-05-04T06:01:54.300098', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', - }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimYwaMWMxDVS', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2021/05/R/1;Ashwin', - 'reimbursement_number': 'P/2021/05/R/1', - 'settlement_id': 'setvcaCr73T50', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 3428, - 'code': None, - 'created_at': '2021-03-30T06:16:01.736607', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'ouFo7ij9y58X', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user3@fyleforqvd.com', - 'full_name': 'Natalie Pope', 'id': 'usZU7tBgtPVH' - }, - 'user_id': 'usZU7tBgtPVH', + "get_all_corporate_cards": # !/usr/bin/python + # -*- coding: utf-8 -*- + [ + { + "data": [ + { + "assignor_user_id": "usqywo0f3nBY", + "bank_name": "Bank of America", + "card_number": "8084", + "cardholder_name": None, + "code": None, + "created_at": "2020-09-02T08:48:43.633229+00:00", + "data_feed_source": None, + "id": "bacczhYCLDUZ7I", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2021-09-07T08:14:53.668178+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:48:44.452298+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:48:48.452274+00:00", + "user_id": "usqywo0f3nBY", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "us6bdTBqx1iZ", + "bank_name": "Bank of America", + "card_number": "1319", + "cardholder_name": None, + "code": None, + "created_at": "2020-09-02T08:48:42.230365+00:00", + "data_feed_source": None, + "id": "baccXe1EZcZAc9", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2021-01-28T06:16:14.906883+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:48:43.590156+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:48:47.590135+00:00", + "user_id": "us6bdTBqx1iZ", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": None, + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-13278", + "cardholder_name": "Dr. Ross Eustace Geller's account", + "code": None, + "created_at": "2020-09-02T08:44:57.282773+00:00", + "data_feed_source": None, + "id": "baccfQehf3Ww4G", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": None, + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:05.948639+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:09.948597+00:00", + "user_id": None, + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-17561", + "cardholder_name": "Dr. Ross Eustace Geller's account", + "code": None, + "created_at": "2020-09-02T08:44:57.230783+00:00", + "data_feed_source": None, + "id": "baccF4AdQCIzUI", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:11.624070+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:05.106199+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:09.106164+00:00", + "user_id": "usuycevSQL2z", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-23341", + "cardholder_name": "Joseph Francis Tribbiani, Jr's account", + "code": None, + "created_at": "2020-09-02T08:44:57.170993+00:00", + "data_feed_source": None, + "id": "baccUBc4t8ZPjS", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:09.530540+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:04.609505+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:08.609471+00:00", + "user_id": "us5LYztuG20F", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-37464", + "cardholder_name": "Monica E. Geller-Bing's account", + "code": None, + "created_at": "2020-09-02T08:44:57.125184+00:00", + "data_feed_source": None, + "id": "bacc0F4WmHp0sG", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:08.054735+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:04.155563+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:08.155532+00:00", + "user_id": "usiUCyQYp2N2", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-83040", + "cardholder_name": "Chandler Muriel Bing's account", + "code": None, + "created_at": "2020-09-02T08:44:57.071304+00:00", + "data_feed_source": None, + "id": "bacckVW15GyGZu", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:07.699559+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:01.731666+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:05.731606+00:00", + "user_id": "us6bdTBqx1iZ", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-65015", + "cardholder_name": "Chandler Muriel Bing's account", + "code": None, + "created_at": "2020-09-02T08:44:56.992437+00:00", + "data_feed_source": None, + "id": "baccCNeYclm8kp", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:09.879628+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:01.335457+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:05.335432+00:00", + "user_id": "us49CBDOfTLC", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-73856", + "cardholder_name": "Phoebe Buffay-Hannigan's account", + "code": None, + "created_at": "2020-09-02T08:44:56.918992+00:00", + "data_feed_source": None, + "id": "baccx7FvID8jmp", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:09.197625+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:00.972093+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:04.972067+00:00", + "user_id": "usZU7tBgtPVH", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "us6bdTBqx1iZ", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-30555", + "cardholder_name": "Joseph Francis Tribbiani, Jr's account", + "code": None, + "created_at": "2020-09-02T08:44:56.862601+00:00", + "data_feed_source": None, + "id": "bacckCqZ39S95k", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2021-01-28T06:16:23.333848+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:45:00.560120+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:04.560091+00:00", + "user_id": "us6bdTBqx1iZ", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": None, + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-16866", + "cardholder_name": "Dr. Ross Eustace Geller's account", + "code": None, + "created_at": "2020-09-02T08:44:56.802319+00:00", + "data_feed_source": None, + "id": "bacchbqULPV9q4", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": None, + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:44:59.748841+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:03.748818+00:00", + "user_id": None, + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-85200", + "cardholder_name": "Phoebe Buffay-Hannigan's account", + "code": None, + "created_at": "2020-09-02T08:44:56.738053+00:00", + "data_feed_source": None, + "id": "baccFn9Kg0N3zj", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:08.845454+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:44:59.327845+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:03.327820+00:00", + "user_id": "usn71kjcQibs", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-34654", + "cardholder_name": "Monica E. Geller-Bing's account", + "code": None, + "created_at": "2020-09-02T08:44:56.690927+00:00", + "data_feed_source": None, + "id": "bacco5QaXfBo4E", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:12.388778+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:44:58.925901+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:02.925863+00:00", + "user_id": "use1hqDbsybg", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-37172", + "cardholder_name": "Chandler Muriel Bing's account", + "code": None, + "created_at": "2020-09-02T08:44:56.638414+00:00", + "data_feed_source": None, + "id": "bacc6SEFz8hEMc", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:12.046070+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:44:58.101066+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:02.101001+00:00", + "user_id": "ushzyZgwhV7M", + "verification_status": "NOT_VERIFIED", + }, + { + "assignor_user_id": "usJunSVNaFGE", + "bank_name": "American Express", + "card_number": "Sample-Bank-xxxxxx-18104", + "cardholder_name": "Phoebe Buffay-Hannigan's account", + "code": None, + "created_at": "2020-09-02T08:44:56.582614+00:00", + "data_feed_source": None, + "id": "baccFKdJjI55bo", + "is_dummy": False, + "is_visa_enrolled": False, + "last_assigned_at": "2020-09-02T08:45:08.507674+00:00", + "last_ready_for_verification_at": None, + "last_synced_at": "2020-09-02T08:44:57.714553+00:00", + "last_verification_attempt_at": None, + "last_verified_at": None, + "org_id": "orNoatdUnm1w", + "updated_at": "2020-09-02T08:45:01.714528+00:00", + "user_id": "usenjNn1QU1A", + "verification_status": "NOT_VERIFIED", + }, + ] + } + ], + "get_all_expense_fields": # !/usr/bin/python + # -*- coding: utf-8 -*- + [ + { + "data": [ + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + 164748, + 164755, + 164756, + 164757, + 164759, + 192359, + 192360, + 192361, + 192362, + 192456, + 192457, + 192458, + 192459, + 207983, + 207984, + 207985, + 207986, + 207987, + 207988, + 207989, + 207990, + 207991, + 207992, + 207993, + 207994, + 207995, + 207996, + 207997, + 207998, + 207999, + 208000, + 208001, + 208002, + 208003, + 208004, + 208005, + 208006, + 208007, + 208008, + 208009, + 208010, + 208011, + 208012, + 208013, + 208014, + 208015, + 208016, + 208017, + 208018, + 208019, + 208020, + 208021, + 208022, + 208023, + 208024, + 208025, + 208026, + 208027, + 208028, + 208029, + 208030, + 208031, + 208032, + 208033, + 208034, + 208035, + 208036, + 208037, + 208038, + 208039, + 208040, + 208041, + 208042, + 208043, + 208044, + 208045, + 208046, + 208047, + 208048, + 208049, + 208050, + 208051, + 208052, + 208053, + 208054, + 208055, + 208056, + 208057, + 208058, + 208059, + 208060, + 208061, + 208062, + 208063, + 208064, + 208065, + 208066, + 208067, + 208068, + 208069, + 208070, + 208071, + 208072, + 208073, + 208074, + 208075, + 208076, + 208077, + 208078, + 208079, + 208080, + 208081, + 208082, + 208083, + 208084, + 208085, + 208086, + 208087, + 208088, + 208089, + 208090, + 208091, + 208092, + 208093, + 208094, + 208095, + 208096, + 208097, + 208098, + 208099, + 208100, + 208101, + 208102, + 208103, + 208104, + 208105, + 208106, + 208107, + 208108, + 208109, + 208110, + 208111, + 208112, + 208113, + 208114, + 208115, + 208116, + 208117, + 208118, + 208119, + 208120, + 208121, + 208122, + 208123, + 208124, + 208125, + 208126, + 208127, + 208128, + 208129, + 208130, + 208131, + 208132, + 208133, + 208134, + 208135, + 208136, + ], + "code": None, + "column_name": "text_column6", + "created_at": "2022-05-09T10:49:53.722744+00:00", + "default_value": None, + "field_name": "New Custom Field", + "id": 205597, + "is_custom": True, + "is_enabled": True, + "is_mandatory": False, + "options": [ + "Admin", + "Sales", + "Service", + "Marketing", + "Production", + "Machine Shop", + "Assembly", + "Inspection", + "Fabrication", + "Engineering", + "Product", + "Fyle", + ], + "org_id": "orNoatdUnm1w", + "placeholder": "Select New Custom Field", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [], + "code": None, + "column_name": "category_id", + "created_at": "2022-03-08T11:37:18.493620+00:00", + "default_value": None, + "field_name": "Category", + "id": 203016, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Category", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [], + "code": None, + "column_name": "tax_group_id", + "created_at": "2021-08-17T04:48:57.792695+00:00", + "default_value": None, + "field_name": "Tax Group", + "id": 193471, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Tax Group", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [], + "code": None, + "column_name": "is_billable", + "created_at": "2021-07-29T11:05:38.811564+00:00", + "default_value": False, + "field_name": "Billable", + "id": 188951, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Billable", + "seq": 1, + "type": "BOOLEAN", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [], + "code": None, + "column_name": "project_id", + "created_at": "2021-07-28T08:48:55.152191+00:00", + "default_value": None, + "field_name": "Project", + "id": 184653, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Project", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + ], + "code": None, + "column_name": "text_column5", + "created_at": "2021-06-18T09:26:49.063610+00:00", + "default_value": None, + "field_name": "Operating System", + "id": 174120, + "is_custom": True, + "is_enabled": False, + "is_mandatory": False, + "options": ["MacOS", "IOS", "Linux", "Andriod"], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Operating System", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + ], + "code": None, + "column_name": "text_column4", + "created_at": "2021-06-18T09:13:45.794161+00:00", + "default_value": None, + "field_name": "Team", + "id": 174119, + "is_custom": True, + "is_enabled": False, + "is_mandatory": False, + "options": [ + "Small Business", + "Midsize Business", + "Enterprise", + "Service Line 2", + "Service Line 1", + "Service Line 3", + ], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Team", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114956], + "code": None, + "column_name": "travel_classes[0]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Travel Class", + "id": 16076, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Enter class of travel", + "seq": 2, + "type": "TEXT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + 164748, + 164755, + 164757, + 192359, + 192360, + 192361, + 192362, + 192456, + 192457, + 192458, + 192459, + 207983, + 207984, + 207985, + 207986, + 207987, + 207988, + 207989, + 207990, + 207991, + 207992, + 207993, + 207994, + 207995, + 207996, + 207997, + 207998, + 207999, + 208000, + 208001, + 208002, + 208003, + 208004, + 208005, + 208006, + 208007, + 208008, + 208009, + 208010, + 208011, + 208012, + 208013, + 208014, + 208015, + 208016, + 208017, + 208018, + 208019, + 208020, + 208021, + 208022, + 208023, + 208024, + 208025, + 208026, + 208027, + 208028, + 208029, + 208030, + 208031, + 208032, + 208033, + 208034, + 208035, + 208036, + 208037, + 208038, + 208039, + 208040, + 208041, + 208042, + 208043, + 208044, + 208045, + 208046, + 208047, + 208048, + 208049, + 208050, + 208051, + 208052, + 208053, + 208054, + 208055, + 208056, + 208057, + 208058, + 208059, + 208060, + 208061, + 208062, + 208063, + 208064, + 208065, + 208066, + 208067, + 208068, + 208069, + 208070, + 208071, + 208072, + 208073, + 208074, + 208075, + 208076, + 208077, + 208078, + 208079, + 208080, + 208081, + 208082, + 208083, + 208084, + 208085, + 208086, + 208087, + 208088, + 208089, + 208090, + 208091, + 208092, + 208093, + 208094, + 208095, + 208096, + 208097, + 208098, + 208099, + 208100, + 208101, + 208102, + 208103, + 208104, + 208105, + 208106, + 208107, + 208108, + 208109, + 208110, + 208111, + 208112, + 208113, + 208114, + 208115, + 208116, + 208117, + 208118, + 208119, + 208120, + 208121, + 208122, + 208123, + 208124, + 208125, + 208126, + 208127, + 208128, + 208129, + 208130, + 208131, + 208132, + 208133, + 208134, + 208135, + 208136, + ], + "code": None, + "column_name": "cost_center_id", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Cost Center", + "id": 16077, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Cost Center", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114953], + "code": None, + "column_name": "distance", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Distance", + "id": 16078, + "is_custom": False, + "is_enabled": True, + "is_mandatory": True, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Enter Distance", + "seq": 1, + "type": "NUMBER", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114958], + "code": None, + "column_name": "distance", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Distance", + "id": 16079, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Enter Distance", + "seq": 2, + "type": "NUMBER", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114953], + "code": None, + "column_name": "distance_unit", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": "MILES", + "field_name": "Unit", + "id": 16080, + "is_custom": False, + "is_enabled": True, + "is_mandatory": True, + "options": ["KM", "MILES"], + "org_id": "orNoatdUnm1w", + "placeholder": "Unit", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114958], + "code": None, + "column_name": "distance_unit", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": "MILES", + "field_name": "Unit", + "id": 16081, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": ["KM", "MILES"], + "org_id": "orNoatdUnm1w", + "placeholder": "Unit", + "seq": 2, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114964], + "code": None, + "column_name": "travel_classes[0]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Onward Travel Class", + "id": 16082, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": ["BUSINESS", "ECONOMY", "FIRST_CLASS"], + "org_id": "orNoatdUnm1w", + "placeholder": "Select travel class", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114964], + "code": None, + "column_name": "travel_classes[1]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Return Travel Class", + "id": 16083, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": ["BUSINESS", "ECONOMY", "FIRST_CLASS"], + "org_id": "orNoatdUnm1w", + "placeholder": "Select travel class", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114960], + "code": None, + "column_name": "started_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Check-in Date", + "id": 16084, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 1, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114955], + "code": None, + "column_name": "started_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "From", + "id": 16085, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 2, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114946, 114956, 114964], + "code": None, + "column_name": "started_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Onward Date", + "id": 16086, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 3, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114946, 114956, 114964], + "code": None, + "column_name": "locations[0]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "From", + "id": 16087, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select a City", + "seq": 1, + "type": "LOCATION", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114953], + "code": None, + "column_name": "locations[0]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "From", + "id": 16088, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Choose Location - Search for Place or Area", + "seq": 2, + "type": "LOCATION", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114960], + "code": None, + "column_name": "locations[0]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "City", + "id": 16089, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select a City", + "seq": 3, + "type": "LOCATION", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114953], + "code": None, + "column_name": "locations[1]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "To", + "id": 16090, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Choose Location - Search for Place or Area", + "seq": 1, + "type": "LOCATION", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114946, 114956, 114964], + "code": None, + "column_name": "locations[1]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "To", + "id": 16091, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select a City", + "seq": 2, + "type": "LOCATION", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114955], + "code": None, + "column_name": "num_days", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "No. of Days", + "id": 16092, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "No. of Days", + "seq": 1, + "type": "NUMBER", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + 164748, + 164755, + 164757, + 192359, + 192360, + 192361, + 192362, + 192456, + 192457, + 192458, + 192459, + 207983, + 207984, + 207985, + 207986, + 207987, + 207988, + 207989, + 207990, + 207991, + 207992, + 207993, + 207994, + 207995, + 207996, + 207997, + 207998, + 207999, + 208000, + 208001, + 208002, + 208003, + 208004, + 208005, + 208006, + 208007, + 208008, + 208009, + 208010, + 208011, + 208012, + 208013, + 208014, + 208015, + 208016, + 208017, + 208018, + 208019, + 208020, + 208021, + 208022, + 208023, + 208024, + 208025, + 208026, + 208027, + 208028, + 208029, + 208030, + 208031, + 208032, + 208033, + 208034, + 208035, + 208036, + 208037, + 208038, + 208039, + 208040, + 208041, + 208042, + 208043, + 208044, + 208045, + 208046, + 208047, + 208048, + 208049, + 208050, + 208051, + 208052, + 208053, + 208054, + 208055, + 208056, + 208057, + 208058, + 208059, + 208060, + 208061, + 208062, + 208063, + 208064, + 208065, + 208066, + 208067, + 208068, + 208069, + 208070, + 208071, + 208072, + 208073, + 208074, + 208075, + 208076, + 208077, + 208078, + 208079, + 208080, + 208081, + 208082, + 208083, + 208084, + 208085, + 208086, + 208087, + 208088, + 208089, + 208090, + 208091, + 208092, + 208093, + 208094, + 208095, + 208096, + 208097, + 208098, + 208099, + 208100, + 208101, + 208102, + 208103, + 208104, + 208105, + 208106, + 208107, + 208108, + 208109, + 208110, + 208111, + 208112, + 208113, + 208114, + 208115, + 208116, + 208117, + 208118, + 208119, + 208120, + 208121, + 208122, + 208123, + 208124, + 208125, + 208126, + 208127, + 208128, + 208129, + 208130, + 208131, + 208132, + 208133, + 208134, + 208135, + 208136, + ], + "code": None, + "column_name": "purpose", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Purpose", + "id": 16093, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "E.g. Client Meeting", + "seq": 1, + "type": "TEXT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + ], + "code": None, + "column_name": "text_column1", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Custom Expense Field", + "id": 16094, + "is_custom": True, + "is_enabled": False, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Updated By Bot", + "seq": 1, + "type": "TEXT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + ], + "code": None, + "column_name": "text_column2", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Quickbooks Class", + "id": 16095, + "is_custom": True, + "is_enabled": False, + "is_mandatory": False, + "options": [ + "Class 1", + "Class 2", + "Class 3", + "This Class", + "That Class", + ], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Quickbooks Class", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114953, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + ], + "code": None, + "column_name": "text_column3", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Quickbooks Customer", + "id": 16096, + "is_custom": True, + "is_enabled": False, + "is_mandatory": False, + "options": ["Customer 1", "Customer 2", "Customer 3"], + "org_id": "orNoatdUnm1w", + "placeholder": "Updated By Bot", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114946, 114956, 114964], + "code": None, + "column_name": "ended_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Return Date", + "id": 16097, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 1, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114955], + "code": None, + "column_name": "ended_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "To", + "id": 16098, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 2, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114960], + "code": None, + "column_name": "ended_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Check-out Date", + "id": 16099, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 3, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114946], + "code": None, + "column_name": "travel_classes[0]", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Travel class", + "id": 16100, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Enter class of travel", + "seq": 3, + "type": "TEXT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114945, + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114954, + 114955, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + 164748, + 164755, + 164757, + 192359, + 192360, + 192361, + 192362, + 192456, + 192457, + 192458, + 192459, + 207983, + 207984, + 207985, + 207986, + 207987, + 207988, + 207989, + 207990, + 207991, + 207992, + 207993, + 207994, + 207995, + 207996, + 207997, + 207998, + 207999, + 208000, + 208001, + 208002, + 208003, + 208004, + 208005, + 208006, + 208007, + 208008, + 208009, + 208010, + 208011, + 208012, + 208013, + 208014, + 208015, + 208016, + 208017, + 208018, + 208019, + 208020, + 208021, + 208022, + 208023, + 208024, + 208025, + 208026, + 208027, + 208028, + 208029, + 208030, + 208031, + 208032, + 208033, + 208034, + 208035, + 208036, + 208037, + 208038, + 208039, + 208040, + 208041, + 208042, + 208043, + 208044, + 208045, + 208046, + 208047, + 208048, + 208049, + 208050, + 208051, + 208052, + 208053, + 208054, + 208055, + 208056, + 208057, + 208058, + 208059, + 208060, + 208061, + 208062, + 208063, + 208064, + 208065, + 208066, + 208067, + 208068, + 208069, + 208070, + 208071, + 208072, + 208073, + 208074, + 208075, + 208076, + 208077, + 208078, + 208079, + 208080, + 208081, + 208082, + 208083, + 208084, + 208085, + 208086, + 208087, + 208088, + 208089, + 208090, + 208091, + 208092, + 208093, + 208094, + 208095, + 208096, + 208097, + 208098, + 208099, + 208100, + 208101, + 208102, + 208103, + 208104, + 208105, + 208106, + 208107, + 208108, + 208109, + 208110, + 208111, + 208112, + 208113, + 208114, + 208115, + 208116, + 208117, + 208118, + 208119, + 208120, + 208121, + 208122, + 208123, + 208124, + 208125, + 208126, + 208127, + 208128, + 208129, + 208130, + 208131, + 208132, + 208133, + 208134, + 208135, + 208136, + ], + "code": None, + "column_name": "spent_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Date of Spend", + "id": 16101, + "is_custom": False, + "is_enabled": True, + "is_mandatory": True, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 1, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [114953], + "code": None, + "column_name": "spent_at", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": None, + "field_name": "Date of Travel", + "id": 16102, + "is_custom": False, + "is_enabled": True, + "is_mandatory": True, + "options": [], + "org_id": "orNoatdUnm1w", + "placeholder": "Select Date", + "seq": 2, + "type": "DATE", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + { + "category_ids": [ + 114946, + 114947, + 114948, + 114949, + 114950, + 114951, + 114952, + 114954, + 114956, + 114957, + 114958, + 114959, + 114960, + 114961, + 114962, + 114963, + 114964, + 114965, + 114966, + 114967, + 114968, + 114969, + 114970, + 118635, + 118636, + 118637, + 118638, + 118639, + 118640, + 118641, + 118642, + 118643, + 118644, + 118645, + 118646, + 118647, + 118648, + 118650, + 118651, + 118652, + 118653, + 118654, + 118655, + 118656, + 118657, + 118658, + 118659, + 118660, + 118661, + 118662, + 118663, + 118664, + 118665, + 118666, + 118667, + 118668, + 118669, + 118670, + 118671, + 118672, + 118673, + 118674, + 118675, + 118676, + 118677, + 118678, + 119372, + 119373, + 119374, + 119375, + 119376, + 119377, + 119378, + 119379, + 119380, + 119381, + 119382, + 119383, + 119384, + 119385, + 119386, + 119387, + 119388, + 119389, + 119390, + 119391, + 119392, + 119393, + 122681, + 122682, + 123016, + 123017, + 125743, + 126078, + 129774, + 129775, + 129776, + 129777, + 129778, + 129779, + 129780, + 129781, + 129782, + 129783, + 129784, + 129785, + 129786, + 129787, + 129788, + 129789, + 129790, + 129791, + 129792, + 129793, + 129794, + 129795, + 129796, + 129797, + 129798, + 129799, + 129800, + 129801, + 129802, + 129803, + 129804, + 129805, + 129806, + 129807, + 129808, + 129809, + 129810, + 129811, + 129812, + 129813, + 129814, + 129815, + 129816, + 129817, + 129818, + 129819, + 129820, + 131728, + 131729, + 131730, + 131731, + 132326, + 133654, + 133655, + 133656, + 133657, + 133658, + 133659, + 133660, + 133661, + 133662, + 133663, + 133664, + 133665, + 133666, + 133667, + 133668, + 133669, + 133670, + 133671, + 133672, + 133673, + 133674, + 133675, + 133676, + 133677, + 133678, + 133679, + 133680, + 133681, + 133682, + 133683, + 133684, + 133685, + 133686, + 133687, + 133688, + 133689, + 133690, + 133691, + 133692, + 133693, + 133694, + 133695, + 133696, + 133697, + 133698, + 133699, + 133700, + 133701, + 133702, + 133703, + 133704, + 133705, + 133706, + 133707, + 133708, + 133709, + 133710, + 133711, + 133712, + 133713, + 133714, + 133715, + 133716, + 133717, + 133718, + 133719, + 133720, + 133721, + 133722, + 133723, + 133724, + 133725, + 133726, + 133727, + 133728, + 133729, + 133730, + 133731, + 133732, + 133733, + 133734, + 133735, + 133736, + 133737, + 133738, + 133739, + 135708, + 136502, + 147708, + 147709, + 147710, + 147711, + 147712, + 147870, + 147871, + 147872, + 147873, + 157577, + 157578, + 157579, + 164748, + 164755, + 164757, + 192359, + 192360, + 192361, + 192362, + 192456, + 192457, + 192458, + 192459, + 207983, + 207984, + 207985, + 207986, + 207987, + 207988, + 207989, + 207990, + 207991, + 207992, + 207993, + 207994, + 207995, + 207996, + 207997, + 207998, + 207999, + 208000, + 208001, + 208002, + 208003, + 208004, + 208005, + 208006, + 208007, + 208008, + 208009, + 208010, + 208011, + 208012, + 208013, + 208014, + 208015, + 208016, + 208017, + 208018, + 208019, + 208020, + 208021, + 208022, + 208023, + 208024, + 208025, + 208026, + 208027, + 208028, + 208029, + 208030, + 208031, + 208032, + 208033, + 208034, + 208035, + 208036, + 208037, + 208038, + 208039, + 208040, + 208041, + 208042, + 208043, + 208044, + 208045, + 208046, + 208047, + 208048, + 208049, + 208050, + 208051, + 208052, + 208053, + 208054, + 208055, + 208056, + 208057, + 208058, + 208059, + 208060, + 208061, + 208062, + 208063, + 208064, + 208065, + 208066, + 208067, + 208068, + 208069, + 208070, + 208071, + 208072, + 208073, + 208074, + 208075, + 208076, + 208077, + 208078, + 208079, + 208080, + 208081, + 208082, + 208083, + 208084, + 208085, + 208086, + 208087, + 208088, + 208089, + 208090, + 208091, + 208092, + 208093, + 208094, + 208095, + 208096, + 208097, + 208098, + 208099, + 208100, + 208101, + 208102, + 208103, + 208104, + 208105, + 208106, + 208107, + 208108, + 208109, + 208110, + 208111, + 208112, + 208113, + 208114, + 208115, + 208116, + 208117, + 208118, + 208119, + 208120, + 208121, + 208122, + 208123, + 208124, + 208125, + 208126, + 208127, + 208128, + 208129, + 208130, + 208131, + 208132, + 208133, + 208134, + 208135, + 208136, + ], + "code": None, + "column_name": "merchant", + "created_at": "2020-09-02T08:04:53.321869+00:00", + "default_value": "", + "field_name": "Merchant", + "id": 16103, + "is_custom": False, + "is_enabled": True, + "is_mandatory": False, + "options": [ + "1", + "AL Systems Ltd", + "AMAZON MKTPLACE", + "AMAZON.COM", + "AVI Consulting", + "Alexander Valley Vineyards", + "Allison Hill", + "Allsteel", + "Amanda Monroe", + "Amazon", + "American Computers", + "American Express", + "Apparel Co Inc.", + "Apple Inc", + "Ashwin from NetSuite", + "Basket Case", + "Bausch & Lomb", + "Bayer Health Care", + "Best Fixture, Inc.", + "Bob Ford, CPA", + "Bonnie Dawson", + "Boston Ophthalmology", + "Brad Pitt", + "Bravo TV", + "Brian Foster", + "Brian Master", + "Bridgepoint Industries", + "CARRABBAS", + "CCSF MTA IPS PRKNG METER", + "CHICK-FIL-A", + "CIBA Vision2", + "CIRCLE K", + "California EDD", + "Canon, Inc.", + "Carbray Insurance Agency", + "Charles Schwab", + "Chevron", + "Chris Curtis", + "Clancy Machine Tool, Inc.", + "Computer Depot Pacific", + "Computer Glory", + "Computer Systems LTD", + "Computers Extreme", + "Contract Manufacturer", + "Coopers Office Furniture", + "Coopervision", + "Cray Inc", + "DAIRY QUEEN", + "DOLLAR TREE", + "DOMINO'S", + "DOMINO'S P", + "DUNKIN PLAZA", + "Devinci Cycles Inc.", + "Dholakpur", + "Digital Supply", + "Drive Medical Design & Manufacturing", + "Eagle Fragrance Co.", + "Edward Blankenship", + "Eric Givens", + "Expensify Vendor", + "FRG: FIREHOUSE", + "Federal Express", + "First Community Bank", + "Fyle For QBO Paymrnt Sync", + "Fyle Inc SDK Vendor", + "Gillette", + "Github Corp", + "GlaxoSmithKline", + "Google Inc.", + "HOTELSCOM160804675156", + "HP Corporation", + "Harper Systems", + "Herman Miller Inc.", + "Hillerman Inc.", + "Hisoka", + "Hotel Royal", + "IGA Inc", + "Indian Airforce", + "Intel Computer", + "Internal Revenue Service- Income,FICA", + "Internal Revenue Service-FUTA", + "Invacare Corporation", + "Iron Horse Bicycles", + "James Taylor", + "Jatin", + "Jessica Lane", + "Jonathan Elliott", + "Joshua Wood", + "Justin Glass", + "Koka Office Supplies", + "Kreager Machine Tool Corporation", + "LOLLICUPSTORE", + "LOLOOO", + "Lakewood Vineyards", + "Lol Sob", + "MAPLE STREET", + "MJM International Corp.", + "Master Design Furniture", + "Matthew Estrada", + "Maxson Waste Management", + "McGeever Property Management", + "Merlin", + "Micromass Inc", + "Motorola", + "NESPRESSO USA", + "Nandos", + "Natalie Pope", + "National Instruments", + "Natures Own", + "Nestle corporation", + "Netfli", + "Netflix", + "New York City", + "New York County", + "New York State", + "Nikki Wilson", + "Nikon", + "Nilesh Pant", + "Office Depot", + "PANERA", + "PANERA #601741", + "PANERA BREAD", + "PAPA JOHN'S", + "PIZZA HUT", + "PUBLIX", + "PUBLIX SUPER", + "Pacific Bell Telephone", + "Pacific Gas and Electric", + "Panasonic", + "Panic", + "Phillips", + "Polaroid", + "Qual Ltd.", + "RRR KGF", + "Ramsey Electronic Supply", + "Random", + "Reinen Machine Sales", + "Riddell Inc.", + "Ryan Gallagher", + "SAMS CLUB", + "SDK Employee Sravan", + "SDK Vendor Entity ID", + "SDK Vendor Entity ID 2", + "SPEEDWAY", + "STARBUCKS STORE", + "STEAK-N-SHAKE", + "Safety Net Security", + "Sam's Club", + "Samantha Washington", + "Sasuke", + "SparkFun", + "Sravan KSK", + "Starbucks Coffee Company", + "State Board of Equalization", + "Steele & Frock Law Offices", + "Stein Investments", + "Store Tax Agency", + "Sullivan Distributors, Inc.", + "Sunrise Medical", + "Superior ISP", + "Swiggy Boiiii", + "TARGET", + "TR", + "Tax Agency AK (1 - Honeycomb Mfg.) (20210317-104301)", + "Taylor Made Golf Co.", + "Teck Machine Tool Co.", + "Terrence Decker", + "Testarossa Vineyards", + "The Office Shop Inc", + "Theresa Brown", + "Thomas Cook", + "Torrance Printing, Inc.", + "Trisha Lee", + "UBER TRIP HELP.UBER.CO", + "UDT Instruments", + "UPS", + "Uber 063015 SF**POOL**", + "VITIANOSITAL", + "Victor Martinez", + "Vikrant Messi", + "Vogel", + "Vwr Scientific Inc", + "WM SUPERCENTER", + "Wal-Mart", + "Wellington Vineyards", + "Wesley Ophthalmic", + "Witt & Anderson", + "Yujiro hanma", + "ZAXBY'S", + "Zomato", + "baki", + "casalife", + "chota bheem", + "expensify@thatharmansingh.com - Honeycomb Mfg.", + "fyle.in", + "gara", + "innogy eMobility Solut", + "jhon doe", + "labhvam", + "realme", + "wraith", + "ADP", + "Advisor Printing", + "akavuluru", + "Ashwin", + "Boardwalk Post", + "Canyon CPA", + "Citi Bank", + "Consulting Grid", + "Cornerstone", + "Credit Card Misc", + "Entity V100", + "Entity V200", + "Entity V300", + "Entity V400", + "Entity V500", + "Entity V600", + "Entity V700", + "Global Printing", + "Global Properties Inc.", + "gokul", + "Green Team Waste Management", + "Hanson Learning Solutions", + "HC Equipment Repair", + "Investor CPA", + "Kaufman & Langer LLP", + "Kristofferson Consulting", + "Lee Thomas", + "Lenovo", + "Linda Hicks", + "Magnolia CPA", + "Massachusetts Department of Revenue", + "Microns Consulting", + "National Grid", + "National Insurance", + "Neighborhood Printers", + "Nilesh, Dhoni", + "Paramount Consulting", + "Prima Printing", + "Prosper Post", + "Quali Consultants", + "Quick Post", + "River Glen Insurance", + "Sachin, Saran", + "Scribe Post", + "Singleton Brothers CPA", + "Srav", + "State Bank", + "The Nonprofit Alliance", + "The Post Company", + "Vaishnavi Primary", + "Vision Post", + "VM", + "Worldwide Commercial", + "Yash", + ], + "org_id": "orNoatdUnm1w", + "placeholder": "E.g. Uber", + "seq": 1, + "type": "SELECT", + "updated_at": "2022-08-30T16:50:44.671684+00:00", + }, + ] + } + ], + "get_all_orgs": [ + { + "id": "orHVw3ikkCxJ", + "created_at": "2018-12-18T10:50:36.506Z", + "updated_at": "2018-12-18T10:51:53.352Z", + "name": "Anagha Org", + "domain": "afyle.in", + "currency": "EUR", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouFo7ij9y58X', - 'id': 'reimmboJ6GRWM0', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/19;Natalie Pope', - 'reimbursement_number': 'P/2021/03/R/12', - 'settlement_id': 'setTyRUYsIPLl', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'usZU7tBgtPVH', - }, - { - 'amount': 3100, - 'code': None, - 'created_at': '2021-03-30T06:16:01.736607', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 4', - 'id': 'deptKnXW9hkeEk', - 'name': 'Department 4', - 'sub_department': None, - }, - 'department_id': 'deptKnXW9hkeEk', - 'id': 'ouHbIBdnWJZP', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user9@fyleforqvd.com', - 'full_name': 'Justin Glass', 'id': 'us5qnHSldfcB' - }, - 'user_id': 'us5qnHSldfcB', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orOarwdPeIWs", + "created_at": "2019-08-10T15:20:08.170Z", + "updated_at": "2019-08-10T15:30:32.828Z", + "name": "asdf", + "domain": "gmail.com", + "currency": "INR", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouHbIBdnWJZP', - 'id': 'reimQNmxNlLvJt', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/43;Justin Glass', - 'reimbursement_number': 'P/2021/03/R/10', - 'settlement_id': 'setxH1j5o4s6j', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'us5qnHSldfcB', - }, - { - 'amount': 3308, - 'code': None, - 'created_at': '2021-03-30T06:16:01.736607', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouydH1D1p8yA', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user4@fyleforqvd.com', - 'full_name': 'Samantha Washington', - 'id': 'us5LYztuG20F'}, - 'user_id': 'us5LYztuG20F', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orelSi63db7S", + "created_at": "2019-08-28T10:52:20.867Z", + "updated_at": "2019-08-28T11:06:20.014Z", + "name": "Ashwin Personal Org", + "domain": "gmail.com", + "currency": "INR", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouydH1D1p8yA', - 'id': 'reimRuGiuIEGGP', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/23;Samantha Washington', - 'reimbursement_number': 'P/2021/03/R/13', - 'settlement_id': 'setjxo12MZJYl', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'us5LYztuG20F', - }, - { - 'amount': 3191, - 'code': None, - 'created_at': '2021-03-30T06:16:01.736607', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouI4K0DWCGYO', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'admin1@fyleforqvd.com', - 'full_name': 'Theresa Brown', 'id': 'us6bdTBqx1iZ' - }, - 'user_id': 'us6bdTBqx1iZ', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orPJvXuoLqvJ", + "created_at": "2018-11-08T13:01:44.133Z", + "updated_at": "2019-09-07T10:25:44.771Z", + "name": "FAE", + "domain": "fae.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouI4K0DWCGYO', - 'id': 'reimUrg1EXPuBP', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/3;Theresa Brown', - 'reimbursement_number': 'P/2021/03/R/14', - 'settlement_id': 'setyKgtyoqcAa', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'us6bdTBqx1iZ', - }, - { - 'amount': 2945, - 'code': None, - 'created_at': '2021-03-30T06:16:01.736607', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oupCGhU3azOj', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user10@fyleforqvd.com', - 'full_name': 'Matthew Estrada', - 'id': 'usiUCyQYp2N2'}, - 'user_id': 'usiUCyQYp2N2', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orsO0VW86WLQ", + "created_at": "2017-07-03T04:45:51.698Z", + "updated_at": "2022-07-27T10:19:53.095Z", + "name": "Fyle - Demo US", + "domain": "fyle-us.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'oupCGhU3azOj', - 'id': 'reimwHk27VpQv4', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/7;Matthew Estrada', - 'reimbursement_number': 'P/2021/03/R/11', - 'settlement_id': 'setjXHRUesLxn', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'usiUCyQYp2N2', - }, - { - 'amount': 3295, - 'code': None, - 'created_at': '2021-03-30T06:15:44.542887', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuS57oGeQ2M', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user5@fyleforqvd.com', - 'full_name': 'Chris Curtis', 'id': 'us49CBDOfTLC' - }, - 'user_id': 'us49CBDOfTLC', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "or7m5SVD9Rv1", + "created_at": "2020-11-11T10:49:28.307Z", + "updated_at": "2022-05-12T10:28:59.325Z", + "name": "Fyle For Acme", + "domain": "fyleforintegrations.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouuS57oGeQ2M', - 'id': 'reimbbSG9sI4BZ', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/27;Chris Curtis', - 'reimbursement_number': 'P/2021/03/R/6', - 'settlement_id': 'setRX7GniJkqD', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'us49CBDOfTLC', - }, - { - 'amount': 2615, - 'code': None, - 'created_at': '2021-03-30T06:15:44.542887', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouHoRakEut14', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user2@fyleforqvd.com', - 'full_name': 'Brian Foster', 'id': 'usn71kjcQibs' - }, - 'user_id': 'usn71kjcQibs', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "or79Cob97KSh", + "created_at": "2021-04-09T11:23:49.091Z", + "updated_at": "2021-04-09T11:23:51.883Z", + "name": "Fyle For Arkham Asylum", + "domain": "fyleforgotham.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouHoRakEut14', - 'id': 'reimcMB4pwblkW', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/15;Brian Foster', - 'reimbursement_number': 'P/2021/03/R/5', - 'settlement_id': 'set6VBzeFmXrf', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'usn71kjcQibs', - }, - { - 'amount': 2824, - 'code': None, - 'created_at': '2021-03-30T06:15:44.542887', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oug6iN9ulsQ4', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user7@fyleforqvd.com', - 'full_name': 'James Taylor', 'id': 'ushzyZgwhV7M' - }, - 'user_id': 'ushzyZgwhV7M', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orCr0d188we7", + "created_at": "2021-02-19T05:12:55.157Z", + "updated_at": "2021-02-19T05:13:01.200Z", + "name": "Fyle For automated testing webapp", + "domain": "fyleforautomatedtestingwebapp.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'oug6iN9ulsQ4', - 'id': 'reimgOmaqTkCBG', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/35;James Taylor', - 'reimbursement_number': 'P/2021/03/R/7', - 'settlement_id': 'set6gNM8qlsY2', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'ushzyZgwhV7M', - }, - { - 'amount': 2478, - 'code': None, - 'created_at': '2021-03-30T06:15:44.542887', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 1', - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'id': 'ourWIYik4Igq', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user1@fyleforqvd.com', - 'full_name': 'Joshua Wood', 'id': 'usenjNn1QU1A'}, - 'user_id': 'usenjNn1QU1A', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orMCxDMCEOfp", + "created_at": "2021-02-19T07:26:20.834Z", + "updated_at": "2021-02-19T07:26:26.737Z", + "name": "Fyle For Budgets Marketing Demo", + "domain": "fyleforbudgets.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ourWIYik4Igq', - 'id': 'reimoy9XwhJvGL', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/11;Joshua Wood', - 'reimbursement_number': 'P/2021/03/R/9', - 'settlement_id': 'setKFJZ0uuOKx', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'usenjNn1QU1A', - }, - { - 'amount': 3124, - 'code': None, - 'created_at': '2021-03-30T06:15:44.542887', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuRl5RWIiBi', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user8@fyleforqvd.com', - 'full_name': 'Jessica Lane', 'id': 'use1hqDbsybg' - }, - 'user_id': 'use1hqDbsybg', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "ork2c90PAHtk", + "created_at": "2021-04-27T12:21:23.824Z", + "updated_at": "2021-04-27T12:21:25.763Z", + "name": "Fyle For dimension-sync", + "domain": "fylefordimension.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouuRl5RWIiBi', - 'id': 'reimP6SRMlvpd0', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/39;Jessica Lane', - 'reimbursement_number': 'P/2021/03/R/8', - 'settlement_id': 'setFQUqfxSlwI', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'use1hqDbsybg', - }, - { - 'amount': 2277, - 'code': None, - 'created_at': '2021-03-30T06:15:12.845261', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouydH1D1p8yA', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user4@fyleforqvd.com', - 'full_name': 'Samantha Washington', - 'id': 'us5LYztuG20F'}, - 'user_id': 'us5LYztuG20F', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orGcBCVPijjO", + "created_at": "2021-05-25T15:55:03.214Z", + "updated_at": "2021-05-25T15:55:17.334Z", + "name": "Fyle For Intacct Bill-CCT", + "domain": "fyleforbill.cct", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouydH1D1p8yA', - 'id': 'reimarcOAIOUA4', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2020/09/R/24;Samantha Washington', - 'reimbursement_number': 'P/2021/03/R/4', - 'settlement_id': 'setPeQign1vZL', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'us5LYztuG20F', - }, - { - 'amount': 1166.39, - 'code': None, - 'created_at': '2021-03-18T08:15:38.051700', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orhlmPm4H0wn", + "created_at": "2021-05-25T16:48:57.330Z", + "updated_at": "2021-05-25T16:49:11.283Z", + "name": "Fyle For Intacct ER-Bill", + "domain": "fyleforer.bill", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimNYTLqEW8gU', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2021/03/R/2;C/2021/02/R/3;Ashwin', - 'reimbursement_number': 'P/2021/03/R/3', - 'settlement_id': 'setBFU1GVLdbs', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 0, - 'code': None, - 'created_at': '2021-03-04T09:09:54.545996', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouI4K0DWCGYO', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'admin1@fyleforqvd.com', - 'full_name': 'Theresa Brown', 'id': 'us6bdTBqx1iZ' - }, - 'user_id': 'us6bdTBqx1iZ', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orpMfWO2KOsU", + "created_at": "2021-05-25T15:01:04.691Z", + "updated_at": "2021-05-25T15:01:18.807Z", + "name": "Fyle For Intacct ER-CCT", + "domain": "fyleforer.cct", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouI4K0DWCGYO', - 'id': 'reimHSB7SmkhK1', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'C/2021/03/R/1;Theresa Brown', - 'reimbursement_number': 'P/2021/03/R/2', - 'settlement_id': 'setTtjhUwGa0H', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'us6bdTBqx1iZ', - }, - { - 'amount': 0, - 'code': None, - 'created_at': '2021-03-04T09:06:27.898424', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouHoRakEut14', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user2@fyleforqvd.com', - 'full_name': 'Brian Foster', 'id': 'usn71kjcQibs' - }, - 'user_id': 'usn71kjcQibs', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "oraWFQlEpjbb", + "created_at": "2021-05-05T09:35:41.567Z", + "updated_at": "2021-05-05T09:35:43.318Z", + "name": "Fyle For IntacctNew Technologies", + "domain": "fyleforintacctnew.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouHoRakEut14', - 'id': 'reimJRxEcoCEWP', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-08-25T09:55:51.416364', - 'purpose': 'Brian Foster', - 'reimbursement_number': 'P/2021/03/R/1', - 'settlement_id': 'setJOwY0sCtJ9', - 'updated_at': '2021-08-25T09:55:51.416364', - 'user_id': 'usn71kjcQibs', - }, - { - 'amount': 1685, - 'code': None, - 'created_at': '2021-02-11T09:51:01.722497', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'ouFo7ij9y58X', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user3@fyleforqvd.com', - 'full_name': 'Natalie Pope', 'id': 'usZU7tBgtPVH' - }, - 'user_id': 'usZU7tBgtPVH', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "or3Ka0zKz4LE", + "created_at": "2021-06-08T12:20:23.018Z", + "updated_at": "2021-06-08T12:20:37.663Z", + "name": "Fyle For Intacct Refactor", + "domain": "fyleforintacct.refactor", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouFo7ij9y58X', - 'id': 'reimwYq2WSNsVW', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/20;Natalie Pope', - 'reimbursement_number': 'P/2021/02/R/5', - 'settlement_id': 'setS5aRlkwIdk', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usZU7tBgtPVH', - }, - { - 'amount': 3314, - 'code': None, - 'created_at': '2021-02-03T12:14:05.892010', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oupCGhU3azOj', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user10@fyleforqvd.com', - 'full_name': 'Matthew Estrada', - 'id': 'usiUCyQYp2N2'}, - 'user_id': 'usiUCyQYp2N2', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orNoatdUnm1w", + "created_at": "2020-09-02T08:04:52.891Z", + "updated_at": "2020-09-03T10:26:23.381Z", + "name": "Fyle For MS Dynamics Demo", + "domain": "fyleforqvd.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'oupCGhU3azOj', - 'id': 'reimiHiBP53Fs5', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/8;Matthew Estrada', - 'reimbursement_number': 'P/2021/02/R/4', - 'settlement_id': 'setkPZhe5s2AY', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usiUCyQYp2N2', - }, - { - 'amount': 3457, - 'code': None, - 'created_at': '2021-02-03T07:04:09.114081', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oug6iN9ulsQ4', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user7@fyleforqvd.com', - 'full_name': 'James Taylor', 'id': 'ushzyZgwhV7M' - }, - 'user_id': 'ushzyZgwhV7M', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orq6KZ9kxAIZ", + "created_at": "2020-06-18T09:55:42.156Z", + "updated_at": "2020-06-18T09:56:01.655Z", + "name": "Fyle For Multi Org Dashboard Demo 1", + "domain": "fylefordashboard1.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'oug6iN9ulsQ4', - 'id': 'reimmNVR3HpAV0', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/36;James Taylor', - 'reimbursement_number': 'P/2021/02/R/2', - 'settlement_id': 'set39oBUQOoH2', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'ushzyZgwhV7M', - }, - { - 'amount': 828, - 'code': None, - 'created_at': '2021-02-03T07:04:09.114081', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 1', - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'id': 'ourWIYik4Igq', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user1@fyleforqvd.com', - 'full_name': 'Joshua Wood', 'id': 'usenjNn1QU1A'}, - 'user_id': 'usenjNn1QU1A', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orFcbTXP4Nzl", + "created_at": "2020-06-18T10:47:51.321Z", + "updated_at": "2020-06-18T10:48:05.118Z", + "name": "Fyle For Multi Org Dashboard Demo 2", + "domain": "fylefordashboard2.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ourWIYik4Igq', - 'id': 'reimZAOtflTcxB', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/12;Joshua Wood', - 'reimbursement_number': 'P/2021/02/R/3', - 'settlement_id': 'setg2Nz8qwhRd', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usenjNn1QU1A', - }, - { - 'amount': 1747, - 'code': None, - 'created_at': '2021-02-01T08:35:37.893179', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuRl5RWIiBi', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user8@fyleforqvd.com', - 'full_name': 'Jessica Lane', 'id': 'use1hqDbsybg' - }, - 'user_id': 'use1hqDbsybg', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "oryVGi2hkIje", + "created_at": "2020-06-22T08:27:15.146Z", + "updated_at": "2020-06-22T08:27:28.105Z", + "name": "Fyle For Multi Org Dashboard Demo 3", + "domain": "fylefordashboard3.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouuRl5RWIiBi', - 'id': 'reimKxcL8z0PLv', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2021/02/R/4;Jessica Lane', - 'reimbursement_number': 'P/2021/02/R/1', - 'settlement_id': 'setnhLAfozPIp', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'use1hqDbsybg', - }, - { - 'amount': 15, - 'code': None, - 'created_at': '2021-01-28T14:30:07.199538', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orDGNZupZmja", + "created_at": "2020-12-20T20:52:48.962Z", + "updated_at": "2020-12-28T11:38:20.804Z", + "name": "Fyle For nami enterprise", + "domain": "fylefornami.org", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimVMciurnaxK', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2021/01/R/2;Ashwin', - 'reimbursement_number': 'P/2021/01/R/4', - 'settlement_id': 'setB25q3R6N9S', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 3338, - 'code': None, - 'created_at': '2021-01-27T16:32:06.755785', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuS57oGeQ2M', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user5@fyleforqvd.com', - 'full_name': 'Chris Curtis', 'id': 'us49CBDOfTLC' - }, - 'user_id': 'us49CBDOfTLC', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orf7jLXAJ6SY", + "created_at": "2021-01-22T10:15:13.803Z", + "updated_at": "2021-01-22T10:15:19.492Z", + "name": "Fyle For NetSuite Projects Customers", + "domain": "fyleforlol.sob", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouuS57oGeQ2M', - 'id': 'reimbqgFZXEyOH', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/28;Chris Curtis', - 'reimbursement_number': 'P/2021/01/R/3', - 'settlement_id': 'set7kRj1u1UhV', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'us49CBDOfTLC', - }, - { - 'amount': 3016, - 'code': None, - 'created_at': '2021-01-27T16:31:30.722170', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouHoRakEut14', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user2@fyleforqvd.com', - 'full_name': 'Brian Foster', 'id': 'usn71kjcQibs' - }, - 'user_id': 'usn71kjcQibs', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "or8ly3LMmpEB", + "created_at": "2021-05-11T06:25:49.247Z", + "updated_at": "2021-05-11T06:26:03.243Z", + "name": "Fyle For NetsuiteTest", + "domain": "fylefornetsuitetest.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouHoRakEut14', - 'id': 'reimDETwvxt6gQ', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/16;Brian Foster', - 'reimbursement_number': 'P/2021/01/R/2', - 'settlement_id': 'setHh7tfFgd4H', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usn71kjcQibs', - }, - { - 'amount': 313, - 'code': None, - 'created_at': '2021-01-27T15:42:56.213429', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouJSY9XI9s9k', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'ashwin.t@fyle.in', 'full_name': 'Joanna' - , 'id': 'usqywo0f3nBY'}, - 'user_id': 'usqywo0f3nBY', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orfrt4S8Mbj1", + "created_at": "2021-02-03T13:26:13.462Z", + "updated_at": "2021-02-03T13:26:19.323Z", + "name": "Fyle For Nilesh", + "domain": "fylefornileshfyle.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouJSY9XI9s9k', - 'id': 'reimGDFq2Kg3EL', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/10/R/3;C/2020/10/R/1;C/2020/10/R/2;C/2021/01/R/1;Ashwin' - , - 'reimbursement_number': 'P/2021/01/R/1', - 'settlement_id': 'setdElR77mw9Q', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usqywo0f3nBY', - }, - { - 'amount': 4217, - 'code': None, - 'created_at': '2020-09-08T11:15:46.929288', - 'creator_user_id': 'us6bdTBqx1iZ', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouI4K0DWCGYO', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'admin1@fyleforqvd.com', - 'full_name': 'Theresa Brown', 'id': 'us6bdTBqx1iZ' - }, - 'user_id': 'us6bdTBqx1iZ', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "or89lKTL3Yhk", + "created_at": "2021-07-13T10:33:54.537Z", + "updated_at": "2021-07-13T10:34:08.805Z", + "name": "Fyle For NS NS NS", + "domain": "fylefornetsuite.netsuite", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouI4K0DWCGYO', - 'id': 'reimktQdKiugB3', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/48;C/2020/09/R/49;C/2020/09/R/50;C/2020/09/R/4;C/2020/09/R/46;C/2020/09/R/45;C/2020/09/R/47;Theresa Brown' - , - 'reimbursement_number': 'P/2020/09/R/14', - 'settlement_id': 'setkSjrfxbwxg', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'us6bdTBqx1iZ', - }, - { - 'amount': 9685, - 'code': None, - 'created_at': '2020-09-03T10:34:27.567336', - 'creator_user_id': 'us6bdTBqx1iZ', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 4', - 'id': 'deptKnXW9hkeEk', - 'name': 'Department 4', - 'sub_department': None, - }, - 'department_id': 'deptKnXW9hkeEk', - 'id': 'ouHbIBdnWJZP', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user9@fyleforqvd.com', - 'full_name': 'Justin Glass', 'id': 'us5qnHSldfcB' - }, - 'user_id': 'us5qnHSldfcB', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orE1oxkAMtq0", + "created_at": "2021-05-24T09:30:32.057Z", + "updated_at": "2022-04-27T13:26:50.737Z", + "name": "Fyle For QBO", + "domain": "fyleforquickbooksonlinetest.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouHbIBdnWJZP', - 'id': 'reimvgG58nOu2q', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/44;C/2020/09/R/42;Justin Glass', - 'reimbursement_number': 'P/2020/09/R/13', - 'settlement_id': 'setDldxiwT39A', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'us5qnHSldfcB', - }, - { - 'amount': 8914, - 'code': None, - 'created_at': '2020-09-03T10:34:27.567336', - 'creator_user_id': 'us6bdTBqx1iZ', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuRl5RWIiBi', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user8@fyleforqvd.com', - 'full_name': 'Jessica Lane', 'id': 'use1hqDbsybg' - }, - 'user_id': 'use1hqDbsybg', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "or1xUjUb50no", + "created_at": "2021-02-07T07:27:44.106Z", + "updated_at": "2022-08-10T14:29:29.481Z", + "name": "Fyle For QBO Angular Tests - Github Action", + "domain": "fyleforjatinorg.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouuRl5RWIiBi', - 'id': 'reimWLUU9xgKBA', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/38;C/2020/09/R/40;Jessica Lane', - 'reimbursement_number': 'P/2020/09/R/12', - 'settlement_id': 'setuIDscN7GIP', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'use1hqDbsybg', - }, - { - 'amount': 3606.0, - 'code': None, - 'created_at': '2020-09-02T08:44:40.031221', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 4', - 'id': 'deptKnXW9hkeEk', - 'name': 'Department 4', - 'sub_department': None, - }, - 'department_id': 'deptKnXW9hkeEk', - 'id': 'ouHbIBdnWJZP', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user9@fyleforqvd.com', - 'full_name': 'Justin Glass', 'id': 'us5qnHSldfcB' - }, - 'user_id': 'us5qnHSldfcB', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orS3AQhrbhHB", + "created_at": "2020-12-16T07:19:53.201Z", + "updated_at": "2020-12-18T19:20:07.711Z", + "name": "Fyle For Sage Intacct Demo1", + "domain": "fyleforsageintacctdemo.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouHbIBdnWJZP', - 'id': 'reimEUxbh9JpA4', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/41;Justin Glass', - 'reimbursement_number': 'P/2020/09/R/11', - 'settlement_id': 'settIyAHaiYqC', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'us5qnHSldfcB', - }, - { - 'amount': 3950.0, - 'code': None, - 'created_at': '2020-09-02T08:41:00.263702', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuRl5RWIiBi', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user8@fyleforqvd.com', - 'full_name': 'Jessica Lane', 'id': 'use1hqDbsybg' - }, - 'user_id': 'use1hqDbsybg', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "oriSOntNdZGd", + "created_at": "2020-09-10T12:48:30.073Z", + "updated_at": "2020-09-15T09:32:51.692Z", + "name": "Fyle For Sage Intacct Integration", + "domain": "fyleforintacct2.com", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouuRl5RWIiBi', - 'id': 'reim8zphw6VUt7', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/37;Jessica Lane', - 'reimbursement_number': 'P/2020/09/R/10', - 'settlement_id': 'setII64DqUw1D', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'use1hqDbsybg', - }, - { - 'amount': 3948.0, - 'code': None, - 'created_at': '2020-09-02T08:37:29.432727', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oug6iN9ulsQ4', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user7@fyleforqvd.com', - 'full_name': 'James Taylor', 'id': 'ushzyZgwhV7M' - }, - 'user_id': 'ushzyZgwhV7M', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orCqJYWF68EL", + "created_at": "2021-02-01T09:55:11.430Z", + "updated_at": "2021-02-01T09:55:17.153Z", + "name": "Fyle For Sage Intacct Projects Sync", + "domain": "fyleforsage.intacct", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'oug6iN9ulsQ4', - 'id': 'reim6OwrtaWAKY', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/33;James Taylor', - 'reimbursement_number': 'P/2020/09/R/9', - 'settlement_id': 'setfMDcofquH1', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'ushzyZgwhV7M', - }, - { - 'amount': 5584.0, - 'code': None, - 'created_at': '2020-09-02T08:34:07.225859', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 1', - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'id': 'ouBnHryuMUmD', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user6@fyleforqvd.com', - 'full_name': 'Victor Martinez', - 'id': 'usuycevSQL2z'}, - 'user_id': 'usuycevSQL2z', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "or830tbc1ovU", + "created_at": "2020-06-16T08:46:12.748Z", + "updated_at": "2020-06-16T08:46:30.227Z", + "name": "Fyle For SageIntacct Test Backend Integration", + "domain": "fyleforxyz.in", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouBnHryuMUmD', - 'id': 'reim2Ti1POSaup', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/29;Victor Martinez', - 'reimbursement_number': 'P/2020/09/R/8', - 'settlement_id': 'seticfKo334cX', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usuycevSQL2z', - }, - { - 'amount': 4678.0, - 'code': None, - 'created_at': '2020-09-02T08:30:47.015910', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouuS57oGeQ2M', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user5@fyleforqvd.com', - 'full_name': 'Chris Curtis', 'id': 'us49CBDOfTLC' - }, - 'user_id': 'us49CBDOfTLC', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orXeYZqiAXhZ", + "created_at": "2021-04-06T14:06:20.536Z", + "updated_at": "2021-10-04T05:52:04.179Z", + "name": "Fyle For Stark Industries", + "domain": "fylefortonystark.com", + "currency": "AUD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouuS57oGeQ2M', - 'id': 'reimubZodjYSBa', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/25;Chris Curtis', - 'reimbursement_number': 'P/2020/09/R/7', - 'settlement_id': 'setvv95YsnA6O', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'us49CBDOfTLC', - }, - { - 'amount': 4024.0, - 'code': None, - 'created_at': '2020-09-02T08:27:21.739652', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouydH1D1p8yA', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user4@fyleforqvd.com', - 'full_name': 'Samantha Washington', - 'id': 'us5LYztuG20F'}, - 'user_id': 'us5LYztuG20F', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmFudU7eReqs", + }, + { + "id": "orrjqbDbeP9p", + "created_at": "2017-04-06T04:52:07.820Z", + "updated_at": "2022-08-29T10:07:57.393Z", + "name": "Fyle Staging", + "domain": "fyledemo.com", + "currency": "INR", + "branch_ifsc": "SBIN0005943", + "branch_account": "state bank of india", + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouydH1D1p8yA', - 'id': 'reim3th7sQZSd5', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/21;Samantha Washington', - 'reimbursement_number': 'P/2020/09/R/6', - 'settlement_id': 'setCSIEzTjOIs', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'us5LYztuG20F', - }, - { - 'amount': 5731.0, - 'code': None, - 'created_at': '2020-09-02T08:23:48.090536', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'ouFo7ij9y58X', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user3@fyleforqvd.com', - 'full_name': 'Natalie Pope', 'id': 'usZU7tBgtPVH' - }, - 'user_id': 'usZU7tBgtPVH', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmha6maJPreu", + }, + { + "id": "oreD0u6pkphI", + "created_at": "2017-02-16T07:19:20.273Z", + "updated_at": "2021-05-29T02:53:59.134Z", + "name": "Greytip Demo1", + "domain": "fyle.in", + "currency": "INR", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouFo7ij9y58X', - 'id': 'reimGdMDRBInId', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/17;Natalie Pope', - 'reimbursement_number': 'P/2020/09/R/5', - 'settlement_id': 'setRQ1c6rjyRP', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usZU7tBgtPVH', - }, - { - 'amount': 2827.0, - 'code': None, - 'created_at': '2020-09-02T08:20:14.535570', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 2', - 'id': 'deptqF8lOvKmVi', - 'name': 'Department 2', - 'sub_department': None, - }, - 'department_id': 'deptqF8lOvKmVi', - 'id': 'ouHoRakEut14', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user2@fyleforqvd.com', - 'full_name': 'Brian Foster', 'id': 'usn71kjcQibs' - }, - 'user_id': 'usn71kjcQibs', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmLvCKmvsn4k", + }, + { + "id": "orTwovfDpEYc", + "created_at": "2020-05-11T11:52:32.876Z", + "updated_at": "2020-09-10T13:58:23.407Z", + "name": "Sage Intacct Demo 1", + "domain": "test_org_ach.03", + "currency": "USD", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouHoRakEut14', - 'id': 'reim2i1U5KhB1x', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/13;Brian Foster', - 'reimbursement_number': 'P/2020/09/R/4', - 'settlement_id': 'set5ayZSjOz4p', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usn71kjcQibs', - }, - { - 'amount': 6361.0, - 'code': None, - 'created_at': '2020-09-02T08:16:31.405622', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 1', - 'id': 'deptGEGIjLq0OY', - 'name': 'Department 1', - 'sub_department': None, - }, - 'department_id': 'deptGEGIjLq0OY', - 'id': 'ourWIYik4Igq', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user1@fyleforqvd.com', - 'full_name': 'Joshua Wood', 'id': 'usenjNn1QU1A'}, - 'user_id': 'usenjNn1QU1A', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orNVthTo2Zyo", + "created_at": "2018-01-31T23:50:27.216Z", + "updated_at": "2022-08-29T09:58:13.589Z", + "name": "Staging Loaded", + "domain": "fyle.in", + "currency": "INR", + "branch_ifsc": "ICIC0003440", + "branch_account": "82382398239239", + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ourWIYik4Igq', - 'id': 'reimRgDkr7USSr', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/9;Joshua Wood', - 'reimbursement_number': 'P/2020/09/R/3', - 'settlement_id': 'setQd4PcikJ6m', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usenjNn1QU1A', - }, - { - 'amount': 3366.0, - 'code': None, - 'created_at': '2020-09-02T08:13:02.973236', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': { - 'code': None, - 'display_name': 'Department 3', - 'id': 'deptcFPEVWaolp', - 'name': 'Department 3', - 'sub_department': None, - }, - 'department_id': 'deptcFPEVWaolp', - 'id': 'oupCGhU3azOj', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'user10@fyleforqvd.com', - 'full_name': 'Matthew Estrada', - 'id': 'usiUCyQYp2N2'}, - 'user_id': 'usiUCyQYp2N2', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": "dcmbDcwO330Wn", + }, + { + "id": "orZu2yrz7zdy", + "created_at": "2019-02-05T14:31:26.313Z", + "updated_at": "2020-02-24T09:51:50.672Z", + "name": "Test Trip", + "domain": "triptest.com", + "currency": "INR", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'oupCGhU3azOj', - 'id': 'reim6dgg2f4SaW', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/5;Matthew Estrada', - 'reimbursement_number': 'P/2020/09/R/2', - 'settlement_id': 'setzdUvdqllLs', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'usiUCyQYp2N2', - }, - { - 'amount': 4052.0, - 'code': None, - 'created_at': '2020-09-02T08:09:36.384824', - 'creator_user_id': 'usJunSVNaFGE', - 'currency': 'USD', - 'employee': { - 'code': None, - 'department': None, - 'department_id': None, - 'id': 'ouI4K0DWCGYO', - 'org_id': 'orNoatdUnm1w', - 'user': {'email': 'admin1@fyleforqvd.com', - 'full_name': 'Theresa Brown', 'id': 'us6bdTBqx1iZ' - }, - 'user_id': 'us6bdTBqx1iZ', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, + }, + { + "id": "orwZZAwJb7eF", + "created_at": "2019-01-11T09:55:45.305Z", + "updated_at": "2019-10-26T17:27:19.390Z", + "name": "Yagami", + "domain": "L", + "currency": "INR", + "branch_ifsc": None, + "branch_account": None, + "tally_bank_ledger": None, + "tally_default_category": None, + "tally_default_user": None, + "corporate_credit_card_details": { + "bank_name": None, + "number_of_cards": None, }, - 'employee_id': 'ouI4K0DWCGYO', - 'id': 'reim6bGIRJ01rh', - 'is_exported': False, - 'is_paid': True, - 'mode': 'OFFLINE', - 'org_id': 'orNoatdUnm1w', - 'paid_at': '2021-07-28T11:19:07.462566', - 'purpose': 'C/2020/09/R/1;Theresa Brown', - 'reimbursement_number': 'P/2020/09/R/1', - 'settlement_id': 'seteTWEM2Tey3', - 'updated_at': '2021-07-28T11:19:07.462566', - 'user_id': 'us6bdTBqx1iZ', + "verified": True, + "lite": False, + "dwolla_customers_metadata_id": None, }, - ]}] + ], + "get_all_reimbursements": # !/usr/bin/python + # -*- coding: utf-8 -*- + [ + { + "data": [ + { + "amount": 121, + "code": None, + "created_at": "2022-05-06T06:32:51.665316", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimv8ED0Yzxi0", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": None, + "purpose": "C/2022/05/R/6;Ashwin", + "reimbursement_number": "P/2022/05/R/6", + "settlement_id": "set0mrwTTgoHA", + "updated_at": "2022-05-06T06:32:51.665316", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 665, + "code": None, + "created_at": "2022-05-05T09:55:14.040636", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimIWuET63w9n", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": None, + "purpose": "C/2022/05/R/5;Ashwin", + "reimbursement_number": "P/2022/05/R/5", + "settlement_id": "setfqoiqUVRYd", + "updated_at": "2022-05-05T09:55:14.040636", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 122, + "code": None, + "created_at": "2022-05-05T09:03:33.334235", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimo1VO1yzyK6", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": None, + "purpose": "C/2022/05/R/4;Ashwin", + "reimbursement_number": "P/2022/05/R/4", + "settlement_id": "setUzZd9WDh4b", + "updated_at": "2022-05-05T09:03:33.334235", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 111, + "code": None, + "created_at": "2022-05-05T08:49:14.027707", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimThZc9jwVDM", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": None, + "purpose": "C/2022/05/R/3;Ashwin", + "reimbursement_number": "P/2022/05/R/3", + "settlement_id": "set0LnL005MA7", + "updated_at": "2022-05-05T08:49:14.027707", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 123, + "code": None, + "created_at": "2022-05-05T08:44:32.094519", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimvj3so5zBl7", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": None, + "purpose": "C/2022/05/R/2;Ashwin", + "reimbursement_number": "P/2022/05/R/2", + "settlement_id": "setlBZs14zpck", + "updated_at": "2022-05-05T08:44:32.094519", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 21, + "code": None, + "created_at": "2022-05-05T08:30:19.675720", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimt2WBhq8FIg", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": None, + "purpose": "C/2022/05/R/1;Ashwin", + "reimbursement_number": "P/2022/05/R/1", + "settlement_id": "setU99Vr8cLZg", + "updated_at": "2022-05-05T08:30:19.675720", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 324, + "code": None, + "created_at": "2022-02-23T09:06:54.845834", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimoigbgSgsGN", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-02-23T09:16:35.259812", + "purpose": "C/2022/02/R/1;Ashwin", + "reimbursement_number": "P/2022/02/R/2", + "settlement_id": "setm4TBEFI6Vs", + "updated_at": "2022-02-23T09:16:35.259812", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 234266, + "code": None, + "created_at": "2022-01-12T08:08:48.920745", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimgZdOVQHTIl", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-02-23T08:58:48.122998", + "purpose": "C/2022/01/R/4;Ashwin", + "reimbursement_number": "P/2022/01/R/7", + "settlement_id": "setShxt8XtpDe", + "updated_at": "2022-02-23T08:58:48.122998", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 0, + "code": None, + "created_at": "2022-01-12T07:25:21.389657", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimppRFvo8yxG", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-01-12T07:58:38.351034", + "purpose": "C/2022/01/R/3;Ashwin", + "reimbursement_number": "P/2022/01/R/6", + "settlement_id": "settezAUEL2MM", + "updated_at": "2022-01-12T07:58:38.351034", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 0, + "code": None, + "created_at": "2022-01-12T07:14:35.442914", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimD3iyLcfZOn", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-01-12T07:58:38.351034", + "purpose": "C/2022/01/R/2;Ashwin", + "reimbursement_number": "P/2022/01/R/5", + "settlement_id": "setZiw3U2jZJN", + "updated_at": "2022-01-12T07:58:38.351034", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 0, + "code": None, + "created_at": "2022-01-12T06:31:31.297625", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimNzT75miwZW", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-01-12T06:31:48.998005", + "purpose": "C/2022/01/R/1;Ashwin", + "reimbursement_number": "P/2022/01/R/4", + "settlement_id": "setm0EsvpnMdC", + "updated_at": "2022-01-12T06:31:48.998005", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 8101, + "code": None, + "created_at": "2022-01-11T07:40:14.448043", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouI4K0DWCGYO", + "org_id": "orNoatdUnm1w", + "user": { + "email": "admin1@fyleforqvd.com", + "full_name": "Theresa Brown", + "id": "us6bdTBqx1iZ", + }, + "user_id": "us6bdTBqx1iZ", + }, + "employee_id": "ouI4K0DWCGYO", + "id": "reimMiX47Aowb9", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-01-11T07:40:28.141818", + "purpose": "C/2020/09/R/2;Theresa Brown", + "reimbursement_number": "P/2022/01/R/3", + "settlement_id": "set4MukzhDoWV", + "updated_at": "2022-01-11T07:40:28.141818", + "user_id": "us6bdTBqx1iZ", + }, + { + "amount": 4508, + "code": None, + "created_at": "2022-01-11T07:05:19.982840", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "ouFo7ij9y58X", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user3@fyleforqvd.com", + "full_name": "Natalie Pope", + "id": "usZU7tBgtPVH", + }, + "user_id": "usZU7tBgtPVH", + }, + "employee_id": "ouFo7ij9y58X", + "id": "reim84qiG9U8CA", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-01-11T07:05:32.093093", + "purpose": "C/2020/09/R/18;Natalie Pope", + "reimbursement_number": "P/2022/01/R/2", + "settlement_id": "setOHwW08X65f", + "updated_at": "2022-01-11T07:05:32.093093", + "user_id": "usZU7tBgtPVH", + }, + { + "amount": 4943, + "code": None, + "created_at": "2022-01-11T07:05:19.982840", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oupCGhU3azOj", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user10@fyleforqvd.com", + "full_name": "Matthew Estrada", + "id": "usiUCyQYp2N2", + }, + "user_id": "usiUCyQYp2N2", + }, + "employee_id": "oupCGhU3azOj", + "id": "reime8ghoTzddu", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2022-01-11T07:05:32.093093", + "purpose": "C/2020/09/R/6;Matthew Estrada", + "reimbursement_number": "P/2022/01/R/1", + "settlement_id": "set9A2RqCjYYv", + "updated_at": "2022-01-11T07:05:32.093093", + "user_id": "usiUCyQYp2N2", + }, + { + "amount": 4199, + "code": None, + "created_at": "2021-11-18T03:47:54.607214", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouHoRakEut14", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user2@fyleforqvd.com", + "full_name": "Brian Foster", + "id": "usn71kjcQibs", + }, + "user_id": "usn71kjcQibs", + }, + "employee_id": "ouHoRakEut14", + "id": "reimsfnlDufFGx", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:49:10.277535", + "purpose": "C/2020/09/R/14;Brian Foster", + "reimbursement_number": "P/2021/11/R/5", + "settlement_id": "setIg1rCStOIp", + "updated_at": "2021-11-18T03:49:10.277535", + "user_id": "usn71kjcQibs", + }, + { + "amount": 5486, + "code": None, + "created_at": "2021-11-18T03:47:54.607214", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 1", + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "id": "ourWIYik4Igq", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user1@fyleforqvd.com", + "full_name": "Joshua Wood", + "id": "usenjNn1QU1A", + }, + "user_id": "usenjNn1QU1A", + }, + "employee_id": "ourWIYik4Igq", + "id": "reimWkDdw9LMlO", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:48:57.535498", + "purpose": "C/2020/09/R/10;Joshua Wood", + "reimbursement_number": "P/2021/11/R/6", + "settlement_id": "setRs2XBtFzfR", + "updated_at": "2021-11-18T03:48:57.535498", + "user_id": "usenjNn1QU1A", + }, + { + "amount": 6427, + "code": None, + "created_at": "2021-11-18T03:46:43.738353", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouydH1D1p8yA", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user4@fyleforqvd.com", + "full_name": "Samantha Washington", + "id": "us5LYztuG20F", + }, + "user_id": "us5LYztuG20F", + }, + "employee_id": "ouydH1D1p8yA", + "id": "reimhFeIwSsip1", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:47:12.717605", + "purpose": "C/2020/09/R/22;Samantha Washington", + "reimbursement_number": "P/2021/11/R/4", + "settlement_id": "set08NdKebHfF", + "updated_at": "2021-11-18T03:47:12.717605", + "user_id": "us5LYztuG20F", + }, + { + "amount": 7287, + "code": None, + "created_at": "2021-11-18T03:16:58.706065", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuS57oGeQ2M", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user5@fyleforqvd.com", + "full_name": "Chris Curtis", + "id": "us49CBDOfTLC", + }, + "user_id": "us49CBDOfTLC", + }, + "employee_id": "ouuS57oGeQ2M", + "id": "reimwcGJzxkKAc", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:47:12.717605", + "purpose": "C/2020/09/R/26;Chris Curtis", + "reimbursement_number": "P/2021/11/R/3", + "settlement_id": "setPCjJuoFwdA", + "updated_at": "2021-11-18T03:47:12.717605", + "user_id": "us49CBDOfTLC", + }, + { + "amount": 14009, + "code": None, + "created_at": "2021-11-18T03:13:55.852980", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 1", + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "id": "ouBnHryuMUmD", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user6@fyleforqvd.com", + "full_name": "Victor Martinez", + "id": "usuycevSQL2z", + }, + "user_id": "usuycevSQL2z", + }, + "employee_id": "ouBnHryuMUmD", + "id": "reimJAJVxJyl8X", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:14:21.236926", + "purpose": "C/2020/09/R/31;C/2020/09/R/30;C/2020/09/R/32;Victor Martinez", + "reimbursement_number": "P/2021/11/R/2", + "settlement_id": "setjty3tgI1sU", + "updated_at": "2021-11-18T03:14:21.236926", + "user_id": "usuycevSQL2z", + }, + { + "amount": 7661, + "code": None, + "created_at": "2021-11-18T03:13:55.852980", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oug6iN9ulsQ4", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user7@fyleforqvd.com", + "full_name": "James Taylor", + "id": "ushzyZgwhV7M", + }, + "user_id": "ushzyZgwhV7M", + }, + "employee_id": "oug6iN9ulsQ4", + "id": "reimKTwb5XRiyk", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:14:07.645484", + "purpose": "C/2020/09/R/34;James Taylor", + "reimbursement_number": "P/2021/11/R/1", + "settlement_id": "setpHBwU9v69u", + "updated_at": "2021-11-18T03:14:07.645484", + "user_id": "ushzyZgwhV7M", + }, + { + "amount": 34, + "code": None, + "created_at": "2021-10-26T15:10:32.509717", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimk0HhL4YJDq", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:11:59.920394", + "purpose": "C/2021/10/R/4;Ashwin", + "reimbursement_number": "P/2021/10/R/4", + "settlement_id": "setfKGscIrCrV", + "updated_at": "2021-11-18T03:11:59.920394", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 432, + "code": None, + "created_at": "2021-10-26T10:36:33.491684", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimCeI4oaV5HC", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:11:59.920394", + "purpose": "C/2021/10/R/3;Ashwin", + "reimbursement_number": "P/2021/10/R/3", + "settlement_id": "setGpb5rj33pT", + "updated_at": "2021-11-18T03:11:59.920394", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 321, + "code": None, + "created_at": "2021-10-26T08:50:33.709669", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimYTNgVBeyif", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:11:59.920394", + "purpose": "C/2021/10/R/2;Ashwin", + "reimbursement_number": "P/2021/10/R/2", + "settlement_id": "setxbATGW3Fp1", + "updated_at": "2021-11-18T03:11:59.920394", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 234, + "code": None, + "created_at": "2021-10-26T08:39:11.422588", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimiCpVFDDAlw", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-11-18T03:11:59.920394", + "purpose": "C/2021/10/R/1;Ashwin", + "reimbursement_number": "P/2021/10/R/1", + "settlement_id": "setbOZqoTS2pj", + "updated_at": "2021-11-18T03:11:59.920394", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 1000, + "code": None, + "created_at": "2021-09-30T11:00:24.021125", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimQ9a3CfIzGm", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-09-30T11:00:47.770445", + "purpose": "C/2021/09/R/3;Ashwin", + "reimbursement_number": "P/2021/09/R/3", + "settlement_id": "setN44y9Y7yq6", + "updated_at": "2021-09-30T11:00:47.770445", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 0, + "code": None, + "created_at": "2021-09-07T08:20:50.975383", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimgc6F2MlMxJ", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-09-30T11:00:47.770445", + "purpose": "C/2021/09/R/2;Ashwin", + "reimbursement_number": "P/2021/09/R/2", + "settlement_id": "setm4FGFIsgZO", + "updated_at": "2021-09-30T11:00:47.770445", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 4000, + "code": None, + "created_at": "2021-09-07T07:48:17.396948", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimruay6IV9wY", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-09-30T11:00:47.770445", + "purpose": "C/2021/09/R/1;Ashwin from NetSuite", + "reimbursement_number": "P/2021/09/R/1", + "settlement_id": "settOu9MQDCjb", + "updated_at": "2021-09-30T11:00:47.770445", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 125, + "code": None, + "created_at": "2021-08-25T09:58:55.336337", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimd8Ky05cEaV", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:59:01.453493", + "purpose": "C/2021/08/R/1;C/2021/08/R/2;Ashwin from NetSuite", + "reimbursement_number": "P/2021/08/R/1", + "settlement_id": "setrE0AnpfLR6", + "updated_at": "2021-08-25T09:59:01.453493", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 23, + "code": None, + "created_at": "2021-05-04T06:01:54.300098", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimYwaMWMxDVS", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2021/05/R/1;Ashwin", + "reimbursement_number": "P/2021/05/R/1", + "settlement_id": "setvcaCr73T50", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 3428, + "code": None, + "created_at": "2021-03-30T06:16:01.736607", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "ouFo7ij9y58X", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user3@fyleforqvd.com", + "full_name": "Natalie Pope", + "id": "usZU7tBgtPVH", + }, + "user_id": "usZU7tBgtPVH", + }, + "employee_id": "ouFo7ij9y58X", + "id": "reimmboJ6GRWM0", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/19;Natalie Pope", + "reimbursement_number": "P/2021/03/R/12", + "settlement_id": "setTyRUYsIPLl", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "usZU7tBgtPVH", + }, + { + "amount": 3100, + "code": None, + "created_at": "2021-03-30T06:16:01.736607", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 4", + "id": "deptKnXW9hkeEk", + "name": "Department 4", + "sub_department": None, + }, + "department_id": "deptKnXW9hkeEk", + "id": "ouHbIBdnWJZP", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user9@fyleforqvd.com", + "full_name": "Justin Glass", + "id": "us5qnHSldfcB", + }, + "user_id": "us5qnHSldfcB", + }, + "employee_id": "ouHbIBdnWJZP", + "id": "reimQNmxNlLvJt", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/43;Justin Glass", + "reimbursement_number": "P/2021/03/R/10", + "settlement_id": "setxH1j5o4s6j", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "us5qnHSldfcB", + }, + { + "amount": 3308, + "code": None, + "created_at": "2021-03-30T06:16:01.736607", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouydH1D1p8yA", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user4@fyleforqvd.com", + "full_name": "Samantha Washington", + "id": "us5LYztuG20F", + }, + "user_id": "us5LYztuG20F", + }, + "employee_id": "ouydH1D1p8yA", + "id": "reimRuGiuIEGGP", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/23;Samantha Washington", + "reimbursement_number": "P/2021/03/R/13", + "settlement_id": "setjxo12MZJYl", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "us5LYztuG20F", + }, + { + "amount": 3191, + "code": None, + "created_at": "2021-03-30T06:16:01.736607", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouI4K0DWCGYO", + "org_id": "orNoatdUnm1w", + "user": { + "email": "admin1@fyleforqvd.com", + "full_name": "Theresa Brown", + "id": "us6bdTBqx1iZ", + }, + "user_id": "us6bdTBqx1iZ", + }, + "employee_id": "ouI4K0DWCGYO", + "id": "reimUrg1EXPuBP", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/3;Theresa Brown", + "reimbursement_number": "P/2021/03/R/14", + "settlement_id": "setyKgtyoqcAa", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "us6bdTBqx1iZ", + }, + { + "amount": 2945, + "code": None, + "created_at": "2021-03-30T06:16:01.736607", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oupCGhU3azOj", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user10@fyleforqvd.com", + "full_name": "Matthew Estrada", + "id": "usiUCyQYp2N2", + }, + "user_id": "usiUCyQYp2N2", + }, + "employee_id": "oupCGhU3azOj", + "id": "reimwHk27VpQv4", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/7;Matthew Estrada", + "reimbursement_number": "P/2021/03/R/11", + "settlement_id": "setjXHRUesLxn", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "usiUCyQYp2N2", + }, + { + "amount": 3295, + "code": None, + "created_at": "2021-03-30T06:15:44.542887", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuS57oGeQ2M", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user5@fyleforqvd.com", + "full_name": "Chris Curtis", + "id": "us49CBDOfTLC", + }, + "user_id": "us49CBDOfTLC", + }, + "employee_id": "ouuS57oGeQ2M", + "id": "reimbbSG9sI4BZ", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/27;Chris Curtis", + "reimbursement_number": "P/2021/03/R/6", + "settlement_id": "setRX7GniJkqD", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "us49CBDOfTLC", + }, + { + "amount": 2615, + "code": None, + "created_at": "2021-03-30T06:15:44.542887", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouHoRakEut14", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user2@fyleforqvd.com", + "full_name": "Brian Foster", + "id": "usn71kjcQibs", + }, + "user_id": "usn71kjcQibs", + }, + "employee_id": "ouHoRakEut14", + "id": "reimcMB4pwblkW", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/15;Brian Foster", + "reimbursement_number": "P/2021/03/R/5", + "settlement_id": "set6VBzeFmXrf", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "usn71kjcQibs", + }, + { + "amount": 2824, + "code": None, + "created_at": "2021-03-30T06:15:44.542887", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oug6iN9ulsQ4", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user7@fyleforqvd.com", + "full_name": "James Taylor", + "id": "ushzyZgwhV7M", + }, + "user_id": "ushzyZgwhV7M", + }, + "employee_id": "oug6iN9ulsQ4", + "id": "reimgOmaqTkCBG", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/35;James Taylor", + "reimbursement_number": "P/2021/03/R/7", + "settlement_id": "set6gNM8qlsY2", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "ushzyZgwhV7M", + }, + { + "amount": 2478, + "code": None, + "created_at": "2021-03-30T06:15:44.542887", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 1", + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "id": "ourWIYik4Igq", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user1@fyleforqvd.com", + "full_name": "Joshua Wood", + "id": "usenjNn1QU1A", + }, + "user_id": "usenjNn1QU1A", + }, + "employee_id": "ourWIYik4Igq", + "id": "reimoy9XwhJvGL", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/11;Joshua Wood", + "reimbursement_number": "P/2021/03/R/9", + "settlement_id": "setKFJZ0uuOKx", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "usenjNn1QU1A", + }, + { + "amount": 3124, + "code": None, + "created_at": "2021-03-30T06:15:44.542887", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuRl5RWIiBi", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user8@fyleforqvd.com", + "full_name": "Jessica Lane", + "id": "use1hqDbsybg", + }, + "user_id": "use1hqDbsybg", + }, + "employee_id": "ouuRl5RWIiBi", + "id": "reimP6SRMlvpd0", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/39;Jessica Lane", + "reimbursement_number": "P/2021/03/R/8", + "settlement_id": "setFQUqfxSlwI", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "use1hqDbsybg", + }, + { + "amount": 2277, + "code": None, + "created_at": "2021-03-30T06:15:12.845261", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouydH1D1p8yA", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user4@fyleforqvd.com", + "full_name": "Samantha Washington", + "id": "us5LYztuG20F", + }, + "user_id": "us5LYztuG20F", + }, + "employee_id": "ouydH1D1p8yA", + "id": "reimarcOAIOUA4", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2020/09/R/24;Samantha Washington", + "reimbursement_number": "P/2021/03/R/4", + "settlement_id": "setPeQign1vZL", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "us5LYztuG20F", + }, + { + "amount": 1166.39, + "code": None, + "created_at": "2021-03-18T08:15:38.051700", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimNYTLqEW8gU", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2021/03/R/2;C/2021/02/R/3;Ashwin", + "reimbursement_number": "P/2021/03/R/3", + "settlement_id": "setBFU1GVLdbs", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 0, + "code": None, + "created_at": "2021-03-04T09:09:54.545996", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouI4K0DWCGYO", + "org_id": "orNoatdUnm1w", + "user": { + "email": "admin1@fyleforqvd.com", + "full_name": "Theresa Brown", + "id": "us6bdTBqx1iZ", + }, + "user_id": "us6bdTBqx1iZ", + }, + "employee_id": "ouI4K0DWCGYO", + "id": "reimHSB7SmkhK1", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "C/2021/03/R/1;Theresa Brown", + "reimbursement_number": "P/2021/03/R/2", + "settlement_id": "setTtjhUwGa0H", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "us6bdTBqx1iZ", + }, + { + "amount": 0, + "code": None, + "created_at": "2021-03-04T09:06:27.898424", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouHoRakEut14", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user2@fyleforqvd.com", + "full_name": "Brian Foster", + "id": "usn71kjcQibs", + }, + "user_id": "usn71kjcQibs", + }, + "employee_id": "ouHoRakEut14", + "id": "reimJRxEcoCEWP", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-08-25T09:55:51.416364", + "purpose": "Brian Foster", + "reimbursement_number": "P/2021/03/R/1", + "settlement_id": "setJOwY0sCtJ9", + "updated_at": "2021-08-25T09:55:51.416364", + "user_id": "usn71kjcQibs", + }, + { + "amount": 1685, + "code": None, + "created_at": "2021-02-11T09:51:01.722497", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "ouFo7ij9y58X", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user3@fyleforqvd.com", + "full_name": "Natalie Pope", + "id": "usZU7tBgtPVH", + }, + "user_id": "usZU7tBgtPVH", + }, + "employee_id": "ouFo7ij9y58X", + "id": "reimwYq2WSNsVW", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/20;Natalie Pope", + "reimbursement_number": "P/2021/02/R/5", + "settlement_id": "setS5aRlkwIdk", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usZU7tBgtPVH", + }, + { + "amount": 3314, + "code": None, + "created_at": "2021-02-03T12:14:05.892010", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oupCGhU3azOj", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user10@fyleforqvd.com", + "full_name": "Matthew Estrada", + "id": "usiUCyQYp2N2", + }, + "user_id": "usiUCyQYp2N2", + }, + "employee_id": "oupCGhU3azOj", + "id": "reimiHiBP53Fs5", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/8;Matthew Estrada", + "reimbursement_number": "P/2021/02/R/4", + "settlement_id": "setkPZhe5s2AY", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usiUCyQYp2N2", + }, + { + "amount": 3457, + "code": None, + "created_at": "2021-02-03T07:04:09.114081", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oug6iN9ulsQ4", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user7@fyleforqvd.com", + "full_name": "James Taylor", + "id": "ushzyZgwhV7M", + }, + "user_id": "ushzyZgwhV7M", + }, + "employee_id": "oug6iN9ulsQ4", + "id": "reimmNVR3HpAV0", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/36;James Taylor", + "reimbursement_number": "P/2021/02/R/2", + "settlement_id": "set39oBUQOoH2", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "ushzyZgwhV7M", + }, + { + "amount": 828, + "code": None, + "created_at": "2021-02-03T07:04:09.114081", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 1", + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "id": "ourWIYik4Igq", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user1@fyleforqvd.com", + "full_name": "Joshua Wood", + "id": "usenjNn1QU1A", + }, + "user_id": "usenjNn1QU1A", + }, + "employee_id": "ourWIYik4Igq", + "id": "reimZAOtflTcxB", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/12;Joshua Wood", + "reimbursement_number": "P/2021/02/R/3", + "settlement_id": "setg2Nz8qwhRd", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usenjNn1QU1A", + }, + { + "amount": 1747, + "code": None, + "created_at": "2021-02-01T08:35:37.893179", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuRl5RWIiBi", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user8@fyleforqvd.com", + "full_name": "Jessica Lane", + "id": "use1hqDbsybg", + }, + "user_id": "use1hqDbsybg", + }, + "employee_id": "ouuRl5RWIiBi", + "id": "reimKxcL8z0PLv", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2021/02/R/4;Jessica Lane", + "reimbursement_number": "P/2021/02/R/1", + "settlement_id": "setnhLAfozPIp", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "use1hqDbsybg", + }, + { + "amount": 15, + "code": None, + "created_at": "2021-01-28T14:30:07.199538", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimVMciurnaxK", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2021/01/R/2;Ashwin", + "reimbursement_number": "P/2021/01/R/4", + "settlement_id": "setB25q3R6N9S", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 3338, + "code": None, + "created_at": "2021-01-27T16:32:06.755785", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuS57oGeQ2M", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user5@fyleforqvd.com", + "full_name": "Chris Curtis", + "id": "us49CBDOfTLC", + }, + "user_id": "us49CBDOfTLC", + }, + "employee_id": "ouuS57oGeQ2M", + "id": "reimbqgFZXEyOH", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/28;Chris Curtis", + "reimbursement_number": "P/2021/01/R/3", + "settlement_id": "set7kRj1u1UhV", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "us49CBDOfTLC", + }, + { + "amount": 3016, + "code": None, + "created_at": "2021-01-27T16:31:30.722170", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouHoRakEut14", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user2@fyleforqvd.com", + "full_name": "Brian Foster", + "id": "usn71kjcQibs", + }, + "user_id": "usn71kjcQibs", + }, + "employee_id": "ouHoRakEut14", + "id": "reimDETwvxt6gQ", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/16;Brian Foster", + "reimbursement_number": "P/2021/01/R/2", + "settlement_id": "setHh7tfFgd4H", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usn71kjcQibs", + }, + { + "amount": 313, + "code": None, + "created_at": "2021-01-27T15:42:56.213429", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouJSY9XI9s9k", + "org_id": "orNoatdUnm1w", + "user": { + "email": "ashwin.t@fyle.in", + "full_name": "Joanna", + "id": "usqywo0f3nBY", + }, + "user_id": "usqywo0f3nBY", + }, + "employee_id": "ouJSY9XI9s9k", + "id": "reimGDFq2Kg3EL", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/10/R/3;C/2020/10/R/1;C/2020/10/R/2;C/2021/01/R/1;Ashwin", + "reimbursement_number": "P/2021/01/R/1", + "settlement_id": "setdElR77mw9Q", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usqywo0f3nBY", + }, + { + "amount": 4217, + "code": None, + "created_at": "2020-09-08T11:15:46.929288", + "creator_user_id": "us6bdTBqx1iZ", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouI4K0DWCGYO", + "org_id": "orNoatdUnm1w", + "user": { + "email": "admin1@fyleforqvd.com", + "full_name": "Theresa Brown", + "id": "us6bdTBqx1iZ", + }, + "user_id": "us6bdTBqx1iZ", + }, + "employee_id": "ouI4K0DWCGYO", + "id": "reimktQdKiugB3", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/48;C/2020/09/R/49;C/2020/09/R/50;C/2020/09/R/4;C/2020/09/R/46;C/2020/09/R/45;C/2020/09/R/47;Theresa Brown", + "reimbursement_number": "P/2020/09/R/14", + "settlement_id": "setkSjrfxbwxg", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "us6bdTBqx1iZ", + }, + { + "amount": 9685, + "code": None, + "created_at": "2020-09-03T10:34:27.567336", + "creator_user_id": "us6bdTBqx1iZ", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 4", + "id": "deptKnXW9hkeEk", + "name": "Department 4", + "sub_department": None, + }, + "department_id": "deptKnXW9hkeEk", + "id": "ouHbIBdnWJZP", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user9@fyleforqvd.com", + "full_name": "Justin Glass", + "id": "us5qnHSldfcB", + }, + "user_id": "us5qnHSldfcB", + }, + "employee_id": "ouHbIBdnWJZP", + "id": "reimvgG58nOu2q", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/44;C/2020/09/R/42;Justin Glass", + "reimbursement_number": "P/2020/09/R/13", + "settlement_id": "setDldxiwT39A", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "us5qnHSldfcB", + }, + { + "amount": 8914, + "code": None, + "created_at": "2020-09-03T10:34:27.567336", + "creator_user_id": "us6bdTBqx1iZ", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuRl5RWIiBi", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user8@fyleforqvd.com", + "full_name": "Jessica Lane", + "id": "use1hqDbsybg", + }, + "user_id": "use1hqDbsybg", + }, + "employee_id": "ouuRl5RWIiBi", + "id": "reimWLUU9xgKBA", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/38;C/2020/09/R/40;Jessica Lane", + "reimbursement_number": "P/2020/09/R/12", + "settlement_id": "setuIDscN7GIP", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "use1hqDbsybg", + }, + { + "amount": 3606.0, + "code": None, + "created_at": "2020-09-02T08:44:40.031221", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 4", + "id": "deptKnXW9hkeEk", + "name": "Department 4", + "sub_department": None, + }, + "department_id": "deptKnXW9hkeEk", + "id": "ouHbIBdnWJZP", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user9@fyleforqvd.com", + "full_name": "Justin Glass", + "id": "us5qnHSldfcB", + }, + "user_id": "us5qnHSldfcB", + }, + "employee_id": "ouHbIBdnWJZP", + "id": "reimEUxbh9JpA4", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/41;Justin Glass", + "reimbursement_number": "P/2020/09/R/11", + "settlement_id": "settIyAHaiYqC", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "us5qnHSldfcB", + }, + { + "amount": 3950.0, + "code": None, + "created_at": "2020-09-02T08:41:00.263702", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuRl5RWIiBi", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user8@fyleforqvd.com", + "full_name": "Jessica Lane", + "id": "use1hqDbsybg", + }, + "user_id": "use1hqDbsybg", + }, + "employee_id": "ouuRl5RWIiBi", + "id": "reim8zphw6VUt7", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/37;Jessica Lane", + "reimbursement_number": "P/2020/09/R/10", + "settlement_id": "setII64DqUw1D", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "use1hqDbsybg", + }, + { + "amount": 3948.0, + "code": None, + "created_at": "2020-09-02T08:37:29.432727", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oug6iN9ulsQ4", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user7@fyleforqvd.com", + "full_name": "James Taylor", + "id": "ushzyZgwhV7M", + }, + "user_id": "ushzyZgwhV7M", + }, + "employee_id": "oug6iN9ulsQ4", + "id": "reim6OwrtaWAKY", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/33;James Taylor", + "reimbursement_number": "P/2020/09/R/9", + "settlement_id": "setfMDcofquH1", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "ushzyZgwhV7M", + }, + { + "amount": 5584.0, + "code": None, + "created_at": "2020-09-02T08:34:07.225859", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 1", + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "id": "ouBnHryuMUmD", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user6@fyleforqvd.com", + "full_name": "Victor Martinez", + "id": "usuycevSQL2z", + }, + "user_id": "usuycevSQL2z", + }, + "employee_id": "ouBnHryuMUmD", + "id": "reim2Ti1POSaup", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/29;Victor Martinez", + "reimbursement_number": "P/2020/09/R/8", + "settlement_id": "seticfKo334cX", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usuycevSQL2z", + }, + { + "amount": 4678.0, + "code": None, + "created_at": "2020-09-02T08:30:47.015910", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouuS57oGeQ2M", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user5@fyleforqvd.com", + "full_name": "Chris Curtis", + "id": "us49CBDOfTLC", + }, + "user_id": "us49CBDOfTLC", + }, + "employee_id": "ouuS57oGeQ2M", + "id": "reimubZodjYSBa", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/25;Chris Curtis", + "reimbursement_number": "P/2020/09/R/7", + "settlement_id": "setvv95YsnA6O", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "us49CBDOfTLC", + }, + { + "amount": 4024.0, + "code": None, + "created_at": "2020-09-02T08:27:21.739652", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouydH1D1p8yA", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user4@fyleforqvd.com", + "full_name": "Samantha Washington", + "id": "us5LYztuG20F", + }, + "user_id": "us5LYztuG20F", + }, + "employee_id": "ouydH1D1p8yA", + "id": "reim3th7sQZSd5", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/21;Samantha Washington", + "reimbursement_number": "P/2020/09/R/6", + "settlement_id": "setCSIEzTjOIs", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "us5LYztuG20F", + }, + { + "amount": 5731.0, + "code": None, + "created_at": "2020-09-02T08:23:48.090536", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "ouFo7ij9y58X", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user3@fyleforqvd.com", + "full_name": "Natalie Pope", + "id": "usZU7tBgtPVH", + }, + "user_id": "usZU7tBgtPVH", + }, + "employee_id": "ouFo7ij9y58X", + "id": "reimGdMDRBInId", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/17;Natalie Pope", + "reimbursement_number": "P/2020/09/R/5", + "settlement_id": "setRQ1c6rjyRP", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usZU7tBgtPVH", + }, + { + "amount": 2827.0, + "code": None, + "created_at": "2020-09-02T08:20:14.535570", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 2", + "id": "deptqF8lOvKmVi", + "name": "Department 2", + "sub_department": None, + }, + "department_id": "deptqF8lOvKmVi", + "id": "ouHoRakEut14", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user2@fyleforqvd.com", + "full_name": "Brian Foster", + "id": "usn71kjcQibs", + }, + "user_id": "usn71kjcQibs", + }, + "employee_id": "ouHoRakEut14", + "id": "reim2i1U5KhB1x", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/13;Brian Foster", + "reimbursement_number": "P/2020/09/R/4", + "settlement_id": "set5ayZSjOz4p", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usn71kjcQibs", + }, + { + "amount": 6361.0, + "code": None, + "created_at": "2020-09-02T08:16:31.405622", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 1", + "id": "deptGEGIjLq0OY", + "name": "Department 1", + "sub_department": None, + }, + "department_id": "deptGEGIjLq0OY", + "id": "ourWIYik4Igq", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user1@fyleforqvd.com", + "full_name": "Joshua Wood", + "id": "usenjNn1QU1A", + }, + "user_id": "usenjNn1QU1A", + }, + "employee_id": "ourWIYik4Igq", + "id": "reimRgDkr7USSr", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/9;Joshua Wood", + "reimbursement_number": "P/2020/09/R/3", + "settlement_id": "setQd4PcikJ6m", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usenjNn1QU1A", + }, + { + "amount": 3366.0, + "code": None, + "created_at": "2020-09-02T08:13:02.973236", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": { + "code": None, + "display_name": "Department 3", + "id": "deptcFPEVWaolp", + "name": "Department 3", + "sub_department": None, + }, + "department_id": "deptcFPEVWaolp", + "id": "oupCGhU3azOj", + "org_id": "orNoatdUnm1w", + "user": { + "email": "user10@fyleforqvd.com", + "full_name": "Matthew Estrada", + "id": "usiUCyQYp2N2", + }, + "user_id": "usiUCyQYp2N2", + }, + "employee_id": "oupCGhU3azOj", + "id": "reim6dgg2f4SaW", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/5;Matthew Estrada", + "reimbursement_number": "P/2020/09/R/2", + "settlement_id": "setzdUvdqllLs", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "usiUCyQYp2N2", + }, + { + "amount": 4052.0, + "code": None, + "created_at": "2020-09-02T08:09:36.384824", + "creator_user_id": "usJunSVNaFGE", + "currency": "USD", + "employee": { + "code": None, + "department": None, + "department_id": None, + "id": "ouI4K0DWCGYO", + "org_id": "orNoatdUnm1w", + "user": { + "email": "admin1@fyleforqvd.com", + "full_name": "Theresa Brown", + "id": "us6bdTBqx1iZ", + }, + "user_id": "us6bdTBqx1iZ", + }, + "employee_id": "ouI4K0DWCGYO", + "id": "reim6bGIRJ01rh", + "is_exported": False, + "is_paid": True, + "mode": "OFFLINE", + "org_id": "orNoatdUnm1w", + "paid_at": "2021-07-28T11:19:07.462566", + "purpose": "C/2020/09/R/1;Theresa Brown", + "reimbursement_number": "P/2020/09/R/1", + "settlement_id": "seteTWEM2Tey3", + "updated_at": "2021-07-28T11:19:07.462566", + "user_id": "us6bdTBqx1iZ", + }, + ] + } + ], } diff --git a/tests/test_fyle/test_helpers.py b/tests/test_fyle/test_helpers.py index fb544ebb..396764ec 100644 --- a/tests/test_fyle/test_helpers.py +++ b/tests/test_fyle/test_helpers.py @@ -1,81 +1,61 @@ from asyncio.log import logger -from unittest import mock + from rest_framework.response import Response from rest_framework.views import status -from apps.fyle.helpers import post_request, get_request, get_fyle_orgs + +from apps.fyle.helpers import get_fyle_orgs, get_request, post_request def test_post_request(mocker): mocker.patch( - 'apps.fyle.helpers.requests.post', - return_value=Response( - { - 'message': 'Post request' - }, - status=status.HTTP_200_OK - ) + "apps.fyle.helpers.requests.post", + return_value=Response({"message": "Post request"}, status=status.HTTP_200_OK), ) try: - post_request(url='sdfghjk', body={}, refresh_token='srtyu') - except: - logger.info('Error in post request') - + post_request(url="sdfghjk", body={}, refresh_token="srtyu") + except Exception: + logger.info("Error in post request") + mocker.patch( - 'apps.fyle.helpers.requests.post', + "apps.fyle.helpers.requests.post", return_value=Response( - { - 'message': 'Post request' - }, - status=status.HTTP_400_BAD_REQUEST - ) + {"message": "Post request"}, status=status.HTTP_400_BAD_REQUEST + ), ) try: - post_request(url='sdfghjk', body={}, refresh_token='srtyu') - except: - logger.info('Error in post request') + post_request(url="sdfghjk", body={}, refresh_token="srtyu") + except Exception: + logger.info("Error in post request") def test_get_request(mocker): mocker.patch( - 'apps.fyle.helpers.requests.get', - return_value=Response( - { - 'message': 'Get request' - }, - status=status.HTTP_200_OK - ) + "apps.fyle.helpers.requests.get", + return_value=Response({"message": "Get request"}, status=status.HTTP_200_OK), ) try: - get_request(url='sdfghjk', params={'key': 'sample'}, refresh_token='srtyu') - except: - logger.info('Error in post request') - + get_request(url="sdfghjk", params={"key": "sample"}, refresh_token="srtyu") + except Exception: + logger.info("Error in post request") + mocker.patch( - 'apps.fyle.helpers.requests.get', + "apps.fyle.helpers.requests.get", return_value=Response( - { - 'message': 'Get request' - }, - status=status.HTTP_400_BAD_REQUEST - ) + {"message": "Get request"}, status=status.HTTP_400_BAD_REQUEST + ), ) try: - get_request(url='sdfghjk', params={'sample': True}, refresh_token='srtyu') - except: - logger.info('Error in post request') + get_request(url="sdfghjk", params={"sample": True}, refresh_token="srtyu") + except Exception: + logger.info("Error in post request") def test_get_fyle_orgs(mocker): mocker.patch( - 'apps.fyle.helpers.requests.get', - return_value=Response( - { - 'message': 'Get request' - }, - status=status.HTTP_200_OK - ) + "apps.fyle.helpers.requests.get", + return_value=Response({"message": "Get request"}, status=status.HTTP_200_OK), ) try: - get_fyle_orgs(refresh_token='srtyu', cluster_domain='erty') - except: - logger.info('Error in post request') + get_fyle_orgs(refresh_token="srtyu", cluster_domain="erty") + except Exception: + logger.info("Error in post request") diff --git a/tests/test_fyle/test_models.py b/tests/test_fyle/test_models.py index 3472be93..ea7e40e1 100644 --- a/tests/test_fyle/test_models.py +++ b/tests/test_fyle/test_models.py @@ -1,88 +1,106 @@ -from apps.fyle.models import get_default_expense_state, get_default_expense_group_fields, ExpenseGroupSettings, Expense, Reimbursement, \ - ExpenseGroup, _group_expenses -from apps.tasks.models import TaskLog -from apps.fyle.tasks import create_expense_groups -from .fixtures import data +from apps.fyle.models import ( + Expense, + ExpenseGroup, + ExpenseGroupSettings, + Reimbursement, + _group_expenses, + get_default_expense_group_fields, + get_default_expense_state, +) +from tests.test_fyle.fixtures import data def test_default_fields(): expense_group_field = get_default_expense_group_fields() expense_state = get_default_expense_state() - assert expense_group_field == ['employee_email', 'report_id', 'claim_number', 'fund_source'] - assert expense_state == 'PAYMENT_PROCESSING' + assert expense_group_field == [ + "employee_email", + "report_id", + "claim_number", + "fund_source", + ] + assert expense_state == "PAYMENT_PROCESSING" def test_create_expense_objects(db): workspace_id = 1 - payload = data['expenses'] + payload = data["expenses"] Expense.create_expense_objects(payload, workspace_id) expense = Expense.objects.last() - assert expense.expense_id == 'tx4ziVSAyIsv' + assert expense.expense_id == "tx4ziVSAyIsv" def test_create_eliminated_expense_objects(db): workspace_id = 1 - payload = data['eliminated_expenses'] + payload = data["eliminated_expenses"] Expense.create_expense_objects(payload, workspace_id) - expense = Expense.objects.filter(expense_id='tx6wOnBVaumk') + expense = Expense.objects.filter(expense_id="tx6wOnBVaumk") assert len(expense) == 0 def test_expense_group_settings(create_temp_workspace, db): workspace_id = 98 - payload = data['expense_group_settings_payload'] + payload = data["expense_group_settings_payload"] - ExpenseGroupSettings.update_expense_group_settings( - payload, workspace_id - ) + ExpenseGroupSettings.update_expense_group_settings(payload, workspace_id) settings = ExpenseGroupSettings.objects.last() - assert settings.reimbursable_expense_state == 'PAYMENT_PROCESSING' - assert settings.ccc_expense_state == 'PAYMENT_PROCESSING' - assert settings.ccc_export_date_type == 'spent_at' + assert settings.reimbursable_expense_state == "PAYMENT_PROCESSING" + assert settings.ccc_expense_state == "PAYMENT_PROCESSING" + assert settings.ccc_export_date_type == "spent_at" def test_create_reimbursement(db): workspace_id = 1 - reimbursements = data['reimbursements'] + reimbursements = data["reimbursements"] - Reimbursement.create_or_update_reimbursement_objects(reimbursements=reimbursements, workspace_id=workspace_id) + Reimbursement.create_or_update_reimbursement_objects( + reimbursements=reimbursements, workspace_id=workspace_id + ) - pending_reimbursement = Reimbursement.objects.get(reimbursement_id='reimgCW1Og0BcM') + pending_reimbursement = Reimbursement.objects.get(reimbursement_id="reimgCW1Og0BcM") - pending_reimbursement.state = 'PENDING' - pending_reimbursement.settlement_id= 'setgCxsr2vTmZ' + pending_reimbursement.state = "PENDING" + pending_reimbursement.settlement_id = "setgCxsr2vTmZ" - reimbursements[0]['is_paid'] = True + reimbursements[0]["is_paid"] = True - Reimbursement.create_or_update_reimbursement_objects(reimbursements=reimbursements, workspace_id=workspace_id) + Reimbursement.create_or_update_reimbursement_objects( + reimbursements=reimbursements, workspace_id=workspace_id + ) - paid_reimbursement = Reimbursement.objects.get(reimbursement_id='reimgCW1Og0BcM') - paid_reimbursement.state == 'PAID' + paid_reimbursement = Reimbursement.objects.get(reimbursement_id="reimgCW1Og0BcM") + paid_reimbursement.state == "PAID" def test_create_expense_groups_by_report_id_fund_source(db): workspace_id = 1 - payload = data['expenses'] + payload = data["expenses"] Expense.create_expense_objects(payload, workspace_id) expense_objects = Expense.objects.last() expense_group_settings = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) - expense_group_settings.reimbursable_export_date_type = 'last_spent_at' - expense_group_settings.ccc_export_date_type = 'last_spent_at' + expense_group_settings.reimbursable_export_date_type = "last_spent_at" + expense_group_settings.ccc_export_date_type = "last_spent_at" expense_group_settings.save() - expense_groups = _group_expenses([], ['claim_number', 'fund_source', 'projects', 'employee_email', 'report_id'], 4) + expense_groups = _group_expenses( + [], + ["claim_number", "fund_source", "projects", "employee_email", "report_id"], + 4, + ) assert expense_groups == [] - ExpenseGroup.create_expense_groups_by_report_id_fund_source([expense_objects], workspace_id) + ExpenseGroup.create_expense_groups_by_report_id_fund_source( + [expense_objects], workspace_id + ) expense_groups = ExpenseGroup.objects.last() assert expense_groups.exported_at == None diff --git a/tests/test_fyle/test_task.py b/tests/test_fyle/test_task.py index cddf7c19..a936d901 100644 --- a/tests/test_fyle/test_task.py +++ b/tests/test_fyle/test_task.py @@ -1,63 +1,62 @@ -from apps.fyle.models import ExpenseGroup, ExpenseGroupSettings -from apps.workspaces.models import FyleCredential -from apps.fyle.tasks import create_expense_groups -from apps.tasks.models import TaskLog -from .fixtures import data from unittest import mock from fyle.platform.exceptions import InvalidTokenError as FyleInvalidTokenError +from apps.fyle.models import ExpenseGroupSettings +from apps.fyle.tasks import create_expense_groups +from apps.tasks.models import TaskLog +from apps.workspaces.models import FyleCredential +from tests.test_fyle.fixtures import data + def test_create_expense_groups(mocker, db): workspace_id = 1 - + mocker.patch( - 'fyle_integrations_platform_connector.apis.Expenses.get', - return_value=data['expenses'] + "fyle_integrations_platform_connector.apis.Expenses.get", + return_value=data["expenses"], ) task_log, _ = TaskLog.objects.update_or_create( workspace_id=workspace_id, - type='FETCHING_EXPENSES', - defaults={ - 'status': 'IN_PROGRESS' - } + type="FETCHING_EXPENSES", + defaults={"status": "IN_PROGRESS"}, ) expense_group_settings = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) - expense_group_settings.reimbursable_export_date_type = 'last_spent_at' - expense_group_settings.ccc_export_date_type = 'last_spent_at' + expense_group_settings.reimbursable_export_date_type = "last_spent_at" + expense_group_settings.ccc_export_date_type = "last_spent_at" expense_group_settings.save() - create_expense_groups(workspace_id, ['PERSONAL', 'CCC'], task_log) + create_expense_groups(workspace_id, ["PERSONAL", "CCC"], task_log) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'COMPLETE' + assert task_log.status == "COMPLETE" fyle_credential = FyleCredential.objects.get(workspace_id=workspace_id) fyle_credential.delete() task_log, _ = TaskLog.objects.update_or_create( workspace_id=workspace_id, - type='FETCHING_EXPENSES', - defaults={ - 'status': 'IN_PROGRESS' - } + type="FETCHING_EXPENSES", + defaults={"status": "IN_PROGRESS"}, ) - create_expense_groups(workspace_id, ['PERSONAL', 'CCC'], task_log) + create_expense_groups(workspace_id, ["PERSONAL", "CCC"], task_log) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'FAILED' + assert task_log.status == "FAILED" - with mock.patch('fyle.platform.apis.v1beta.admin.Expenses.list_all') as mock_call: - mock_call.side_effect = FyleInvalidTokenError(msg='Invalid Token for Fyle', response="Invalid Token for Fyle") - create_expense_groups(workspace_id, ['PERSONAL', 'CCC'], task_log) + with mock.patch("fyle.platform.apis.v1beta.admin.Expenses.list_all") as mock_call: + mock_call.side_effect = FyleInvalidTokenError( + msg="Invalid Token for Fyle", response="Invalid Token for Fyle" + ) + create_expense_groups(workspace_id, ["PERSONAL", "CCC"], task_log) expense_group_settings = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) expense_group_settings.delete() - create_expense_groups(workspace_id, ['PERSONAL', 'CCC'], task_log) + create_expense_groups(workspace_id, ["PERSONAL", "CCC"], task_log) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'FATAL' + assert task_log.status == "FATAL" diff --git a/tests/test_fyle/test_views.py b/tests/test_fyle/test_views.py index 7c734b55..1925c529 100644 --- a/tests/test_fyle/test_views.py +++ b/tests/test_fyle/test_views.py @@ -1,106 +1,112 @@ -from apps.fyle.models import ExpenseGroup -from apps.workspaces.models import FyleCredential, Workspace -import pytest import json -from .fixtures import data -from tests.helper import dict_compare_keys + +import pytest + from apps.tasks.models import TaskLog +from apps.workspaces.models import FyleCredential, Workspace +from tests.helper import dict_compare_keys +from tests.test_fyle.fixtures import data def test_expense_group_view(api_client, test_connection): access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/expense_groups/' - - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + url = "/api/workspaces/1/fyle/expense_groups/" - response = api_client.get(url, { - 'exported_at__gte': '2022-05-23 13:03:06', - 'exported_at__lte': '2022-05-23 13:03:48', - }) - assert response.status_code==200 + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) + + response = api_client.get( + url, + { + "exported_at__gte": "2022-05-23 13:03:06", + "exported_at__lte": "2022-05-23 13:03:48", + }, + ) + assert response.status_code == 200 response = json.loads(response.content) - assert response['count'] == 10 + assert response["count"] == 10 task_log, _ = TaskLog.objects.update_or_create( - workspace_id=1, - type='FETCHING_EXPENSES', - defaults={ - 'status': 'IN_PROGRESS' - } + workspace_id=1, type="FETCHING_EXPENSES", defaults={"status": "IN_PROGRESS"} ) def test_expense_group_settings_view(api_client, test_connection): access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/expense_group_settings/' - - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + url = "/api/workspaces/1/fyle/expense_group_settings/" + + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.get(url) response = json.loads(response.content) - assert dict_compare_keys(response, data['expense_group_setting_response']) == [], 'expense group api return diffs in keys' - assert response['reimbursable_expense_group_fields'] == ['employee_email', 'report_id', 'claim_number', 'fund_source'] - assert response['ccc_expense_state'] == 'PAYMENT_PROCESSING' - assert response['reimbursable_expense_state'] == 'PAYMENT_PROCESSING' - assert response['reimbursable_export_date_type'] == 'current_date' + assert ( + dict_compare_keys(response, data["expense_group_setting_response"]) == [] + ), "expense group api return diffs in keys" + assert response["reimbursable_expense_group_fields"] == [ + "employee_email", + "report_id", + "claim_number", + "fund_source", + ] + assert response["ccc_expense_state"] == "PAYMENT_PROCESSING" + assert response["reimbursable_expense_state"] == "PAYMENT_PROCESSING" + assert response["reimbursable_export_date_type"] == "current_date" def test_expense_fields_view(api_client, test_connection): - access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/expense_fields/' + url = "/api/workspaces/1/fyle/expense_fields/" - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.get(url) assert response.status_code == 200 response = json.loads(response.content) - assert response[0] == data['expense_fields_response'][0] + assert response[0] == data["expense_fields_response"][0] -@pytest.mark.django_db(databases=['default']) +@pytest.mark.django_db(databases=["default"]) def test_fyle_sync_dimension(api_client, test_connection, mocker): mocker.patch( - 'fyle.platform.apis.v1beta.admin.Employees.list_all', - return_value=data['get_all_employees'] + "fyle.platform.apis.v1beta.admin.Employees.list_all", + return_value=data["get_all_employees"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Categories.list_all', - return_value=data['get_all_categories'] + "fyle.platform.apis.v1beta.admin.Categories.list_all", + return_value=data["get_all_categories"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Projects.list_all', - return_value=data['get_all_projects'] + "fyle.platform.apis.v1beta.admin.Projects.list_all", + return_value=data["get_all_projects"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.CostCenters.list_all', - return_value=data['get_all_cost_centers'] + "fyle.platform.apis.v1beta.admin.CostCenters.list_all", + return_value=data["get_all_cost_centers"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.ExpenseFields.list_all', - return_value=data['get_all_expense_fields'] + "fyle.platform.apis.v1beta.admin.ExpenseFields.list_all", + return_value=data["get_all_expense_fields"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.CorporateCards.list_all', - return_value=data['get_all_corporate_cards'] + "fyle.platform.apis.v1beta.admin.CorporateCards.list_all", + return_value=data["get_all_corporate_cards"], ) access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/sync_dimensions/' - - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) - + url = "/api/workspaces/1/fyle/sync_dimensions/" + + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) + response = api_client.post(url) assert response.status_code == 200 @@ -115,9 +121,9 @@ def test_fyle_sync_dimension(api_client, test_connection, mocker): def test_fyle_sync_dimension_fail(api_client, test_connection): access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/sync_dimensions/' + url = "/api/workspaces/1/fyle/sync_dimensions/" - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) workspace = Workspace.objects.get(id=1) workspace.source_synced_at = None @@ -128,46 +134,46 @@ def test_fyle_sync_dimension_fail(api_client, test_connection): new_response = api_client.post(url) assert new_response.status_code == 400 - assert new_response.data['message'] == 'Fyle credentials not found in workspace' + assert new_response.data["message"] == "Fyle credentials not found in workspace" def test_fyle_refresh_dimension(api_client, test_connection, mocker): mocker.patch( - 'fyle.platform.apis.v1beta.admin.Employees.list_all', - return_value=data['get_all_employees'] + "fyle.platform.apis.v1beta.admin.Employees.list_all", + return_value=data["get_all_employees"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Categories.list_all', - return_value=data['get_all_categories'] + "fyle.platform.apis.v1beta.admin.Categories.list_all", + return_value=data["get_all_categories"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Projects.list_all', - return_value=data['get_all_projects'] + "fyle.platform.apis.v1beta.admin.Projects.list_all", + return_value=data["get_all_projects"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.CostCenters.list_all', - return_value=data['get_all_cost_centers'] + "fyle.platform.apis.v1beta.admin.CostCenters.list_all", + return_value=data["get_all_cost_centers"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.ExpenseFields.list_all', - return_value=data['get_all_expense_fields'] + "fyle.platform.apis.v1beta.admin.ExpenseFields.list_all", + return_value=data["get_all_expense_fields"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.CorporateCards.list_all', - return_value=data['get_all_corporate_cards'] + "fyle.platform.apis.v1beta.admin.CorporateCards.list_all", + return_value=data["get_all_corporate_cards"], ) access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/refresh_dimensions/' + url = "/api/workspaces/1/fyle/refresh_dimensions/" + + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) - response = api_client.post(url) assert response.status_code == 200 @@ -177,20 +183,20 @@ def test_fyle_refresh_dimension(api_client, test_connection, mocker): response = api_client.post(url) assert response.status_code == 400 - assert response.data['message'] == 'Fyle credentials not found in workspace' + assert response.data["message"] == "Fyle credentials not found in workspace" def test_expense_group_sync(api_client, test_connection, mocker): mocker.patch( - 'fyle_integrations_platform_connector.apis.Expenses.get', - return_value=data['expenses'] + "fyle_integrations_platform_connector.apis.Expenses.get", + return_value=data["expenses"], ) access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/expense_groups/sync/' + url = "/api/workspaces/1/fyle/expense_groups/sync/" + + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) - response = api_client.post(url) assert response.status_code == 200 @@ -198,9 +204,9 @@ def test_expense_group_sync(api_client, test_connection, mocker): def test_exportable_expense_group(api_client, test_connection, mocker): access_token = test_connection.access_token - url = '/api/workspaces/1/fyle/exportable_expense_groups/' + url = "/api/workspaces/1/fyle/exportable_expense_groups/" + + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) - response = api_client.get(url) assert response.status_code == 200 diff --git a/tests/test_mappings/conftest.py b/tests/test_mappings/conftest.py index 477097f5..14dc866c 100644 --- a/tests/test_mappings/conftest.py +++ b/tests/test_mappings/conftest.py @@ -1,5 +1,5 @@ import pytest -from fyle_accounting_mappings.models import MappingSetting, DestinationAttribute +from fyle_accounting_mappings.models import DestinationAttribute, MappingSetting @pytest.fixture @@ -7,15 +7,22 @@ def create_mapping_setting(db): workspace_id = 1 MappingSetting.objects.update_or_create( - source_field='COST_CENTER', + source_field="COST_CENTER", workspace_id=workspace_id, - destination_field='COST_CENTER', - defaults={ - 'import_to_fyle': True, - 'is_custom': False - } + destination_field="COST_CENTER", + defaults={"import_to_fyle": True, "is_custom": False}, ) DestinationAttribute.bulk_create_or_update_destination_attributes( - [{'attribute_type': 'COST_CENTER', 'display_name': 'Cost center', 'value': 'sample', 'destination_id': '7b354c1c-cf59-42fc-9449-a65c51988335'}], 'COST_CENTER', 1, True + [ + { + "attribute_type": "COST_CENTER", + "display_name": "Cost center", + "value": "sample", + "destination_id": "7b354c1c-cf59-42fc-9449-a65c51988335", + } + ], + "COST_CENTER", + 1, + True, ) diff --git a/tests/test_mappings/fixtures.py b/tests/test_mappings/fixtures.py index 4fe2bc73..8020899d 100644 --- a/tests/test_mappings/fixtures.py +++ b/tests/test_mappings/fixtures.py @@ -1,56 +1,52 @@ data = { - 'fyle_category_payload': [ + "fyle_category_payload": [ { - 'id':1, - 'name':'Advertising', - 'code':'7', - 'is_enabled':True, - 'restricted_project_ids':[ - - ] + "id": 1, + "name": "Advertising", + "code": "7", + "is_enabled": True, + "restricted_project_ids": [], }, { - 'id':2, - 'name':'Arizona Dept. of Revenue Payable', - 'code':'89', - 'is_enabled':True, - 'restricted_project_ids':[ - - ] + "id": 2, + "name": "Arizona Dept. of Revenue Payable", + "code": "89", + "is_enabled": True, + "restricted_project_ids": [], }, { - 'id':3, - 'name':'Automobile', - 'code':'55', - 'is_enabled':True, - 'restricted_project_ids':[ - - ] - } + "id": 3, + "name": "Automobile", + "code": "55", + "is_enabled": True, + "restricted_project_ids": [], + }, ], - 'cost_center_payload': [ + "cost_center_payload": [ { - 'name': 'Accessories', - 'is_enabled': True, - 'description': 'Cost Center - Accessories, Id - 10' + "name": "Accessories", + "is_enabled": True, + "description": "Cost Center - Accessories, Id - 10", }, ], - 'general_mapping_payload': { - 'id':1, - 'bank_account_name':'Business Bank Account', - 'bank_account_id':'562555f2-8cde-4ce9-8203-0363922537a4', - 'payment_account_name':'Sample', - 'payment_account_id':'sdfghjk', - 'default_tax_code_name':'Tax on Purchases @8.25%', - 'default_tax_code_id':'INPUT', - 'created_at':'2022-08-02T20:27:35.368956Z', - 'updated_at':'2022-08-02T20:27:35.368996Z', - 'workspace':1 + "general_mapping_payload": { + "id": 1, + "bank_account_name": "Business Bank Account", + "bank_account_id": "562555f2-8cde-4ce9-8203-0363922537a4", + "payment_account_name": "Sample", + "payment_account_id": "sdfghjk", + "default_tax_code_name": "Tax on Purchases @8.25%", + "default_tax_code_id": "INPUT", + "created_at": "2022-08-02T20:27:35.368956Z", + "updated_at": "2022-08-02T20:27:35.368996Z", + "workspace": 1, }, - "fyle_project_payload": [{ - "name": "Nilesh Pant", - "code": "13815", - "description": "Project - Nilesh Pant, Id - 13815", - "is_enabled": None, - }], -} \ No newline at end of file + "fyle_project_payload": [ + { + "name": "Nilesh Pant", + "code": "13815", + "description": "Project - Nilesh Pant, Id - 13815", + "is_enabled": None, + } + ], +} diff --git a/tests/test_mappings/test_helpers.py b/tests/test_mappings/test_helpers.py index 5d9316c7..a36cab73 100644 --- a/tests/test_mappings/test_helpers.py +++ b/tests/test_mappings/test_helpers.py @@ -1,23 +1,28 @@ import pytest -from datetime import datetime -from django_q.models import Schedule -from apps.mappings.helpers import schedule_or_delete_fyle_import_tasks from fyle_accounting_mappings.models import MappingSetting + +from apps.mappings.helpers import schedule_or_delete_fyle_import_tasks from apps.workspaces.models import WorkspaceGeneralSettings + @pytest.fixture def configuration(db): return WorkspaceGeneralSettings(workspace_id=1, import_categories=False) + def test_schedule_or_delete_fyle_import_tasks_with_no_configuration(configuration): schedule_or_delete_fyle_import_tasks(configuration) -def test_schedule_or_delete_fyle_import_tasks_with_import_categories(configuration,db): + +def test_schedule_or_delete_fyle_import_tasks_with_import_categories(configuration, db): configuration.import_categories = True schedule_or_delete_fyle_import_tasks(configuration) -def test_schedule_or_delete_fyle_import_tasks_with_project_mapping(configuration,db): - project_mapping = MappingSetting.objects.create(source_field='PROJECT', workspace_id=1, import_to_fyle=True) + +def test_schedule_or_delete_fyle_import_tasks_with_project_mapping(configuration, db): + project_mapping = MappingSetting.objects.create( + source_field="PROJECT", workspace_id=1, import_to_fyle=True + ) configuration.import_categories = False schedule_or_delete_fyle_import_tasks(configuration) project_mapping.delete() diff --git a/tests/test_mappings/test_signals.py b/tests/test_mappings/test_signals.py index b5e6b134..d218477f 100644 --- a/tests/test_mappings/test_signals.py +++ b/tests/test_mappings/test_signals.py @@ -1,149 +1,157 @@ from datetime import datetime + from django_q.models import Schedule -from fyle_accounting_mappings.models import MappingSetting, Mapping +from fyle_accounting_mappings.models import Mapping, MappingSetting + from apps.mappings.models import TenantMapping from apps.workspaces.models import Workspace, WorkspaceGeneralSettings -from ..test_fyle.fixtures import data as fyle_data +from tests.test_fyle.fixtures import data as fyle_data def test_run_post_mapping_settings_triggers(db, mocker, test_connection): mocker.patch( - 'fyle_integrations_platform_connector.apis.ExpenseCustomFields.post', - return_value=[] + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.post", + return_value=[], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.ExpenseFields.list_all', - return_value=fyle_data['get_all_expense_fields'] + "fyle.platform.apis.v1beta.admin.ExpenseFields.list_all", + return_value=fyle_data["get_all_expense_fields"], ) workspace_id = 1 mapping_setting = MappingSetting( - source_field='PROJECT', - destination_field='PROJECT', + source_field="PROJECT", + destination_field="PROJECT", workspace_id=workspace_id, import_to_fyle=True, - is_custom=False + is_custom=False, ) mapping_setting.save() schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_project_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_project_mappings", + args="{}".format(workspace_id), ).first() - assert schedule.func == 'apps.mappings.tasks.auto_create_project_mappings' - assert schedule.args == '1' + assert schedule.func == "apps.mappings.tasks.auto_create_project_mappings" + assert schedule.args == "1" mapping_setting = MappingSetting( - source_field='COST_CENTER', - destination_field='CLASS', + source_field="COST_CENTER", + destination_field="CLASS", workspace_id=workspace_id, import_to_fyle=True, - is_custom=False + is_custom=False, ) mapping_setting.save() schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_cost_center_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_cost_center_mappings", + args="{}".format(workspace_id), ).first() - assert schedule.func == 'apps.mappings.tasks.auto_create_cost_center_mappings' - assert schedule.args == '1' + assert schedule.func == "apps.mappings.tasks.auto_create_cost_center_mappings" + assert schedule.args == "1" mapping_setting = MappingSetting( - source_field='SAMPLEs', - destination_field='SAMPLEs', + source_field="SAMPLEs", + destination_field="SAMPLEs", workspace_id=workspace_id, import_to_fyle=True, - is_custom=True + is_custom=True, ) mapping_setting.save() schedule = Schedule.objects.filter( - func='apps.mappings.tasks.async_auto_create_custom_field_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.async_auto_create_custom_field_mappings", + args="{}".format(workspace_id), ).first() - assert schedule.func == 'apps.mappings.tasks.async_auto_create_custom_field_mappings' - assert schedule.args == '1' + assert ( + schedule.func == "apps.mappings.tasks.async_auto_create_custom_field_mappings" + ) + assert schedule.args == "1" mapping_setting = MappingSetting.objects.filter( - source_field='PROJECT', - workspace_id=workspace_id + source_field="PROJECT", workspace_id=workspace_id ).delete() - workspace_general_settings = WorkspaceGeneralSettings.objects.filter(workspace_id=workspace_id).first() + workspace_general_settings = WorkspaceGeneralSettings.objects.filter( + workspace_id=workspace_id + ).first() workspace_general_settings.import_categories = False workspace_general_settings.import_vendors_as_merchants = False workspace_general_settings.save() mapping_setting = MappingSetting( - source_field='LOLOOO', - destination_field='HEHEHE', + source_field="LOLOOO", + destination_field="HEHEHE", workspace_id=workspace_id, import_to_fyle=True, - is_custom=False + is_custom=False, ) mapping_setting.save() schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_import_and_map_fyle_fields', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_import_and_map_fyle_fields", + args="{}".format(workspace_id), ).first() - assert schedule.func == 'apps.mappings.tasks.auto_import_and_map_fyle_fields' + assert schedule.func == "apps.mappings.tasks.auto_import_and_map_fyle_fields" def test_run_pre_mapping_settings_triggers(db, mocker, test_connection): mocker.patch( - 'fyle_integrations_platform_connector.apis.ExpenseCustomFields.post', - return_value=[] + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.post", + return_value=[], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.ExpenseFields.list_all', - return_value=fyle_data['get_all_expense_fields'] + "fyle.platform.apis.v1beta.admin.ExpenseFields.list_all", + return_value=fyle_data["get_all_expense_fields"], ) workspace_id = 1 - custom_mappings = Mapping.objects.filter(workspace_id=workspace_id, source_type='CUSTOM_INTENTs').count() + custom_mappings = Mapping.objects.filter( + workspace_id=workspace_id, source_type="CUSTOM_INTENTs" + ).count() assert custom_mappings == 0 mapping_setting = MappingSetting( - source_field='CUSTOM_INTENTs', - destination_field='CUSTOM_INTENTs', + source_field="CUSTOM_INTENTs", + destination_field="CUSTOM_INTENTs", workspace_id=workspace_id, import_to_fyle=True, - is_custom=True + is_custom=True, ) mapping_setting.save() custom_mappings = Mapping.objects.last() - - custom_mappings = Mapping.objects.filter(workspace_id=workspace_id, source_type='CUSTOM_INTENTs').count() + + custom_mappings = Mapping.objects.filter( + workspace_id=workspace_id, source_type="CUSTOM_INTENTs" + ).count() assert custom_mappings == 0 - mapping = Mapping.objects.filter(workspace_id=workspace_id, source_type='CATEGORY', source_id=112).first() + mapping = Mapping.objects.filter( + workspace_id=workspace_id, source_type="CATEGORY", source_id=112 + ).first() mapping.created_at = datetime.now() mapping.save() def test_run_post_tenant_mapping_trigger(db, test_connection): - workspace = Workspace.objects.create( id=97, - name = 'Fyle for sample', - fyle_org_id = 'Testing', + name="Fyle for sample", + fyle_org_id="Testing", ) workspace.save() tenant_mapping = TenantMapping( - tenant_name='sample', - tenant_id='wertyui', - workspace=workspace + tenant_name="sample", tenant_id="wertyui", workspace=workspace ) - tenant_mapping.save() \ No newline at end of file + tenant_mapping.save() diff --git a/tests/test_mappings/test_tasks.py b/tests/test_mappings/test_tasks.py index 873785b7..e9448f29 100644 --- a/tests/test_mappings/test_tasks.py +++ b/tests/test_mappings/test_tasks.py @@ -1,54 +1,89 @@ -import pytest from unittest import mock + +import pytest from django_q.models import Schedule -from fyle_accounting_mappings.models import DestinationAttribute, CategoryMapping, \ - Mapping, MappingSetting, EmployeeMapping -from apps.mappings.queue import * -from apps.mappings.tasks import * +from fyle.platform.exceptions import InternalServerError +from fyle.platform.exceptions import InvalidTokenError as FyleInvalidTokenError +from fyle_accounting_mappings.models import ( + CategoryMapping, + DestinationAttribute, + EmployeeMapping, + ExpenseAttribute, + Mapping, + MappingSetting, +) from fyle_integrations_platform_connector import PlatformConnector -from fyle.platform.exceptions import InvalidTokenError as FyleInvalidTokenError, InternalServerError -from ..test_xero.fixtures import data as xero_data -from ..test_fyle.fixtures import data as fyle_data -from .fixtures import data +from xerosdk.exceptions import UnsuccessfulAuthentication, WrongParamsError + +from apps.fyle.models import ExpenseGroup +from apps.mappings.queue import ( + schedule_auto_map_employees, + schedule_cost_centers_creation, + schedule_fyle_attributes_creation, + schedule_tax_groups_creation, +) +from apps.mappings.tasks import ( + async_auto_create_custom_field_mappings, + async_auto_map_employees, + auto_create_category_mappings, + auto_create_cost_center_mappings, + auto_create_expense_fields_mappings, + auto_create_project_mappings, + auto_create_tax_codes_mappings, + auto_import_and_map_fyle_fields, + create_fyle_categories_payload, + get_all_categories_from_fyle, + remove_duplicates, + resolve_expense_attribute_errors, + upload_categories_to_fyle, +) +from apps.tasks.models import Error +from apps.workspaces.models import FyleCredential, WorkspaceGeneralSettings, XeroCredentials from tests.helper import dict_compare_keys -from apps.fyle.models import ExpenseGroup, Reimbursement, Expense -from fyle_accounting_mappings.models import ExpenseAttribute -from apps.workspaces.models import XeroCredentials, FyleCredential, WorkspaceGeneralSettings -from xerosdk.exceptions import WrongParamsError, UnsuccessfulAuthentication +from tests.test_fyle.fixtures import data as fyle_data +from tests.test_mappings.fixtures import data +from tests.test_xero.fixtures import data as xero_data + def test_auto_create_tax_codes_mappings(db, mocker): workspace_id = 1 mocker.patch( - 'fyle_integrations_platform_connector.apis.TaxGroups.post_bulk', - return_value=[] + "fyle_integrations_platform_connector.apis.TaxGroups.post_bulk", return_value=[] ) mocker.patch( - 'fyle_integrations_platform_connector.apis.TaxGroups.sync', - return_value=[] + "fyle_integrations_platform_connector.apis.TaxGroups.sync", return_value=[] ) mocker.patch( - 'xerosdk.apis.TaxRates.get_all', - return_value=xero_data['get_all_tax_codes'] + "xerosdk.apis.TaxRates.get_all", return_value=xero_data["get_all_tax_codes"] ) - tax_groups = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='TAX_CODE').count() - mappings = Mapping.objects.filter(workspace_id=workspace_id, destination_type='TAX_CODE').count() - + tax_groups = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="TAX_CODE" + ).count() + mappings = Mapping.objects.filter( + workspace_id=workspace_id, destination_type="TAX_CODE" + ).count() + assert tax_groups == 8 assert mappings == 8 existing_tax_codes_name = ExpenseAttribute.objects.filter( - attribute_type='TAX_GROUP', workspace_id=workspace_id).first() - existing_tax_codes_name.value = 'wertyuio' + attribute_type="TAX_GROUP", workspace_id=workspace_id + ).first() + existing_tax_codes_name.value = "wertyuio" existing_tax_codes_name.save() auto_create_tax_codes_mappings(workspace_id=workspace_id) - tax_groups = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='TAX_CODE').count() - mappings = Mapping.objects.filter(workspace_id=workspace_id, destination_type='TAX_CODE').count() - + tax_groups = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="TAX_CODE" + ).count() + mappings = Mapping.objects.filter( + workspace_id=workspace_id, destination_type="TAX_CODE" + ).count() + assert mappings == 8 fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) @@ -57,32 +92,42 @@ def test_auto_create_tax_codes_mappings(db, mocker): response = auto_create_tax_codes_mappings(workspace_id) assert response == None - with mock.patch('fyle_integrations_platform_connector.apis.TaxGroups.sync') as mock_call: - mock_call.side_effect = WrongParamsError(msg='wrong parameter error', response="wrong parameter error") + with mock.patch( + "fyle_integrations_platform_connector.apis.TaxGroups.sync" + ) as mock_call: + mock_call.side_effect = WrongParamsError( + msg="wrong parameter error", response="wrong parameter error" + ) response = auto_create_tax_codes_mappings(workspace_id=workspace_id) - mock_call.side_effect = FyleInvalidTokenError(msg='Invalid Token for Fyle', response="Invalid Token for Fyle") + mock_call.side_effect = FyleInvalidTokenError( + msg="Invalid Token for Fyle", response="Invalid Token for Fyle" + ) response = auto_create_tax_codes_mappings(workspace_id=workspace_id) - mock_call.side_effect = InternalServerError(msg='Internal server error while importing to Fyle', response="Internal server error while importing to Fyle") + mock_call.side_effect = InternalServerError( + msg="Internal server error while importing to Fyle", + response="Internal server error while importing to Fyle", + ) response = auto_create_tax_codes_mappings(workspace_id=workspace_id) + def test_schedule_tax_groups_creation(db): workspace_id = 1 schedule_tax_groups_creation(import_tax_codes=True, workspace_id=workspace_id) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_tax_codes_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_tax_codes_mappings", + args="{}".format(workspace_id), ).first() - - assert schedule.func == 'apps.mappings.tasks.auto_create_tax_codes_mappings' + + assert schedule.func == "apps.mappings.tasks.auto_create_tax_codes_mappings" schedule_tax_groups_creation(import_tax_codes=False, workspace_id=workspace_id) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_tax_codes_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_tax_codes_mappings", + args="{}".format(workspace_id), ).first() assert schedule == None @@ -91,49 +136,56 @@ def test_schedule_tax_groups_creation(db): def test_auto_create_project_mappings(db, mocker): workspace_id = 1 mocker.patch( - 'fyle_integrations_platform_connector.apis.Projects.post_bulk', - return_value=[] + "fyle_integrations_platform_connector.apis.Projects.post_bulk", return_value=[] ) mocker.patch( - 'fyle_integrations_platform_connector.apis.Projects.sync', - return_value=[] + "fyle_integrations_platform_connector.apis.Projects.sync", return_value=[] ) mocker.patch( - 'xerosdk.apis.Contacts.list_all_generator', - return_value=xero_data['get_all_contacts'] - ) - mocker.patch( - 'apps.xero.utils.XeroConnector.sync_customers', - return_value=[] + "xerosdk.apis.Contacts.list_all_generator", + return_value=xero_data["get_all_contacts"], ) + mocker.patch("apps.xero.utils.XeroConnector.sync_customers", return_value=[]) existing_project_names = ExpenseAttribute.objects.filter( - attribute_type='PROJECT', workspace_id=workspace_id).first() - existing_project_names.value = 'asdfghj' + attribute_type="PROJECT", workspace_id=workspace_id + ).first() + existing_project_names.value = "asdfghj" existing_project_names.save() response = auto_create_project_mappings(workspace_id=workspace_id) assert response == None - projects = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='PROJECT').count() - mappings = Mapping.objects.filter(workspace_id=workspace_id, destination_type='PROJECT').count() + projects = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="PROJECT" + ).count() + mappings = Mapping.objects.filter( + workspace_id=workspace_id, destination_type="PROJECT" + ).count() assert mappings == projects - with mock.patch('apps.xero.utils.XeroConnector.sync_customers') as mock_call: - mock_call.side_effect = WrongParamsError(msg='wrong parameter error', response="wrong parameter error") + with mock.patch("apps.xero.utils.XeroConnector.sync_customers") as mock_call: + mock_call.side_effect = WrongParamsError( + msg="wrong parameter error", response="wrong parameter error" + ) response = auto_create_project_mappings(workspace_id=workspace_id) - mock_call.side_effect = FyleInvalidTokenError(msg='Invalid Token for Fyle', response="Invalid Token for Fyle") + mock_call.side_effect = FyleInvalidTokenError( + msg="Invalid Token for Fyle", response="Invalid Token for Fyle" + ) response = auto_create_project_mappings(workspace_id=workspace_id) - mock_call.side_effect = InternalServerError(msg='Internal server error while importing to Fyle', response="Internal server error while importing to Fyle") + mock_call.side_effect = InternalServerError( + msg="Internal server error while importing to Fyle", + response="Internal server error while importing to Fyle", + ) response = auto_create_project_mappings(workspace_id=workspace_id) mock_call.side_effect = Exception() response = auto_create_project_mappings(workspace_id=workspace_id) -def test_remove_duplicates(db): - attributes = DestinationAttribute.objects.filter(attribute_type='EMPLOYEE') +def test_remove_duplicates(db): + attributes = DestinationAttribute.objects.filter(attribute_type="EMPLOYEE") assert len(attributes) == 0 attributes = remove_duplicates(attributes) @@ -142,32 +194,35 @@ def test_remove_duplicates(db): def test_upload_categories_to_fyle(db, mocker): mocker.patch( - 'fyle_integrations_platform_connector.apis.Categories.post_bulk', - return_value=[] - ) - mocker.patch( - 'fyle_integrations_platform_connector.apis.Categories.sync', - return_value=[] + "fyle_integrations_platform_connector.apis.Categories.post_bulk", + return_value=[], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Categories.list_all', - return_value=fyle_data['get_all_categories'] + "fyle_integrations_platform_connector.apis.Categories.sync", return_value=[] ) mocker.patch( - 'apps.xero.utils.XeroConnector.sync_accounts', - return_value=[] + "fyle.platform.apis.v1beta.admin.Categories.list_all", + return_value=fyle_data["get_all_categories"], ) + mocker.patch("apps.xero.utils.XeroConnector.sync_accounts", return_value=[]) workspace_id = 1 - da_instance = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type="ACCOUNT").first() + da_instance = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="ACCOUNT" + ).first() da_instance.active = False da_instance.save() ea_instance = ExpenseAttribute.objects.filter(attribute_type="CATEGORY").first() ea_instance.active = True - mapping_instance = Mapping.objects.create(destination_type="ACCOUNT",destination=da_instance,workspace_id=workspace_id,source=ea_instance) + Mapping.objects.create( + destination_type="ACCOUNT", + destination=da_instance, + workspace_id=workspace_id, + source=ea_instance, + ) ea_instance.save() @@ -181,43 +236,50 @@ def test_upload_categories_to_fyle(db, mocker): with pytest.raises(XeroCredentials.DoesNotExist): xero_attributes = upload_categories_to_fyle(workspace_id=workspace_id) + def test_create_fyle_category_payload(mocker, db): workspace_id = 1 qbo_attributes = DestinationAttribute.objects.filter( - workspace_id=1, attribute_type='ACCOUNT' + workspace_id=1, attribute_type="ACCOUNT" ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Categories.list_all', - return_value=fyle_data['get_all_categories'] + "fyle.platform.apis.v1beta.admin.Categories.list_all", + return_value=fyle_data["get_all_categories"], ) qbo_attributes = remove_duplicates(qbo_attributes) - fyle_credentials: FyleCredential = FyleCredential.objects.get(workspace_id=workspace_id) + fyle_credentials: FyleCredential = FyleCredential.objects.get( + workspace_id=workspace_id + ) platform = PlatformConnector(fyle_credentials) category_map = get_all_categories_from_fyle(platform=platform) - fyle_category_payload = create_fyle_categories_payload(qbo_attributes, 2, category_map) - - assert dict_compare_keys(fyle_category_payload[0], data['fyle_category_payload'][0]) == [], 'category upload api return diffs in keys' + fyle_category_payload = create_fyle_categories_payload( + qbo_attributes, 2, category_map + ) + + assert ( + dict_compare_keys(fyle_category_payload[0], data["fyle_category_payload"][0]) + == [] + ), "category upload api return diffs in keys" def test_auto_create_category_mappings(db, mocker): workspace_id = 1 mocker.patch( - 'fyle_integrations_platform_connector.apis.Categories.post_bulk', - return_value=[] + "fyle_integrations_platform_connector.apis.Categories.post_bulk", + return_value=[], ) mocker.patch( - 'xerosdk.apis.Accounts.get_all', - return_value=xero_data['get_all_accounts'] + "xerosdk.apis.Accounts.get_all", return_value=xero_data["get_all_accounts"] ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Categories.list_all', - return_value=fyle_data['get_all_categories'] + "fyle.platform.apis.v1beta.admin.Categories.list_all", + return_value=fyle_data["get_all_categories"], ) response = auto_create_category_mappings(workspace_id=workspace_id) @@ -227,14 +289,21 @@ def test_auto_create_category_mappings(db, mocker): assert len(mappings) == 0 - with mock.patch('apps.mappings.tasks.upload_categories_to_fyle') as mock_call: - mock_call.side_effect = WrongParamsError(msg='wrong parameter error', response="wrong parameter error") + with mock.patch("apps.mappings.tasks.upload_categories_to_fyle") as mock_call: + mock_call.side_effect = WrongParamsError( + msg="wrong parameter error", response="wrong parameter error" + ) response = auto_create_category_mappings(workspace_id=workspace_id) - mock_call.side_effect = FyleInvalidTokenError(msg='Invalid Token for Fyle', response="Invalid Token for Fyle") + mock_call.side_effect = FyleInvalidTokenError( + msg="Invalid Token for Fyle", response="Invalid Token for Fyle" + ) response = auto_create_category_mappings(workspace_id=workspace_id) - mock_call.side_effect = InternalServerError(msg='Internal server error while importing to Fyle', response="Internal server error while importing to Fyle") + mock_call.side_effect = InternalServerError( + msg="Internal server error while importing to Fyle", + response="Internal server error while importing to Fyle", + ) response = auto_create_category_mappings(workspace_id=workspace_id) fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) @@ -244,40 +313,49 @@ def test_auto_create_category_mappings(db, mocker): assert response == None + def test_async_auto_map_employees(mocker, db): workspace_id = 1 mocker.patch( - 'xerosdk.apis.Contacts.list_all_generator', - return_value=xero_data['get_all_contacts'] + "xerosdk.apis.Contacts.list_all_generator", + return_value=xero_data["get_all_contacts"], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.Employees.list_all', - return_value=fyle_data['get_all_employees'] + "fyle.platform.apis.v1beta.admin.Employees.list_all", + return_value=fyle_data["get_all_employees"], ) async_auto_map_employees(workspace_id) - employee_mappings = EmployeeMapping.objects.filter(workspace_id=workspace_id).count() + employee_mappings = EmployeeMapping.objects.filter( + workspace_id=workspace_id + ).count() assert employee_mappings == 0 general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) - general_settings.employee_field_mapping = 'VENDOR' + general_settings.employee_field_mapping = "VENDOR" general_settings.save() async_auto_map_employees(workspace_id) - employee_mappings = EmployeeMapping.objects.filter(workspace_id=workspace_id).count() + employee_mappings = EmployeeMapping.objects.filter( + workspace_id=workspace_id + ).count() assert employee_mappings == 0 - with mock.patch('fyle.platform.apis.v1beta.admin.Employees.list_all') as mock_call: - mock_call.side_effect = FyleInvalidTokenError(msg='Invalid Token for Fyle', response="Invalid Token for Fyle") + with mock.patch("fyle.platform.apis.v1beta.admin.Employees.list_all") as mock_call: + mock_call.side_effect = FyleInvalidTokenError( + msg="Invalid Token for Fyle", response="Invalid Token for Fyle" + ) async_auto_map_employees(workspace_id=workspace_id) - mock_call.side_effect = UnsuccessfulAuthentication(msg='Auth error') + mock_call.side_effect = UnsuccessfulAuthentication(msg="Auth error") async_auto_map_employees(workspace_id=workspace_id) - mock_call.side_effect = InternalServerError(msg='Internal server error while importing to Fyle') + mock_call.side_effect = InternalServerError( + msg="Internal server error while importing to Fyle" + ) async_auto_map_employees(workspace_id=workspace_id) qbo_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) @@ -285,27 +363,33 @@ def test_async_auto_map_employees(mocker, db): async_auto_map_employees(workspace_id) - employee_mappings = EmployeeMapping.objects.filter(workspace_id=workspace_id).count() + employee_mappings = EmployeeMapping.objects.filter( + workspace_id=workspace_id + ).count() assert employee_mappings == 0 def test_schedule_auto_map_employees(db): workspace_id = 1 - schedule_auto_map_employees(employee_mapping_preference=True, workspace_id=workspace_id) + schedule_auto_map_employees( + employee_mapping_preference=True, workspace_id=workspace_id + ) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.async_auto_map_employees', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.async_auto_map_employees", + args="{}".format(workspace_id), ).first() - - assert schedule.func == 'apps.mappings.tasks.async_auto_map_employees' - schedule_auto_map_employees(employee_mapping_preference=False, workspace_id=workspace_id) + assert schedule.func == "apps.mappings.tasks.async_auto_map_employees" + + schedule_auto_map_employees( + employee_mapping_preference=False, workspace_id=workspace_id + ) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.async_auto_map_employees', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.async_auto_map_employees", + args="{}".format(workspace_id), ).first() assert schedule == None @@ -314,37 +398,49 @@ def test_schedule_auto_map_employees(db): def test_auto_create_cost_center_mappings(db, mocker, create_mapping_setting): workspace_id = 1 mocker.patch( - 'fyle_integrations_platform_connector.apis.CostCenters.post_bulk', - return_value=[] + "fyle_integrations_platform_connector.apis.CostCenters.post_bulk", + return_value=[], ) - + mocker.patch( - 'fyle_integrations_platform_connector.apis.CostCenters.sync', - return_value=[] + "fyle_integrations_platform_connector.apis.CostCenters.sync", return_value=[] ) - + mocker.patch( - 'xerosdk.apis.TrackingCategories.get_all', - return_value=xero_data['get_all_tracking_categories'] + "xerosdk.apis.TrackingCategories.get_all", + return_value=xero_data["get_all_tracking_categories"], ) - + response = auto_create_cost_center_mappings(workspace_id=workspace_id) assert response == None - cost_center = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='COST_CENTER').count() - mappings = Mapping.objects.filter(workspace_id=workspace_id, source_type='COST_CENTER').count() + cost_center = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="COST_CENTER" + ).count() + mappings = Mapping.objects.filter( + workspace_id=workspace_id, source_type="COST_CENTER" + ).count() assert cost_center == 1 assert mappings == 0 - with mock.patch('fyle_integrations_platform_connector.apis.CostCenters.sync') as mock_call: - mock_call.side_effect = WrongParamsError(msg='wrong parameter error', response="wrong parameter error") + with mock.patch( + "fyle_integrations_platform_connector.apis.CostCenters.sync" + ) as mock_call: + mock_call.side_effect = WrongParamsError( + msg="wrong parameter error", response="wrong parameter error" + ) response = auto_create_cost_center_mappings(workspace_id=workspace_id) - mock_call.side_effect = FyleInvalidTokenError(msg='Invalid Token for Fyle', response="Inalid Token for Fyle") + mock_call.side_effect = FyleInvalidTokenError( + msg="Invalid Token for Fyle", response="Inalid Token for Fyle" + ) response = auto_create_cost_center_mappings(workspace_id=workspace_id) - mock_call.side_effect = InternalServerError(msg='Internal server error while importing to Fyle', response="Internal server error while importing to Fyle") + mock_call.side_effect = InternalServerError( + msg="Internal server error while importing to Fyle", + response="Internal server error while importing to Fyle", + ) response = auto_create_cost_center_mappings(workspace_id=workspace_id) fyle_credentials = FyleCredential.objects.get(workspace_id=workspace_id) @@ -354,24 +450,23 @@ def test_auto_create_cost_center_mappings(db, mocker, create_mapping_setting): assert response == None - def test_schedule_cost_centers_creation(db): workspace_id = 1 schedule_cost_centers_creation(import_to_fyle=True, workspace_id=workspace_id) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_cost_center_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_cost_center_mappings", + args="{}".format(workspace_id), ).first() - - assert schedule.func == 'apps.mappings.tasks.auto_create_cost_center_mappings' + + assert schedule.func == "apps.mappings.tasks.auto_create_cost_center_mappings" schedule_cost_centers_creation(import_to_fyle=False, workspace_id=workspace_id) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_create_cost_center_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_create_cost_center_mappings", + args="{}".format(workspace_id), ).first() assert schedule == None @@ -381,28 +476,30 @@ def test_schedule_fyle_attributes_creation(db, mocker): workspace_id = 1 mapping_setting = MappingSetting.objects.last() - mapping_setting.is_custom=True - mapping_setting.import_to_fyle=True + mapping_setting.is_custom = True + mapping_setting.import_to_fyle = True mapping_setting.save() - + schedule_fyle_attributes_creation(workspace_id) mocker.patch( - 'fyle_integrations_platform_connector.apis.ExpenseCustomFields.post', - return_value=[] + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.post", + return_value=[], ) mocker.patch( - 'xerosdk.apis.TrackingCategories.get_all', - return_value=xero_data['get_all_tracking_categories'] + "xerosdk.apis.TrackingCategories.get_all", + return_value=xero_data["get_all_tracking_categories"], ) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.async_auto_create_custom_field_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.async_auto_create_custom_field_mappings", + args="{}".format(workspace_id), ).first() - assert schedule.func == 'apps.mappings.tasks.async_auto_create_custom_field_mappings' + assert ( + schedule.func == "apps.mappings.tasks.async_auto_create_custom_field_mappings" + ) async_auto_create_custom_field_mappings(workspace_id) @@ -414,8 +511,8 @@ def test_schedule_fyle_attributes_creation(db, mocker): schedule_fyle_attributes_creation(workspace_id) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.async_auto_create_custom_field_mappings', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.async_auto_create_custom_field_mappings", + args="{}".format(workspace_id), ).count() assert schedule == 0 @@ -423,39 +520,56 @@ def test_schedule_fyle_attributes_creation(db, mocker): def test_auto_create_expense_fields_mappings(db, mocker, create_mapping_setting): mocker.patch( - 'fyle_integrations_platform_connector.apis.ExpenseCustomFields.post', - return_value=[] + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.post", + return_value=[], ) mocker.patch( - 'fyle_integrations_platform_connector.apis.ExpenseCustomFields.sync', - return_value=[] + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.sync", + return_value=[], ) mocker.patch( - 'fyle_integrations_platform_connector.apis.ExpenseCustomFields.get_by_id', - return_value={'options': ['samp'], 'updated_at': '2020-06-11T13:14:55.201598+00:00', 'is_mandatory': True} + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.get_by_id", + return_value={ + "options": ["samp"], + "updated_at": "2020-06-11T13:14:55.201598+00:00", + "is_mandatory": True, + }, ) workspace_id = 1 - auto_create_expense_fields_mappings(workspace_id, 'COST_CENTER', 'TESTING_THIS') + auto_create_expense_fields_mappings(workspace_id, "COST_CENTER", "TESTING_THIS") - cost_center = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='COST_CENTER').count() - mappings = Mapping.objects.filter(workspace_id=workspace_id, source_type='COST_CENTER').count() + cost_center = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="COST_CENTER" + ).count() + mappings = Mapping.objects.filter( + workspace_id=workspace_id, source_type="COST_CENTER" + ).count() assert cost_center == 1 assert mappings == 0 - with mock.patch('fyle_integrations_platform_connector.apis.ExpenseCustomFields.post') as mock_call: - mock_call.side_effect = WrongParamsError(msg='wrong parameter error', response="wrong parameter error") - auto_create_expense_fields_mappings(workspace_id, 'COST_CENTER', 'TESTING_THIS') - - mock_call.side_effect = FyleInvalidTokenError(msg='Invalid Token for Fyle', response="Invalid Token for Fyle") - auto_create_expense_fields_mappings(workspace_id, 'COST_CENTER', 'TESTING_THIS') - - mock_call.side_effect = InternalServerError(msg='Internal server error while importing to Fyle', response="Internal server error while importing to Fyle") - auto_create_expense_fields_mappings(workspace_id, 'COST_CENTER', 'TESTING_THIS') + with mock.patch( + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.post" + ) as mock_call: + mock_call.side_effect = WrongParamsError( + msg="wrong parameter error", response="wrong parameter error" + ) + auto_create_expense_fields_mappings(workspace_id, "COST_CENTER", "TESTING_THIS") + + mock_call.side_effect = FyleInvalidTokenError( + msg="Invalid Token for Fyle", response="Invalid Token for Fyle" + ) + auto_create_expense_fields_mappings(workspace_id, "COST_CENTER", "TESTING_THIS") + + mock_call.side_effect = InternalServerError( + msg="Internal server error while importing to Fyle", + response="Internal server error while importing to Fyle", + ) + auto_create_expense_fields_mappings(workspace_id, "COST_CENTER", "TESTING_THIS") mock_call.side_effect = Exception() - auto_create_expense_fields_mappings(workspace_id, 'COST_CENTER', 'TESTING_THIS') + auto_create_expense_fields_mappings(workspace_id, "COST_CENTER", "TESTING_THIS") def test_resolve_expense_attribute_errors(db): @@ -463,40 +577,41 @@ def test_resolve_expense_attribute_errors(db): expense_group = ExpenseGroup.objects.get(id=3) employee_attribute = ExpenseAttribute.objects.filter( - value=expense_group.description.get('employee_email'), + value=expense_group.description.get("employee_email"), workspace_id=expense_group.workspace_id, - attribute_type='EMPLOYEE' + attribute_type="EMPLOYEE", ).first() - mapping = Mapping.objects.get( - destination_type='CONTACT', - source_type='EMPLOYEE', + Mapping.objects.get( + destination_type="CONTACT", + source_type="EMPLOYEE", source=employee_attribute, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ) error, _ = Error.objects.update_or_create( workspace_id=expense_group.workspace_id, expense_attribute=employee_attribute, defaults={ - 'type': 'EMPLOYEE_MAPPING', - 'error_title': employee_attribute.value, - 'error_detail': 'Employee mapping is missing', - 'is_resolved': False - } + "type": "EMPLOYEE_MAPPING", + "error_title": employee_attribute.value, + "error_detail": "Employee mapping is missing", + "is_resolved": False, + }, ) - resolve_expense_attribute_errors('EMPLOYEE', workspace_id, 'CONTACT') + resolve_expense_attribute_errors("EMPLOYEE", workspace_id, "CONTACT") assert Error.objects.get(id=error.id).is_resolved == True + def test_auto_import_and_map_fyle_fields(db): workspace_id = 1 auto_import_and_map_fyle_fields(workspace_id=workspace_id) schedule = Schedule.objects.filter( - func='apps.mappings.tasks.auto_import_and_map_fyle_fields', - args='{}'.format(workspace_id), + func="apps.mappings.tasks.auto_import_and_map_fyle_fields", + args="{}".format(workspace_id), ).first() assert schedule == None diff --git a/tests/test_mappings/test_views.py b/tests/test_mappings/test_views.py index a2f63a07..1cd72fde 100644 --- a/tests/test_mappings/test_views.py +++ b/tests/test_mappings/test_views.py @@ -1,53 +1,44 @@ import json -import pytest -from apps.mappings.models import GeneralMapping, TenantMapping + +from apps.mappings.models import TenantMapping from apps.workspaces.models import WorkspaceGeneralSettings -from .fixtures import data -from ..test_xero.fixtures import data as xero_data +from tests.test_xero.fixtures import data as xero_data def test_tenant_mapping_view(api_client, test_connection, mocker): - workspace_id = 1 tenenat_mapping = TenantMapping.objects.get(workspace_id=workspace_id) mocker.patch( - 'xerosdk.apis.Organisations.get_all', - return_value=xero_data['get_all_organisations'] + "xerosdk.apis.Organisations.get_all", + return_value=xero_data["get_all_organisations"], ) - url = '/api/workspaces/{}/mappings/tenant/'.format(workspace_id) + url = "/api/workspaces/{}/mappings/tenant/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) response = api_client.get(url) assert response.status_code == 200 - payload = { - 'tenant_name': 'sample', - 'tenant_id': 'sdfghj' - } + payload = {"tenant_name": "sample", "tenant_id": "sdfghj"} - response = api_client.post( - url, - data=payload - ) + response = api_client.post(url, data=payload) assert response.status_code == 200 mocker.patch( - 'xerosdk.apis.Connections.get_all', - return_value=[{'tenantId': tenenat_mapping.tenant_id, 'id': 'asdfghjk'}] + "xerosdk.apis.Connections.get_all", + return_value=[{"tenantId": tenenat_mapping.tenant_id, "id": "asdfghjk"}], ) payload = { - 'tenant_name': 'Demo Company (Global)', - 'tenant_id': '36ab1910-11b3-4325-b545-8d1170668ab3' + "tenant_name": "Demo Company (Global)", + "tenant_id": "36ab1910-11b3-4325-b545-8d1170668ab3", } - response = api_client.post( - url, - data=payload - ) + response = api_client.post(url, data=payload) assert response.status_code == 200 tenenat_mapping.delete() @@ -59,20 +50,24 @@ def test_tenant_mapping_view(api_client, test_connection, mocker): def test_auto_map_employee(api_client, test_connection): workspace_id = 1 - url = '/api/workspaces/{}/mappings/auto_map_employees/trigger/'.format(workspace_id) + url = "/api/workspaces/{}/mappings/auto_map_employees/trigger/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) response = api_client.post(url) assert response.status_code == 200 general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) - general_settings.auto_map_employees = '' + general_settings.auto_map_employees = "" general_settings.save() response = api_client.post(url) assert response.status_code == 400 response = json.loads(response.content) - assert response['message'] == 'Employee mapping preference not found for this workspace' - \ No newline at end of file + assert ( + response["message"] + == "Employee mapping preference not found for this workspace" + ) diff --git a/tests/test_tasks/test_views.py b/tests/test_tasks/test_views.py index 6cd9a7a0..8f1d94de 100644 --- a/tests/test_tasks/test_views.py +++ b/tests/test_tasks/test_views.py @@ -2,14 +2,16 @@ def test_get_queryset(api_client, test_connection): workspace_id = 1 access_token = test_connection.access_token - url = '/api/workspaces/{}/tasks/all/'.format(workspace_id) + url = "/api/workspaces/{}/tasks/all/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) - response = api_client.get(url, { - 'expense_group_id__in': '4', - 'type__in': 'CREATING_EXPENSE', - 'status__in': 'ALL' - }) - assert response.status_code==200 - \ No newline at end of file + response = api_client.get( + url, + { + "expense_group_id__in": "4", + "type__in": "CREATING_EXPENSE", + "status__in": "ALL", + }, + ) + assert response.status_code == 200 diff --git a/tests/test_users/conftest.py b/tests/test_users/conftest.py index eeebe175..a573a4e3 100644 --- a/tests/test_users/conftest.py +++ b/tests/test_users/conftest.py @@ -1,11 +1,20 @@ -import pytest from datetime import datetime, timezone + +import pytest from fyle_rest_auth.models import User @pytest.fixture def add_users_to_database(db): - user = User(password='', last_login=datetime.now(tz=timezone.utc), email='labhvam.s@fyle.in', - user_id='usqywo0f3nLY', full_name='', active='t', staff='f', admin='f') - + user = User( + password="", + last_login=datetime.now(tz=timezone.utc), + email="labhvam.s@fyle.in", + user_id="usqywo0f3nLY", + full_name="", + active="t", + staff="f", + admin="f", + ) + user.save() diff --git a/tests/test_users/test_helpers.py b/tests/test_users/test_helpers.py index f8884e3d..7594ca8f 100644 --- a/tests/test_users/test_helpers.py +++ b/tests/test_users/test_helpers.py @@ -1,16 +1,17 @@ -import pytest from datetime import datetime, timezone + +from fyle.platform import Platform from fyle_rest_auth.models import User + from apps.users.helpers import get_cluster_domain_and_refresh_token -from fyle_xero_api.tests import settings -from fyle.platform import Platform from apps.workspaces.models import FyleCredential +from fyle_xero_api.tests import settings def test_get_cluster_domain_and_refresh_token(db, add_users_to_database): - ''' + """ Test Post of User Profile - ''' + """ client_id = settings.FYLE_CLIENT_ID client_secret = settings.FYLE_CLIENT_SECRET token_url = settings.FYLE_TOKEN_URI @@ -22,23 +23,29 @@ def test_get_cluster_domain_and_refresh_token(db, add_users_to_database): client_id=client_id, client_secret=client_secret, refresh_token=refresh_token, - server_url=server_url + server_url=server_url, ) - user_profile = fyle_connection.v1beta.spender.my_profile.get()['data'] + user_profile = fyle_connection.v1beta.spender.my_profile.get()["data"] user = User( - password='', last_login=datetime.now(tz=timezone.utc), id=1, email=user_profile['user']['email'], - user_id=user_profile['user_id'], full_name='', active='t', staff='f', admin='t' + password="", + last_login=datetime.now(tz=timezone.utc), + id=1, + email=user_profile["user"]["email"], + user_id=user_profile["user_id"], + full_name="", + active="t", + staff="f", + admin="t", ) cluster_domain, refresh_token = get_cluster_domain_and_refresh_token(user) fyle_credentials = FyleCredential.objects.filter(workspace__user=user).first() - assert cluster_domain == 'https://staging.fyle.tech' + assert cluster_domain == "https://staging.fyle.tech" assert refresh_token == fyle_credentials.refresh_token fyle_credentials.delete() cluster_domain, refresh_token = get_cluster_domain_and_refresh_token(user) - assert cluster_domain == 'https://staging.fyle.tech' + assert cluster_domain == "https://staging.fyle.tech" assert refresh_token == fyle_credentials.refresh_token - \ No newline at end of file diff --git a/tests/test_users/test_models.py b/tests/test_users/test_models.py index bd0fc21c..8b5bcd49 100644 --- a/tests/test_users/test_models.py +++ b/tests/test_users/test_models.py @@ -1,4 +1,5 @@ import logging + from apps.users.models import User logger = logging.getLogger(__name__) @@ -6,57 +7,65 @@ def test_user_creation(db): - ''' + """ Test Post of User Profile - ''' + """ try: - user = User.objects.create_user(email='', full_name='sample', password='samp') - except: - logger.info('Users must have an email address') + user = User.objects.create_user(email="", full_name="sample", password="samp") + except Exception: + logger.info("Users must have an email address") - user = User.objects.create_user(email='sample@fyle.in', full_name='sample', password='samp') - assert user.email=='sample@fyle.in' + user = User.objects.create_user( + email="sample@fyle.in", full_name="sample", password="samp" + ) + assert user.email == "sample@fyle.in" def test_create_staffuser(db): - ''' + """ Test Post of User Profile - ''' - user = User.objects.create_staffuser(email='sample@fyle.in', full_name='sample', password='samp') - assert user.email=='sample@fyle.in' + """ + user = User.objects.create_staffuser( + email="sample@fyle.in", full_name="sample", password="samp" + ) + assert user.email == "sample@fyle.in" def test_create_superuser(db): - ''' + """ Test Post of User Profile - ''' - user = User.objects.create_superuser(email='sample@fyle.in', full_name='sample', password='samp') - assert user.email=='sample@fyle.in' + """ + user = User.objects.create_superuser( + email="sample@fyle.in", full_name="sample", password="samp" + ) + assert user.email == "sample@fyle.in" def test_get_of_user(db, add_users_to_database): - ''' + """ Test Get of User Profile - ''' - user = User.objects.filter(email='labhvam.s@fyle.in').first() - assert user.user_id == 'usqywo0f3nLY' + """ + user = User.objects.filter(email="labhvam.s@fyle.in").first() + assert user.user_id == "usqywo0f3nLY" def test_user_funcs(db, add_users_to_database): user_object = User() - user = user_object.has_module_perms(app_label='') + user = user_object.has_module_perms(app_label="") assert user == True - user = user_object.has_perm(perm='') + user = user_object.has_perm(perm="") assert user == True user = user_object.get_full_name() - assert user == '' + assert user == "" user = user_object.get_short_name() - assert user == '' + assert user == "" - user = User.objects.create_user(email='sample@fyle.in', full_name='sample', password='samp') - assert user.is_staff == False + user = User.objects.create_user( + email="sample@fyle.in", full_name="sample", password="samp" + ) + assert user.is_staff == False assert user.is_admin == False assert user.is_active == True diff --git a/tests/test_users/test_views.py b/tests/test_users/test_views.py index 48c6f959..9e8ccf4d 100644 --- a/tests/test_users/test_views.py +++ b/tests/test_users/test_views.py @@ -1,16 +1,14 @@ -from django.urls import reverse -from ..test_fyle.fixtures import data as fyle_data +from tests.test_fyle.fixtures import data as fyle_data + def test_get_fyle_orgs_view(api_client, test_connection, mocker): access_token = test_connection.access_token mocker.patch( - 'apps.users.views.get_fyle_orgs', - return_value=fyle_data['get_all_orgs'] + "apps.users.views.get_fyle_orgs", return_value=fyle_data["get_all_orgs"] ) - - url = '/api/user/orgs/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + + url = "/api/user/orgs/" + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.get(url) assert response.status_code == 200 - \ No newline at end of file diff --git a/tests/test_workspaces/conftest.py b/tests/test_workspaces/conftest.py index f7dc7e5d..f7f4bfe8 100644 --- a/tests/test_workspaces/conftest.py +++ b/tests/test_workspaces/conftest.py @@ -1,7 +1,10 @@ +from datetime import datetime, timezone + import pytest + +from apps.workspaces.models import FyleCredential, Workspace, XeroCredentials from fyle_xero_api import settings -from apps.workspaces.models import Workspace, XeroCredentials, FyleCredential -from datetime import datetime,timezone + @pytest.fixture def add_workspace_to_database(): @@ -10,15 +13,15 @@ def add_workspace_to_database(): """ workspace = Workspace.objects.create( id=100, - name = 'Fyle for labhvam2', - fyle_org_id = 'l@bhv@m2', - xero_short_code = '', - last_synced_at = None, - source_synced_at = None, - destination_synced_at = None, - xero_accounts_last_synced_at = datetime.now(tz=timezone.utc), - created_at = datetime.now(tz=timezone.utc), - updated_at = datetime.now(tz=timezone.utc) + name="Fyle for labhvam2", + fyle_org_id="l@bhv@m2", + xero_short_code="", + last_synced_at=None, + source_synced_at=None, + destination_synced_at=None, + xero_accounts_last_synced_at=datetime.now(tz=timezone.utc), + created_at=datetime.now(tz=timezone.utc), + updated_at=datetime.now(tz=timezone.utc), ) workspace.save() @@ -28,10 +31,7 @@ def add_workspace_to_database(): def add_xero_credentials(db): workspace_id = 2 - XeroCredentials.objects.create( - refresh_token = '', - workspace_id = workspace_id - ) + XeroCredentials.objects.create(refresh_token="", workspace_id=workspace_id) @pytest.fixture() @@ -41,5 +41,5 @@ def add_fyle_credentials(db): FyleCredential.objects.create( refresh_token=settings.FYLE_REFRESH_TOKEN, workspace_id=workspace_id, - cluster_domain='https://staging.fyle.tech' + cluster_domain="https://staging.fyle.tech", ) diff --git a/tests/test_workspaces/fixtures.py b/tests/test_workspaces/fixtures.py index 7b285d96..b8ae01ed 100644 --- a/tests/test_workspaces/fixtures.py +++ b/tests/test_workspaces/fixtures.py @@ -1,118 +1,112 @@ data = { - 'workspace_general_settings_payload':{ - 'id':2, - 'reimbursable_expenses_object':'PURCHASE BILL', - 'corporate_credit_card_expenses_object':'BANK TRANSACTION', - 'is_simplify_report_closure_enabled': True, - 'sync_fyle_to_xero_payments':False, - 'sync_xero_to_fyle_payments':True, - 'map_merchant_to_contact':True, - 'change_accounting_period':True, - 'import_categories':True, - 'import_suppliers_as_merchants':True, - 'auto_map_employees':'EMAIL', - 'auto_create_destination_entity':True, - 'skip_cards_mapping':False, - 'import_tax_codes':True, - 'import_customers':False, - 'created_at':'2022-08-02T20:25:24.644164Z', - 'updated_at':'2022-08-02T20:25:24.644209Z', - 'auto_create_merchant_destination_entity': False, - 'charts_of_accounts':[ - 'EXPENSE', 'SAMPLE' - ], - 'workspace':2 + "workspace_general_settings_payload": { + "id": 2, + "reimbursable_expenses_object": "PURCHASE BILL", + "corporate_credit_card_expenses_object": "BANK TRANSACTION", + "is_simplify_report_closure_enabled": True, + "sync_fyle_to_xero_payments": False, + "sync_xero_to_fyle_payments": True, + "map_merchant_to_contact": True, + "change_accounting_period": True, + "import_categories": True, + "import_suppliers_as_merchants": True, + "auto_map_employees": "EMAIL", + "auto_create_destination_entity": True, + "skip_cards_mapping": False, + "import_tax_codes": True, + "import_customers": False, + "created_at": "2022-08-02T20:25:24.644164Z", + "updated_at": "2022-08-02T20:25:24.644209Z", + "auto_create_merchant_destination_entity": False, + "charts_of_accounts": ["EXPENSE", "SAMPLE"], + "workspace": 2, }, - 'workspace':{ - 'id':2, - 'name':'Fyle For MS Dynamics Demo', - 'fyle_org_id':'orNoatdUnm1w', - 'onboarding_state': 'CONNECTION', - 'xero_short_code':'None', - 'last_synced_at':'None', - 'ccc_last_synced_at':'None', - 'fyle_currency':'USD', - 'xero_currency':'USD', - 'app_version': 'v1', - 'source_synced_at':'None', - 'destination_synced_at':'None', - 'xero_accounts_last_synced_at':'None', - 'created_at':'2022-08-16T10:38:22.395750Z', - 'updated_at':'2022-08-16T10:38:22.395806Z', - 'user':[ - 1 - ] + "workspace": { + "id": 2, + "name": "Fyle For MS Dynamics Demo", + "fyle_org_id": "orNoatdUnm1w", + "onboarding_state": "CONNECTION", + "xero_short_code": "None", + "last_synced_at": "None", + "ccc_last_synced_at": "None", + "fyle_currency": "USD", + "xero_currency": "USD", + "app_version": "v1", + "source_synced_at": "None", + "destination_synced_at": "None", + "xero_accounts_last_synced_at": "None", + "created_at": "2022-08-16T10:38:22.395750Z", + "updated_at": "2022-08-16T10:38:22.395806Z", + "user": [1], }, - 'expenses':[ + "expenses": [ { - 'id':91, - 'employee_email':'ashwin.t@fyle.in', - 'employee_name':'Joanna', - 'category':'Food', - 'sub_category':None, - 'project':'Aaron Abbott', - 'org_id':'or79Cob97KSh', - 'expense_id':'txxTi9ZfdepC', - 'expense_number':'E/2022/05/T/16', - 'claim_number':'C/2022/05/R/4', - 'amount':50.0, - 'currency':'USD', - 'foreign_amount':None, - 'foreign_currency':None, - 'tax_amount':None, - 'tax_group_id':None, - 'settlement_id':'setDiksMn83K7', - 'reimbursable':True, - 'billable':False, - 'exported':False, - 'state':'PAYMENT_PROCESSING', - 'vendor':'Ashwin', - 'cost_center':'Marketing', - 'purpose':None, - 'report_id':'rpViBmuYmAgw', - 'corporate_card_id':None, - 'file_ids':[ - - ], - 'spent_at':'2022-05-13T17:00:00Z', - 'approved_at':'2022-05-13T09:30:13.484000Z', - 'posted_at':'2022-05-13T17:00:00Z', - 'expense_created_at':'2022-05-13T09:29:43.535468Z', - 'expense_updated_at':'2022-05-13T09:32:06.643941Z', - 'created_at':'2022-05-23T11:11:28.241406Z', - 'updated_at':'2022-05-23T11:11:28.241440Z', - 'fund_source':'PERSONAL', - 'source_account_type': 'PERSONAL_CASH_ACCOUNT', - 'verified_at':'2022-05-23T11:11:28.241440Z', - 'custom_properties':{ - 'Team':'', - 'Class':'', - 'Klass':'', - 'Location':'', - 'Team Copy':'', - 'Tax Groups':'', - 'Departments':'', - 'Team 2 Postman':'', - 'User Dimension':'', - 'Location Entity':'', - 'Operating System':'', - 'System Operating':'', - 'User Dimension Copy':'', - 'Custom Expense Field':'None' + "id": 91, + "employee_email": "ashwin.t@fyle.in", + "employee_name": "Joanna", + "category": "Food", + "sub_category": None, + "project": "Aaron Abbott", + "org_id": "or79Cob97KSh", + "expense_id": "txxTi9ZfdepC", + "expense_number": "E/2022/05/T/16", + "claim_number": "C/2022/05/R/4", + "amount": 50.0, + "currency": "USD", + "foreign_amount": None, + "foreign_currency": None, + "tax_amount": None, + "tax_group_id": None, + "settlement_id": "setDiksMn83K7", + "reimbursable": True, + "billable": False, + "exported": False, + "state": "PAYMENT_PROCESSING", + "vendor": "Ashwin", + "cost_center": "Marketing", + "purpose": None, + "report_id": "rpViBmuYmAgw", + "corporate_card_id": None, + "file_ids": [], + "spent_at": "2022-05-13T17:00:00Z", + "approved_at": "2022-05-13T09:30:13.484000Z", + "posted_at": "2022-05-13T17:00:00Z", + "expense_created_at": "2022-05-13T09:29:43.535468Z", + "expense_updated_at": "2022-05-13T09:32:06.643941Z", + "created_at": "2022-05-23T11:11:28.241406Z", + "updated_at": "2022-05-23T11:11:28.241440Z", + "fund_source": "PERSONAL", + "source_account_type": "PERSONAL_CASH_ACCOUNT", + "verified_at": "2022-05-23T11:11:28.241440Z", + "custom_properties": { + "Team": "", + "Class": "", + "Klass": "", + "Location": "", + "Team Copy": "", + "Tax Groups": "", + "Departments": "", + "Team 2 Postman": "", + "User Dimension": "", + "Location Entity": "", + "Operating System": "", + "System Operating": "", + "User Dimension Copy": "", + "Custom Expense Field": "None", }, - 'paid_on_qbo':False, - 'payment_number':'P/2022/05/R/7' + "paid_on_qbo": False, + "payment_number": "P/2022/05/R/7", } ], - 'workspace_schedule': { - 'id':1, - 'enabled':True, - 'start_datetime':'2022-08-19T07:50:07.591198Z', - 'interval_hours':1, - 'workspace':1, - 'schedule':7, - 'additional_email_options': [], - 'emails_selected': None, - 'error_count': None - } -} \ No newline at end of file + "workspace_schedule": { + "id": 1, + "enabled": True, + "start_datetime": "2022-08-19T07:50:07.591198Z", + "interval_hours": 1, + "workspace": 1, + "schedule": 7, + "additional_email_options": [], + "emails_selected": None, + "error_count": None, + }, +} diff --git a/tests/test_workspaces/test_apis/test_advanced_settings/fixtures.py b/tests/test_workspaces/test_apis/test_advanced_settings/fixtures.py index 1aa05637..cb5044de 100644 --- a/tests/test_workspaces/test_apis/test_advanced_settings/fixtures.py +++ b/tests/test_workspaces/test_apis/test_advanced_settings/fixtures.py @@ -1,50 +1,44 @@ data = { - 'advanced_settings': { + "advanced_settings": { "workspace_general_settings": { "change_accounting_period": True, "sync_fyle_to_xero_payments": False, "sync_xero_to_fyle_payments": True, "auto_create_destination_entity": True, - "auto_create_merchant_destination_entity": True + "auto_create_merchant_destination_entity": True, }, "general_mappings": { - "payment_account": { - "id": "2", - "name": "Business Savings Account" - } + "payment_account": {"id": "2", "name": "Business Savings Account"} }, "workspace_schedules": { "enabled": True, "interval_hours": 1, "additional_email_options": {}, - "emails_selected": ['anishkumar.s@fyle.in'] - } + "emails_selected": ["anishkumar.s@fyle.in"], + }, }, - 'advanced_settings_response': { + "advanced_settings_response": { "workspace_general_settings": { "change_accounting_period": True, "sync_fyle_to_xero_payments": False, "sync_xero_to_fyle_payments": True, "auto_create_destination_entity": True, - "auto_create_merchant_destination_entity": True + "auto_create_merchant_destination_entity": True, }, "general_mappings": { - "payment_account": { - "id": "2", - "name": "Business Savings Account" - } + "payment_account": {"id": "2", "name": "Business Savings Account"} }, "workspace_schedules": { "enabled": True, "interval_hours": 1, "additional_email_options": {}, - "emails_selected": ['anish.ks@fyle.in'] + "emails_selected": ["anish.ks@fyle.in"], }, - "workspace_id": 1 + "workspace_id": 1, }, - 'advanced_settings_missing_values': { + "advanced_settings_missing_values": { "workspace_general_settings": {}, "general_mappings": {}, - "workspace_schedules": {} + "workspace_schedules": {}, }, } diff --git a/tests/test_workspaces/test_apis/test_advanced_settings/test_views.py b/tests/test_workspaces/test_apis/test_advanced_settings/test_views.py index 6d686d47..a6b69b67 100644 --- a/tests/test_workspaces/test_apis/test_advanced_settings/test_views.py +++ b/tests/test_workspaces/test_apis/test_advanced_settings/test_views.py @@ -1,36 +1,36 @@ import json -from apps.workspaces.models import Workspace,WorkspaceGeneralSettings -from .fixtures import data + +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings from tests.helper import dict_compare_keys +from tests.test_workspaces.test_apis.test_advanced_settings.fixtures import data def test_advanced_settings(api_client, test_connection): - workspace = Workspace.objects.get(id=1) - workspace.onboarding_state = 'ADVANCED_SETTINGS' + workspace.onboarding_state = "ADVANCED_SETTINGS" workspace.save() - workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter(workspace_id=1).first() + workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter( + workspace_id=1 + ).first() workspace_general_settings_instance.map_merchant_to_contact = True workspace_general_settings_instance.save() - url = '/api/v2/workspaces/1/advanced_settings/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.put( - url, - data=data['advanced_settings'], - format='json' + url = "/api/v2/workspaces/1/advanced_settings/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) ) + response = api_client.put(url, data=data["advanced_settings"], format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['advanced_settings_response']) == [], 'advanced settings api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["advanced_settings_response"]) == [] + ), "advanced settings api returns a diff in the keys" response = api_client.put( - url, - data=data['advanced_settings_missing_values'], - format='json' + url, data=data["advanced_settings_missing_values"], format="json" ) assert response.status_code == 400 diff --git a/tests/test_workspaces/test_apis/test_clone_settings/fixtures.py b/tests/test_workspaces/test_apis/test_clone_settings/fixtures.py index a2bacf8c..2add1b98 100644 --- a/tests/test_workspaces/test_apis/test_clone_settings/fixtures.py +++ b/tests/test_workspaces/test_apis/test_clone_settings/fixtures.py @@ -1,18 +1,18 @@ data = { - 'clone_settings_response': { - 'export_settings': { + "clone_settings_response": { + "export_settings": { "workspace_general_settings": { "reimbursable_expenses_object": "PURCHASE BILL", "corporate_credit_card_expenses_object": "BANK TRANSACTION", "auto_map_employees": "EMAIL", - 'is_simplify_report_closure_enabled': True + "is_simplify_report_closure_enabled": True, }, "expense_group_settings": { "reimbursable_expense_group_fields": [ "fund_source", "report_id", "employee_email", - "claim_number" + "claim_number", ], "reimbursable_export_date_type": "current_date", "reimbursable_expense_state": "PAYMENT_PROCESSING", @@ -22,158 +22,116 @@ "fund_source", "report_id", "expense_id", - "spent_at" + "spent_at", ], "ccc_export_date_type": "spent_at", "ccc_expense_state": "PAYMENT_PROCESSING", - "import_card_credits": True + "import_card_credits": True, }, "general_mappings": { - "bank_account": { - "id": "10", - "name": "Visa" - }, - "payment_account": { - "id": "11", - "name": "Credit card" - } + "bank_account": {"id": "10", "name": "Visa"}, + "payment_account": {"id": "11", "name": "Credit card"}, }, - "workspace_id": 1 + "workspace_id": 1, }, - 'import_settings': { + "import_settings": { "workspace_general_settings": { "import_categories": True, - "charts_of_accounts": [ - "Expense", - "COST of goods" - ], + "charts_of_accounts": ["Expense", "COST of goods"], "import_tax_codes": True, "import_customers": True, - "import_suppliers_as_merchants": True - }, - "general_mappings": { - "default_tax_code": { - "name": "GST@0%", - "id": "129" - } + "import_suppliers_as_merchants": True, }, + "general_mappings": {"default_tax_code": {"name": "GST@0%", "id": "129"}}, "mapping_settings": [ { "source_field": "KRATOS", "destination_field": "ITEM", "import_to_fyle": True, "is_custom": True, - "source_placeholder": "This is a custom placeholder" + "source_placeholder": "This is a custom placeholder", }, { "source_field": "WEEKEND", "destination_field": "REGION", "import_to_fyle": True, "is_custom": True, - "source_placeholder": "This will be added by postman" - } + "source_placeholder": "This will be added by postman", + }, ], - "workspace_id": 1 + "workspace_id": 1, }, - 'advanced_settings': { + "advanced_settings": { "workspace_general_settings": { "change_accounting_period": True, "sync_fyle_to_xero_payments": False, "sync_xero_to_fyle_payments": True, "auto_create_destination_entity": True, - "auto_create_merchant_destination_entity": True + "auto_create_merchant_destination_entity": True, }, "general_mappings": { - "payment_account": { - "id": "2", - "name": "Business Savings Account" - } + "payment_account": {"id": "2", "name": "Business Savings Account"} }, "workspace_schedules": { "enabled": True, "interval_hours": 1, "additional_email_options": [], - "emails_selected": ['anish.ks@fyle.in'] + "emails_selected": ["anish.ks@fyle.in"], }, - "workspace_id": 1 + "workspace_id": 1, }, - "workspace_id": 1 + "workspace_id": 1, }, - 'clone_settings_missing_values': { - 'export_settings': {}, - 'import_settings': None, - 'advanced_settings': False, - "workspace_id": 1 + "clone_settings_missing_values": { + "export_settings": {}, + "import_settings": None, + "advanced_settings": False, + "workspace_id": 1, }, - 'clone_settings': { + "clone_settings": { "export_settings": { "expense_group_settings": { - "reimbursable_expense_state": "PAYMENT_PROCESSING", - "reimbursable_export_date_type": "current_date", - "ccc_expense_state": "PAID", - "ccc_export_date_type": "spent_at" + "reimbursable_expense_state": "PAYMENT_PROCESSING", + "reimbursable_export_date_type": "current_date", + "ccc_expense_state": "PAID", + "ccc_export_date_type": "spent_at", }, "workspace_general_settings": { - "reimbursable_expenses_object": "PURCHASE BILL", - "corporate_credit_card_expenses_object": None, - "auto_map_employees": "NAME" + "reimbursable_expenses_object": "PURCHASE BILL", + "corporate_credit_card_expenses_object": None, + "auto_map_employees": "NAME", }, - "general_mappings": { - "bank_account": { - "id": None, - "name": None - } - } + "general_mappings": {"bank_account": {"id": None, "name": None}}, }, "import_settings": { "workspace_general_settings": { - "import_categories": False, - "charts_of_accounts": [ - "EXPENSE" - ], - "import_tax_codes": False, - "import_suppliers_as_merchants": False, - "import_customers": False - }, - "general_mappings": { - "default_tax_code": { - "id": None, - "name": None - } + "import_categories": False, + "charts_of_accounts": ["EXPENSE"], + "import_tax_codes": False, + "import_suppliers_as_merchants": False, + "import_customers": False, }, - "mapping_settings": [] + "general_mappings": {"default_tax_code": {"id": None, "name": None}}, + "mapping_settings": [], }, "advanced_settings": { "workspace_general_settings": { - "sync_fyle_to_xero_payments": False, - "sync_xero_to_fyle_payments": False, - "auto_create_destination_entity": False, - "change_accounting_period": False, - "auto_create_merchant_destination_entity": False - }, - "general_mappings": { - "payment_account": { - "name": None, - "id": None - } + "sync_fyle_to_xero_payments": False, + "sync_xero_to_fyle_payments": False, + "auto_create_destination_entity": False, + "change_accounting_period": False, + "auto_create_merchant_destination_entity": False, }, + "general_mappings": {"payment_account": {"name": None, "id": None}}, "workspace_schedules": { "enabled": True, "interval_hours": 1, "start_datetime": "2023-04-04T14:14:02.462Z", - "emails_selected": [ - "ashwin.t+ajhsdg@fyle.in" - ], - "additional_email_options": [] - } - } - }, - 'clone_settings_exists': { - 'is_available': True, - 'workspace_name': 'FAE' + "emails_selected": ["ashwin.t+ajhsdg@fyle.in"], + "additional_email_options": [], + }, + }, }, - 'clone_settings_not_exists': { - 'is_available': False, - 'workspace_name': None - } + "clone_settings_exists": {"is_available": True, "workspace_name": "FAE"}, + "clone_settings_not_exists": {"is_available": False, "workspace_name": None}, } diff --git a/tests/test_workspaces/test_apis/test_clone_settings/test_views.py b/tests/test_workspaces/test_apis/test_clone_settings/test_views.py index fe236ba8..cb89a9d5 100644 --- a/tests/test_workspaces/test_apis/test_clone_settings/test_views.py +++ b/tests/test_workspaces/test_apis/test_clone_settings/test_views.py @@ -1,94 +1,103 @@ import json -from apps.workspaces.models import Workspace,WorkspaceGeneralSettings -from .fixtures import data + +from apps.workspaces.models import Workspace from tests.helper import dict_compare_keys +from tests.test_workspaces.test_apis.test_clone_settings.fixtures import data def assert_4xx_cases(api_client, url, data): - response = api_client.put( - url, - data=data, - format='json' - ) + response = api_client.put(url, data=data, format="json") assert response.status_code == 400 - assert 'Settings are required' in str(response.data), 'clone settings api returns a diff in the message' + assert "Settings are required" in str( + response.data + ), "clone settings api returns a diff in the message" def test_clone_settings(api_client, test_connection): workspace = Workspace.objects.get(id=1) - workspace.onboarding_state = 'COMPLETE' + workspace.onboarding_state = "COMPLETE" workspace.save() - url = '/api/v2/workspaces/1/clone_settings/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.put( - url, - data=data['clone_settings'], - format='json' + url = "/api/v2/workspaces/1/clone_settings/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) ) + response = api_client.put(url, data=data["clone_settings"], format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['clone_settings_response']) == [], 'clone settings api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["clone_settings_response"]) == [] + ), "clone settings api returns a diff in the keys" response = api_client.put( - url, - data=data['clone_settings_missing_values'], - format='json' + url, data=data["clone_settings_missing_values"], format="json" ) assert response.status_code == 400 + def test_4xx_export_settings(api_client, test_connection): - url = '/api/v2/workspaces/1/clone_settings/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + url = "/api/v2/workspaces/1/clone_settings/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) assert_4xx_cases(api_client, url, {}) + def test_4xx_import_settings(api_client, test_connection): - url = '/api/v2/workspaces/1/clone_settings/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + url = "/api/v2/workspaces/1/clone_settings/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) + + assert_4xx_cases( + api_client, url, {"export_settings": data["clone_settings"]["export_settings"]} + ) - assert_4xx_cases(api_client, url, { - 'export_settings': data['clone_settings']['export_settings'] - }) def test_4xx_advanced_settings(api_client, test_connection): - url = '/api/v2/workspaces/1/clone_settings/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + url = "/api/v2/workspaces/1/clone_settings/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) + + assert_4xx_cases( + api_client, + url, + { + "export_settings": data["clone_settings"]["export_settings"], + "import_settings": data["clone_settings"]["import_settings"], + }, + ) - assert_4xx_cases(api_client, url, { - 'export_settings': data['clone_settings']['export_settings'], - 'import_settings': data['clone_settings']['import_settings'] - }) def test_clone_settings_exists(api_client, test_connection): workspace = Workspace.objects.get(id=1) - workspace.onboarding_state = 'COMPLETE' + workspace.onboarding_state = "COMPLETE" workspace.save() - url = '/api/user/clone_settings/exists/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.get( - url, - data=data['clone_settings_exists'], - format='json' + url = "/api/user/clone_settings/exists/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) ) + response = api_client.get(url, data=data["clone_settings_exists"], format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['clone_settings_exists']) == [], 'clone settings api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["clone_settings_exists"]) == [] + ), "clone settings api returns a diff in the keys" - Workspace.objects.update(onboarding_state='EXPORT_SETTINGS') + Workspace.objects.update(onboarding_state="EXPORT_SETTINGS") - response = api_client.get( - url, - data=data['clone_settings_exists'], - format='json' - ) + response = api_client.get(url, data=data["clone_settings_exists"], format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['clone_settings_not_exists']) == [], 'clone settings api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["clone_settings_not_exists"]) == [] + ), "clone settings api returns a diff in the keys" diff --git a/tests/test_workspaces/test_apis/test_errors/fixtures.py b/tests/test_workspaces/test_apis/test_errors/fixtures.py index 4c8e2e17..064dc053 100644 --- a/tests/test_workspaces/test_apis/test_errors/fixtures.py +++ b/tests/test_workspaces/test_apis/test_errors/fixtures.py @@ -1,5 +1,5 @@ data = { - 'errors_response': [ + "errors_response": [ { "id": 1, "expense_attribute": { @@ -14,7 +14,7 @@ "detail": None, "created_at": "2022-10-07T06:02:54.076426Z", "updated_at": "2022-10-07T06:02:54.076429Z", - "workspace": 8 + "workspace": 8, }, "expense_group": None, "type": "CATEGORY_MAPPING", @@ -23,7 +23,7 @@ "error_detail": "Category mapping is missing", "created_at": "2022-10-07T06:07:32.823778Z", "updated_at": "2022-10-07T06:31:53.211657Z", - "workspace": 1 + "workspace": 1, }, { "id": 2, @@ -43,11 +43,11 @@ "department": None, "department_id": None, "employee_code": None, - "department_code": None + "department_code": None, }, "created_at": "2022-10-07T06:02:53.810543Z", "updated_at": "2022-10-07T06:02:53.810548Z", - "workspace": 8 + "workspace": 8, }, "expense_group": None, "type": "EMPLOYEE_MAPPING", @@ -56,7 +56,7 @@ "error_detail": "Employee mapping is missing", "created_at": "2022-10-07T06:31:48.338064Z", "updated_at": "2022-10-07T06:31:48.338082Z", - "workspace": 1 - } + "workspace": 1, + }, ] } diff --git a/tests/test_workspaces/test_apis/test_errors/test_views.py b/tests/test_workspaces/test_apis/test_errors/test_views.py index 2a956baa..5d23f057 100644 --- a/tests/test_workspaces/test_apis/test_errors/test_views.py +++ b/tests/test_workspaces/test_apis/test_errors/test_views.py @@ -1,54 +1,49 @@ import json -from datetime import datetime,timezone +from datetime import datetime, timezone + from apps.tasks.models import Error -from .fixtures import data from tests.helper import dict_compare_keys +from tests.test_workspaces.test_apis.test_errors.fixtures import data def test_errors(api_client, test_connection): - Error.objects.create( - workspace_id=1, - type = 'EMPLOYEE_MAPPING', - expense_attribute_id=8, - is_resolved = False, - error_title = 'ashwin.t@fyle.in', - error_detail = 'Employee mapping is missing', - created_at = datetime.now(tz=timezone.utc), - updated_at = datetime.now(tz=timezone.utc) + workspace_id=1, + type="EMPLOYEE_MAPPING", + expense_attribute_id=8, + is_resolved=False, + error_title="ashwin.t@fyle.in", + error_detail="Employee mapping is missing", + created_at=datetime.now(tz=timezone.utc), + updated_at=datetime.now(tz=timezone.utc), ) - url = '/api/v2/workspaces/1/errors/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.get( - url, - format='json' + url = "/api/v2/workspaces/1/errors/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) ) + response = api_client.get(url, format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['errors_response']) == [], 'errors api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["errors_response"]) == [] + ), "errors api returns a diff in the keys" - url = '/api/v2/workspaces/1/errors/?is_resolved=False&type=CATEGORY_MAPPING' - response = api_client.get( - url, - format='json' - ) + url = "/api/v2/workspaces/1/errors/?is_resolved=False&type=CATEGORY_MAPPING" + response = api_client.get(url, format="json") assert response.status_code == 200 Error.objects.filter( workspace_id=1, - type='EMPLOYEE_MAPPING', - error_detail = 'Employee mapping is missing', - is_resolved=False + type="EMPLOYEE_MAPPING", + error_detail="Employee mapping is missing", + is_resolved=False, ).update(is_resolved=True) - url = '/api/v2/workspaces/1/errors/?is_resolved=true&type=EMPLOYEE_MAPPING' - response = api_client.get( - url, - format='json' - ) + url = "/api/v2/workspaces/1/errors/?is_resolved=true&type=EMPLOYEE_MAPPING" + response = api_client.get(url, format="json") assert response.status_code == 200 diff --git a/tests/test_workspaces/test_apis/test_export_settings/fixtures.py b/tests/test_workspaces/test_apis/test_export_settings/fixtures.py index 0f7da98a..df45bd54 100644 --- a/tests/test_workspaces/test_apis/test_export_settings/fixtures.py +++ b/tests/test_workspaces/test_apis/test_export_settings/fixtures.py @@ -1,42 +1,36 @@ data = { - 'export_settings': { + "export_settings": { "expense_group_settings": { "reimbursable_expense_state": "PAYMENT_PROCESSING", "reimbursable_export_date_type": "", "ccc_expense_state": "PAYMENT_PROCESSING", "import_card_credits": True, "ccc_export_date_type": "", - "expense_state": "" + "expense_state": "", }, "workspace_general_settings": { "reimbursable_expenses_object": "PURCHASE BILL", "corporate_credit_card_expenses_object": "BANK TRANSACTION", - "auto_map_employees": "EMAIL" + "auto_map_employees": "EMAIL", }, "general_mappings": { - "bank_account": { - "id": "10", - "name": "Visa" - }, - "payment_account":{ - "id": "11", - "name": "Credit card" - } - } + "bank_account": {"id": "10", "name": "Visa"}, + "payment_account": {"id": "11", "name": "Credit card"}, + }, }, - 'export_settings_response': { + "export_settings_response": { "workspace_general_settings": { "reimbursable_expenses_object": "PURCHASE BILL", "corporate_credit_card_expenses_object": "BANK TRANSACTION", "auto_map_employees": "EMAIL", - 'is_simplify_report_closure_enabled': True + "is_simplify_report_closure_enabled": True, }, "expense_group_settings": { "reimbursable_expense_group_fields": [ "fund_source", "report_id", "employee_email", - "claim_number" + "claim_number", ], "reimbursable_export_date_type": "current_date", "reimbursable_expense_state": "PAYMENT_PROCESSING", @@ -46,27 +40,21 @@ "fund_source", "report_id", "expense_id", - "spent_at" + "spent_at", ], "ccc_export_date_type": "spent_at", "ccc_expense_state": "PAYMENT_PROCESSING", - "import_card_credits": True + "import_card_credits": True, }, "general_mappings": { - "bank_account": { - "id": "10", - "name": "Visa" - }, - "payment_account": { - "id": "11", - "name": "Credit card" - } + "bank_account": {"id": "10", "name": "Visa"}, + "payment_account": {"id": "11", "name": "Credit card"}, }, - "workspace_id": 1 + "workspace_id": 1, }, - 'export_settings_missing_values': { - 'expense_group_settings': "", - 'workspace_general_settings': "", - 'general_mappings': "" + "export_settings_missing_values": { + "expense_group_settings": "", + "workspace_general_settings": "", + "general_mappings": "", }, } diff --git a/tests/test_workspaces/test_apis/test_export_settings/test_views.py b/tests/test_workspaces/test_apis/test_export_settings/test_views.py index a9fbf9c9..85371f24 100644 --- a/tests/test_workspaces/test_apis/test_export_settings/test_views.py +++ b/tests/test_workspaces/test_apis/test_export_settings/test_views.py @@ -1,44 +1,46 @@ import json + from apps.fyle.models import ExpenseGroupSettings -from apps.workspaces.models import Workspace,WorkspaceGeneralSettings -from .fixtures import data +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings from tests.helper import dict_compare_keys +from tests.test_workspaces.test_apis.test_export_settings.fixtures import data def test_export_settings(api_client, test_connection): - workspace_id = 1 workspace = Workspace.objects.get(id=workspace_id) - workspace.onboarding_state = 'EXPORT_SETTINGS' + workspace.onboarding_state = "EXPORT_SETTINGS" workspace.save() - workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter(workspace_id=1).first() + workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter( + workspace_id=1 + ).first() workspace_general_settings_instance.map_merchant_to_contact = True workspace_general_settings_instance.save() - expense_group_settings_instance = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) - expense_group_settings_instance.ccc_export_date_type = '' - expense_group_settings_instance.expense_state = '' + expense_group_settings_instance = ExpenseGroupSettings.objects.get( + workspace_id=workspace_id + ) + expense_group_settings_instance.ccc_export_date_type = "" + expense_group_settings_instance.expense_state = "" expense_group_settings_instance.save() - url = '/api/v2/workspaces/{}/export_settings/'.format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.put( - url, - data=data['export_settings'], - format='json' + url = "/api/v2/workspaces/{}/export_settings/".format(workspace_id) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) ) + response = api_client.put(url, data=data["export_settings"], format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['export_settings_response']) == [], 'Export settings api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["export_settings_response"]) == [] + ), "Export settings api returns a diff in the keys" response = api_client.put( - url, - data=data['export_settings_missing_values'], - format='json' + url, data=data["export_settings_missing_values"], format="json" ) assert response.status_code == 400 diff --git a/tests/test_workspaces/test_apis/test_import_settings/fixtures.py b/tests/test_workspaces/test_apis/test_import_settings/fixtures.py index 34217c06..5bbda96f 100644 --- a/tests/test_workspaces/test_apis/test_import_settings/fixtures.py +++ b/tests/test_workspaces/test_apis/test_import_settings/fixtures.py @@ -1,104 +1,86 @@ data = { - 'import_settings':{ + "import_settings": { "workspace_general_settings": { "import_categories": True, "charts_of_accounts": ["Expense", "COST of goods"], "import_tax_codes": True, "import_customers": True, - "import_suppliers_as_merchants": True - }, - "general_mappings": { - "default_tax_code": { - "id": "129", - "name": "GST@0%" - } + "import_suppliers_as_merchants": True, }, + "general_mappings": {"default_tax_code": {"id": "129", "name": "GST@0%"}}, "mapping_settings": [ { "source_field": "KRATOS", "destination_field": "ITEM", "import_to_fyle": True, "is_custom": True, - "source_placeholder": "This is a custom placeholder" + "source_placeholder": "This is a custom placeholder", }, { "source_field": "Weekend", "destination_field": "REGION", "import_to_fyle": True, "is_custom": True, - "source_placeholder": "This will be added by postman" - } - ] + "source_placeholder": "This will be added by postman", + }, + ], }, - 'import_settings_2':{ + "import_settings_2": { "workspace_general_settings": { "import_categories": True, "charts_of_accounts": ["Expense", "COST of goods"], "import_tax_codes": True, "import_customers": False, - "import_suppliers_as_merchants": False - }, - "general_mappings": { - "default_tax_code": { - "id": "129", - "name": "GST@0%" - } + "import_suppliers_as_merchants": False, }, + "general_mappings": {"default_tax_code": {"id": "129", "name": "GST@0%"}}, "mapping_settings": [ { "source_field": "PROJECT", "destination_field": "ITEM", "import_to_fyle": True, "is_custom": False, - "source_placeholder": None + "source_placeholder": None, }, { "source_field": "COST_CENTER", "destination_field": "REGION", "import_to_fyle": True, "is_custom": False, - "source_placeholder": None - } - ] + "source_placeholder": None, + }, + ], }, - 'import_settings_response': { + "import_settings_response": { "workspace_general_settings": { "import_categories": True, - "charts_of_accounts": [ - "Expense", - "COST of goods" - ], + "charts_of_accounts": ["Expense", "COST of goods"], "import_tax_codes": True, "import_customers": True, - "import_suppliers_as_merchants": True - }, - "general_mappings": { - "default_tax_code": { - "name": "GST@0%", - "id": "129" - } + "import_suppliers_as_merchants": True, }, + "general_mappings": {"default_tax_code": {"name": "GST@0%", "id": "129"}}, "mapping_settings": [ { "source_field": "KRATOS", "destination_field": "ITEM", "import_to_fyle": True, "is_custom": True, - "source_placeholder": "This is a custom placeholder" + "source_placeholder": "This is a custom placeholder", }, { "source_field": "WEEKEND", "destination_field": "REGION", "import_to_fyle": True, "is_custom": True, - "source_placeholder": "This will be added by postman" - } + "source_placeholder": "This will be added by postman", + }, ], - "workspace_id": 1 + "workspace_id": 1, }, - 'import_settings_missing_values': { + "import_settings_missing_values": { "workspace_general_settings": {}, "general_mappings": {}, - "mapping_settings": [] + "mapping_settings": [], }, } diff --git a/tests/test_workspaces/test_apis/test_import_settings/test_views.py b/tests/test_workspaces/test_apis/test_import_settings/test_views.py index 55398954..73d6475e 100644 --- a/tests/test_workspaces/test_apis/test_import_settings/test_views.py +++ b/tests/test_workspaces/test_apis/test_import_settings/test_views.py @@ -1,55 +1,54 @@ import json -from apps.workspaces.models import Workspace,WorkspaceGeneralSettings -from .fixtures import data + +from apps.workspaces.models import Workspace, WorkspaceGeneralSettings from tests.helper import dict_compare_keys from tests.test_fyle.fixtures import data as fyle_data +from tests.test_workspaces.test_apis.test_import_settings.fixtures import data def test_import_settings(api_client, mocker, test_connection): mocker.patch( - 'fyle_integrations_platform_connector.apis.ExpenseCustomFields.post', - return_value=[] + "fyle_integrations_platform_connector.apis.ExpenseCustomFields.post", + return_value=[], ) mocker.patch( - 'fyle.platform.apis.v1beta.admin.ExpenseFields.list_all', - return_value=fyle_data['get_all_expense_fields'] + "fyle.platform.apis.v1beta.admin.ExpenseFields.list_all", + return_value=fyle_data["get_all_expense_fields"], ) workspace = Workspace.objects.get(id=1) - workspace.onboarding_state = 'IMPORT_SETTINGS' + workspace.onboarding_state = "IMPORT_SETTINGS" workspace.save() - workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter(workspace_id=1).first() + workspace_general_settings_instance = WorkspaceGeneralSettings.objects.filter( + workspace_id=1 + ).first() workspace_general_settings_instance.map_merchant_to_contact = True workspace_general_settings_instance.save() - url = '/api/v2/workspaces/1/import_settings/' - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.put( - url, - data=data['import_settings'], - format='json' + url = "/api/v2/workspaces/1/import_settings/" + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) ) + response = api_client.put(url, data=data["import_settings"], format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['import_settings_response']) == [], 'Import settings api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["import_settings_response"]) == [] + ), "Import settings api returns a diff in the keys" - response = api_client.put( - url, - data=data['import_settings_2'], - format='json' - ) + response = api_client.put(url, data=data["import_settings_2"], format="json") assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['import_settings_response']) == [], 'Import settings api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["import_settings_response"]) == [] + ), "Import settings api returns a diff in the keys" response = api_client.put( - url, - data=data['import_settings_missing_values'], - format='json' + url, data=data["import_settings_missing_values"], format="json" ) assert response.status_code == 400 diff --git a/tests/test_workspaces/test_email.py b/tests/test_workspaces/test_email.py index d18035e7..70873ad4 100644 --- a/tests/test_workspaces/test_email.py +++ b/tests/test_workspaces/test_email.py @@ -1,25 +1,34 @@ -from apps.mappings.models import TenantMapping -from apps.workspaces.models import Workspace, WorkspaceSchedule from datetime import date, datetime -from django.template.loader import render_to_string from django.conf import settings - -from apps.tasks.models import TaskLog -from apps.tasks.models import Error -from apps.workspaces.email import get_admin_name, get_errors, get_failed_task_logs_count, render_email_template, send_email_notification, send_failure_notification_email +from django.template.loader import render_to_string from fyle_accounting_mappings.models import ExpenseAttribute -import pytest +from apps.mappings.models import TenantMapping +from apps.tasks.models import Error, TaskLog +from apps.workspaces.email import ( + get_admin_name, + get_errors, + get_failed_task_logs_count, + render_email_template, + send_email_notification, + send_failure_notification_email, +) +from apps.workspaces.models import Workspace, WorkspaceSchedule + def test_get_failed_task_logs_count(db): # Create a test workspace - workspace = Workspace.objects.create(name='Test Workspace') + workspace = Workspace.objects.create(name="Test Workspace") # Create 3 TaskLogs, 2 of which have status FAILED and match the filter - TaskLog.objects.create(type='CREATING_BILL_PAYMENT', workspace=workspace, status='SUCCESS') - TaskLog.objects.create(type='FETCHING_EXPENSES', workspace=workspace, status='SUCCESS') - TaskLog.objects.create(type='OTHER_TASK', workspace=workspace, status='SUCCESS') + TaskLog.objects.create( + type="CREATING_BILL_PAYMENT", workspace=workspace, status="SUCCESS" + ) + TaskLog.objects.create( + type="FETCHING_EXPENSES", workspace=workspace, status="SUCCESS" + ) + TaskLog.objects.create(type="OTHER_TASK", workspace=workspace, status="SUCCESS") # Call the function with the workspace ID and assert that it returns 2 failed_count = get_failed_task_logs_count(workspace.id) @@ -32,9 +41,7 @@ def test_get_admin_name_returns_name_from_ws_schedule_if_email_matches(db): name = "Admin Name" ws_schedule, _ = WorkspaceSchedule.objects.update_or_create( workspace_id=workspace_id, - additional_email_options=[ - {'email': admin_email, 'name': name} - ] + additional_email_options=[{"email": admin_email, "name": name}], ) result = get_admin_name(workspace_id, admin_email, ws_schedule) @@ -48,11 +55,11 @@ def test_get_admin_name_returns_name_from_expense_attribute_if_email_matches(db) name = "Admin Name" ws_schedule, _ = WorkspaceSchedule.objects.update_or_create( workspace_id=workspace_id, - additional_email_options=[ - {'email': "other@example.com", 'name': "Other Name"} - ] + additional_email_options=[{"email": "other@example.com", "name": "Other Name"}], + ) + ExpenseAttribute.objects.create( + workspace_id=workspace_id, value=admin_email, detail={"full_name": name} ) - attribute = ExpenseAttribute.objects.create(workspace_id=workspace_id, value=admin_email, detail={'full_name': name}) result = get_admin_name(workspace_id, admin_email, ws_schedule) @@ -69,15 +76,15 @@ def test_render_email_template_returns_expected_output(): errors = ["Error 1", "Error 2", "Error 3"] error_types = ["Type 1", "Type 2", "Type 3"] context = { - 'name': admin_name, - 'errors_count': task_logs_count, - 'fyle_company': workspace_name, - 'xero_tenant': tenant_name, - 'export_time': last_synced_at.strftime("%d %b %Y | %H:%M"), - 'year': date.today().year, - 'app_url': "{0}/workspaces/main/dashboard".format(settings.FYLE_APP_URL), - 'errors': errors, - 'error_type': ', '.join(error_types) + "name": admin_name, + "errors_count": task_logs_count, + "fyle_company": workspace_name, + "xero_tenant": tenant_name, + "export_time": last_synced_at.strftime("%d %b %Y | %H:%M"), + "year": date.today().year, + "app_url": "{0}/workspaces/main/dashboard".format(settings.FYLE_APP_URL), + "errors": errors, + "error_type": ", ".join(error_types), } result = render_email_template(context) @@ -88,33 +95,33 @@ def test_render_email_template_returns_expected_output(): def test_get_errors_returns_unresolved_errors_for_given_workspace(db): # Arrange - workspace, _ = Workspace.objects.update_or_create(name='Workspace 1') + workspace, _ = Workspace.objects.update_or_create(name="Workspace 1") error1, _ = Error.objects.update_or_create( - type='Type A', + type="Type A", is_resolved=False, - error_title='Error 1', - error_detail='Error detail 1', + error_title="Error 1", + error_detail="Error detail 1", created_at=datetime.now(), updated_at=datetime.now(), - workspace_id=workspace.id + workspace_id=workspace.id, ) error2, _ = Error.objects.update_or_create( - type='Type B', + type="Type B", is_resolved=True, - error_title='Error 2', - error_detail='Error detail 2', + error_title="Error 2", + error_detail="Error detail 2", created_at=datetime.now(), updated_at=datetime.now(), - workspace_id=workspace.id + workspace_id=workspace.id, ) error3, _ = Error.objects.update_or_create( - type='Type C', + type="Type C", is_resolved=False, - error_title='Error 3', - error_detail='Error detail 3', + error_title="Error 3", + error_detail="Error detail 3", created_at=datetime.now(), updated_at=datetime.now(), - workspace_id=workspace.id + workspace_id=workspace.id, ) # Act @@ -128,21 +135,23 @@ def test_get_errors_returns_unresolved_errors_for_given_workspace(db): def test_send_email_notification(db): - admin_email = 'test@example.com' - message = 'Test email message' + admin_email = "test@example.com" + message = "Test email message" send_email_notification(admin_email, message) def test_send_failure_notification_email(db, mocker): # Mock the render_email_template and send_email_notification functions - mocker.patch('apps.workspaces.email.render_email_template') - mocker.patch('apps.workspaces.email.send_email_notification') + mocker.patch("apps.workspaces.email.render_email_template") + mocker.patch("apps.workspaces.email.send_email_notification") # Create sample data for the function admin_name = "John Doe" admin_email = "john.doe@example.com" task_logs_count = 3 - workspace = Workspace(id=1, name="Test Workspace", last_synced_at=datetime(2022, 12, 1, 10, 0, 0)) + workspace = Workspace( + id=1, name="Test Workspace", last_synced_at=datetime(2022, 12, 1, 10, 0, 0) + ) tenant_detail = TenantMapping(id=1, tenant_name="Test Tenant") errors = [ Error(id=1, type="Type 1", workspace_id=1, is_resolved=False), diff --git a/tests/test_workspaces/test_tasks.py b/tests/test_workspaces/test_tasks.py index 21668716..413db231 100644 --- a/tests/test_workspaces/test_tasks.py +++ b/tests/test_workspaces/test_tasks.py @@ -1,31 +1,32 @@ from datetime import datetime -from apps.tasks.models import TaskLog -from apps.workspaces.email import send_failure_notification_email -from apps.workspaces.tasks import run_email_notification, run_sync_schedule, \ - async_update_fyle_credentials, async_add_admins_to_workspace -from apps.workspaces.queue import schedule_sync -from apps.workspaces.models import WorkspaceSchedule, WorkspaceGeneralSettings, LastExportDetail, \ - FyleCredential -from apps.users.models import User +import pytest from fyle_accounting_mappings.models import ExpenseAttribute -from ..test_fyle.fixtures import data as fyle_data -from .fixtures import data - -import pytest +from apps.tasks.models import TaskLog +from apps.users.models import User +from apps.workspaces.models import FyleCredential, LastExportDetail, WorkspaceGeneralSettings, WorkspaceSchedule +from apps.workspaces.queue import schedule_sync +from apps.workspaces.tasks import ( + async_add_admins_to_workspace, + async_update_fyle_credentials, + run_email_notification, + run_sync_schedule, +) +from tests.test_fyle.fixtures import data as fyle_data +from tests.test_workspaces.fixtures import data def test_schedule_sync(db): workspace_id = 1 # Test with email_added - email_added = {'email': 'test@example.com', 'name': 'Test User'} + email_added = {"email": "test@example.com", "name": "Test User"} schedule_sync(workspace_id, True, 1, email_added, []) ws_schedule = WorkspaceSchedule.objects.filter(workspace_id=workspace_id).first() - assert ws_schedule.schedule.func == 'apps.workspaces.tasks.run_sync_schedule' + assert ws_schedule.schedule.func == "apps.workspaces.tasks.run_sync_schedule" assert ws_schedule.additional_email_options == [email_added] # Test without email_added @@ -36,46 +37,40 @@ def test_schedule_sync(db): assert ws_schedule.schedule is None -def test_run_sync_schedule(mocker,db): +def test_run_sync_schedule(mocker, db): workspace_id = 1 LastExportDetail.objects.create( - last_exported_at=datetime.now(), - export_mode='MANUAL', - workspace_id=1 + last_exported_at=datetime.now(), export_mode="MANUAL", workspace_id=1 ) general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) mocker.patch( - 'fyle_integrations_platform_connector.apis.Expenses.get', - return_value=data['expenses'] + "fyle_integrations_platform_connector.apis.Expenses.get", + return_value=data["expenses"], ) run_sync_schedule(workspace_id) - task_log = TaskLog.objects.filter( - workspace_id=workspace_id - ).first() - - assert task_log.status == 'COMPLETE' + task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() + + assert task_log.status == "COMPLETE" - general_settings.reimbursable_expenses_object = 'PURCHASE BILL' - general_settings.corporate_credit_card_expenses_object = 'BANK TRANSACTION' + general_settings.reimbursable_expenses_object = "PURCHASE BILL" + general_settings.corporate_credit_card_expenses_object = "BANK TRANSACTION" general_settings.save() run_sync_schedule(workspace_id) - - task_log = TaskLog.objects.filter( - workspace_id=workspace_id - ).first() - - assert task_log.status == 'COMPLETE' + + task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() + + assert task_log.status == "COMPLETE" def test_async_update_fyle_credentials(db): workspace_id = 1 - refresh_token = 'hehehuhu' + refresh_token = "hehehuhu" - async_update_fyle_credentials('orPJvXuoLqvJ', refresh_token) + async_update_fyle_credentials("orPJvXuoLqvJ", refresh_token) fyle_credentials = FyleCredential.objects.filter(workspace_id=workspace_id).first() @@ -86,22 +81,24 @@ def test_email_notification(db, mocker): workspace_id = 1 # Mock the send_failure_notification_email function - mocker.patch('apps.workspaces.tasks.send_failure_notification_email') + mocker.patch("apps.workspaces.tasks.send_failure_notification_email") # Create failed task logs - TaskLog.objects.create(workspace_id=workspace_id, status='FAILED', type='IMPORTING_EXPENSES') - TaskLog.objects.create(workspace_id=workspace_id, status='FAILED', type='CREATING_BILL_PAYMENT') - TaskLog.objects.create(workspace_id=workspace_id, status='COMPLETED', type='FETCHING_EXPENSES') + TaskLog.objects.create( + workspace_id=workspace_id, status="FAILED", type="IMPORTING_EXPENSES" + ) + TaskLog.objects.create( + workspace_id=workspace_id, status="FAILED", type="CREATING_BILL_PAYMENT" + ) + TaskLog.objects.create( + workspace_id=workspace_id, status="COMPLETED", type="FETCHING_EXPENSES" + ) ws_schedule, _ = WorkspaceSchedule.objects.update_or_create( - workspace_id=workspace_id, - defaults={ - 'enabled': True, - 'error_count': None - } + workspace_id=workspace_id, defaults={"enabled": True, "error_count": None} ) ws_schedule.enabled = True - ws_schedule.emails_selected = ['anishkumar.s@fyle.in'] + ws_schedule.emails_selected = ["anishkumar.s@fyle.in"] ws_schedule.save() # Check that email is not sent when error count is None and there are no failed task logs @@ -123,15 +120,21 @@ def test_email_notification(db, mocker): run_email_notification(workspace_id) # Check that email is sent to admin name from ExpenseAttribute - ExpenseAttribute.objects.create(workspace_id=workspace_id, value='anishkumar.s@fyle.in', detail={'full_name': 'Anish Kumar'}) + ExpenseAttribute.objects.create( + workspace_id=workspace_id, + value="anishkumar.s@fyle.in", + detail={"full_name": "Anish Kumar"}, + ) - ws_schedule.emails_selected = ['anishkumar.s@fyle.in'] + ws_schedule.emails_selected = ["anishkumar.s@fyle.in"] ws_schedule.additional_email_options = [] ws_schedule.save() run_email_notification(workspace_id) # Check that email is sent to name from additional_email_options - ws_schedule.additional_email_options = [{'email': 'anishkumar.s@fyle.in', 'name': 'Anish'}] + ws_schedule.additional_email_options = [ + {"email": "anishkumar.s@fyle.in", "name": "Anish"} + ] ws_schedule.save() run_email_notification(workspace_id) @@ -141,13 +144,14 @@ def test_run_email_notification_with_invalid_workspace_id(db): with pytest.raises(Exception): run_email_notification(workspace_id) + def test_async_add_admins_to_workspace(db, mocker): old_users_count = User.objects.count() mocker.patch( - 'fyle.platform.apis.v1beta.admin.Employees.list_all', - return_value=fyle_data['get_all_employees'] + "fyle.platform.apis.v1beta.admin.Employees.list_all", + return_value=fyle_data["get_all_employees"], ) - async_add_admins_to_workspace(1, 'usqywo0f3nBY') + async_add_admins_to_workspace(1, "usqywo0f3nBY") new_users_count = User.objects.count() assert new_users_count > old_users_count diff --git a/tests/test_workspaces/test_templatetags.py b/tests/test_workspaces/test_templatetags.py index 1c8b3dab..a71cd14b 100644 --- a/tests/test_workspaces/test_templatetags.py +++ b/tests/test_workspaces/test_templatetags.py @@ -1,6 +1,6 @@ -import pytest from apps.workspaces.templatetags.custom_filters import snake_case_to_space_case + def test_snake_case_to_space_case(): input_string = "snake_case_example" expected_output = "Snake Case Example" diff --git a/tests/test_workspaces/test_utils.py b/tests/test_workspaces/test_utils.py index fde980bc..45bdf577 100644 --- a/tests/test_workspaces/test_utils.py +++ b/tests/test_workspaces/test_utils.py @@ -1,108 +1,162 @@ -from asyncio.log import logger -import jwt import json -from requests import Response +from asyncio.log import logger from unittest import mock -from xerosdk import InvalidTokenError, InternalServerError, XeroSDK -from apps.workspaces.utils import generate_token, revoke_token, generate_xero_identity, generate_xero_refresh_token + +import jwt + +from apps.workspaces.utils import generate_token, generate_xero_identity, generate_xero_refresh_token, revoke_token from tests.test_xero.fixtures import data as xero_data + def test_generate_token(mocker, db): - mocker.patch( - 'apps.workspaces.utils.requests.post', - return_value=None - ) + mocker.patch("apps.workspaces.utils.requests.post", return_value=None) - generate_token(authorization_code='asdfgh') + generate_token(authorization_code="asdfgh") def test_revoke_token(mocker, db): - mocker.patch( - 'apps.workspaces.utils.requests.post', - return_value=None - ) + mocker.patch("apps.workspaces.utils.requests.post", return_value=None) - revoke_token(refresh_token='asdfgh') + revoke_token(refresh_token="asdfgh") def test_generate_xero_identity(mocker, db): try: mocker.patch( - 'apps.workspaces.utils.generate_token', - return_value=mock.MagicMock(status_code=200, text=json.dumps({'refresh_token':'sdfgh', 'id_token': jwt.encode({'given_name': 'sdfgh', 'family_name': 'dfgh', 'email': 'sdfghj@ssdd.fgh'}, key='secret')})) - ) - mocker.patch( - 'xerosdk.XeroSDK.__init__', - return_value=None + "apps.workspaces.utils.generate_token", + return_value=mock.MagicMock( + status_code=200, + text=json.dumps( + { + "refresh_token": "sdfgh", + "id_token": jwt.encode( + { + "given_name": "sdfgh", + "family_name": "dfgh", + "email": "sdfghj@ssdd.fgh", + }, + key="secret", + ), + } + ), + ), ) + mocker.patch("xerosdk.XeroSDK.__init__", return_value=None) mocker.patch( - 'xerosdk.apis.Tenants.get_all', - return_value=xero_data['get_all_tenants'] - ) - mocker.patch( - 'apps.workspaces.utils.revoke_token', - return_value=None + "xerosdk.apis.Tenants.get_all", return_value=xero_data["get_all_tenants"] ) + mocker.patch("apps.workspaces.utils.revoke_token", return_value=None) - generate_xero_identity(authorization_code='asdfgh', redirect_uri='sdfghj') - except: - logger.info('Wrong client secret or/and refresh token') + generate_xero_identity(authorization_code="asdfgh", redirect_uri="sdfghj") + except Exception: + logger.info("Wrong client secret or/and refresh token") try: mocker.patch( - 'apps.workspaces.utils.generate_token', - return_value=mock.MagicMock(status_code=400, text=json.dumps({'refresh_token':'sdfgh', 'id_token': jwt.encode({'given_name': 'sdfgh', 'family_name': 'dfgh', 'email': 'sdfghj@ssdd.fgh'}, key='secret')})) + "apps.workspaces.utils.generate_token", + return_value=mock.MagicMock( + status_code=400, + text=json.dumps( + { + "refresh_token": "sdfgh", + "id_token": jwt.encode( + { + "given_name": "sdfgh", + "family_name": "dfgh", + "email": "sdfghj@ssdd.fgh", + }, + key="secret", + ), + } + ), + ), ) - generate_xero_identity(authorization_code='asdfgh', redirect_uri='sdfghj') - except: - logger.info('Wrong client secret or/and refresh token') + generate_xero_identity(authorization_code="asdfgh", redirect_uri="sdfghj") + except Exception: + logger.info("Wrong client secret or/and refresh token") try: mocker.patch( - 'apps.workspaces.utils.generate_token', - return_value=mock.MagicMock(status_code=401, text=json.dumps({'refresh_token':'sdfgh', 'id_token': jwt.encode({'given_name': 'sdfgh', 'family_name': 'dfgh', 'email': 'sdfghj@ssdd.fgh'}, key='secret')})) + "apps.workspaces.utils.generate_token", + return_value=mock.MagicMock( + status_code=401, + text=json.dumps( + { + "refresh_token": "sdfgh", + "id_token": jwt.encode( + { + "given_name": "sdfgh", + "family_name": "dfgh", + "email": "sdfghj@ssdd.fgh", + }, + key="secret", + ), + } + ), + ), ) - generate_xero_identity(authorization_code='asdfgh', redirect_uri='sdfghj') - except: - logger.info('Wrong client secret or/and refresh token') - + generate_xero_identity(authorization_code="asdfgh", redirect_uri="sdfghj") + except Exception: + logger.info("Wrong client secret or/and refresh token") + try: mocker.patch( - 'apps.workspaces.utils.generate_token', - return_value=mock.MagicMock(status_code=500, text=json.dumps({'refresh_token':'sdfgh', 'id_token': jwt.encode({'given_name': 'sdfgh', 'family_name': 'dfgh', 'email': 'sdfghj@ssdd.fgh'}, key='secret')})) + "apps.workspaces.utils.generate_token", + return_value=mock.MagicMock( + status_code=500, + text=json.dumps( + { + "refresh_token": "sdfgh", + "id_token": jwt.encode( + { + "given_name": "sdfgh", + "family_name": "dfgh", + "email": "sdfghj@ssdd.fgh", + }, + key="secret", + ), + } + ), + ), ) - generate_xero_identity(authorization_code='asdfgh', redirect_uri='sdfghj') - except: - logger.info('Wrong client secret or/and refresh token') - + generate_xero_identity(authorization_code="asdfgh", redirect_uri="sdfghj") + except Exception: + logger.info("Wrong client secret or/and refresh token") + def test_generate_xero_refresh_token(mocker, db): mocker.patch( - 'apps.workspaces.utils.generate_token', - return_value=mock.MagicMock(status_code=200, text=json.dumps({'refresh_token':'sdfgh'})) + "apps.workspaces.utils.generate_token", + return_value=mock.MagicMock( + status_code=200, text=json.dumps({"refresh_token": "sdfgh"}) + ), ) - generate_xero_refresh_token(authorization_code='sdfgh') + generate_xero_refresh_token(authorization_code="sdfgh") try: mocker.patch( - 'apps.workspaces.utils.generate_token', - return_value=mock.MagicMock(status_code=401, text=json.dumps({'refresh_token':'sdfgh'})) + "apps.workspaces.utils.generate_token", + return_value=mock.MagicMock( + status_code=401, text=json.dumps({"refresh_token": "sdfgh"}) + ), ) - generate_xero_refresh_token(authorization_code='sdfgh') - except: - logger.info('Wrong client secret or/and refresh token') + generate_xero_refresh_token(authorization_code="sdfgh") + except Exception: + logger.info("Wrong client secret or/and refresh token") try: mocker.patch( - 'apps.workspaces.utils.generate_token', - return_value=mock.MagicMock(status_code=500, text=json.dumps({'refresh_token':'sdfgh'})) + "apps.workspaces.utils.generate_token", + return_value=mock.MagicMock( + status_code=500, text=json.dumps({"refresh_token": "sdfgh"}) + ), ) - generate_xero_refresh_token(authorization_code='sdfgh') - except: - logger.info('Internal server error') + generate_xero_refresh_token(authorization_code="sdfgh") + except Exception: + logger.info("Internal server error") diff --git a/tests/test_workspaces/test_views.py b/tests/test_workspaces/test_views.py index e5c38c98..d07c0dd2 100644 --- a/tests/test_workspaces/test_views.py +++ b/tests/test_workspaces/test_views.py @@ -1,41 +1,45 @@ import json -from unittest import mock from datetime import datetime -from apps.mappings.models import TenantMapping -from fyle_accounting_mappings.models import Mapping -from fyle_xero_api import settings +from unittest import mock + from django.contrib.auth import get_user_model +from fyle_accounting_mappings.models import Mapping from fyle_rest_auth.utils import AuthUtils -from tests.helper import dict_compare_keys from xerosdk import exceptions as xero_exc -from fyle.platform import exceptions as fyle_exc -from apps.workspaces.models import Workspace, WorkspaceSchedule, WorkspaceGeneralSettings, XeroCredentials, LastExportDetail -from .fixtures import data -from ..test_xero.fixtures import data as xero_data -from ..test_fyle.fixtures import data as fyle_data + +from apps.mappings.models import TenantMapping +from apps.workspaces.models import LastExportDetail, Workspace, WorkspaceGeneralSettings, XeroCredentials +from fyle_xero_api import settings +from tests.helper import dict_compare_keys +from tests.test_fyle.fixtures import data as fyle_data +from tests.test_workspaces.fixtures import data +from tests.test_xero.fixtures import data as xero_data User = get_user_model() auth_utils = AuthUtils() def test_ready_view(api_client, test_connection): + url = "/api/workspaces/ready/" - url = '/api/workspaces/ready/' + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.get(url) assert response.status_code == 200 response = json.loads(response.content) - response['message'] == 'Ready' + response["message"] == "Ready" def test_get_workspace(api_client, test_connection): - url = '/api/workspaces/' + url = "/api/workspaces/" + + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - response = api_client.get(url) assert response.status_code == 200 @@ -46,45 +50,51 @@ def test_get_workspace(api_client, test_connection): def test_post_of_workspace(api_client, test_connection, mocker): workspace_id = 1 - url = '/api/workspaces/' + url = "/api/workspaces/" + + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - mocker.patch( - 'apps.workspaces.actions.get_fyle_admin', - return_value=fyle_data['get_my_profile'] + "apps.workspaces.actions.get_fyle_admin", + return_value=fyle_data["get_my_profile"], ) mocker.patch( - 'apps.workspaces.actions.get_cluster_domain', - return_value={ - 'cluster_domain': 'https://staging.fyle.tech/' - } + "apps.workspaces.actions.get_cluster_domain", + return_value={"cluster_domain": "https://staging.fyle.tech/"}, ) response = api_client.post(url) assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['workspace']) == [], 'workspaces api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["workspace"]) == [] + ), "workspaces api returns a diff in the keys" mocker.patch( - 'apps.workspaces.actions.get_fyle_admin', - return_value=fyle_data['get_exsisting_org'] + "apps.workspaces.actions.get_fyle_admin", + return_value=fyle_data["get_exsisting_org"], ) response = api_client.post(url) assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['workspace']) == [], 'workspaces api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["workspace"]) == [] + ), "workspaces api returns a diff in the keys" - url = '/api/workspaces/{}/'.format(workspace_id) + url = "/api/workspaces/{}/".format(workspace_id) response = api_client.patch(url) assert response.status_code == 200 response = json.loads(response.content) - assert dict_compare_keys(response, data['workspace']) == [], 'workspaces api returns a diff in the keys' + assert ( + dict_compare_keys(response, data["workspace"]) == [] + ), "workspaces api returns a diff in the keys" def test_connect_xero_view_post(mocker, api_client, test_connection): @@ -92,103 +102,92 @@ def test_connect_xero_view_post(mocker, api_client, test_connection): tenant_mapping = TenantMapping.objects.filter(workspace_id=workspace_id).first() mocker.patch( - 'apps.workspaces.actions.generate_xero_refresh_token', - return_value='asdfghjk' + "apps.workspaces.actions.generate_xero_refresh_token", return_value="asdfghjk" ) mocker.patch( - 'xerosdk.apis.Connections.get_all', - return_value=[{'tenantId': tenant_mapping.tenant_id, 'id': 'asdfghjkl'}] + "xerosdk.apis.Connections.get_all", + return_value=[{"tenantId": tenant_mapping.tenant_id, "id": "asdfghjkl"}], ) mocker.patch( - 'xerosdk.apis.Organisations.get_all', - return_value=xero_data['get_all_organisations'] + "xerosdk.apis.Organisations.get_all", + return_value=xero_data["get_all_organisations"], ) - code = 'asdfghj' - url = '/api/workspaces/{}/connect_xero/authorization_code/'.format(workspace_id) - - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + code = "asdfghj" + url = "/api/workspaces/{}/connect_xero/authorization_code/".format(workspace_id) - response = api_client.post( - url, - data={ - 'code': code - } + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) ) + + response = api_client.post(url, data={"code": code}) assert response.status_code == 200 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) xero_credentials.delete() - with mock.patch('apps.xero.utils.XeroConnector.get_organisations') as mock_call: - mock_call.side_effect = xero_exc.WrongParamsError(msg='Wrong/Expired Authorization code', response='Wrong/Expired Authorization code') + with mock.patch("apps.xero.utils.XeroConnector.get_organisations") as mock_call: + mock_call.side_effect = xero_exc.WrongParamsError( + msg="Wrong/Expired Authorization code", + response="Wrong/Expired Authorization code", + ) response = api_client.post( - url, - data={ - 'code': code, - 'redirect_uri': 'ffff.fff.fff' - } + url, data={"code": code, "redirect_uri": "ffff.fff.fff"} ) assert response.status_code == 200 def test_connect_xero_view_exceptions(api_client, test_connection): workspace_id = 1 - - code = 'qwertyu' - url = '/api/workspaces/{}/connect_xero/authorization_code/'.format(workspace_id) - - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - - with mock.patch('apps.workspaces.actions.generate_xero_refresh_token') as mock_call: - mock_call.side_effect = xero_exc.InvalidClientError(msg='Invalid client', response=json.dumps({'message': 'Invalid client'})) - - response = api_client.post( - url, - data={ - 'code': code - } + + code = "qwertyu" + url = "/api/workspaces/{}/connect_xero/authorization_code/".format(workspace_id) + + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) + + with mock.patch("apps.workspaces.actions.generate_xero_refresh_token") as mock_call: + mock_call.side_effect = xero_exc.InvalidClientError( + msg="Invalid client", response=json.dumps({"message": "Invalid client"}) ) + + response = api_client.post(url, data={"code": code}) assert response.status_code == 400 - mock_call.side_effect = xero_exc.InvalidGrant(msg='invalid grant', response=json.dumps({'message': 'invalid grant'})) - - response = api_client.post( - url, - data={ - 'code': code - } + mock_call.side_effect = xero_exc.InvalidGrant( + msg="invalid grant", response=json.dumps({"message": "invalid grant"}) ) + + response = api_client.post(url, data={"code": code}) assert response.status_code == 400 - mock_call.side_effect = xero_exc.InvalidTokenError(msg='Invalid token', response='Invalid token') - - response = api_client.post( - url, - data={ - 'code': code - } + mock_call.side_effect = xero_exc.InvalidTokenError( + msg="Invalid token", response="Invalid token" ) + + response = api_client.post(url, data={"code": code}) assert response.status_code == 400 - mock_call.side_effect = xero_exc.InternalServerError(msg='Wrong/Expired Authorization code', response='Wrong/Expired Authorization code') - - response = api_client.post( - url, - data={ - 'code': code - } + mock_call.side_effect = xero_exc.InternalServerError( + msg="Wrong/Expired Authorization code", + response="Wrong/Expired Authorization code", ) + + response = api_client.post(url, data={"code": code}) assert response.status_code == 500 + def test_connect_xero_view(api_client, test_connection): workspace_id = 1 - url = '/api/workspaces/{}/credentials/xero/'.format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) - + url = "/api/workspaces/{}/credentials/xero/".format(workspace_id) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) + response = api_client.get(url) assert response.status_code == 200 @@ -199,22 +198,21 @@ def test_connect_xero_view(api_client, test_connection): def test_revoke_xero_connection(mocker, api_client, test_connection): - mocker.patch( - 'xerosdk.apis.Connections.remove_connection', - return_value=None - ) + mocker.patch("xerosdk.apis.Connections.remove_connection", return_value=None) workspace_id = 1 workspace = Workspace.objects.filter(id=workspace_id).first() - workspace.onboarding_state = 'CONNECTION' + workspace.onboarding_state = "CONNECTION" workspace.save() - - url = '/api/workspaces/{}/connection/xero/revoke/'.format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + url = "/api/workspaces/{}/connection/xero/revoke/".format(workspace_id) + + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) tenant_mapping = TenantMapping.objects.get(workspace_id=workspace_id) - tenant_mapping.connection_id = 'sdfghjkl' + tenant_mapping.connection_id = "sdfghjkl" tenant_mapping.save() Mapping.objects.filter(workspace_id=workspace_id).delete() @@ -222,9 +220,12 @@ def test_revoke_xero_connection(mocker, api_client, test_connection): response = api_client.post(url) assert response.status_code == 200 - with mock.patch('xerosdk.apis.Connections.remove_connection') as mock_call: - mock_call.side_effect = xero_exc.InternalServerError(msg='Wrong/Expired Authorization code', response='Wrong/Expired Authorization code') - + with mock.patch("xerosdk.apis.Connections.remove_connection") as mock_call: + mock_call.side_effect = xero_exc.InternalServerError( + msg="Wrong/Expired Authorization code", + response="Wrong/Expired Authorization code", + ) + response = api_client.post(url) assert response.status_code == 200 @@ -232,11 +233,15 @@ def test_revoke_xero_connection(mocker, api_client, test_connection): def test_get_general_settings_detail(api_client, test_connection): workspace_id = 1 - url = '/api/workspaces/{}/settings/general/'.format(workspace_id) + url = "/api/workspaces/{}/settings/general/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) - workspace_general_setting = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + workspace_general_setting = WorkspaceGeneralSettings.objects.get( + workspace_id=workspace_id + ) workspace_general_setting.import_customers = True workspace_general_setting.save() @@ -245,7 +250,9 @@ def test_get_general_settings_detail(api_client, test_connection): response = json.loads(response.content) - assert dict_compare_keys(response, data['workspace_general_settings_payload']) == [], 'general_setting api returns a diff in keys' + assert ( + dict_compare_keys(response, data["workspace_general_settings_payload"]) == [] + ), "general_setting api returns a diff in keys" workspace_general_setting.delete() @@ -254,32 +261,30 @@ def test_get_general_settings_detail(api_client, test_connection): def test_xero_external_signup_view(mocker, api_client, test_connection): - mocker.patch( - 'apps.workspaces.views.generate_xero_identity', - return_value={} - ) - url = '/api/workspaces/external_signup/' - code = 'sdfghjk' + mocker.patch("apps.workspaces.views.generate_xero_identity", return_value={}) + url = "/api/workspaces/external_signup/" + code = "sdfghjk" - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) response = api_client.post( - url, - data = { - 'code': code, - 'redirect_uri': settings.XERO_REDIRECT_URI - }) + url, data={"code": code, "redirect_uri": settings.XERO_REDIRECT_URI} + ) assert response.status_code == 200 def test_export_to_xero(mocker, api_client, test_connection): workspace_id = 1 - url = '/api/workspaces/{}/exports/trigger/'.format(workspace_id) + url = "/api/workspaces/{}/exports/trigger/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) - last_export_detail = LastExportDetail.objects.create(workspace_id=workspace_id) + LastExportDetail.objects.create(workspace_id=workspace_id) response = api_client.post(url) assert response.status_code == 200 @@ -288,9 +293,11 @@ def test_export_to_xero(mocker, api_client, test_connection): def test_last_export_detail(mocker, api_client, test_connection): workspace_id = 1 - url = '/api/workspaces/{}/export_detail/'.format(workspace_id) + url = "/api/workspaces/{}/export_detail/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) response = api_client.get(url) assert response.status_code == 404 @@ -307,9 +314,11 @@ def test_last_export_detail(mocker, api_client, test_connection): def test_get_admin_of_workspaces(api_client, test_connection): workspace_id = 1 - url = '/api/workspaces/{}/admins/'.format(workspace_id) + url = "/api/workspaces/{}/admins/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(test_connection.access_token)) + api_client.credentials( + HTTP_AUTHORIZATION="Bearer {}".format(test_connection.access_token) + ) response = api_client.get(url) assert response.status_code == 200 diff --git a/tests/test_xero/conftest.py b/tests/test_xero/conftest.py index 058cd4ac..fbbd2c8a 100644 --- a/tests/test_xero/conftest.py +++ b/tests/test_xero/conftest.py @@ -1,8 +1,9 @@ import pytest -from apps.fyle.models import Expense, ExpenseGroup -from apps.workspaces.models import WorkspaceGeneralSettings -from apps.xero.models import Bill, BillLineItem, BankTransaction, BankTransactionLineItem, Payment + +from apps.fyle.models import ExpenseGroup from apps.tasks.models import TaskLog +from apps.workspaces.models import WorkspaceGeneralSettings +from apps.xero.models import BankTransaction, BankTransactionLineItem, Bill, BillLineItem @pytest.fixture @@ -10,9 +11,13 @@ def create_bill(db): workspace_id = 1 expense_group = ExpenseGroup.objects.get(id=4) - workspace_general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + workspace_general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=workspace_id + ) bill = Bill.create_bill(expense_group) - bill_lineitems = BillLineItem.create_bill_lineitems(expense_group, workspace_general_settings) + bill_lineitems = BillLineItem.create_bill_lineitems( + expense_group, workspace_general_settings + ) return bill, bill_lineitems @@ -22,19 +27,21 @@ def create_bank_transaction(db): workspace_id = 1 expense_group = ExpenseGroup.objects.get(id=5) - workspace_general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + workspace_general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=workspace_id + ) bank_transaction = BankTransaction.create_bank_transaction(expense_group, True) - bank_transaction_lineitems = BankTransactionLineItem.create_bank_transaction_lineitems(expense_group, workspace_general_settings) + bank_transaction_lineitems = ( + BankTransactionLineItem.create_bank_transaction_lineitems( + expense_group, workspace_general_settings + ) + ) - return bank_transaction,bank_transaction_lineitems + return bank_transaction, bank_transaction_lineitems @pytest.fixture def create_task_logs(db): TaskLog.objects.update_or_create( - workspace_id=1, - type='FETCHING_EXPENSES', - defaults={ - 'status': 'READY' - } + workspace_id=1, type="FETCHING_EXPENSES", defaults={"status": "READY"} ) diff --git a/tests/test_xero/fixtures.py b/tests/test_xero/fixtures.py index d8981135..71cf8e1c 100644 --- a/tests/test_xero/fixtures.py +++ b/tests/test_xero/fixtures.py @@ -1,276 +1,224 @@ data = { - 'bill_payload': { - 'VendorRef': { - 'value': '43' - }, - 'APAccountRef': { - 'value': '33' - }, - 'DepartmentRef': { - 'value': 'None' - }, - 'TxnDate': '2022-01-21', - 'CurrencyRef': { - 'value': 'USD' - }, - 'PrivateNote': 'Reimbursable expense by ashwin.t@fyle.in on 2022-01-21 ', - 'Line': [ - { - 'Description': 'ashwin.t@fyle.in - Travel - 2022-01-21 - C/2022/01/R/8 - - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txlPjmNxssq1?org_id=orGcBCVPijjO', - 'DetailType': 'AccountBasedExpenseLineDetail', - 'Amount': 60.0, - 'AccountBasedExpenseLineDetail': { - 'AccountRef': { - 'value': '57' - }, - 'CustomerRef': { - 'value': 'None' - }, - 'ClassRef': { - 'value': 'None' - }, - 'TaxCodeRef': { - 'value': 'None' - }, - 'TaxAmount': 0.0, - 'BillableStatus': 'NotBillable' - } + "bill_payload": { + "VendorRef": {"value": "43"}, + "APAccountRef": {"value": "33"}, + "DepartmentRef": {"value": "None"}, + "TxnDate": "2022-01-21", + "CurrencyRef": {"value": "USD"}, + "PrivateNote": "Reimbursable expense by ashwin.t@fyle.in on 2022-01-21 ", + "Line": [ + { + "Description": "ashwin.t@fyle.in - Travel - 2022-01-21 - C/2022/01/R/8 - - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txlPjmNxssq1?org_id=orGcBCVPijjO", + "DetailType": "AccountBasedExpenseLineDetail", + "Amount": 60.0, + "AccountBasedExpenseLineDetail": { + "AccountRef": {"value": "57"}, + "CustomerRef": {"value": "None"}, + "ClassRef": {"value": "None"}, + "TaxCodeRef": {"value": "None"}, + "TaxAmount": 0.0, + "BillableStatus": "NotBillable", + }, } - ] + ], }, - 'bank_transaction_payload': { - 'DocNumber': 'E/2022/01/T/9', - 'PaymentType': 'CreditCard', - 'AccountRef': { - 'value': '42' - }, - 'EntityRef': { - 'value': '58' - }, - 'DepartmentRef': { - 'value': 'None' - }, - 'TxnDate': '2022-01-21', - 'CurrencyRef': { - 'value': 'USD' + "bank_transaction_payload": { + "DocNumber": "E/2022/01/T/9", + "PaymentType": "CreditCard", + "AccountRef": {"value": "42"}, + "EntityRef": {"value": "58"}, + "DepartmentRef": {"value": "None"}, + "TxnDate": "2022-01-21", + "CurrencyRef": {"value": "USD"}, + "PrivateNote": "Credit card expense by ashwin.t@fyle.in on 2022-01-21 ", + "Credit": False, + "Line": [ + { + "Description": "ashwin.t@fyle.in - Travel - 2022-01-21 - C/2022/01/R/8 - - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txvh8qm7RTRI?org_id=orGcBCVPijjO", + "DetailType": "AccountBasedExpenseLineDetail", + "Amount": 30.0, + "AccountBasedExpenseLineDetail": { + "AccountRef": {"value": "57"}, + "CustomerRef": {"value": "None"}, + "ClassRef": {"value": "None"}, + "TaxCodeRef": {"value": "None"}, + "TaxAmount": 0.0, + "BillableStatus": "NotBillable", + }, + } + ], + }, + "bill_response": { + "DueDate": "2020-01-14", + "Balance": 1000.0, + "domain": "QBO", + "sparse": False, + "Id": "146", + "SyncToken": "0", + "MetaData": { + "CreateTime": "2020-01-14T02:18:29-08:00", + "LastUpdatedTime": "2020-01-14T02:18:29-08:00", }, - 'PrivateNote': 'Credit card expense by ashwin.t@fyle.in on 2022-01-21 ', - 'Credit': False, - 'Line': [ - { - 'Description': 'ashwin.t@fyle.in - Travel - 2022-01-21 - C/2022/01/R/8 - - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txvh8qm7RTRI?org_id=orGcBCVPijjO', - 'DetailType': 'AccountBasedExpenseLineDetail', - 'Amount': 30.0, - 'AccountBasedExpenseLineDetail': { - 'AccountRef': { - 'value': '57' + "DocNumber": "rphZKTDmSLU2", + "TxnDate": "2020-01-14", + "CurrencyRef": {"value": "USD", "name": "United States Dollar"}, + "PrivateNote": "Report None / rphZKTDmSLU2 approved on 2020-01-14", + "Line": [ + { + "Id": "1", + "LineNum": 1, + "Description": "Testing", + "Amount": 1000.0, + "DetailType": "AccountBasedExpenseLineDetail", + "AccountBasedExpenseLineDetail": { + "AccountRef": {"value": "2", "name": "Retained Earnings"}, + "BillableStatus": "NotBillable", + "TaxCodeRef": {"value": "NON"}, + }, + } + ], + "VendorRef": {"value": "56", "name": "Gokul"}, + "APAccountRef": {"value": "33", "name": "Accounts Payable (A/P)"}, + "TotalAmt": 1000.0, + }, + "create_contact": { + "Contacts": [ + { + "ContactID": "79c88297-27fb-4f6f-87a8-fe27017031c6", + "ContactStatus": "ACTIVE", + "Name": "sample", + "FirstName": "sample", + "LastName": "", + "EmailAddress": "sample@fyle.in", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", }, - 'CustomerRef': { - 'value': 'None' + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", }, - 'ClassRef': { - 'value': 'None' + ], + "Phones": [ + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", }, - 'TaxCodeRef': { - 'value': 'None' + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", }, - 'TaxAmount': 0.0, - 'BillableStatus': 'NotBillable' - } - } - ] - }, - 'bill_response': { - 'DueDate': '2020-01-14', - 'Balance': 1000.0, - 'domain': 'QBO', - 'sparse': False, - 'Id': '146', - 'SyncToken': '0', - 'MetaData': { - 'CreateTime': '2020-01-14T02:18:29-08:00', - 'LastUpdatedTime': '2020-01-14T02:18:29-08:00' - }, - 'DocNumber': 'rphZKTDmSLU2', - 'TxnDate': '2020-01-14', - 'CurrencyRef': { - 'value': 'USD', - 'name': 'United States Dollar' - }, - 'PrivateNote': 'Report None / rphZKTDmSLU2 approved on 2020-01-14', - 'Line': [ - { - 'Id': '1', - 'LineNum': 1, - 'Description': 'Testing', - 'Amount': 1000.0, - 'DetailType': 'AccountBasedExpenseLineDetail', - 'AccountBasedExpenseLineDetail': { - 'AccountRef': { - 'value': '2', - 'name': 'Retained Earnings' + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", }, - 'BillableStatus': 'NotBillable', - 'TaxCodeRef': { - 'value': 'NON' - } - } + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1660754701320+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "SalesTrackingCategories": [], + "PurchasesTrackingCategories": [], + "ContactPersons": [], + "HasValidationErrors": False, } - ], - 'VendorRef': { - 'value': '56', - 'name': 'Gokul' - }, - 'APAccountRef': { - 'value': '33', - 'name': 'Accounts Payable (A/P)' - }, - 'TotalAmt': 1000.0 - }, - 'create_contact': { - 'Contacts': [{ - 'ContactID': '79c88297-27fb-4f6f-87a8-fe27017031c6', - 'ContactStatus': 'ACTIVE', - 'Name': 'sample', - 'FirstName': 'sample', - 'LastName': '', - 'EmailAddress': 'sample@fyle.in', - 'BankAccountDetails': '', - 'Addresses': [ - { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '' - }, - { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '' - } - ], - 'Phones': [ - { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '' - }, - { - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '' - }, - { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '' - }, - { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '' - } - ], - 'UpdatedDateUTC': '/Date(1660754701320+0000)/', - 'ContactGroups': [ - - ], - 'IsSupplier':False, - 'IsCustomer':False, - 'SalesTrackingCategories':[ - - ], - 'PurchasesTrackingCategories':[ - - ], - 'ContactPersons':[ - - ], - 'HasValidationErrors':False - }] + ] }, - 'reimbursements': [ + "reimbursements": [ { - 'amount': 76, - 'code': None, - 'created_at': '2022-01-20T16:30:44.584100', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'id': 'reimgCW1Og0BcM', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orsO0VW86WLQ', - 'paid_at': None, - 'purpose': 'C/2022/01/R/2;Ashwin', - 'reimbursement_number': 'P/2022/01/R/2', - 'settlement_id': 'setrunCck8hLH', - 'updated_at': '2022-01-20T16:30:44.584100', - 'user_id': 'usqywo0f3nBY', + "amount": 76, + "code": None, + "created_at": "2022-01-20T16:30:44.584100", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "id": "reimgCW1Og0BcM", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orsO0VW86WLQ", + "paid_at": None, + "purpose": "C/2022/01/R/2;Ashwin", + "reimbursement_number": "P/2022/01/R/2", + "settlement_id": "setrunCck8hLH", + "updated_at": "2022-01-20T16:30:44.584100", + "user_id": "usqywo0f3nBY", }, { - 'amount': 76, - 'code': None, - 'created_at': '2022-01-20T16:30:44.584100', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'id': 'reimgCW1Og0BcM', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orsO0VW86WLQ', - 'paid_at': None, - 'purpose': 'C/2022/01/R/2;Ashwin', - 'reimbursement_number': 'P/2022/01/R/3', - 'settlement_id': 'setrunCck8hLH', - 'updated_at': '2022-01-20T16:30:44.584100', - 'user_id': 'usqywo0f3nBY', + "amount": 76, + "code": None, + "created_at": "2022-01-20T16:30:44.584100", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "id": "reimgCW1Og0BcM", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orsO0VW86WLQ", + "paid_at": None, + "purpose": "C/2022/01/R/2;Ashwin", + "reimbursement_number": "P/2022/01/R/3", + "settlement_id": "setrunCck8hLH", + "updated_at": "2022-01-20T16:30:44.584100", + "user_id": "usqywo0f3nBY", }, { - 'amount': 76, - 'code': None, - 'created_at': '2022-01-20T16:30:44.584100', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'id': 'reimgCW1Og0BcM', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orsO0VW86WLQ', - 'paid_at': None, - 'purpose': 'C/2022/01/R/2;Ashwin', - 'reimbursement_number': 'P/2022/01/R/4', - 'settlement_id': 'setlpIUKpdvsT', - 'updated_at': '2022-01-20T16:30:44.584100', - 'user_id': 'usqywo0f3nBY', + "amount": 76, + "code": None, + "created_at": "2022-01-20T16:30:44.584100", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "id": "reimgCW1Og0BcM", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orsO0VW86WLQ", + "paid_at": None, + "purpose": "C/2022/01/R/2;Ashwin", + "reimbursement_number": "P/2022/01/R/4", + "settlement_id": "setlpIUKpdvsT", + "updated_at": "2022-01-20T16:30:44.584100", + "user_id": "usqywo0f3nBY", }, { - 'amount': 76, - 'code': None, - 'created_at': '2022-01-20T16:30:44.584100', - 'creator_user_id': 'usqywo0f3nBY', - 'currency': 'USD', - 'id': 'reimgCW1Og0BcM', - 'is_exported': False, - 'is_paid': False, - 'mode': 'OFFLINE', - 'org_id': 'orsO0VW86WLQ', - 'paid_at': None, - 'purpose': 'C/2022/01/R/2;Ashwin', - 'reimbursement_number': 'P/2022/01/R/5', - 'settlement_id': 'set33iAVXO7BA', - 'updated_at': '2022-01-20T16:30:44.584100', - 'user_id': 'usqywo0f3nBY', + "amount": 76, + "code": None, + "created_at": "2022-01-20T16:30:44.584100", + "creator_user_id": "usqywo0f3nBY", + "currency": "USD", + "id": "reimgCW1Og0BcM", + "is_exported": False, + "is_paid": False, + "mode": "OFFLINE", + "org_id": "orsO0VW86WLQ", + "paid_at": None, + "purpose": "C/2022/01/R/2;Ashwin", + "reimbursement_number": "P/2022/01/R/5", + "settlement_id": "set33iAVXO7BA", + "updated_at": "2022-01-20T16:30:44.584100", + "user_id": "usqywo0f3nBY", }, ], - 'bill_object': { + "bill_object": { "Id": "21a31ed7-0a35-44d4-b4a1-64c0fdc65a1a", "Status": "OK", "ProviderName": "Fyle Staging", @@ -281,23 +229,17 @@ "InvoiceID": "c35cf4b3-784a-408b-9ddf-df111dd2e073", "InvoiceNumber": "", "Reference": "2 - ashwin.t@fyle.in", - "Prepayments": [ - - ], - "Overpayments":[ - - ], - "AmountDue":5.0, - "AmountPaid":0.0, - "SentToContact":False, - "CurrencyRate":1.0, - "IsDiscounted":False, - "HasAttachments":False, - "HasErrors":False, - "Attachments":[ - - ], - "Contact":{ + "Prepayments": [], + "Overpayments": [], + "AmountDue": 5.0, + "AmountPaid": 0.0, + "SentToContact": False, + "CurrencyRate": 1.0, + "IsDiscounted": False, + "HasAttachments": False, + "HasErrors": False, + "Attachments": [], + "Contact": { "ContactID": "9eecdd86-78bb-47c9-95df-986369748151", "ContactStatus": "ACTIVE", "Name": "Joanna", @@ -311,66 +253,58 @@ "City": "", "Region": "", "PostalCode": "", - "Country": "" + "Country": "", }, { "AddressType": "POBOX", "City": "", "Region": "", "PostalCode": "", - "Country": "" - } + "Country": "", + }, ], "Phones": [ { "PhoneType": "DEFAULT", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" + "PhoneCountryCode": "", }, { "PhoneType": "DDI", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" + "PhoneCountryCode": "", }, { "PhoneType": "FAX", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" + "PhoneCountryCode": "", }, { "PhoneType": "MOBILE", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" - } + "PhoneCountryCode": "", + }, ], "UpdatedDateUTC": "/Date(1659085778640+0000)/", - "ContactGroups": [ - - ], - "IsSupplier":True, - "IsCustomer":False, - "SalesTrackingCategories":[ - - ], - "PurchasesTrackingCategories":[ - - ], - "ContactPersons":[ - - ], - "HasValidationErrors":False + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "SalesTrackingCategories": [], + "PurchasesTrackingCategories": [], + "ContactPersons": [], + "HasValidationErrors": False, }, - "DateString":"2022-08-02T00:00:00", - "Date":"/Date(1659398400000+0000)/", - "DueDateString":"2022-08-16T00:00:00", - "DueDate":"/Date(1660608000000+0000)/", - "Status":"PAID", - "LineAmountTypes":"Exclusive", - "LineItems":[ + "DateString": "2022-08-02T00:00:00", + "Date": "/Date(1659398400000+0000)/", + "DueDateString": "2022-08-16T00:00:00", + "DueDate": "/Date(1660608000000+0000)/", + "Status": "PAID", + "LineAmountTypes": "Exclusive", + "LineItems": [ { "Description": "ashwin.t@fyle.in, category - Food spent on 2020-05-25, report number - C/2022/05/R/16 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txUDvDmEV4ep?org_id=orPJvXuoLqvJ", "UnitAmount": 4.62, @@ -378,25 +312,21 @@ "TaxAmount": 0.38, "LineAmount": 4.62, "AccountCode": "429", - "Tracking": [ - - ], - "Quantity":1.0, - "LineItemID":"51cca2e7-5bef-452c-83fb-2ca8c0865f37", - "ValidationErrors":[ - - ] + "Tracking": [], + "Quantity": 1.0, + "LineItemID": "51cca2e7-5bef-452c-83fb-2ca8c0865f37", + "ValidationErrors": [], } ], - "SubTotal":4.62, - "TotalTax":0.38, - "Total":5.0, - "UpdatedDateUTC":"/Date(1659472064663+0000)/", - "CurrencyCode":"USD" + "SubTotal": 4.62, + "TotalTax": 0.38, + "Total": 5.0, + "UpdatedDateUTC": "/Date(1659472064663+0000)/", + "CurrencyCode": "USD", } - ] + ], }, - 'bank_transaction_object': { + "bank_transaction_object": { "Id": "c22e17e3-3c85-4026-97d4-ea721bb6c232", "Status": "OK", "ProviderName": "Fyle Staging", @@ -407,7 +337,7 @@ "BankAccount": { "AccountID": "562555f2-8cde-4ce9-8203-0363922537a4", "Code": "090", - "Name": "Business Bank Account" + "Name": "Business Bank Account", }, "Type": "SPEND", "Reference": "521254 - sravan.kumar@fyle.in", @@ -427,56 +357,52 @@ "City": "", "Region": "", "PostalCode": "", - "Country": "" + "Country": "", }, { "AddressType": "POBOX", "City": "", "Region": "", "PostalCode": "", - "Country": "" - } + "Country": "", + }, ], "Phones": [ { "PhoneType": "DEFAULT", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" + "PhoneCountryCode": "", }, { "PhoneType": "DDI", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" + "PhoneCountryCode": "", }, { "PhoneType": "FAX", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" + "PhoneCountryCode": "", }, { "PhoneType": "MOBILE", "PhoneNumber": "", "PhoneAreaCode": "", - "PhoneCountryCode": "" - } + "PhoneCountryCode": "", + }, ], "UpdatedDateUTC": "/Date(1659470543540+0000)/", - "ContactGroups": [ - - ], - "ContactPersons":[ - - ], - "HasValidationErrors":False + "ContactGroups": [], + "ContactPersons": [], + "HasValidationErrors": False, }, - "DateString":"2022-05-24T00:00:00", - "Date":"/Date(1653350400000+0000)/", - "Status":"AUTHORISED", - "LineAmountTypes":"Exclusive", - "LineItems":[ + "DateString": "2022-05-24T00:00:00", + "Date": "/Date(1653350400000+0000)/", + "Status": "AUTHORISED", + "LineAmountTypes": "Exclusive", + "LineItems": [ { "Description": "sravan.kumar@fyle.in, category - WIP spent on 2022-05-24, report number - C/2022/05/R/12 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txkw3dt3umkN?org_id=orPJvXuoLqvJ", "UnitAmount": 93.3, @@ -484,370 +410,428 @@ "TaxAmount": 7.7, "LineAmount": 93.3, "AccountCode": "429", - "Tracking": [ - - ], - "Quantity":1.0, - "LineItemID":"088e4457-05f3-432d-91d0-a599ebd0a284", - "AccountID":"4281c446-efb4-445d-b32d-c441a4ef5678", - "ValidationErrors":[ - - ] + "Tracking": [], + "Quantity": 1.0, + "LineItemID": "088e4457-05f3-432d-91d0-a599ebd0a284", + "AccountID": "4281c446-efb4-445d-b32d-c441a4ef5678", + "ValidationErrors": [], } ], - "SubTotal":93.3, - "TotalTax":7.7, - "Total":101.0, - "UpdatedDateUTC":"/Date(1661360170477+0000)/", - "CurrencyCode":"USD" + "SubTotal": 93.3, + "TotalTax": 7.7, + "Total": 101.0, + "UpdatedDateUTC": "/Date(1661360170477+0000)/", + "CurrencyCode": "USD", } - ] + ], }, - 'get_all_organisations': [ + "get_all_organisations": [ { - 'Addresses': [ + "Addresses": [ { - 'AddressLine1': '23 Main Street', - 'AddressLine2': 'Central City', - 'AddressType': 'POBOX', - 'AttentionTo': '', - 'City': 'Marineville', - 'Country': '', - 'PostalCode': '12345', - 'Region': '' + "AddressLine1": "23 Main Street", + "AddressLine2": "Central City", + "AddressType": "POBOX", + "AttentionTo": "", + "City": "Marineville", + "Country": "", + "PostalCode": "12345", + "Region": "", } ], - 'BaseCurrency': 'USD', - 'Class': 'DEMO', - 'CountryCode': 'CA', - 'CreatedDateUTC': '/Date(1661500186077)/', - 'DefaultPurchasesTax': 'Remember previous', - 'DefaultSalesTax': 'Remember previous', - 'Edition': 'BUSINESS', - 'ExternalLinks': [], - 'FinancialYearEndDay': 31, - 'FinancialYearEndMonth': 12, - 'IsDemoCompany': True, - 'LegalName': 'Demo Company (Global)', - 'Name': 'Demo Company (Global)', - 'OrganisationEntityType': 'COMPANY', - 'OrganisationID': '25d7b4cd-ed1c-4c5c-80e5-c058b87db8a1', - 'OrganisationStatus': 'ACTIVE', - 'OrganisationType': 'COMPANY', - 'PaymentTerms': {}, - 'PaysTax': True, - 'PeriodLockDate': '/Date(1222732800000+0000)/', - 'Phones': [ + "BaseCurrency": "USD", + "Class": "DEMO", + "CountryCode": "CA", + "CreatedDateUTC": "/Date(1661500186077)/", + "DefaultPurchasesTax": "Remember previous", + "DefaultSalesTax": "Remember previous", + "Edition": "BUSINESS", + "ExternalLinks": [], + "FinancialYearEndDay": 31, + "FinancialYearEndMonth": 12, + "IsDemoCompany": True, + "LegalName": "Demo Company (Global)", + "Name": "Demo Company (Global)", + "OrganisationEntityType": "COMPANY", + "OrganisationID": "25d7b4cd-ed1c-4c5c-80e5-c058b87db8a1", + "OrganisationStatus": "ACTIVE", + "OrganisationType": "COMPANY", + "PaymentTerms": {}, + "PaysTax": True, + "PeriodLockDate": "/Date(1222732800000+0000)/", + "Phones": [ { - 'PhoneAreaCode': '800', - 'PhoneNumber': '1234 5678', - 'PhoneType': 'OFFICE' + "PhoneAreaCode": "800", + "PhoneNumber": "1234 5678", + "PhoneType": "OFFICE", } ], - 'SalesTaxBasis': 'ACCRUALS', - 'SalesTaxPeriod': '3MONTHLY', - 'ShortCode': '!FR6KJ', - 'TaxNumber': '101-2-303', - 'TaxNumberName': 'Tax reg', - 'Timezone': 'EASTERNSTANDARDTIME', - 'Version': 'GLOBAL' + "SalesTaxBasis": "ACCRUALS", + "SalesTaxPeriod": "3MONTHLY", + "ShortCode": "!FR6KJ", + "TaxNumber": "101-2-303", + "TaxNumberName": "Tax reg", + "Timezone": "EASTERNSTANDARDTIME", + "Version": "GLOBAL", } ], - 'get_all_tenants': [ + "get_all_tenants": [ { - 'authEventId': 'b71b3d1b-9f9f-4c9b-87f3-88ff776392a3', - 'createdDateUtc': '2022-08-26T07:51:30.7975760', - 'id': '182474d4-9413-49f0-b948-b83abd60304d', - 'tenantId': '25d7b4cd-ed1c-4c5c-80e5-c058b87db8a1', - 'tenantName': 'Demo Company (Global)', - 'tenantType': 'ORGANISATION', - 'updatedDateUtc': '2022-08-26T07:51:30.7992450' + "authEventId": "b71b3d1b-9f9f-4c9b-87f3-88ff776392a3", + "createdDateUtc": "2022-08-26T07:51:30.7975760", + "id": "182474d4-9413-49f0-b948-b83abd60304d", + "tenantId": "25d7b4cd-ed1c-4c5c-80e5-c058b87db8a1", + "tenantName": "Demo Company (Global)", + "tenantType": "ORGANISATION", + "updatedDateUtc": "2022-08-26T07:51:30.7992450", } ], - 'get_all_items': { - 'DateTimeUTC': '/Date(1661860123240)/', - 'Id': 'd6f7738a-dc51-4b45-9bfe-08acdc5dd6be', - 'Items': [ - { - 'Code': 'BOOK', - 'Description': "'Fish out of Water: Finding Your Brand", - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': '8bbaf73c-5a32-4458-addf-bd30a36c8551', - 'Name': 'Fish out of Water: Finding Your Brand', - 'PurchaseDescription': "'Fish out of Water: Finding Your Brand", - 'PurchaseDetails': {}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'TAX001', - 'UnitPrice': 19.95}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - { - 'Code': 'DevD', - 'Description': 'Development work - develper onsite per day', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': '6cba12ac-e300-4745-838a-f57dfdb88e11', - 'Name': 'Development work - developer onsite per day', - 'PurchaseDescription': 'Development work - develper onsite per day', - 'PurchaseDetails': {}, - 'SalesDetails': { - 'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 650.0 + "get_all_items": { + "DateTimeUTC": "/Date(1661860123240)/", + "Id": "d6f7738a-dc51-4b45-9bfe-08acdc5dd6be", + "Items": [ + { + "Code": "BOOK", + "Description": "'Fish out of Water: Finding Your Brand", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "8bbaf73c-5a32-4458-addf-bd30a36c8551", + "Name": "Fish out of Water: Finding Your Brand", + "PurchaseDescription": "'Fish out of Water: Finding Your Brand", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "TAX001", + "UnitPrice": 19.95, }, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/' - }, - { - 'Code': 'DevH', - 'Description': 'Development work - per hour rate', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': 'b36131d5-f37e-4cb1-bb9c-320446c7b004', - 'Name': 'Development work - per hour rate', - 'PurchaseDescription': 'Development work - per hour rate', - 'PurchaseDetails': {}, - 'SalesDetails': { - 'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 90.0 + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "DevD", + "Description": "Development work - develper onsite per day", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "6cba12ac-e300-4745-838a-f57dfdb88e11", + "Name": "Development work - developer onsite per day", + "PurchaseDescription": "Development work - develper onsite per day", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 650.0, }, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/' - }, - { - 'Code': 'GB1-White', - 'Description': 'Golf balls - white single. Please reorder with ' - 'code GB1-White', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': '3644c19f-7c46-4e18-93fa-5550c307bcdd', - 'Name': 'Golf balls - white single', - 'PurchaseDescription': 'Golf balls - white single. Wholesale ' - 'catalog item #020812-1', - 'PurchaseDetails': {'AccountCode': '300', - 'TaxType': 'INPUT', - 'UnitPrice': 4.2}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'TAX001', - 'UnitPrice': 5.6}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/' - }, - { - 'Code': 'GB3-White', - 'Description': 'Golf balls - white 3 pack. Please reorder with ' - 'code GB3-White', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': '53c1d46d-cf8e-45d2-8dc1-9bd73b0ca9e2', - 'Name': 'Golf balls - white 3-pack', - 'PurchaseDescription': 'Golf balls - white 3 pack. Wholesale ' - 'catalog item #020812-3', - 'PurchaseDetails': { - 'AccountCode': '300', - 'TaxType': 'INPUT', - 'UnitPrice': 12.0 + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "DevH", + "Description": "Development work - per hour rate", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "b36131d5-f37e-4cb1-bb9c-320446c7b004", + "Name": "Development work - per hour rate", + "PurchaseDescription": "Development work - per hour rate", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 90.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "GB1-White", + "Description": "Golf balls - white single. Please reorder with " + "code GB1-White", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "3644c19f-7c46-4e18-93fa-5550c307bcdd", + "Name": "Golf balls - white single", + "PurchaseDescription": "Golf balls - white single. Wholesale " + "catalog item #020812-1", + "PurchaseDetails": { + "AccountCode": "300", + "TaxType": "INPUT", + "UnitPrice": 4.2, + }, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "TAX001", + "UnitPrice": 5.6, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "GB3-White", + "Description": "Golf balls - white 3 pack. Please reorder with " + "code GB3-White", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "53c1d46d-cf8e-45d2-8dc1-9bd73b0ca9e2", + "Name": "Golf balls - white 3-pack", + "PurchaseDescription": "Golf balls - white 3 pack. Wholesale " + "catalog item #020812-3", + "PurchaseDetails": { + "AccountCode": "300", + "TaxType": "INPUT", + "UnitPrice": 12.0, }, - 'SalesDetails': { - 'AccountCode': '200', - 'TaxType': 'TAX001', - 'UnitPrice': 15.0 + "SalesDetails": { + "AccountCode": "200", + "TaxType": "TAX001", + "UnitPrice": 15.0, }, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/' + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "GB6-White", + "Description": "Golf balls - white 6 pack. Please reorder with " + "code GB6-White", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "9ce48e6a-118b-40a5-ae43-2e7dea8b18ad", + "Name": "Golf balls - white 6-pack", + "PurchaseDescription": "Golf balls - white 6 pack. Wholesale " + "catalog item #020812-6", + "PurchaseDetails": { + "AccountCode": "300", + "TaxType": "INPUT", + "UnitPrice": 20.0, + }, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "TAX001", + "UnitPrice": 24.99, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "GB9-White", + "Description": "Golf balls - white - 9 pack. Please reorder with " + "code GB9-White", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "baaba2cb-9abf-4bd4-af24-9429a7e79cec", + "Name": "Golf balls - white 9 pack", + "PurchaseDescription": "Golf balls - white 9 pack. Wholesale " + "catalog item #020812-9", + "PurchaseDetails": { + "AccountCode": "300", + "TaxType": "INPUT", + "UnitPrice": 25.0, + }, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "TAX001", + "UnitPrice": 32.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "PMBr", + "Description": "Project management & implementation - branding " + "workshop with your team", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "ec4362af-a038-4984-ab93-1bba3b6bd402", + "Name": "Project management & implementation - branding", + "PurchaseDescription": "Project management & implementation - " + "branding workshop with your team", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 250.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "PMD", + "Description": "Project Management - onsite daily rate", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "ffb8b59d-17d8-4245-af16-cdf7a689dcb9", + "Name": "Project Management - onsite daily rate", + "PurchaseDescription": "Project Management - onsite daily rate", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 700.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "PMDD", + "Description": "Project management & implementation - 'due " + "diligence' stocktake of your project " + "scope/schedule/implementation plan/outcome " + "measures (hourly rate as agreed)", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "c8151f6e-09bd-43a4-8726-d9c9122d8200", + "Name": "Project management & implementation due diligence", + "PurchaseDescription": "Project management & implementation - 'due " + "diligence' stocktake of your project " + "scope/schedule/implementation plan/outcome " + "measures (hourly rate as agreed)", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 105.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "PMWe", + "Description": "Project management & implementation - website " + "revamp workshop with your team", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "3add2df0-f436-431e-a59b-0e76fb4d6720", + "Name": "Project management & implementation - website", + "PurchaseDescription": "Project management & implementation - " + "website revamp workshop with your team", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 300.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "Support-M", + "Description": "Desktop/network support via email & phone.\r\n" + "Per month fixed fee for minimum 20 hours/month.", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "e82eaa5c-3c5f-47ed-b2a9-7de266ab1eaf", + "Name": "Desktop/network support via email & phone", + "PurchaseDescription": "Desktop/network support via email & " + "phone.\r\n" + "Per month fixed fee for minimum 20 " + "hours/month.", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 500.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "Train-MS", + "Description": "Half day training - Microsoft Office", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": False, + "ItemID": "e5cc8904-5865-4846-ad0c-5d9b695b8af9", + "Name": "Half day training - Microsoft Office", + "PurchaseDescription": "Half day training - Microsoft Office", + "PurchaseDetails": {}, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 500.0, + }, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "TSL - Black", + "Description": "Company Branded T-Shirt Large Black. Check out " + "our website for other offers!", + "InventoryAssetAccountCode": "630", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": True, + "ItemID": "dc63985f-7e32-4669-b60b-8b550417ddbb", + "Name": "T-Shirt Large Black", + "PurchaseDescription": "Company Branded T-Shirt Large Black. " + "Order Code #2412", + "PurchaseDetails": { + "COGSAccountCode": "310", + "TaxType": "NONE", + "UnitPrice": 20.0, + }, + "QuantityOnHand": 5.0, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 40.0, + }, + "TotalCostPool": 100.0, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "TSM - Black", + "Description": "Company Branded T-Shirt Medium Black. Check out " + "our website for other offers!", + "InventoryAssetAccountCode": "630", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": True, + "ItemID": "56268ecd-d722-4f39-ac6b-1f34b639393a", + "Name": "T-Shirt Medium Black", + "PurchaseDescription": "Company Branded T-Shirt Medium Black. " + "Order code #2382", + "PurchaseDetails": { + "COGSAccountCode": "310", + "TaxType": "NONE", + "UnitPrice": 20.0, + }, + "QuantityOnHand": 4.0, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 40.0, + }, + "TotalCostPool": 80.0, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", + }, + { + "Code": "TSS - Black", + "Description": "Company Branded T-Shirt Small Black. Check out " + "our website for other offers!", + "InventoryAssetAccountCode": "630", + "IsPurchased": True, + "IsSold": True, + "IsTrackedAsInventory": True, + "ItemID": "d3687dce-a3c2-4d07-9364-0c540f73c4f8", + "Name": "T-Shirt Small Black", + "PurchaseDescription": "Company Branded T-Shirt Small Black. " + "Order code #2308", + "PurchaseDetails": { + "COGSAccountCode": "310", + "TaxType": "NONE", + "UnitPrice": 20.0, + }, + "QuantityOnHand": 7.0, + "SalesDetails": { + "AccountCode": "200", + "TaxType": "OUTPUT", + "UnitPrice": 40.0, + }, + "TotalCostPool": 140.0, + "UpdatedDateUTC": "/Date(1661500186603+0000)/", }, - {'Code': 'GB6-White', - 'Description': 'Golf balls - white 6 pack. Please reorder with ' - 'code GB6-White', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': '9ce48e6a-118b-40a5-ae43-2e7dea8b18ad', - 'Name': 'Golf balls - white 6-pack', - 'PurchaseDescription': 'Golf balls - white 6 pack. Wholesale ' - 'catalog item #020812-6', - 'PurchaseDetails': {'AccountCode': '300', - 'TaxType': 'INPUT', - 'UnitPrice': 20.0}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'TAX001', - 'UnitPrice': 24.99}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'GB9-White', - 'Description': 'Golf balls - white - 9 pack. Please reorder with ' - 'code GB9-White', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': 'baaba2cb-9abf-4bd4-af24-9429a7e79cec', - 'Name': 'Golf balls - white 9 pack', - 'PurchaseDescription': 'Golf balls - white 9 pack. Wholesale ' - 'catalog item #020812-9', - 'PurchaseDetails': {'AccountCode': '300', - 'TaxType': 'INPUT', - 'UnitPrice': 25.0}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'TAX001', - 'UnitPrice': 32.0}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'PMBr', - 'Description': 'Project management & implementation - branding ' - 'workshop with your team', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': 'ec4362af-a038-4984-ab93-1bba3b6bd402', - 'Name': 'Project management & implementation - branding', - 'PurchaseDescription': 'Project management & implementation - ' - 'branding workshop with your team', - 'PurchaseDetails': {}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 250.0}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'PMD', - 'Description': 'Project Management - onsite daily rate', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': 'ffb8b59d-17d8-4245-af16-cdf7a689dcb9', - 'Name': 'Project Management - onsite daily rate', - 'PurchaseDescription': 'Project Management - onsite daily rate', - 'PurchaseDetails': {}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 700.0}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'PMDD', - 'Description': "Project management & implementation - 'due " - "diligence' stocktake of your project " - 'scope/schedule/implementation plan/outcome ' - 'measures (hourly rate as agreed)', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': 'c8151f6e-09bd-43a4-8726-d9c9122d8200', - 'Name': 'Project management & implementation due diligence', - 'PurchaseDescription': "Project management & implementation - 'due " - "diligence' stocktake of your project " - 'scope/schedule/implementation plan/outcome ' - 'measures (hourly rate as agreed)', - 'PurchaseDetails': {}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 105.0}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'PMWe', - 'Description': 'Project management & implementation - website ' - 'revamp workshop with your team', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': '3add2df0-f436-431e-a59b-0e76fb4d6720', - 'Name': 'Project management & implementation - website', - 'PurchaseDescription': 'Project management & implementation - ' - 'website revamp workshop with your team', - 'PurchaseDetails': {}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 300.0}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'Support-M', - 'Description': 'Desktop/network support via email & phone.\r\n' - 'Per month fixed fee for minimum 20 hours/month.', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': 'e82eaa5c-3c5f-47ed-b2a9-7de266ab1eaf', - 'Name': 'Desktop/network support via email & phone', - 'PurchaseDescription': 'Desktop/network support via email & ' - 'phone.\r\n' - 'Per month fixed fee for minimum 20 ' - 'hours/month.', - 'PurchaseDetails': {}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 500.0}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'Train-MS', - 'Description': 'Half day training - Microsoft Office', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': False, - 'ItemID': 'e5cc8904-5865-4846-ad0c-5d9b695b8af9', - 'Name': 'Half day training - Microsoft Office', - 'PurchaseDescription': 'Half day training - Microsoft Office', - 'PurchaseDetails': {}, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 500.0}, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'TSL - Black', - 'Description': 'Company Branded T-Shirt Large Black. Check out ' - 'our website for other offers!', - 'InventoryAssetAccountCode': '630', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': True, - 'ItemID': 'dc63985f-7e32-4669-b60b-8b550417ddbb', - 'Name': 'T-Shirt Large Black', - 'PurchaseDescription': 'Company Branded T-Shirt Large Black. ' - 'Order Code #2412', - 'PurchaseDetails': {'COGSAccountCode': '310', - 'TaxType': 'NONE', - 'UnitPrice': 20.0}, - 'QuantityOnHand': 5.0, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 40.0}, - 'TotalCostPool': 100.0, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'TSM - Black', - 'Description': 'Company Branded T-Shirt Medium Black. Check out ' - 'our website for other offers!', - 'InventoryAssetAccountCode': '630', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': True, - 'ItemID': '56268ecd-d722-4f39-ac6b-1f34b639393a', - 'Name': 'T-Shirt Medium Black', - 'PurchaseDescription': 'Company Branded T-Shirt Medium Black. ' - 'Order code #2382', - 'PurchaseDetails': {'COGSAccountCode': '310', - 'TaxType': 'NONE', - 'UnitPrice': 20.0}, - 'QuantityOnHand': 4.0, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 40.0}, - 'TotalCostPool': 80.0, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}, - {'Code': 'TSS - Black', - 'Description': 'Company Branded T-Shirt Small Black. Check out ' - 'our website for other offers!', - 'InventoryAssetAccountCode': '630', - 'IsPurchased': True, - 'IsSold': True, - 'IsTrackedAsInventory': True, - 'ItemID': 'd3687dce-a3c2-4d07-9364-0c540f73c4f8', - 'Name': 'T-Shirt Small Black', - 'PurchaseDescription': 'Company Branded T-Shirt Small Black. ' - 'Order code #2308', - 'PurchaseDetails': {'COGSAccountCode': '310', - 'TaxType': 'NONE', - 'UnitPrice': 20.0}, - 'QuantityOnHand': 7.0, - 'SalesDetails': {'AccountCode': '200', - 'TaxType': 'OUTPUT', - 'UnitPrice': 40.0}, - 'TotalCostPool': 140.0, - 'UpdatedDateUTC': '/Date(1661500186603+0000)/'}], - 'ProviderName': 'Fyle Staging', - 'Status': 'OK' + ], + "ProviderName": "Fyle Staging", + "Status": "OK", }, - 'get_all_tracking_categories': { + "get_all_tracking_categories": { "Id": "407bf8cb-fb9d-40a3-9422-2a9f72721612", "Status": "OK", "ProviderName": "Fyle Staging", @@ -898,3740 +882,4158 @@ } ], }, - 'get_all_contacts': [{ - 'Id': '3c942359-8275-46f6-aa18-c94128225af5', - 'Status': 'OK', - 'ProviderName': 'Fyle Staging', - 'DateTimeUTC': '/Date(1661862933060)/', - 'Contacts': [ - { - 'ContactID': '77aaf092-24f0-487f-96d0-d91da6410718', - 'ContactNumber': 'b6c3de45d9616ad88eff87ffdc9d643e2d20457d3fa1bcdae9', - 'ContactStatus': 'ACTIVE', - 'Name': 'Harshitha P', - 'FirstName': 'Harshitha', - 'LastName': 'P', - 'EmailAddress': 'harshitha.p@fyle.in', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661500387533+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'bc6cecd7-5c56-4c33-8113-382f9f38fdfd', - 'ContactStatus': 'ACTIVE', - 'Name': 'Joanna', - 'FirstName': 'Joanna', - 'LastName': '', - 'EmailAddress': 'ashwin.t@fyle.in', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661500467900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 656.44, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'b407cdd3-4457-461c-95b3-8948377144ba', - 'ContactStatus': 'ACTIVE', - 'Name': 'Sravan K', - 'FirstName': 'Sravan', - 'LastName': 'K', - 'EmailAddress': 'sravan.kumar@fyle.in', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661500486667+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 30.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '02b6207e-9717-43c6-a65b-4769dee8bd2e', - 'ContactStatus': 'ACTIVE', - 'Name': 'Credit Card Misc', - 'FirstName': 'Credit', - 'LastName': 'Misc', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501151673+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '61aac66a-2f59-402c-a3f1-c69f476ae5d0', - 'ContactStatus': 'ACTIVE', - 'Name': 'AMAZON.COM', - 'FirstName': 'AMAZON.COM', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501156227+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '277d0803-c5d0-4e66-8a55-b1c51ffcb4ed', - 'ContactStatus': 'ACTIVE', - 'Name': 'Computers by Jenni', - 'FirstName': 'Computers', - 'LastName': 'Jenni', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501741310+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '7f237a62-751d-4b41-beeb-862ea74d1643', - 'ContactStatus': 'ACTIVE', - 'Name': 'sravan', - 'FirstName': 'sravan', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501746483+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'c4691220-8cab-47f5-9798-7048793e0139', - 'ContactStatus': 'ACTIVE', - 'Name': 'Ashwin', - 'FirstName': 'Ashwin', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501751707+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'f2b4e2ad-27af-42d9-ba3e-f5d22d90255c', - 'ContactStatus': 'ACTIVE', - 'Name': 'light', - 'FirstName': 'light', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501756820+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'c8982f1b-76df-4140-b2c6-5963829ec6dd', - 'ContactStatus': 'ACTIVE', - 'Name': 'Abhishek 2', - 'FirstName': 'Abhishek', - 'LastName': '2', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501769730+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '4a14d813-0b25-474d-a63e-3de9f6c4a17d', - 'ContactStatus': 'ACTIVE', - 'Name': 'Cigna Health Care', - 'FirstName': 'Cigna', - 'LastName': 'Care', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501781990+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '82cfe259-9a28-4880-81f1-0ec9f73ba8e3', - 'ContactStatus': 'ACTIVE', - 'Name': "Bob's Burger Joint", - 'FirstName': "Bob's", - 'LastName': 'Joint', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501804773+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'd18f57a5-8ace-40e0-9c01-b68b293d2196', - 'ContactStatus': 'ACTIVE', - 'Name': 'Books by Bessie', - 'FirstName': 'Books', - 'LastName': 'Bessie', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501822417+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '7f79f117-554a-4cb8-aa21-f79028331aac', - 'ContactStatus': 'ACTIVE', - 'Name': 'Brosnahan Insurance Agency', - 'FirstName': 'Brosnahan', - 'LastName': 'Agency', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501843797+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'b94cfdcd-f7f8-4c6f-9ece-0c0b63cad72c', - 'ContactStatus': 'ACTIVE', - 'Name': 'Cal Telephone', - 'FirstName': 'Cal', - 'LastName': 'Telephone', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501866060+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'a204720b-808e-48eb-8436-b16fae77c163', - 'ContactStatus': 'ACTIVE', - 'Name': 'Labhvam', - 'FirstName': 'Labhvam', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501871517+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '22680982-e1ff-4c44-9c98-b6b3b78d5c7d', - 'ContactStatus': 'ACTIVE', - 'Name': 'Abhishek ji', - 'FirstName': 'Abhishek', - 'LastName': 'ji', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661501876643+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '9a777d01-2bfb-4623-807d-129d3f077e21', - 'ContactStatus': 'ACTIVE', - 'Name': 'Coco Cafe', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '43d1337e-4360-4589-9a76-1d0538c4ce6f', - 'ContactStatus': 'ACTIVE', - 'Name': 'Ridgeway Bank', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'cb906ad4-b1d7-44bf-b25a-4862c7059a43', - 'ContactStatus': 'ACTIVE', - 'Name': 'Office Supplies Company', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'f41cbe7c-de57-4927-b8a0-49fb0151be77', - 'ContactStatus': 'ACTIVE', - 'Name': '7-Eleven', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'DefaultCurrency': 'USD', - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'be4cfc19-c55a-4f19-817b-4eee4ccf2c01', - 'ContactStatus': 'ACTIVE', - 'Name': 'Woolworths Market', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '406e9eba-9939-48de-a300-57853bb1a6a4', - 'ContactStatus': 'ACTIVE', - 'Name': 'Gable Print', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '940f1da6-6d14-46e5-a692-77de93732f96', - 'ContactStatus': 'ACTIVE', - 'Name': 'Orlena Greenville', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '733b5108-96cb-4d43-bc5b-7f37a2f77c26', - 'ContactStatus': 'ACTIVE', - 'Name': 'Dimples Warehouse', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'DefaultCurrency': 'USD', - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'd8ce2ea5-d312-4c34-9656-8554b8071a81', - 'ContactStatus': 'ACTIVE', - 'Name': 'Fulton Airport Parking', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'f5cb9bf0-7aa2-473e-8115-87863dee95f3', - 'ContactStatus': 'ACTIVE', - 'Name': 'Espresso 31', - 'FirstName': '', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '23241290', - 'PhoneAreaCode': '4', - 'PhoneCountryCode': '+64', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '2e68080d-b3bd-4051-b33c-9f031550b958', - 'ContactStatus': 'ACTIVE', - 'Name': '24 Locks', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'f6ecf9a4-ee5a-4e9c-b52b-bec4737e8623', - 'ContactStatus': 'ACTIVE', - 'Name': 'Epicenter Cafe', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'DefaultCurrency': 'USD', - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'b6c2d5e5-94f2-4df5-a7c2-f1de0bff034f', - 'ContactStatus': 'ACTIVE', - 'Name': 'Melrose Parking', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '16cf5671-54a8-4d4e-9a55-f2be8ec3dcf4', - 'ContactStatus': 'ACTIVE', - 'Name': 'Berry Brew', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '162c177a-3391-4742-890f-f3ebfe0df1f3', - 'ContactStatus': 'ACTIVE', - 'Name': 'Brunswick Petals', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021873+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'aacecb74-ef1e-44e0-ba52-0bc521639697', - 'ContactStatus': 'ACTIVE', - 'Name': 'PC Complete', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 2132.51, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'c01292e3-1a1a-4a70-b120-1218f8f71096', - 'ContactStatus': 'ACTIVE', - 'Name': 'Bayside Wholesale', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'DefaultCurrency': 'USD', - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 840.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '3f58af86-b4d9-4ac9-950c-2e4cdd94d5be', - 'ContactStatus': 'ACTIVE', - 'Name': 'SMART Agency', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 4500.0, - 'Overdue': 4500.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'cade9142-f5fe-4970-b39e-2f388b8740c0', - 'ContactStatus': 'ACTIVE', - 'Name': 'Central Copiers', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 163.56, - 'Overdue': 163.56}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '3b30a108-9156-4a42-a893-3bbbe7af1ef8', - 'ContactStatus': 'ACTIVE', - 'Name': 'Xero', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 31.39, - 'Overdue': 31.39}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'f4af0a9b-e710-4611-8618-4360944ce1f3', - 'ContactStatus': 'ACTIVE', - 'Name': 'Truxton Property Management', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '78b7299c-4f1f-46d2-acc3-44a46bd361b1', - 'ContactStatus': 'ACTIVE', - 'Name': 'Swanston Security', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 59.54, - 'Overdue': 59.54}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '537d4d64-2fc1-4521-89c3-489d20fae20d', - 'ContactStatus': 'ACTIVE', - 'Name': 'MCO Cleaning Services', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '4ad99fdf-a0cc-4aaa-a1a6-6a1549b9df40', - 'ContactStatus': 'ACTIVE', - 'Name': 'Carlton Functions', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'b553bc60-5fb9-4d5e-b604-71aaf657cd3d', - 'ContactStatus': 'ACTIVE', - 'Name': 'Net Connect', - 'FirstName': '', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '234567890123', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'BatchPayments': { - 'BankAccountNumber': '234567890123', - 'BankAccountName': 'Net Connect Holdings', - 'Details': 'DEMO-GL', - 'Code': '', - 'Reference': '', - }, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 54.13, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '39efa556-8dda-4c81-83d3-a631e59eb6d3', - 'ContactStatus': 'ACTIVE', - 'Name': 'ABC Furniture', - 'FirstName': 'Trish', - 'LastName': 'Rawlings', - 'EmailAddress': 'info@abfl.com', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '124578', - 'PhoneAreaCode': '800', - 'PhoneCountryCode': '1', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'DefaultCurrency': 'USD', - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'f93cd75c-9412-4a8c-91a3-b41fe751aa01', - 'ContactStatus': 'ACTIVE', - 'Name': 'Capital Cab Co', - 'FirstName': '', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '123456789012', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '235689', - 'PhoneAreaCode': '800', - 'PhoneCountryCode': '1', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'DefaultCurrency': 'USD', - 'BatchPayments': { - 'BankAccountNumber': '123456789012', - 'BankAccountName': 'Capital Cab Holdings', - 'Details': 'DEMO-GL', - 'Code': '', - 'Reference': '', + "get_all_contacts": [ + { + "Id": "3c942359-8275-46f6-aa18-c94128225af5", + "Status": "OK", + "ProviderName": "Fyle Staging", + "DateTimeUTC": "/Date(1661862933060)/", + "Contacts": [ + { + "ContactID": "77aaf092-24f0-487f-96d0-d91da6410718", + "ContactNumber": "b6c3de45d9616ad88eff87ffdc9d643e2d20457d3fa1bcdae9", + "ContactStatus": "ACTIVE", + "Name": "Harshitha P", + "FirstName": "Harshitha", + "LastName": "P", + "EmailAddress": "harshitha.p@fyle.in", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661500387533+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, }, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 242.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '1d80716b-427e-4cad-80c6-c4b3a18eb23d', - 'ContactStatus': 'ACTIVE', - 'Name': 'Hoyt Productions', - 'Addresses': [{'AddressType': 'STREET'}, - {'AddressType': 'POBOX'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '8f48b066-e047-459d-80dd-d495b36608d0', - 'ContactStatus': 'ACTIVE', - 'Name': 'PowerDirect', - 'FirstName': '', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '345678901234', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'BatchPayments': { - 'BankAccountNumber': '345678901234', - 'BankAccountName': 'PowerDirect Holdings', - 'Details': 'DEMO-GL', - 'Code': '', - 'Reference': '', + { + "ContactID": "bc6cecd7-5c56-4c33-8113-382f9f38fdfd", + "ContactStatus": "ACTIVE", + "Name": "Joanna", + "FirstName": "Joanna", + "LastName": "", + "EmailAddress": "ashwin.t@fyle.in", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661500467900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 656.44, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, }, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 108.6, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'ddd4ba65-9b7e-4adf-be7a-e91efbb6c082', - 'ContactStatus': 'ACTIVE', - 'Name': 'Gateway Motors', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021900+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'fd89489e-699c-4d77-a881-10c127bfbeb3', - 'ContactStatus': 'ACTIVE', - 'Name': 'Hamilton Smith Ltd', - 'EmailAddress': 'info@hsg.co', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'AddressLine1': '3 Park Street Industrial Village\n', - 'AddressLine2': '', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Oaktown', - 'Region': '', - 'PostalCode': '1234', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '2345678', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '65a44264-dea0-481a-b49d-18a334a72334', - 'ContactStatus': 'ACTIVE', - 'Name': 'Ridgeway University', - 'FirstName': '', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '8005001', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '7775001', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'DefaultCurrency': 'USD', - 'Balances': {'AccountsReceivable': {'Outstanding': 6187.5, - 'Overdue': 6187.5}, - 'AccountsPayable': {'Outstanding': 0.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '37918a06-92f6-4edb-bfe0-1fc041c90f8b', - 'ContactStatus': 'ACTIVE', - 'Name': 'Boom FM', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'b68deed5-49c8-416a-9f35-2ab14bb1fb6b', - 'ContactStatus': 'ACTIVE', - 'Name': 'Bayside Club', - 'FirstName': 'Bob', - 'LastName': 'Partridge', - 'EmailAddress': 'secretarybob@bsclub.co', - 'SkypeUserName': 'bayside577', - 'BankAccountDetails': '98091-80345', - 'TaxNumber': '90 9877899', - 'AccountsReceivableTaxType': 'OUTPUT', - 'AccountsPayableTaxType': 'INPUT', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'AddressLine1': 'P O Box 3354', - 'AddressLine2': 'South Mailing Centre', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Ridge Heights', - 'Region': 'Madeupville', - 'PostalCode': 'MA 60010', - 'Country': 'USA', - 'AttentionTo': 'Club Secretary', - }, { - 'AddressType': 'STREET', - 'AddressLine1': '148 Bay Harbour Road', - 'AddressLine2': '', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Ridge Heights', - 'Region': 'Madeupville', - 'PostalCode': 'MA 60010', - 'Country': 'USA', - 'AttentionTo': 'Club Secretary', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '2024418', - 'PhoneAreaCode': '202', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '2024455', - 'PhoneAreaCode': '202', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '2025566', - 'PhoneAreaCode': '202', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '7774455', - 'PhoneAreaCode': '202', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': True, - 'DefaultCurrency': 'USD', - 'BrandingTheme': {'BrandingThemeID': 'd613f7f9-8fcb-477f-97f0-31eb85b7e5cf', 'Name': 'Standard'}, - 'BatchPayments': { - 'BankAccountNumber': '98091-80345', - 'BankAccountName': 'RBC', - 'Details': 'OCI', - 'Code': '', - 'Reference': '', + { + "ContactID": "b407cdd3-4457-461c-95b3-8948377144ba", + "ContactStatus": "ACTIVE", + "Name": "Sravan K", + "FirstName": "Sravan", + "LastName": "K", + "EmailAddress": "sravan.kumar@fyle.in", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661500486667+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 30.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "02b6207e-9717-43c6-a65b-4769dee8bd2e", + "ContactStatus": "ACTIVE", + "Name": "Credit Card Misc", + "FirstName": "Credit", + "LastName": "Misc", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501151673+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "61aac66a-2f59-402c-a3f1-c69f476ae5d0", + "ContactStatus": "ACTIVE", + "Name": "AMAZON.COM", + "FirstName": "AMAZON.COM", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501156227+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "277d0803-c5d0-4e66-8a55-b1c51ffcb4ed", + "ContactStatus": "ACTIVE", + "Name": "Computers by Jenni", + "FirstName": "Computers", + "LastName": "Jenni", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501741310+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "7f237a62-751d-4b41-beeb-862ea74d1643", + "ContactStatus": "ACTIVE", + "Name": "sravan", + "FirstName": "sravan", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501746483+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "c4691220-8cab-47f5-9798-7048793e0139", + "ContactStatus": "ACTIVE", + "Name": "Ashwin", + "FirstName": "Ashwin", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501751707+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "f2b4e2ad-27af-42d9-ba3e-f5d22d90255c", + "ContactStatus": "ACTIVE", + "Name": "light", + "FirstName": "light", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501756820+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "c8982f1b-76df-4140-b2c6-5963829ec6dd", + "ContactStatus": "ACTIVE", + "Name": "Abhishek 2", + "FirstName": "Abhishek", + "LastName": "2", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501769730+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "4a14d813-0b25-474d-a63e-3de9f6c4a17d", + "ContactStatus": "ACTIVE", + "Name": "Cigna Health Care", + "FirstName": "Cigna", + "LastName": "Care", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501781990+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "82cfe259-9a28-4880-81f1-0ec9f73ba8e3", + "ContactStatus": "ACTIVE", + "Name": "Bob's Burger Joint", + "FirstName": "Bob's", + "LastName": "Joint", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501804773+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "d18f57a5-8ace-40e0-9c01-b68b293d2196", + "ContactStatus": "ACTIVE", + "Name": "Books by Bessie", + "FirstName": "Books", + "LastName": "Bessie", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501822417+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "7f79f117-554a-4cb8-aa21-f79028331aac", + "ContactStatus": "ACTIVE", + "Name": "Brosnahan Insurance Agency", + "FirstName": "Brosnahan", + "LastName": "Agency", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501843797+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "b94cfdcd-f7f8-4c6f-9ece-0c0b63cad72c", + "ContactStatus": "ACTIVE", + "Name": "Cal Telephone", + "FirstName": "Cal", + "LastName": "Telephone", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501866060+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "a204720b-808e-48eb-8436-b16fae77c163", + "ContactStatus": "ACTIVE", + "Name": "Labhvam", + "FirstName": "Labhvam", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501871517+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "22680982-e1ff-4c44-9c98-b6b3b78d5c7d", + "ContactStatus": "ACTIVE", + "Name": "Abhishek ji", + "FirstName": "Abhishek", + "LastName": "ji", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661501876643+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "9a777d01-2bfb-4623-807d-129d3f077e21", + "ContactStatus": "ACTIVE", + "Name": "Coco Cafe", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "43d1337e-4360-4589-9a76-1d0538c4ce6f", + "ContactStatus": "ACTIVE", + "Name": "Ridgeway Bank", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "cb906ad4-b1d7-44bf-b25a-4862c7059a43", + "ContactStatus": "ACTIVE", + "Name": "Office Supplies Company", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "f41cbe7c-de57-4927-b8a0-49fb0151be77", + "ContactStatus": "ACTIVE", + "Name": "7-Eleven", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "DefaultCurrency": "USD", + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "be4cfc19-c55a-4f19-817b-4eee4ccf2c01", + "ContactStatus": "ACTIVE", + "Name": "Woolworths Market", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "406e9eba-9939-48de-a300-57853bb1a6a4", + "ContactStatus": "ACTIVE", + "Name": "Gable Print", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "940f1da6-6d14-46e5-a692-77de93732f96", + "ContactStatus": "ACTIVE", + "Name": "Orlena Greenville", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "733b5108-96cb-4d43-bc5b-7f37a2f77c26", + "ContactStatus": "ACTIVE", + "Name": "Dimples Warehouse", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "DefaultCurrency": "USD", + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "d8ce2ea5-d312-4c34-9656-8554b8071a81", + "ContactStatus": "ACTIVE", + "Name": "Fulton Airport Parking", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "f5cb9bf0-7aa2-473e-8115-87863dee95f3", + "ContactStatus": "ACTIVE", + "Name": "Espresso 31", + "FirstName": "", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "23241290", + "PhoneAreaCode": "4", + "PhoneCountryCode": "+64", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "2e68080d-b3bd-4051-b33c-9f031550b958", + "ContactStatus": "ACTIVE", + "Name": "24 Locks", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "f6ecf9a4-ee5a-4e9c-b52b-bec4737e8623", + "ContactStatus": "ACTIVE", + "Name": "Epicenter Cafe", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "DefaultCurrency": "USD", + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "b6c2d5e5-94f2-4df5-a7c2-f1de0bff034f", + "ContactStatus": "ACTIVE", + "Name": "Melrose Parking", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "16cf5671-54a8-4d4e-9a55-f2be8ec3dcf4", + "ContactStatus": "ACTIVE", + "Name": "Berry Brew", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "162c177a-3391-4742-890f-f3ebfe0df1f3", + "ContactStatus": "ACTIVE", + "Name": "Brunswick Petals", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021873+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "aacecb74-ef1e-44e0-ba52-0bc521639697", + "ContactStatus": "ACTIVE", + "Name": "PC Complete", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 2132.51, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "c01292e3-1a1a-4a70-b120-1218f8f71096", + "ContactStatus": "ACTIVE", + "Name": "Bayside Wholesale", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "DefaultCurrency": "USD", + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 840.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "3f58af86-b4d9-4ac9-950c-2e4cdd94d5be", + "ContactStatus": "ACTIVE", + "Name": "SMART Agency", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 4500.0, "Overdue": 4500.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "cade9142-f5fe-4970-b39e-2f388b8740c0", + "ContactStatus": "ACTIVE", + "Name": "Central Copiers", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 163.56, "Overdue": 163.56}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "3b30a108-9156-4a42-a893-3bbbe7af1ef8", + "ContactStatus": "ACTIVE", + "Name": "Xero", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 31.39, "Overdue": 31.39}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "f4af0a9b-e710-4611-8618-4360944ce1f3", + "ContactStatus": "ACTIVE", + "Name": "Truxton Property Management", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "78b7299c-4f1f-46d2-acc3-44a46bd361b1", + "ContactStatus": "ACTIVE", + "Name": "Swanston Security", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 59.54, "Overdue": 59.54}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "537d4d64-2fc1-4521-89c3-489d20fae20d", + "ContactStatus": "ACTIVE", + "Name": "MCO Cleaning Services", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "4ad99fdf-a0cc-4aaa-a1a6-6a1549b9df40", + "ContactStatus": "ACTIVE", + "Name": "Carlton Functions", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "b553bc60-5fb9-4d5e-b604-71aaf657cd3d", + "ContactStatus": "ACTIVE", + "Name": "Net Connect", + "FirstName": "", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "234567890123", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "BatchPayments": { + "BankAccountNumber": "234567890123", + "BankAccountName": "Net Connect Holdings", + "Details": "DEMO-GL", + "Code": "", + "Reference": "", + }, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 54.13, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "39efa556-8dda-4c81-83d3-a631e59eb6d3", + "ContactStatus": "ACTIVE", + "Name": "ABC Furniture", + "FirstName": "Trish", + "LastName": "Rawlings", + "EmailAddress": "info@abfl.com", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "124578", + "PhoneAreaCode": "800", + "PhoneCountryCode": "1", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "DefaultCurrency": "USD", + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "f93cd75c-9412-4a8c-91a3-b41fe751aa01", + "ContactStatus": "ACTIVE", + "Name": "Capital Cab Co", + "FirstName": "", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "123456789012", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "235689", + "PhoneAreaCode": "800", + "PhoneCountryCode": "1", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "DefaultCurrency": "USD", + "BatchPayments": { + "BankAccountNumber": "123456789012", + "BankAccountName": "Capital Cab Holdings", + "Details": "DEMO-GL", + "Code": "", + "Reference": "", + }, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 242.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "1d80716b-427e-4cad-80c6-c4b3a18eb23d", + "ContactStatus": "ACTIVE", + "Name": "Hoyt Productions", + "Addresses": [{"AddressType": "STREET"}, {"AddressType": "POBOX"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "8f48b066-e047-459d-80dd-d495b36608d0", + "ContactStatus": "ACTIVE", + "Name": "PowerDirect", + "FirstName": "", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "345678901234", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "BatchPayments": { + "BankAccountNumber": "345678901234", + "BankAccountName": "PowerDirect Holdings", + "Details": "DEMO-GL", + "Code": "", + "Reference": "", + }, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 108.6, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "ddd4ba65-9b7e-4adf-be7a-e91efbb6c082", + "ContactStatus": "ACTIVE", + "Name": "Gateway Motors", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021900+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "fd89489e-699c-4d77-a881-10c127bfbeb3", + "ContactStatus": "ACTIVE", + "Name": "Hamilton Smith Ltd", + "EmailAddress": "info@hsg.co", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "AddressLine1": "3 Park Street Industrial Village\n", + "AddressLine2": "", + "AddressLine3": "", + "AddressLine4": "", + "City": "Oaktown", + "Region": "", + "PostalCode": "1234", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "2345678", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "65a44264-dea0-481a-b49d-18a334a72334", + "ContactStatus": "ACTIVE", + "Name": "Ridgeway University", + "FirstName": "", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "8005001", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "7775001", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "DefaultCurrency": "USD", + "Balances": { + "AccountsReceivable": { + "Outstanding": 6187.5, + "Overdue": 6187.5, + }, + "AccountsPayable": {"Outstanding": 0.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "37918a06-92f6-4edb-bfe0-1fc041c90f8b", + "ContactStatus": "ACTIVE", + "Name": "Boom FM", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "b68deed5-49c8-416a-9f35-2ab14bb1fb6b", + "ContactStatus": "ACTIVE", + "Name": "Bayside Club", + "FirstName": "Bob", + "LastName": "Partridge", + "EmailAddress": "secretarybob@bsclub.co", + "SkypeUserName": "bayside577", + "BankAccountDetails": "98091-80345", + "TaxNumber": "90 9877899", + "AccountsReceivableTaxType": "OUTPUT", + "AccountsPayableTaxType": "INPUT", + "Addresses": [ + { + "AddressType": "POBOX", + "AddressLine1": "P O Box 3354", + "AddressLine2": "South Mailing Centre", + "AddressLine3": "", + "AddressLine4": "", + "City": "Ridge Heights", + "Region": "Madeupville", + "PostalCode": "MA 60010", + "Country": "USA", + "AttentionTo": "Club Secretary", + }, + { + "AddressType": "STREET", + "AddressLine1": "148 Bay Harbour Road", + "AddressLine2": "", + "AddressLine3": "", + "AddressLine4": "", + "City": "Ridge Heights", + "Region": "Madeupville", + "PostalCode": "MA 60010", + "Country": "USA", + "AttentionTo": "Club Secretary", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "2024418", + "PhoneAreaCode": "202", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "2024455", + "PhoneAreaCode": "202", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "2025566", + "PhoneAreaCode": "202", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "7774455", + "PhoneAreaCode": "202", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": True, + "DefaultCurrency": "USD", + "BrandingTheme": { + "BrandingThemeID": "d613f7f9-8fcb-477f-97f0-31eb85b7e5cf", + "Name": "Standard", + }, + "BatchPayments": { + "BankAccountNumber": "98091-80345", + "BankAccountName": "RBC", + "Details": "OCI", + "Code": "", + "Reference": "", + }, + "Balances": { + "AccountsReceivable": {"Outstanding": 234.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 130.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "5b96e86b-418e-48e8-8949-308c14aec278", + "ContactStatus": "ACTIVE", + "Name": "Marine Systems", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "DefaultCurrency": "USD", + "Balances": { + "AccountsReceivable": {"Outstanding": 396.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 0.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "fa52f698-1244-47cd-8fb9-5f32b6490a55", + "ContactStatus": "ACTIVE", + "Name": "City Agency", + "Addresses": [ + { + "AddressType": "POBOX", + "AddressLine1": "P O Box 4321", + "AddressLine2": "Central Mailing Centre", + "AddressLine3": "", + "AddressLine4": "", + "City": "Oaktown", + "Region": "", + "PostalCode": "1237", + "Country": "", + }, + {"AddressType": "STREET"}, + ], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "a3cf95c5-9d26-42e1-80c0-69e5f24886d3", + "ContactStatus": "ACTIVE", + "Name": "DIISR - Small Business Services", + "FirstName": "", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "8009001", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "8009002", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "Balances": { + "AccountsReceivable": { + "Outstanding": 270.63, + "Overdue": 270.63, + }, + "AccountsPayable": {"Outstanding": 0.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "021b18f8-b62f-4d8a-889e-71fd5427892a", + "ContactStatus": "ACTIVE", + "Name": "Young Bros Transport", + "EmailAddress": "rog@ybt.co", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "AddressLine1": "P O Box 5678\n", + "AddressLine2": "Central Mailing Centre\n", + "AddressLine3": "", + "AddressLine4": "", + "City": "Oaktown", + "Region": "", + "PostalCode": "1235", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "3435678", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": True, + "IsCustomer": True, + "Balances": { + "AccountsReceivable": {"Outstanding": 0.0, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 125.03, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "378f211a-64c2-4327-bab3-9b057f4f51d9", + "ContactStatus": "ACTIVE", + "Name": "Port & Philip Freight", + "EmailAddress": "", + "Addresses": [ + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "2323434", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "47f61ab1-5245-40a2-a3a5-bc224c850c8d", + "ContactStatus": "ACTIVE", + "Name": "Bank West", + "EmailAddress": "", + "Addresses": [ + { + "AddressType": "POBOX", + "AddressLine1": "Procurement Services\n", + "AddressLine2": "GPO 1234", + "AddressLine3": "", + "AddressLine4": "", + "City": "Pinehaven", + "Region": "", + "PostalCode": "9876", + "Country": "", + }, + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "2023456", + "PhoneAreaCode": "02", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "3cbd5263-0965-4c4e-932c-bf50e3297610", + "ContactStatus": "ACTIVE", + "Name": "Rex Media Group", + "EmailAddress": "info@rexmedia.co", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "AddressLine1": "L9, Nairn Towers\n", + "AddressLine2": "120-130 Flinders Street", + "AddressLine3": "", + "AddressLine4": "", + "City": "Oaktown", + "Region": "", + "PostalCode": "1236", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "4546789", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "85d15bf3-207f-4278-8449-e12dade98c66", + "ContactStatus": "ACTIVE", + "Name": "Basket Case", + "FirstName": "", + "LastName": "", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "POBOX", + "AddressLine1": "Shop 14 Ridgeway Mall", + "AddressLine2": "500 River Road", + "AddressLine3": "", + "AddressLine4": "", + "City": "Pinehaven", + "Region": "", + "PostalCode": "2345", + "Country": "", + "AttentionTo": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "7773001", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "BrandingTheme": { + "BrandingThemeID": "92f08561-bd65-469b-93fb-65dd1552c678", + "Name": "Very orange invoice!", + }, + "Balances": { + "AccountsReceivable": {"Outstanding": 914.55, "Overdue": 0.0}, + "AccountsPayable": {"Outstanding": 0.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "2aaaeb6b-b519-4698-9b0a-f74ba1d39be6", + "ContactStatus": "ACTIVE", + "Name": "Petrie McLoud Watson & Associates", + "Addresses": [{"AddressType": "POBOX"}, {"AddressType": "STREET"}], + "Phones": [ + {"PhoneType": "DDI"}, + {"PhoneType": "DEFAULT"}, + {"PhoneType": "FAX"}, + {"PhoneType": "MOBILE"}, + ], + "UpdatedDateUTC": "/Date(1661537021917+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "7c913d33-39d5-4a1c-b8b1-e23f5fc999e0", + "ContactStatus": "ACTIVE", + "Name": "City Limousines", + "FirstName": "Martin", + "LastName": "Dale", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "", + }, + { + "AddressType": "POBOX", + "AddressLine1": "1206 Harbour Tower\n", + "AddressLine2": "59-65 South Street", + "AddressLine3": "", + "AddressLine4": "", + "City": "Coppertown", + "Region": "", + "PostalCode": "", + "Country": "", + "AttentionTo": "Accounts Dept", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "8004001", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "7774001", + "PhoneAreaCode": "01", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661551195877+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": True, + "Balances": { + "AccountsReceivable": { + "Outstanding": 1191.83, + "Overdue": 488.2, + }, + "AccountsPayable": {"Outstanding": 0.0, "Overdue": 0.0}, + }, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, + }, + { + "ContactID": "0deb2f9b-7681-489f-8cc0-cbc4dd81d21e", + "ContactStatus": "ACTIVE", + "Name": "Edward Blankenship", + "FirstName": "Edward", + "LastName": "Blankenship", + "EmailAddress": "", + "BankAccountDetails": "", + "Addresses": [ + { + "AddressType": "STREET", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + { + "AddressType": "POBOX", + "City": "", + "Region": "", + "PostalCode": "", + "Country": "", + }, + ], + "Phones": [ + { + "PhoneType": "DDI", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "DEFAULT", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "FAX", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + { + "PhoneType": "MOBILE", + "PhoneNumber": "", + "PhoneAreaCode": "", + "PhoneCountryCode": "", + }, + ], + "UpdatedDateUTC": "/Date(1661765738327+0000)/", + "ContactGroups": [], + "IsSupplier": False, + "IsCustomer": False, + "ContactPersons": [], + "HasAttachments": False, + "HasValidationErrors": False, }, - 'Balances': {'AccountsReceivable': {'Outstanding': 234.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 130.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '5b96e86b-418e-48e8-8949-308c14aec278', - 'ContactStatus': 'ACTIVE', - 'Name': 'Marine Systems', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'DefaultCurrency': 'USD', - 'Balances': {'AccountsReceivable': {'Outstanding': 396.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 0.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'fa52f698-1244-47cd-8fb9-5f32b6490a55', - 'ContactStatus': 'ACTIVE', - 'Name': 'City Agency', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'AddressLine1': 'P O Box 4321', - 'AddressLine2': 'Central Mailing Centre', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Oaktown', - 'Region': '', - 'PostalCode': '1237', - 'Country': '', - }, {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': 'a3cf95c5-9d26-42e1-80c0-69e5f24886d3', - 'ContactStatus': 'ACTIVE', - 'Name': 'DIISR - Small Business Services', - 'FirstName': '', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '8009001', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '8009002', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'Balances': {'AccountsReceivable': {'Outstanding': 270.63, - 'Overdue': 270.63}, - 'AccountsPayable': {'Outstanding': 0.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '021b18f8-b62f-4d8a-889e-71fd5427892a', - 'ContactStatus': 'ACTIVE', - 'Name': 'Young Bros Transport', - 'EmailAddress': 'rog@ybt.co', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'AddressLine1': 'P O Box 5678\n', - 'AddressLine2': 'Central Mailing Centre\n', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Oaktown', - 'Region': '', - 'PostalCode': '1235', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '3435678', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': True, - 'IsCustomer': True, - 'Balances': {'AccountsReceivable': {'Outstanding': 0.0, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 125.03, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '378f211a-64c2-4327-bab3-9b057f4f51d9', - 'ContactStatus': 'ACTIVE', - 'Name': 'Port & Philip Freight', - 'EmailAddress': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '2323434', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '47f61ab1-5245-40a2-a3a5-bc224c850c8d', - 'ContactStatus': 'ACTIVE', - 'Name': 'Bank West', - 'EmailAddress': '', - 'Addresses': [{ - 'AddressType': 'POBOX', - 'AddressLine1': 'Procurement Services\n', - 'AddressLine2': 'GPO 1234', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Pinehaven', - 'Region': '', - 'PostalCode': '9876', - 'Country': '', - }, { - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '2023456', - 'PhoneAreaCode': '02', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '3cbd5263-0965-4c4e-932c-bf50e3297610', - 'ContactStatus': 'ACTIVE', - 'Name': 'Rex Media Group', - 'EmailAddress': 'info@rexmedia.co', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'AddressLine1': 'L9, Nairn Towers\n', - 'AddressLine2': '120-130 Flinders Street', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Oaktown', - 'Region': '', - 'PostalCode': '1236', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '4546789', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '85d15bf3-207f-4278-8449-e12dade98c66', - 'ContactStatus': 'ACTIVE', - 'Name': 'Basket Case', - 'FirstName': '', - 'LastName': '', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'POBOX', - 'AddressLine1': 'Shop 14 Ridgeway Mall', - 'AddressLine2': '500 River Road', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Pinehaven', - 'Region': '', - 'PostalCode': '2345', - 'Country': '', - 'AttentionTo': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '7773001', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'BrandingTheme': {'BrandingThemeID': '92f08561-bd65-469b-93fb-65dd1552c678', 'Name': 'Very orange invoice!'}, - 'Balances': {'AccountsReceivable': {'Outstanding': 914.55, - 'Overdue': 0.0}, - 'AccountsPayable': {'Outstanding': 0.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '2aaaeb6b-b519-4698-9b0a-f74ba1d39be6', - 'ContactStatus': 'ACTIVE', - 'Name': 'Petrie McLoud Watson & Associates', - 'Addresses': [{'AddressType': 'POBOX'}, - {'AddressType': 'STREET'}], - 'Phones': [{'PhoneType': 'DDI'}, {'PhoneType': 'DEFAULT'}, - {'PhoneType': 'FAX'}, {'PhoneType': 'MOBILE'}], - 'UpdatedDateUTC': '/Date(1661537021917+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '7c913d33-39d5-4a1c-b8b1-e23f5fc999e0', - 'ContactStatus': 'ACTIVE', - 'Name': 'City Limousines', - 'FirstName': 'Martin', - 'LastName': 'Dale', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': '', - }, { - 'AddressType': 'POBOX', - 'AddressLine1': '1206 Harbour Tower\n', - 'AddressLine2': '59-65 South Street', - 'AddressLine3': '', - 'AddressLine4': '', - 'City': 'Coppertown', - 'Region': '', - 'PostalCode': '', - 'Country': '', - 'AttentionTo': 'Accounts Dept', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '8004001', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '7774001', - 'PhoneAreaCode': '01', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661551195877+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': True, - 'Balances': {'AccountsReceivable': {'Outstanding': 1191.83, - 'Overdue': 488.2}, - 'AccountsPayable': {'Outstanding': 0.0, - 'Overdue': 0.0}}, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - { - 'ContactID': '0deb2f9b-7681-489f-8cc0-cbc4dd81d21e', - 'ContactStatus': 'ACTIVE', - 'Name': 'Edward Blankenship', - 'FirstName': 'Edward', - 'LastName': 'Blankenship', - 'EmailAddress': '', - 'BankAccountDetails': '', - 'Addresses': [{ - 'AddressType': 'STREET', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }, { - 'AddressType': 'POBOX', - 'City': '', - 'Region': '', - 'PostalCode': '', - 'Country': '', - }], - 'Phones': [{ - 'PhoneType': 'DDI', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'DEFAULT', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'FAX', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }, { - 'PhoneType': 'MOBILE', - 'PhoneNumber': '', - 'PhoneAreaCode': '', - 'PhoneCountryCode': '', - }], - 'UpdatedDateUTC': '/Date(1661765738327+0000)/', - 'ContactGroups': [], - 'IsSupplier': False, - 'IsCustomer': False, - 'ContactPersons': [], - 'HasAttachments': False, - 'HasValidationErrors': False, - }, - ], - }], - 'get_all_accounts': # !/usr/bin/python + ], + } + ], + "get_all_accounts": # !/usr/bin/python # -*- coding: utf-8 -*- { - 'Id': '11a8c275-46e4-4e94-887e-87219aeef8b0', - 'Status': 'OK', - 'ProviderName': 'Fyle Staging', - 'DateTimeUTC': '/Date(1661863968654)/', - 'Accounts': [ - { - 'AccountID': '562555f2-8cde-4ce9-8203-0363922537a4', - 'Code': '090', - 'Name': 'Business Bank Account', - 'Status': 'ACTIVE', - 'Type': 'BANK', - 'TaxType': 'NONE', - 'Class': 'ASSET', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountNumber': '0908007006543', - 'BankAccountType': 'BANK', - 'CurrencyCode': 'USD', - 'ReportingCode': 'ASS', - 'ReportingCodeName': 'Asset', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '72f1dcfe-5d7d-4239-bf9d-e12469309716', - 'Code': '091', - 'Name': 'Business Savings Account', - 'Status': 'ACTIVE', - 'Type': 'BANK', - 'TaxType': 'NONE', - 'Class': 'ASSET', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountNumber': '121314121314', - 'BankAccountType': 'BANK', - 'CurrencyCode': 'USD', - 'ReportingCode': 'ASS', - 'ReportingCodeName': 'Asset', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'd1ebb97b-d207-4ccb-9ab6-8a466a8b4d39', - 'Code': '200', - 'Name': 'Sales', - 'Status': 'ACTIVE', - 'Type': 'REVENUE', - 'TaxType': 'OUTPUT', - 'Description': 'Income from any normal business activity', - 'Class': 'REVENUE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': 'NONE', - 'ReportingCode': 'REV.TRA.GOO', - 'ReportingCodeName': 'Sale of goods', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': True, - }, - { - 'AccountID': 'd2c63bbd-bc9e-4fb4-9d1c-e5d15749aaa2', - 'Code': '260', - 'Name': 'Other Revenue', - 'Status': 'ACTIVE', - 'Type': 'REVENUE', - 'TaxType': 'OUTPUT', - 'Description': 'Any other income that does not relate to normal business activities and is not recurring', - 'Class': 'REVENUE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'REV.OTH', - 'ReportingCodeName': 'Other Revenue', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '66fbdc01-e2e7-4ee3-ab10-2d5821d38fe4', - 'Code': '270', - 'Name': 'Interest Income', - 'Status': 'ACTIVE', - 'Type': 'REVENUE', - 'TaxType': 'NONE', - 'Description': 'Interest income', - 'Class': 'REVENUE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'REV.INV.INT', - 'ReportingCodeName': 'Interest', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'ae8074e0-1ac1-4b37-8546-afa9fa6ace9e', - 'Code': '300', - 'Name': 'Purchases', - 'Status': 'ACTIVE', - 'Type': 'DIRECTCOSTS', - 'TaxType': 'INPUT', - 'Description': 'Goods purchased with the intention of selling these to customers', - 'Class': 'EXPENSE', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'd7defb58-7028-480d-bd70-453770b0715d', - 'Code': '310', - 'Name': 'Cost of Goods Sold', - 'Status': 'ACTIVE', - 'Type': 'DIRECTCOSTS', - 'TaxType': 'INPUT', - 'Description': 'Cost of goods sold by the business.', - 'Class': 'EXPENSE', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.COS', - 'ReportingCodeName': 'Cost of goods sold', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'eb01b8c7-f9b0-49ef-86f4-ed89b4ac33d5', - 'Code': '400', - 'Name': 'Advertising', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred for advertising while trying to increase sales', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': True, - }, - { - 'AccountID': '269479fb-cc8e-4e5f-b0b6-cc4eccf045e0', - 'Code': '404', - 'Name': 'Bank Fees', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Fees charged by your bank for transactions regarding your bank account(s).', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '30ad3fd7-43b8-4eeb-96bc-ed2b7c945f3c', - 'Code': '408', - 'Name': 'Cleaning', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred for cleaning business property.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'd2429b4f-ad8b-45e5-815a-13f5ecb0d5c1', - 'Code': '412', - 'Name': 'Consulting & Accounting', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses related to paying consultants', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.LEG', - 'ReportingCodeName': 'Professional and consulting fees', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '07cb32d2-018b-4366-9a26-b44fc58e3951', - 'Code': '416', - 'Name': 'Depreciation', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': "The amount of the asset's cost (based on the useful life) that was consumed during the period", - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.DEP', - 'ReportingCodeName': 'Depreciation', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '6a7d9c59-1d5a-4474-8c61-3da1f980db13', - 'Code': '420', - 'Name': 'Entertainment', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Expenses paid by company for the business but are not deductable for income tax purposes.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.ENT', - 'ReportingCodeName': 'Entertainment', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': True, - }, - { - 'AccountID': 'c4b1c463-9913-4672-a8b8-01a3b546126f', - 'Code': '425', - 'Name': 'Freight & Courier', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred on courier & freight costs', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '4281c446-efb4-445d-b32d-c441a4ef5678', - 'Code': '429', - 'Name': 'General Expenses', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'General expenses related to the running of the business.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '77a58a2c-8553-49eb-878b-abaf3a787ea6', - 'Code': '433', - 'Name': 'Insurance', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': "Expenses incurred for insuring the business' assets", - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.INS', - 'ReportingCodeName': 'Insurance', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'b6f3db5c-d208-4731-8d8e-d0ba20a51a04', - 'Code': '437', - 'Name': 'Interest Expense', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Any interest expenses paid to your tax authority, business bank accounts or credit card accounts.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.INT', - 'ReportingCodeName': 'Interest and finance charges', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'dff73dfd-e5a4-4b56-bd10-0d3e8aadc64c', - 'Code': '441', - 'Name': 'Legal expenses', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred on any legal matters', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.LEG', - 'ReportingCodeName': 'Professional and consulting fees', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'c61d3100-d95f-4ce4-ba75-c03cc767b825', - 'Code': '445', - 'Name': 'Light, Power, Heating', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred for lighting, powering or heating the premises', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '470f3b54-9cbe-420a-8d13-22cb17fd9d40', - 'Code': '449', - 'Name': 'Motor Vehicle Expenses', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred on the running of company motor vehicles', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.VEH', - 'ReportingCodeName': 'Vehicle expenses', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '79fc6227-e183-409a-ba39-77028e0ceeff', - 'Code': '453', - 'Name': 'Office Expenses', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'General expenses related to the running of the business office.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'a8c9ca73-91ef-4163-a4f6-7d892201c087', - 'Code': '461', - 'Name': 'Printing & Stationery', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred by the entity as a result of printing and stationery', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'd76027eb-0256-4b69-9f72-4751312e2749', - 'Code': '469', - 'Name': 'Rent', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'The payment to lease a building or area.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.REN', - 'ReportingCodeName': 'Rental and lease payments', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '5098e313-2775-40c3-9bb4-6b1f86d89a47', - 'Code': '473', - 'Name': 'Repairs and Maintenance', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred on a damaged or run down asset that will bring the asset back to its original condition.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.REP', - 'ReportingCodeName': 'Repairs and maintenance', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '4b5d4ca1-29c0-4412-a91b-bcba307fa99e', - 'Code': '477', - 'Name': 'Wages and Salaries', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Payment to employees in exchange for their resources', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.EMP', - 'ReportingCodeName': 'Employment costs', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '86c113c1-5c0a-48d8-b6c2-28f0dccc6ce7', - 'Code': '478', - 'Name': 'Superannuation', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Superannuation contributions', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.EMP.SUP', - 'ReportingCodeName': 'Superannuation expenses', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'f088fcee-8c22-47d0-bfab-54bf2d1723fa', - 'Code': '485', - 'Name': 'Subscriptions', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'E.g. Magazines, professional bodies', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '3b4fee92-7ed1-4d63-b00e-8fdf13927e05', - 'Code': '489', - 'Name': 'Telephone & Internet', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenditure incurred from any business-related phone calls, phone lines, or internet connections', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP', - 'ReportingCodeName': 'Expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'f5211403-43fb-49aa-82de-9fc1f6bc3e8c', - 'Code': '493', - 'Name': 'Travel - National', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'INPUT', - 'Description': 'Expenses incurred from domestic travel which has a business purpose', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.TRA', - 'ReportingCodeName': 'Travel and accommodation', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '540a4b2d-9a2a-43bb-ad53-223b63392a55', - 'Code': '494', - 'Name': 'Travel - International', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Expenses incurred from international travel which has a business purpose', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'EXP.TRA', - 'ReportingCodeName': 'Travel and accommodation', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'f17f1860-8220-4733-ad3b-bd2cb2cbc228', - 'Code': '497', - 'Name': 'Bank Revaluations', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Bank account revaluations due for foreign exchange rate changes', - 'Class': 'EXPENSE', - 'SystemAccount': 'BANKCURRENCYGAIN', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.FOR', - 'ReportingCodeName': 'Foreign currency gains and losses', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500247187+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '88322695-0595-4e4e-95af-d0f70a78a95f', - 'Code': '498', - 'Name': 'Unrealised Currency Gains', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Unrealised currency gains on outstanding items', - 'Class': 'EXPENSE', - 'SystemAccount': 'UNREALISEDCURRENCYGAIN', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.FOR.UGL', - 'ReportingCodeName': 'Unrealised foreign currency gains and losses', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500247187+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '2b0417b9-e90e-452a-9e2c-cc325e9d277f', - 'Code': '499', - 'Name': 'Realised Currency Gains', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'Gains or losses made due to currency exchange rate changes', - 'Class': 'EXPENSE', - 'SystemAccount': 'REALISEDCURRENCYGAIN', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.FOR.RGL', - 'ReportingCodeName': 'Realised foreign currency gains and losses', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500247187+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '0cb6628f-2fb8-4e0c-98a3-ea46cd5144f0', - 'Code': '505', - 'Name': 'Income Tax Expense', - 'Status': 'ACTIVE', - 'Type': 'EXPENSE', - 'TaxType': 'NONE', - 'Description': 'A percentage of total earnings paid to the government.', - 'Class': 'EXPENSE', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EXP.INC', - 'ReportingCodeName': 'Income tax expense', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '9af45928-6ad1-462d-b4c6-46d8f58255be', - 'Code': '610', - 'Name': 'Accounts Receivable', - 'Status': 'ACTIVE', - 'Type': 'CURRENT', - 'TaxType': 'NONE', - 'Description': 'Outstanding invoices the company has issued out to the client but has not yet received in cash at balance date.', - 'Class': 'ASSET', - 'SystemAccount': 'DEBTORS', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'ASS.CUR.REC.TRA', - 'ReportingCodeName': 'Trade receivables', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'fb9e7943-343b-4cd2-adf7-6e3497b061fa', - 'Code': '620', - 'Name': 'Prepayments', - 'Status': 'ACTIVE', - 'Type': 'CURRENT', - 'TaxType': 'NONE', - 'Description': 'An expenditure that has been paid for in advance.', - 'Class': 'ASSET', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'ASS.CUR.REC.PRE', - 'ReportingCodeName': 'Prepayments', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '575bc777-f59f-47d1-a449-83dfbaf38770', - 'Code': '630', - 'Name': 'Inventory', - 'Status': 'ACTIVE', - 'Type': 'INVENTORY', - 'TaxType': 'NONE', - 'Description': 'Value of tracked inventory items for resale.', - 'Class': 'ASSET', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'ASS.CUR.INY', - 'ReportingCodeName': 'Inventories', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': True, - }, - { - 'AccountID': '0289f44f-bdad-48e8-ab5a-502e9d949bd7', - 'Code': '710', - 'Name': 'Office Equipment', - 'Status': 'ACTIVE', - 'Type': 'FIXED', - 'TaxType': 'INPUT', - 'Description': 'Office equipment that is owned and controlled by the business', - 'Class': 'ASSET', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'ASS.NCA.FIX.OWN.PLA', - 'ReportingCodeName': 'Plant and Machinery owned', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'fb1b1070-d8ff-469a-815f-277251305f0d', - 'Code': '711', - 'Name': 'Less Accumulated Depreciation on Office Equipment', - 'Status': 'ACTIVE', - 'Type': 'FIXED', - 'TaxType': 'NONE', - 'Description': 'The total amount of office equipment cost that has been consumed by the entity (based on the useful life)', - 'Class': 'ASSET', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'ASS.NCA.FIX.OWN.PLA.ACC', - 'ReportingCodeName': 'Accumulated depreciation - plant and machinery owned', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '37e5d4fc-fd6e-489c-83da-fdb8cb058d48', - 'Code': '720', - 'Name': 'Computer Equipment', - 'Status': 'ACTIVE', - 'Type': 'FIXED', - 'TaxType': 'INPUT', - 'Description': 'Computer equipment that is owned and controlled by the business', - 'Class': 'ASSET', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': True, - 'BankAccountType': '', - 'ReportingCode': 'ASS.NCA.FIX.OWN.PLA', - 'ReportingCodeName': 'Plant and Machinery owned', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '46f6b720-2e48-41ff-9759-073c2a8095df', - 'Code': '721', - 'Name': 'Less Accumulated Depreciation on Computer Equipment', - 'Status': 'ACTIVE', - 'Type': 'FIXED', - 'TaxType': 'NONE', - 'Description': 'The total amount of computer equipment cost that has been consumed by the business (based on the useful life)', - 'Class': 'ASSET', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'ASS.NCA.FIX.OWN.PLA.ACC', - 'ReportingCodeName': 'Accumulated depreciation - plant and machinery owned', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'c0f7668c-1c46-47bf-8d65-62f8ba2da059', - 'Code': '800', - 'Name': 'Accounts Payable', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'Outstanding invoices the company has received from suppliers but has not yet paid at balance date', - 'Class': 'LIABILITY', - 'SystemAccount': 'CREDITORS', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR.PAY.TRA', - 'ReportingCodeName': 'Trade payables', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'bab792be-f547-43b3-b81b-289bd52f1dcf', - 'Code': '801', - 'Name': 'Unpaid Expense Claims', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'Expense claims typically made by employees/shareholder employees still outstanding.', - 'Class': 'LIABILITY', - 'SystemAccount': 'UNPAIDEXPCLM', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR.PAY.EMP', - 'ReportingCodeName': 'Employee entitlements (wages, annual leave, etc)', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'f0bb2f96-7530-416e-b8f0-bcec05e5ff04', - 'Code': '820', - 'Name': 'Sales Tax', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': "The balance in this account represents Sales Tax owing to or from your tax authority. At the end of the tax period, it is this account that should be used to code against either the 'refunds from' or 'payments to' your tax authority that will appear on the bank statement. Xero has been designed to use only one sales tax account to track sales taxes on income and expenses, so there is no need to add any new sales tax accounts to Xero.", - 'Class': 'LIABILITY', - 'SystemAccount': 'GST', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR.TAX.VAT', - 'ReportingCodeName': 'Value added tax', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '30246eeb-6ad6-4c7a-b9df-f897b8c79381', - 'Code': '825', - 'Name': 'Employee Tax Payable', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'The amount of tax that has been deducted from wages or salaries paid to employes and is due to be paid', - 'Class': 'LIABILITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR.PAY.PAY', - 'ReportingCodeName': 'PAYE', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'a9d0f0b7-7b70-4188-a422-d07ef0fc3d7f', - 'Code': '826', - 'Name': 'Superannuation Payable', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'The amount of superannuation that is due to be paid', - 'Class': 'LIABILITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR.PAY.EMP', - 'ReportingCodeName': 'Employee entitlements (wages, annual leave, etc)', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'b17333df-3d01-4536-998c-216812d9aa74', - 'Code': '830', - 'Name': 'Income Tax Payable', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'The amount of income tax that is due to be paid, also resident withholding tax paid on interest received.', - 'Class': 'LIABILITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR.TAX.INC', - 'ReportingCodeName': 'Income tax', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '69c01d8f-3cea-4256-bade-60e753a0ac30', - 'Code': '835', - 'Name': 'Revenue Received in Advance', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'When customers pay in advance of work/services.', - 'Class': 'LIABILITY', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA', - 'ReportingCodeName': 'Liabilities', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '44ee8a46-0b5f-46ca-b2e3-fbdae39fd13c', - 'Code': '840', - 'Name': 'Historical Adjustment', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'For accountant adjustments', - 'Class': 'LIABILITY', - 'SystemAccount': 'HISTORICAL', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR', - 'ReportingCodeName': 'Current liabilities', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '517ea54a-e03b-4cb7-b399-f7c007d6fea7', - 'Code': '850', - 'Name': 'Suspense', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'An entry that allows an unknown transaction to be entered, so the accounts can still be worked on in balance and the entry can be dealt with later.', - 'Class': 'LIABILITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR', - 'ReportingCodeName': 'Current liabilities', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'ea0e787d-67c5-4379-8ba7-d671a9522e1f', - 'Code': '855', - 'Name': 'Clearing Account', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': '', - 'Class': 'LIABILITY', - 'EnablePaymentsToAccount': True, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA', - 'ReportingCodeName': 'Liability', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '76d45c0f-11e6-450c-8643-d67038945b7c', - 'Code': '860', - 'Name': 'Rounding', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'An adjustment entry to allow for rounding', - 'Class': 'LIABILITY', - 'SystemAccount': 'ROUNDING', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR', - 'ReportingCodeName': 'Current liabilities', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '8f602967-b730-4ad9-aea2-97c97184b10a', - 'Code': '877', - 'Name': 'Tracking Transfers', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'Transfers between tracking categories', - 'Class': 'LIABILITY', - 'SystemAccount': 'TRACKINGTRANSFERS', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.CUR', - 'ReportingCodeName': 'Current liabilities', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '50cad88d-0716-4e9a-b436-e0e903805207', - 'Code': '880', - 'Name': 'Owner A Drawings', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'Withdrawals by the owners', - 'Class': 'LIABILITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': True, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EQU.DRA', - 'ReportingCodeName': 'Owners/partners drawings', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': '680e946e-67d9-4c5d-a4ac-a70a0d3cef78', - 'Code': '881', - 'Name': 'Owner A Funds Introduced', - 'Status': 'ACTIVE', - 'Type': 'CURRLIAB', - 'TaxType': 'NONE', - 'Description': 'Funds contributed by the owner', - 'Class': 'LIABILITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': True, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EQU.ADV', - 'ReportingCodeName': 'Owners/partners funds introduced', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'c8f8782b-33bf-4620-a275-6c13466cb73d', - 'Code': '900', - 'Name': 'Loan', - 'Status': 'ACTIVE', - 'Type': 'TERMLIAB', - 'TaxType': 'NONE', - 'Description': 'Money that has been borrowed from a creditor', - 'Class': 'LIABILITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'LIA.NCL.LOA', - 'ReportingCodeName': 'Loans (non current)', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, - { - 'AccountID': 'd2e8fca5-83cc-475d-9efb-03fe0dc57fd4', - 'Code': '960', - 'Name': 'Retained Earnings', - 'Status': 'ACTIVE', - 'Type': 'EQUITY', - 'TaxType': 'NONE', - 'Description': 'Do not Use', - 'Class': 'EQUITY', - 'SystemAccount': 'RETAINEDEARNINGS', - 'EnablePaymentsToAccount': False, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EQU.RET', - 'ReportingCodeName': 'Retained earnings', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, - }, + "Id": "11a8c275-46e4-4e94-887e-87219aeef8b0", + "Status": "OK", + "ProviderName": "Fyle Staging", + "DateTimeUTC": "/Date(1661863968654)/", + "Accounts": [ { - 'AccountID': 'f26bf6e9-42e1-438f-9db9-3b2f228de8be', - 'Code': '970', - 'Name': 'Owner A Share Capital', - 'Status': 'ACTIVE', - 'Type': 'EQUITY', - 'TaxType': 'NONE', - 'Description': 'The value of shares purchased by the shareholders', - 'Class': 'EQUITY', - 'SystemAccount': '', - 'EnablePaymentsToAccount': True, - 'ShowInExpenseClaims': False, - 'BankAccountType': '', - 'ReportingCode': 'EQU.SHA', - 'ReportingCodeName': 'Share capital', - 'HasAttachments': False, - 'UpdatedDateUTC': '/Date(1661500186533+0000)/', - 'AddToWatchlist': False, + "AccountID": "562555f2-8cde-4ce9-8203-0363922537a4", + "Code": "090", + "Name": "Business Bank Account", + "Status": "ACTIVE", + "Type": "BANK", + "TaxType": "NONE", + "Class": "ASSET", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountNumber": "0908007006543", + "BankAccountType": "BANK", + "CurrencyCode": "USD", + "ReportingCode": "ASS", + "ReportingCodeName": "Asset", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "72f1dcfe-5d7d-4239-bf9d-e12469309716", + "Code": "091", + "Name": "Business Savings Account", + "Status": "ACTIVE", + "Type": "BANK", + "TaxType": "NONE", + "Class": "ASSET", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountNumber": "121314121314", + "BankAccountType": "BANK", + "CurrencyCode": "USD", + "ReportingCode": "ASS", + "ReportingCodeName": "Asset", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "d1ebb97b-d207-4ccb-9ab6-8a466a8b4d39", + "Code": "200", + "Name": "Sales", + "Status": "ACTIVE", + "Type": "REVENUE", + "TaxType": "OUTPUT", + "Description": "Income from any normal business activity", + "Class": "REVENUE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "NONE", + "ReportingCode": "REV.TRA.GOO", + "ReportingCodeName": "Sale of goods", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": True, + }, + { + "AccountID": "d2c63bbd-bc9e-4fb4-9d1c-e5d15749aaa2", + "Code": "260", + "Name": "Other Revenue", + "Status": "ACTIVE", + "Type": "REVENUE", + "TaxType": "OUTPUT", + "Description": "Any other income that does not relate to normal business activities and is not recurring", + "Class": "REVENUE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "REV.OTH", + "ReportingCodeName": "Other Revenue", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "66fbdc01-e2e7-4ee3-ab10-2d5821d38fe4", + "Code": "270", + "Name": "Interest Income", + "Status": "ACTIVE", + "Type": "REVENUE", + "TaxType": "NONE", + "Description": "Interest income", + "Class": "REVENUE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "REV.INV.INT", + "ReportingCodeName": "Interest", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "ae8074e0-1ac1-4b37-8546-afa9fa6ace9e", + "Code": "300", + "Name": "Purchases", + "Status": "ACTIVE", + "Type": "DIRECTCOSTS", + "TaxType": "INPUT", + "Description": "Goods purchased with the intention of selling these to customers", + "Class": "EXPENSE", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "d7defb58-7028-480d-bd70-453770b0715d", + "Code": "310", + "Name": "Cost of Goods Sold", + "Status": "ACTIVE", + "Type": "DIRECTCOSTS", + "TaxType": "INPUT", + "Description": "Cost of goods sold by the business.", + "Class": "EXPENSE", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.COS", + "ReportingCodeName": "Cost of goods sold", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "eb01b8c7-f9b0-49ef-86f4-ed89b4ac33d5", + "Code": "400", + "Name": "Advertising", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred for advertising while trying to increase sales", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": True, + }, + { + "AccountID": "269479fb-cc8e-4e5f-b0b6-cc4eccf045e0", + "Code": "404", + "Name": "Bank Fees", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Fees charged by your bank for transactions regarding your bank account(s).", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "30ad3fd7-43b8-4eeb-96bc-ed2b7c945f3c", + "Code": "408", + "Name": "Cleaning", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred for cleaning business property.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "d2429b4f-ad8b-45e5-815a-13f5ecb0d5c1", + "Code": "412", + "Name": "Consulting & Accounting", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses related to paying consultants", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.LEG", + "ReportingCodeName": "Professional and consulting fees", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "07cb32d2-018b-4366-9a26-b44fc58e3951", + "Code": "416", + "Name": "Depreciation", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "The amount of the asset's cost (based on the useful life) that was consumed during the period", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.DEP", + "ReportingCodeName": "Depreciation", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "6a7d9c59-1d5a-4474-8c61-3da1f980db13", + "Code": "420", + "Name": "Entertainment", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Expenses paid by company for the business but are not deductable for income tax purposes.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.ENT", + "ReportingCodeName": "Entertainment", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": True, + }, + { + "AccountID": "c4b1c463-9913-4672-a8b8-01a3b546126f", + "Code": "425", + "Name": "Freight & Courier", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred on courier & freight costs", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "4281c446-efb4-445d-b32d-c441a4ef5678", + "Code": "429", + "Name": "General Expenses", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "General expenses related to the running of the business.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "77a58a2c-8553-49eb-878b-abaf3a787ea6", + "Code": "433", + "Name": "Insurance", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred for insuring the business' assets", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.INS", + "ReportingCodeName": "Insurance", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "b6f3db5c-d208-4731-8d8e-d0ba20a51a04", + "Code": "437", + "Name": "Interest Expense", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Any interest expenses paid to your tax authority, business bank accounts or credit card accounts.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.INT", + "ReportingCodeName": "Interest and finance charges", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "dff73dfd-e5a4-4b56-bd10-0d3e8aadc64c", + "Code": "441", + "Name": "Legal expenses", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred on any legal matters", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.LEG", + "ReportingCodeName": "Professional and consulting fees", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "c61d3100-d95f-4ce4-ba75-c03cc767b825", + "Code": "445", + "Name": "Light, Power, Heating", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred for lighting, powering or heating the premises", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "470f3b54-9cbe-420a-8d13-22cb17fd9d40", + "Code": "449", + "Name": "Motor Vehicle Expenses", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred on the running of company motor vehicles", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.VEH", + "ReportingCodeName": "Vehicle expenses", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "79fc6227-e183-409a-ba39-77028e0ceeff", + "Code": "453", + "Name": "Office Expenses", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "General expenses related to the running of the business office.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "a8c9ca73-91ef-4163-a4f6-7d892201c087", + "Code": "461", + "Name": "Printing & Stationery", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred by the entity as a result of printing and stationery", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "d76027eb-0256-4b69-9f72-4751312e2749", + "Code": "469", + "Name": "Rent", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "The payment to lease a building or area.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.REN", + "ReportingCodeName": "Rental and lease payments", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "5098e313-2775-40c3-9bb4-6b1f86d89a47", + "Code": "473", + "Name": "Repairs and Maintenance", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred on a damaged or run down asset that will bring the asset back to its original condition.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.REP", + "ReportingCodeName": "Repairs and maintenance", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "4b5d4ca1-29c0-4412-a91b-bcba307fa99e", + "Code": "477", + "Name": "Wages and Salaries", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Payment to employees in exchange for their resources", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.EMP", + "ReportingCodeName": "Employment costs", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "86c113c1-5c0a-48d8-b6c2-28f0dccc6ce7", + "Code": "478", + "Name": "Superannuation", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Superannuation contributions", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.EMP.SUP", + "ReportingCodeName": "Superannuation expenses", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "f088fcee-8c22-47d0-bfab-54bf2d1723fa", + "Code": "485", + "Name": "Subscriptions", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "E.g. Magazines, professional bodies", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "3b4fee92-7ed1-4d63-b00e-8fdf13927e05", + "Code": "489", + "Name": "Telephone & Internet", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenditure incurred from any business-related phone calls, phone lines, or internet connections", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP", + "ReportingCodeName": "Expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "f5211403-43fb-49aa-82de-9fc1f6bc3e8c", + "Code": "493", + "Name": "Travel - National", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "INPUT", + "Description": "Expenses incurred from domestic travel which has a business purpose", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.TRA", + "ReportingCodeName": "Travel and accommodation", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "540a4b2d-9a2a-43bb-ad53-223b63392a55", + "Code": "494", + "Name": "Travel - International", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Expenses incurred from international travel which has a business purpose", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "EXP.TRA", + "ReportingCodeName": "Travel and accommodation", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "f17f1860-8220-4733-ad3b-bd2cb2cbc228", + "Code": "497", + "Name": "Bank Revaluations", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Bank account revaluations due for foreign exchange rate changes", + "Class": "EXPENSE", + "SystemAccount": "BANKCURRENCYGAIN", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.FOR", + "ReportingCodeName": "Foreign currency gains and losses", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500247187+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "88322695-0595-4e4e-95af-d0f70a78a95f", + "Code": "498", + "Name": "Unrealised Currency Gains", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Unrealised currency gains on outstanding items", + "Class": "EXPENSE", + "SystemAccount": "UNREALISEDCURRENCYGAIN", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.FOR.UGL", + "ReportingCodeName": "Unrealised foreign currency gains and losses", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500247187+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "2b0417b9-e90e-452a-9e2c-cc325e9d277f", + "Code": "499", + "Name": "Realised Currency Gains", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "Gains or losses made due to currency exchange rate changes", + "Class": "EXPENSE", + "SystemAccount": "REALISEDCURRENCYGAIN", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.FOR.RGL", + "ReportingCodeName": "Realised foreign currency gains and losses", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500247187+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "0cb6628f-2fb8-4e0c-98a3-ea46cd5144f0", + "Code": "505", + "Name": "Income Tax Expense", + "Status": "ACTIVE", + "Type": "EXPENSE", + "TaxType": "NONE", + "Description": "A percentage of total earnings paid to the government.", + "Class": "EXPENSE", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EXP.INC", + "ReportingCodeName": "Income tax expense", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "9af45928-6ad1-462d-b4c6-46d8f58255be", + "Code": "610", + "Name": "Accounts Receivable", + "Status": "ACTIVE", + "Type": "CURRENT", + "TaxType": "NONE", + "Description": "Outstanding invoices the company has issued out to the client but has not yet received in cash at balance date.", + "Class": "ASSET", + "SystemAccount": "DEBTORS", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "ASS.CUR.REC.TRA", + "ReportingCodeName": "Trade receivables", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "fb9e7943-343b-4cd2-adf7-6e3497b061fa", + "Code": "620", + "Name": "Prepayments", + "Status": "ACTIVE", + "Type": "CURRENT", + "TaxType": "NONE", + "Description": "An expenditure that has been paid for in advance.", + "Class": "ASSET", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "ASS.CUR.REC.PRE", + "ReportingCodeName": "Prepayments", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "575bc777-f59f-47d1-a449-83dfbaf38770", + "Code": "630", + "Name": "Inventory", + "Status": "ACTIVE", + "Type": "INVENTORY", + "TaxType": "NONE", + "Description": "Value of tracked inventory items for resale.", + "Class": "ASSET", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "ASS.CUR.INY", + "ReportingCodeName": "Inventories", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": True, + }, + { + "AccountID": "0289f44f-bdad-48e8-ab5a-502e9d949bd7", + "Code": "710", + "Name": "Office Equipment", + "Status": "ACTIVE", + "Type": "FIXED", + "TaxType": "INPUT", + "Description": "Office equipment that is owned and controlled by the business", + "Class": "ASSET", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "ASS.NCA.FIX.OWN.PLA", + "ReportingCodeName": "Plant and Machinery owned", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "fb1b1070-d8ff-469a-815f-277251305f0d", + "Code": "711", + "Name": "Less Accumulated Depreciation on Office Equipment", + "Status": "ACTIVE", + "Type": "FIXED", + "TaxType": "NONE", + "Description": "The total amount of office equipment cost that has been consumed by the entity (based on the useful life)", + "Class": "ASSET", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "ASS.NCA.FIX.OWN.PLA.ACC", + "ReportingCodeName": "Accumulated depreciation - plant and machinery owned", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "37e5d4fc-fd6e-489c-83da-fdb8cb058d48", + "Code": "720", + "Name": "Computer Equipment", + "Status": "ACTIVE", + "Type": "FIXED", + "TaxType": "INPUT", + "Description": "Computer equipment that is owned and controlled by the business", + "Class": "ASSET", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": True, + "BankAccountType": "", + "ReportingCode": "ASS.NCA.FIX.OWN.PLA", + "ReportingCodeName": "Plant and Machinery owned", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "46f6b720-2e48-41ff-9759-073c2a8095df", + "Code": "721", + "Name": "Less Accumulated Depreciation on Computer Equipment", + "Status": "ACTIVE", + "Type": "FIXED", + "TaxType": "NONE", + "Description": "The total amount of computer equipment cost that has been consumed by the business (based on the useful life)", + "Class": "ASSET", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "ASS.NCA.FIX.OWN.PLA.ACC", + "ReportingCodeName": "Accumulated depreciation - plant and machinery owned", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "c0f7668c-1c46-47bf-8d65-62f8ba2da059", + "Code": "800", + "Name": "Accounts Payable", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "Outstanding invoices the company has received from suppliers but has not yet paid at balance date", + "Class": "LIABILITY", + "SystemAccount": "CREDITORS", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR.PAY.TRA", + "ReportingCodeName": "Trade payables", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "bab792be-f547-43b3-b81b-289bd52f1dcf", + "Code": "801", + "Name": "Unpaid Expense Claims", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "Expense claims typically made by employees/shareholder employees still outstanding.", + "Class": "LIABILITY", + "SystemAccount": "UNPAIDEXPCLM", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR.PAY.EMP", + "ReportingCodeName": "Employee entitlements (wages, annual leave, etc)", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "f0bb2f96-7530-416e-b8f0-bcec05e5ff04", + "Code": "820", + "Name": "Sales Tax", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "The balance in this account represents Sales Tax owing to or from your tax authority. At the end of the tax period, it is this account that should be used to code against either the 'refunds from' or 'payments to' your tax authority that will appear on the bank statement. Xero has been designed to use only one sales tax account to track sales taxes on income and expenses, so there is no need to add any new sales tax accounts to Xero.", + "Class": "LIABILITY", + "SystemAccount": "GST", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR.TAX.VAT", + "ReportingCodeName": "Value added tax", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "30246eeb-6ad6-4c7a-b9df-f897b8c79381", + "Code": "825", + "Name": "Employee Tax Payable", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "The amount of tax that has been deducted from wages or salaries paid to employes and is due to be paid", + "Class": "LIABILITY", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR.PAY.PAY", + "ReportingCodeName": "PAYE", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "a9d0f0b7-7b70-4188-a422-d07ef0fc3d7f", + "Code": "826", + "Name": "Superannuation Payable", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "The amount of superannuation that is due to be paid", + "Class": "LIABILITY", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR.PAY.EMP", + "ReportingCodeName": "Employee entitlements (wages, annual leave, etc)", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "b17333df-3d01-4536-998c-216812d9aa74", + "Code": "830", + "Name": "Income Tax Payable", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "The amount of income tax that is due to be paid, also resident withholding tax paid on interest received.", + "Class": "LIABILITY", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR.TAX.INC", + "ReportingCodeName": "Income tax", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "69c01d8f-3cea-4256-bade-60e753a0ac30", + "Code": "835", + "Name": "Revenue Received in Advance", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "When customers pay in advance of work/services.", + "Class": "LIABILITY", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA", + "ReportingCodeName": "Liabilities", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "44ee8a46-0b5f-46ca-b2e3-fbdae39fd13c", + "Code": "840", + "Name": "Historical Adjustment", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "For accountant adjustments", + "Class": "LIABILITY", + "SystemAccount": "HISTORICAL", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR", + "ReportingCodeName": "Current liabilities", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "517ea54a-e03b-4cb7-b399-f7c007d6fea7", + "Code": "850", + "Name": "Suspense", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "An entry that allows an unknown transaction to be entered, so the accounts can still be worked on in balance and the entry can be dealt with later.", + "Class": "LIABILITY", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR", + "ReportingCodeName": "Current liabilities", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "ea0e787d-67c5-4379-8ba7-d671a9522e1f", + "Code": "855", + "Name": "Clearing Account", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "", + "Class": "LIABILITY", + "EnablePaymentsToAccount": True, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA", + "ReportingCodeName": "Liability", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "76d45c0f-11e6-450c-8643-d67038945b7c", + "Code": "860", + "Name": "Rounding", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "An adjustment entry to allow for rounding", + "Class": "LIABILITY", + "SystemAccount": "ROUNDING", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR", + "ReportingCodeName": "Current liabilities", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "8f602967-b730-4ad9-aea2-97c97184b10a", + "Code": "877", + "Name": "Tracking Transfers", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "Transfers between tracking categories", + "Class": "LIABILITY", + "SystemAccount": "TRACKINGTRANSFERS", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.CUR", + "ReportingCodeName": "Current liabilities", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "50cad88d-0716-4e9a-b436-e0e903805207", + "Code": "880", + "Name": "Owner A Drawings", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "Withdrawals by the owners", + "Class": "LIABILITY", + "SystemAccount": "", + "EnablePaymentsToAccount": True, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EQU.DRA", + "ReportingCodeName": "Owners/partners drawings", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "680e946e-67d9-4c5d-a4ac-a70a0d3cef78", + "Code": "881", + "Name": "Owner A Funds Introduced", + "Status": "ACTIVE", + "Type": "CURRLIAB", + "TaxType": "NONE", + "Description": "Funds contributed by the owner", + "Class": "LIABILITY", + "SystemAccount": "", + "EnablePaymentsToAccount": True, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EQU.ADV", + "ReportingCodeName": "Owners/partners funds introduced", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "c8f8782b-33bf-4620-a275-6c13466cb73d", + "Code": "900", + "Name": "Loan", + "Status": "ACTIVE", + "Type": "TERMLIAB", + "TaxType": "NONE", + "Description": "Money that has been borrowed from a creditor", + "Class": "LIABILITY", + "SystemAccount": "", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "LIA.NCL.LOA", + "ReportingCodeName": "Loans (non current)", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "d2e8fca5-83cc-475d-9efb-03fe0dc57fd4", + "Code": "960", + "Name": "Retained Earnings", + "Status": "ACTIVE", + "Type": "EQUITY", + "TaxType": "NONE", + "Description": "Do not Use", + "Class": "EQUITY", + "SystemAccount": "RETAINEDEARNINGS", + "EnablePaymentsToAccount": False, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EQU.RET", + "ReportingCodeName": "Retained earnings", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, + }, + { + "AccountID": "f26bf6e9-42e1-438f-9db9-3b2f228de8be", + "Code": "970", + "Name": "Owner A Share Capital", + "Status": "ACTIVE", + "Type": "EQUITY", + "TaxType": "NONE", + "Description": "The value of shares purchased by the shareholders", + "Class": "EQUITY", + "SystemAccount": "", + "EnablePaymentsToAccount": True, + "ShowInExpenseClaims": False, + "BankAccountType": "", + "ReportingCode": "EQU.SHA", + "ReportingCodeName": "Share capital", + "HasAttachments": False, + "UpdatedDateUTC": "/Date(1661500186533+0000)/", + "AddToWatchlist": False, }, ], }, - 'get_all_tax_codes': # !/usr/bin/python + "get_all_tax_codes": # !/usr/bin/python # -*- coding: utf-8 -*- { - 'Id': '2d37447f-6069-49c9-856e-ea5ed41198d9', - 'Status': 'OK', - 'ProviderName': 'Fyle Staging', - 'DateTimeUTC': '/Date(1661864242639)/', - 'TaxRates': [ - { - 'Name': 'Exempt Sales', - 'TaxType': 'CAN030', - 'ReportTaxType': 'NONEOUTPUT', - 'CanApplyToAssets': True, - 'CanApplyToEquity': True, - 'CanApplyToExpenses': False, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': True, - 'DisplayTaxRate': 0.0, - 'EffectiveRate': 0.0, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'No Tax', - 'Rate': 0.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Id": "2d37447f-6069-49c9-856e-ea5ed41198d9", + "Status": "OK", + "ProviderName": "Fyle Staging", + "DateTimeUTC": "/Date(1661864242639)/", + "TaxRates": [ + { + "Name": "Exempt Sales", + "TaxType": "CAN030", + "ReportTaxType": "NONEOUTPUT", + "CanApplyToAssets": True, + "CanApplyToEquity": True, + "CanApplyToExpenses": False, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": True, + "DisplayTaxRate": 0.0, + "EffectiveRate": 0.0, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "No Tax", + "Rate": 0.0, + "IsCompound": False, + "IsNonRecoverable": False, + } + ], }, { - 'Name': 'MB - GST/RST on Purchases', - 'TaxType': 'CAN029', - 'ReportTaxType': 'PURCHASESINPUT', - 'CanApplyToAssets': True, - 'CanApplyToEquity': True, - 'CanApplyToExpenses': True, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': False, - 'DisplayTaxRate': 12.0, - 'EffectiveRate': 12.0, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'RST', - 'Rate': 7.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }, { - 'Name': 'GST', - 'Rate': 5.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Name": "MB - GST/RST on Purchases", + "TaxType": "CAN029", + "ReportTaxType": "PURCHASESINPUT", + "CanApplyToAssets": True, + "CanApplyToEquity": True, + "CanApplyToExpenses": True, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": False, + "DisplayTaxRate": 12.0, + "EffectiveRate": 12.0, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "RST", + "Rate": 7.0, + "IsCompound": False, + "IsNonRecoverable": False, + }, + { + "Name": "GST", + "Rate": 5.0, + "IsCompound": False, + "IsNonRecoverable": False, + }, + ], }, { - 'Name': 'MB - GST/RST on Sales', - 'TaxType': 'CAN028', - 'ReportTaxType': 'SALESOUTPUT', - 'CanApplyToAssets': True, - 'CanApplyToEquity': True, - 'CanApplyToExpenses': False, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': True, - 'DisplayTaxRate': 12.0, - 'EffectiveRate': 12.0, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'RST', - 'Rate': 7.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }, { - 'Name': 'GST', - 'Rate': 5.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Name": "MB - GST/RST on Sales", + "TaxType": "CAN028", + "ReportTaxType": "SALESOUTPUT", + "CanApplyToAssets": True, + "CanApplyToEquity": True, + "CanApplyToExpenses": False, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": True, + "DisplayTaxRate": 12.0, + "EffectiveRate": 12.0, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "RST", + "Rate": 7.0, + "IsCompound": False, + "IsNonRecoverable": False, + }, + { + "Name": "GST", + "Rate": 5.0, + "IsCompound": False, + "IsNonRecoverable": False, + }, + ], }, { - 'Name': 'Sales Tax on Imports', - 'TaxType': 'GSTONIMPORTS', - 'ReportTaxType': 'GSTONIMPORTS', - 'CanApplyToAssets': False, - 'CanApplyToEquity': False, - 'CanApplyToExpenses': False, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': False, - 'DisplayTaxRate': 0.0, - 'EffectiveRate': 0.0, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'TAX', - 'Rate': 0.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Name": "Sales Tax on Imports", + "TaxType": "GSTONIMPORTS", + "ReportTaxType": "GSTONIMPORTS", + "CanApplyToAssets": False, + "CanApplyToEquity": False, + "CanApplyToExpenses": False, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": False, + "DisplayTaxRate": 0.0, + "EffectiveRate": 0.0, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "TAX", + "Rate": 0.0, + "IsCompound": False, + "IsNonRecoverable": False, + } + ], }, { - 'Name': 'Tax Exempt', - 'TaxType': 'NONE', - 'ReportTaxType': 'NONE', - 'CanApplyToAssets': True, - 'CanApplyToEquity': True, - 'CanApplyToExpenses': True, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': True, - 'DisplayTaxRate': 0.0, - 'EffectiveRate': 0.0, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'No Tax', - 'Rate': 0.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Name": "Tax Exempt", + "TaxType": "NONE", + "ReportTaxType": "NONE", + "CanApplyToAssets": True, + "CanApplyToEquity": True, + "CanApplyToExpenses": True, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": True, + "DisplayTaxRate": 0.0, + "EffectiveRate": 0.0, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "No Tax", + "Rate": 0.0, + "IsCompound": False, + "IsNonRecoverable": False, + } + ], }, { - 'Name': 'Tax on Consulting', - 'TaxType': 'OUTPUT', - 'ReportTaxType': 'OUTPUT', - 'CanApplyToAssets': True, - 'CanApplyToEquity': True, - 'CanApplyToExpenses': True, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': True, - 'DisplayTaxRate': 8.25, - 'EffectiveRate': 8.25, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'City Tax', - 'Rate': 4.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }, { - 'Name': 'State Tax', - 'Rate': 4.25, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Name": "Tax on Consulting", + "TaxType": "OUTPUT", + "ReportTaxType": "OUTPUT", + "CanApplyToAssets": True, + "CanApplyToEquity": True, + "CanApplyToExpenses": True, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": True, + "DisplayTaxRate": 8.25, + "EffectiveRate": 8.25, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "City Tax", + "Rate": 4.0, + "IsCompound": False, + "IsNonRecoverable": False, + }, + { + "Name": "State Tax", + "Rate": 4.25, + "IsCompound": False, + "IsNonRecoverable": False, + }, + ], }, { - 'Name': 'Tax on Goods', - 'TaxType': 'TAX001', - 'CanApplyToAssets': True, - 'CanApplyToEquity': True, - 'CanApplyToExpenses': True, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': True, - 'DisplayTaxRate': 8.75, - 'EffectiveRate': 8.75, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'State Tax', - 'Rate': 4.5, - 'IsCompound': False, - 'IsNonRecoverable': False, - }, { - 'Name': 'City Tax', - 'Rate': 4.25, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Name": "Tax on Goods", + "TaxType": "TAX001", + "CanApplyToAssets": True, + "CanApplyToEquity": True, + "CanApplyToExpenses": True, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": True, + "DisplayTaxRate": 8.75, + "EffectiveRate": 8.75, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "State Tax", + "Rate": 4.5, + "IsCompound": False, + "IsNonRecoverable": False, + }, + { + "Name": "City Tax", + "Rate": 4.25, + "IsCompound": False, + "IsNonRecoverable": False, + }, + ], }, { - 'Name': 'Tax on Purchases', - 'TaxType': 'INPUT', - 'ReportTaxType': 'INPUT', - 'CanApplyToAssets': True, - 'CanApplyToEquity': True, - 'CanApplyToExpenses': True, - 'CanApplyToLiabilities': True, - 'CanApplyToRevenue': True, - 'DisplayTaxRate': 8.25, - 'EffectiveRate': 8.25, - 'Status': 'ACTIVE', - 'TaxComponents': [{ - 'Name': 'State Tax', - 'Rate': 4.25, - 'IsCompound': False, - 'IsNonRecoverable': False, - }, { - 'Name': 'City Tax', - 'Rate': 4.0, - 'IsCompound': False, - 'IsNonRecoverable': False, - }], + "Name": "Tax on Purchases", + "TaxType": "INPUT", + "ReportTaxType": "INPUT", + "CanApplyToAssets": True, + "CanApplyToEquity": True, + "CanApplyToExpenses": True, + "CanApplyToLiabilities": True, + "CanApplyToRevenue": True, + "DisplayTaxRate": 8.25, + "EffectiveRate": 8.25, + "Status": "ACTIVE", + "TaxComponents": [ + { + "Name": "State Tax", + "Rate": 4.25, + "IsCompound": False, + "IsNonRecoverable": False, + }, + { + "Name": "City Tax", + "Rate": 4.0, + "IsCompound": False, + "IsNonRecoverable": False, + }, + ], }, ], - } + }, } diff --git a/tests/test_xero/test_models.py b/tests/test_xero/test_models.py index d3b2f1ab..73e4a871 100644 --- a/tests/test_xero/test_models.py +++ b/tests/test_xero/test_models.py @@ -1,15 +1,28 @@ from datetime import datetime -import random -from apps.fyle.models import ExpenseGroup, Expense, ExpenseGroupSettings -from fyle_accounting_mappings.models import Mapping, MappingSetting, DestinationAttribute, ExpenseAttribute -from apps.xero.models import Bill, BillLineItem, get_tax_code_id_or_none, get_customer_id_or_none, get_tracking_category, \ - get_expense_purpose, get_transaction_date, get_item_code_or_none, BankTransaction, BankTransactionLineItem, Payment -from apps.workspaces.models import XeroCredentials, WorkspaceGeneralSettings + +from fyle_accounting_mappings.models import Mapping, MappingSetting + +from apps.fyle.models import Expense, ExpenseGroup, ExpenseGroupSettings from apps.tasks.models import TaskLog -from apps.xero.utils import XeroConnector +from apps.workspaces.models import WorkspaceGeneralSettings, XeroCredentials +from apps.xero.models import ( + BankTransaction, + BankTransactionLineItem, + Bill, + BillLineItem, + Payment, + get_customer_id_or_none, + get_expense_purpose, + get_item_code_or_none, + get_tax_code_id_or_none, + get_tracking_category, + get_transaction_date, +) from apps.xero.tasks import create_bank_transaction +from apps.xero.utils import XeroConnector from tests.test_fyle.fixtures import data -from .fixtures import data as xero_data +from tests.test_xero.fixtures import data as xero_data + def test_create_bill(db): expense_group = ExpenseGroup.objects.get(id=4) @@ -19,31 +32,38 @@ def test_create_bill(db): for bill_lineitem in bill_lineitems: assert bill_lineitem.amount == 10.0 - assert bill_lineitem.description == 'sravan.kumar@fyle.in, category - Food spent on 2020-01-01, report number - C/2022/06/R/1 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txGilVGolf60?org_id=orPJvXuoLqvJ' + assert ( + bill_lineitem.description + == "sravan.kumar@fyle.in, category - Food spent on 2020-01-01, report number - C/2022/06/R/1 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txGilVGolf60?org_id=orPJvXuoLqvJ" + ) - assert bill.currency == 'USD' + assert bill.currency == "USD" def test_bank_transaction(db): expense_group = ExpenseGroup.objects.get(id=5) bank_transaction = BankTransaction.create_bank_transaction(expense_group, True) - bank_transaction_lineitems = BankTransactionLineItem.create_bank_transaction_lineitems(expense_group) + bank_transaction_lineitems = ( + BankTransactionLineItem.create_bank_transaction_lineitems(expense_group) + ) for bank_transaction_lineitem in bank_transaction_lineitems: assert bank_transaction_lineitem.amount == 101.0 - - assert bank_transaction.currency == 'USD' - assert bank_transaction.transaction_date == '2022-05-24' + + assert bank_transaction.currency == "USD" + assert bank_transaction.transaction_date == "2022-05-24" def test_create_payment(db): expense_group = ExpenseGroup.objects.get(id=7) - payment = Payment.create_payment(expense_group=expense_group, invoice_id='sdfgh', account_id='sdfgh') + payment = Payment.create_payment( + expense_group=expense_group, invoice_id="sdfgh", account_id="sdfgh" + ) assert payment.amount == 45.0 - assert payment.invoice_id == 'sdfgh' + assert payment.invoice_id == "sdfgh" def test_get_tracking_category(db): @@ -58,39 +78,39 @@ def test_get_tracking_category(db): def test_get_item_code_or_none(db): expense_group = ExpenseGroup.objects.get(id=8) expenses = expense_group.expenses.all() - - mapping_setting = MappingSetting.objects.filter( + + mapping_setting = MappingSetting.objects.filter( workspace_id=expense_group.workspace_id, ).first() - mapping_setting.destination_field = 'ITEM' + mapping_setting.destination_field = "ITEM" mapping_setting.save() for lineitem in expenses: item_code = get_item_code_or_none(expense_group, lineitem) assert item_code == None - - mapping_setting.source_field = 'PROJECT' + + mapping_setting.source_field = "PROJECT" mapping_setting.save() - mapping = Mapping.objects.filter( - source_type='PROJECT', + mapping = Mapping.objects.filter( + source_type="PROJECT", workspace_id=expense_group.workspace_id, ).first() - mapping.destination_type = 'ITEM' + mapping.destination_type = "ITEM" mapping.save() for lineitem in expenses: - lineitem.project = 'Bank West' + lineitem.project = "Bank West" item_code = get_item_code_or_none(expense_group, lineitem) - assert item_code == 'Bank West' + assert item_code == "Bank West" - mapping_setting.source_field = 'COST_CENTER' + mapping_setting.source_field = "COST_CENTER" mapping_setting.save() for lineitem in expenses: - lineitem.cost_center = 'Adidas' + lineitem.cost_center = "Adidas" item_code = get_item_code_or_none(expense_group, lineitem) assert item_code == None @@ -110,22 +130,21 @@ def test_get_customer_id_or_none(db): for lineitem in expenses: lineitem.billable = True - lineitem.project = 'Bank West' + lineitem.project = "Bank West" bill_lineitem_objects = get_customer_id_or_none(expense_group, lineitem) - assert bill_lineitem_objects == '47f61ab1-5245-40a2-a3a5-bc224c850c8d' - - mapping_setting = MappingSetting.objects.filter( - workspace_id=expense_group.workspace_id, - destination_field='CUSTOMER' - ).first() - mapping_setting.source_field = 'PROJECT' + assert bill_lineitem_objects == "47f61ab1-5245-40a2-a3a5-bc224c850c8d" + + mapping_setting = MappingSetting.objects.filter( + workspace_id=expense_group.workspace_id, destination_field="CUSTOMER" + ).first() + mapping_setting.source_field = "PROJECT" mapping_setting.save() for lineitem in expenses: bill_lineitem_objects = get_customer_id_or_none(expense_group, lineitem) - assert bill_lineitem_objects == '47f61ab1-5245-40a2-a3a5-bc224c850c8d' + assert bill_lineitem_objects == "47f61ab1-5245-40a2-a3a5-bc224c850c8d" - mapping_setting.source_field = 'COST_CENTER' + mapping_setting.source_field = "COST_CENTER" mapping_setting.save() for lineitem in expenses: bill_lineitem_objects = get_customer_id_or_none(expense_group, lineitem) @@ -139,115 +158,138 @@ def test_get_expense_purpose(db): expenses = expense_group.expenses.all() for lineitem in expenses: - category = lineitem.category if lineitem.category == lineitem.sub_category else '{0} / {1}'.format( - lineitem.category, lineitem.sub_category) - + category = ( + lineitem.category + if lineitem.category == lineitem.sub_category + else "{0} / {1}".format(lineitem.category, lineitem.sub_category) + ) + expense_purpose = get_expense_purpose(workspace_id, lineitem, category) - assert expense_purpose == 'sravan.kumar@fyle.in, category - WIP / None spent on 2022-05-25, report number - C/2022/05/R/13 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txBMQRkBQciI?org_id=orPJvXuoLqvJ' + assert ( + expense_purpose + == "sravan.kumar@fyle.in, category - WIP / None spent on 2022-05-25, report number - C/2022/05/R/13 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txBMQRkBQciI?org_id=orPJvXuoLqvJ" + ) def test_get_transaction_date(db): expense_group = ExpenseGroup.objects.get(id=8) transaction_date = get_transaction_date(expense_group) - assert transaction_date <= datetime.now().strftime('%Y-%m-%d') + assert transaction_date <= datetime.now().strftime("%Y-%m-%d") - expense_group.description.pop('spent_at') + expense_group.description.pop("spent_at") - approved_at = {'approved_at': '2000-09-14'} + approved_at = {"approved_at": "2000-09-14"} expense_group.description.update(approved_at) transaction_date = get_transaction_date(expense_group) - assert transaction_date <= datetime.now().strftime('%Y-%m-%d') + assert transaction_date <= datetime.now().strftime("%Y-%m-%d") - verified_at = {'verified_at': '2000-09-14'} - expense_group.description.pop('approved_at') + verified_at = {"verified_at": "2000-09-14"} + expense_group.description.pop("approved_at") expense_group.description.update(verified_at) transaction_date = get_transaction_date(expense_group) - assert transaction_date <= datetime.now().strftime('%Y-%m-%d') + assert transaction_date <= datetime.now().strftime("%Y-%m-%d") - last_spent_at = {'last_spent_at': '2000-09-14'} - expense_group.description.pop('verified_at') + last_spent_at = {"last_spent_at": "2000-09-14"} + expense_group.description.pop("verified_at") expense_group.description.update(last_spent_at) transaction_date = get_transaction_date(expense_group) - assert transaction_date <= datetime.now().strftime('%Y-%m-%d') + assert transaction_date <= datetime.now().strftime("%Y-%m-%d") + def test_support_post_date_integrations(mocker, db): workspace_id = 1 - payload = data['expenses'] - expense_id = data['expenses'][0]['id'] + payload = data["expenses"] + expense_id = data["expenses"][0]["id"] Expense.create_expense_objects(payload, workspace_id) expense_objects = Expense.objects.get(expense_id=expense_id) expense_objects.reimbursable = False - expense_objects.fund_source = 'CCC' - expense_objects.source_account_type = 'PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT' + expense_objects.fund_source = "CCC" + expense_objects.source_account_type = "PERSONAL_CORPORATE_CREDIT_CARD_ACCOUNT" expense_objects.save() - assert expense_objects.posted_at.strftime("%m/%d/%Y") == '12/22/2021' + assert expense_objects.posted_at.strftime("%m/%d/%Y") == "12/22/2021" expense_group_settings = ExpenseGroupSettings.objects.get(workspace_id=workspace_id) - expense_group_settings.reimbursable_export_date_type = 'last_spent_at' - expense_group_settings.ccc_export_date_type = 'posted_at' - expense_group_settings.corporate_credit_card_expense_group_fields = ['claim_number', 'fund_source', 'projects', 'employee_email', 'report_id', 'posted_at'] + expense_group_settings.reimbursable_export_date_type = "last_spent_at" + expense_group_settings.ccc_export_date_type = "posted_at" + expense_group_settings.corporate_credit_card_expense_group_fields = [ + "claim_number", + "fund_source", + "projects", + "employee_email", + "report_id", + "posted_at", + ] expense_group_settings.save() - expense_groups = ExpenseGroup.create_expense_groups_by_report_id_fund_source([expense_objects], workspace_id) - assert expense_groups[0].description['posted_at'] == expense_objects.posted_at.strftime("%Y-%m-%d") - + expense_groups = ExpenseGroup.create_expense_groups_by_report_id_fund_source( + [expense_objects], workspace_id + ) + assert expense_groups[0].description[ + "posted_at" + ] == expense_objects.posted_at.strftime("%Y-%m-%d") + mocker.patch( - 'xerosdk.apis.BankTransactions.post', - return_value=xero_data['bank_transaction_object'] + "xerosdk.apis.BankTransactions.post", + return_value=xero_data["bank_transaction_object"], ) mocker.patch( - 'xerosdk.apis.Contacts.search_contact_by_contact_name', - return_value=xero_data['create_contact']['Contacts'][0] + "xerosdk.apis.Contacts.search_contact_by_contact_name", + return_value=xero_data["create_contact"]["Contacts"][0], ) mocker.patch( - 'xerosdk.apis.Contacts.post', - return_vaue=xero_data['create_contact']['Contacts'][0] + "xerosdk.apis.Contacts.post", + return_vaue=xero_data["create_contact"]["Contacts"][0], ) xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=1) - general_settings.auto_map_employees = 'NAME' + general_settings.auto_map_employees = "NAME" general_settings.import_items = False general_settings.auto_create_destination_entity = True general_settings.save() - task_log = TaskLog.objects.first() task_log.workspace_id = 1 - task_log.status = 'READY' - task_log.type = 'CREATING_BANK_TRANSACTION' + task_log.status = "READY" + task_log.type = "CREATING_BANK_TRANSACTION" task_log.save() expense_group = ExpenseGroup.objects.get(id=5) - expense_group.description.pop('spent_at') - expense_group.description['posted_at'] = '2021-12-22' + expense_group.description.pop("spent_at") + expense_group.description["posted_at"] = "2021-12-22" expense_group.save() expenses = expense_group.expenses.all() for expense in expenses: expense.expense_group_id = expense_group.id expense.save() - - bank_transaction_lineitems = BankTransactionLineItem.objects.get(expense_id=expense.id) + + bank_transaction_lineitems = BankTransactionLineItem.objects.get( + expense_id=expense.id + ) bank_transaction_lineitems.delete() - + expense_group.expenses.set(expenses) - + create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - + task_log = TaskLog.objects.get(pk=task_log.id) bank_transaction = BankTransaction.objects.get(expense_group_id=expense_group.id) - assert task_log.status=='COMPLETE' - assert bank_transaction.currency == 'USD' - assert bank_transaction.transaction_date.strftime("%m/%d/%Y") == expense_objects.posted_at.strftime("%m/%d/%Y") + assert task_log.status == "COMPLETE" + assert bank_transaction.currency == "USD" + assert bank_transaction.transaction_date.strftime( + "%m/%d/%Y" + ) == expense_objects.posted_at.strftime("%m/%d/%Y") diff --git a/tests/test_xero/test_tasks.py b/tests/test_xero/test_tasks.py index 9ac90d80..678f04d6 100644 --- a/tests/test_xero/test_tasks.py +++ b/tests/test_xero/test_tasks.py @@ -1,171 +1,217 @@ import logging import random +from datetime import datetime from unittest import mock + from django_q.models import Schedule -from apps.tasks.models import TaskLog -from apps.xero.models import Bill, BillLineItem, BankTransaction, BankTransactionLineItem -from apps.xero.tasks import * -from apps.xero.queue import * -from apps.xero.tasks import __validate_expense_group -from xerosdk.exceptions import XeroSDKError, WrongParamsError, InvalidGrant, RateLimitError, NoPrivilegeError -from fyle_accounting_mappings.models import Mapping, ExpenseAttribute -from apps.workspaces.models import XeroCredentials, LastExportDetail -from apps.fyle.models import ExpenseGroup, Reimbursement, Expense +from fyle_accounting_mappings.models import ExpenseAttribute, Mapping +from xerosdk.exceptions import InvalidGrant, NoPrivilegeError, RateLimitError, WrongParamsError, XeroSDKError + +from apps.fyle.models import Expense, ExpenseGroup, Reimbursement from apps.mappings.models import GeneralMapping, TenantMapping +from apps.tasks.models import TaskLog +from apps.workspaces.models import LastExportDetail, WorkspaceGeneralSettings, XeroCredentials +from apps.xero.exceptions import update_last_export_details +from apps.xero.models import BankTransaction, BankTransactionLineItem, Bill, BillLineItem +from apps.xero.queue import schedule_payment_creation, schedule_reimbursements_sync, schedule_xero_objects_status_sync +from apps.xero.tasks import ( + __validate_expense_group, + attach_customer_to_export, + check_xero_object_status, + create_bank_transaction, + create_bill, + create_chain_and_export, + create_missing_currency, + create_or_update_employee_mapping, + create_payment, + get_or_create_credit_card_contact, + load_attachments, + process_reimbursements, + schedule_bank_transaction_creation, + schedule_bills_creation, + update_xero_short_code, +) from apps.xero.utils import XeroConnector from fyle_xero_api.exceptions import BulkError -from .fixtures import data from tests.test_fyle.fixtures import data as fyle_data +from tests.test_xero.fixtures import data from tests.test_xero.fixtures import data as xero_data -from apps.xero.exceptions import update_last_export_details - logger = logging.getLogger(__name__) def test_get_or_create_credit_card_contact(mocker, db): - mocker.patch( - 'apps.xero.utils.XeroConnector.get_or_create_contact', - return_value=[] - ) + mocker.patch("apps.xero.utils.XeroConnector.get_or_create_contact", return_value=[]) workspace_id = 1 - contact = get_or_create_credit_card_contact(workspace_id, 'samp_merchant', False) + contact = get_or_create_credit_card_contact(workspace_id, "samp_merchant", False) assert contact == [] - contact = get_or_create_credit_card_contact(workspace_id, 'samp_merchant', True) + contact = get_or_create_credit_card_contact(workspace_id, "samp_merchant", True) assert contact == [] try: - with mock.patch('apps.xero.utils.XeroConnector.get_or_create_contact') as mock_call: - mock_call.side_effect = [None, WrongParamsError(msg='wrong parameters', response='wrong parameters')] - contact = get_or_create_credit_card_contact(workspace_id, 'samp_merchant', False) - except: - logger.info('wrong parameters') - - contact = get_or_create_credit_card_contact(workspace_id, '', True) + with mock.patch( + "apps.xero.utils.XeroConnector.get_or_create_contact" + ) as mock_call: + mock_call.side_effect = [ + None, + WrongParamsError(msg="wrong parameters", response="wrong parameters"), + ] + contact = get_or_create_credit_card_contact( + workspace_id, "samp_merchant", False + ) + except Exception: + logger.info("wrong parameters") + + contact = get_or_create_credit_card_contact(workspace_id, "", True) assert contact == [] mocker.patch( - 'apps.xero.utils.XeroConnector.get_or_create_contact', - return_value={'name': 'Books by Bessie'} + "apps.xero.utils.XeroConnector.get_or_create_contact", + return_value={"name": "Books by Bessie"}, ) - contact = get_or_create_credit_card_contact(workspace_id, 'Books by Bessie', True) - assert contact == {'name': 'Books by Bessie'} + contact = get_or_create_credit_card_contact(workspace_id, "Books by Bessie", True) + assert contact == {"name": "Books by Bessie"} try: - with mock.patch('apps.xero.utils.XeroConnector.get_or_create_contact') as mock_call: - mock_call.side_effect = WrongParamsError(msg='wrong parameters', response='wrong parameters') - contact = get_or_create_credit_card_contact(workspace_id, 'samp_merchant', False) - except: - logger.info('wrong parameters') + with mock.patch( + "apps.xero.utils.XeroConnector.get_or_create_contact" + ) as mock_call: + mock_call.side_effect = WrongParamsError( + msg="wrong parameters", response="wrong parameters" + ) + contact = get_or_create_credit_card_contact( + workspace_id, "samp_merchant", False + ) + except Exception: + logger.info("wrong parameters") def test_load_attachments(mocker, db): mocker.patch( - 'fyle_integrations_platform_connector.apis.Files.bulk_generate_file_urls', + "fyle_integrations_platform_connector.apis.Files.bulk_generate_file_urls", return_value=[], ) mocker.patch( - 'apps.xero.utils.XeroConnector.post_attachments', + "apps.xero.utils.XeroConnector.post_attachments", return_value=[], ) workspace_id = 1 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) expense_group = ExpenseGroup.objects.get(id=4) expenses = expense_group.expenses.all() for expense in expenses: - expense.file_ids = ['asdfghj'] + expense.file_ids = ["asdfghj"] expense.save() - - load_attachments(xero_connection, 'dfgh', 'werty', expense_group) - with mock.patch('apps.xero.utils.XeroConnector.post_attachments') as mock_call: + load_attachments(xero_connection, "dfgh", "werty", expense_group) + + with mock.patch("apps.xero.utils.XeroConnector.post_attachments") as mock_call: mock_call.side_effect = Exception() - load_attachments(xero_connection, 'dfgh', 'werty', expense_group) + load_attachments(xero_connection, "dfgh", "werty", expense_group) def test_attach_customer_to_export(mocker, db): mocker.patch( - 'xerosdk.apis.LinkedTransactions.post', + "xerosdk.apis.LinkedTransactions.post", return_value=[], ) workspace_id = 1 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) bill = Bill.objects.filter(id=4).first() bill_lineitems = BillLineItem.objects.get(bill_id=bill.id) - bill_lineitems.customer_id = '234' + bill_lineitems.customer_id = "234" bill_lineitems.save() task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' - task_log.type = 'CREATING_BILL' + task_log.status = "READY" + task_log.type = "CREATING_BILL" task_log.bill = bill task_log.save() attach_customer_to_export(xero_connection, task_log) try: - with mock.patch('xerosdk.apis.LinkedTransactions.post') as mock_call: + with mock.patch("xerosdk.apis.LinkedTransactions.post") as mock_call: mock_call.side_effect = Exception() attach_customer_to_export(xero_connection, task_log) assert 1 == 2 - except: - logger.info('Something unexpected happened during attaching customer to export') + except Exception: + logger.info("Something unexpected happened during attaching customer to export") def test_create_or_update_employee_mapping(mocker, db): workspace_id = 1 mocker.patch( - 'xerosdk.apis.Contacts.search_contact_by_contact_name', - return_value=data['create_contact']['Contacts'][0] + "xerosdk.apis.Contacts.search_contact_by_contact_name", + return_value=data["create_contact"]["Contacts"][0], ) xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) expense_group = ExpenseGroup.objects.get(id=4) - expense_group.description.update({'employee_email': 'ironman@fyle.in'}) + expense_group.description.update({"employee_email": "ironman@fyle.in"}) expense_group.save() source = ExpenseAttribute.objects.get( - attribute_type='EMPLOYEE', value__iexact='ironman@fyle.in', workspace_id=workspace_id - ) + attribute_type="EMPLOYEE", + value__iexact="ironman@fyle.in", + workspace_id=workspace_id, + ) mapping = Mapping.objects.filter(source=source) mapping.delete() - create_or_update_employee_mapping(expense_group=expense_group, xero_connection=xero_connection, auto_map_employees_preference='EMAIL') + create_or_update_employee_mapping( + expense_group=expense_group, + xero_connection=xero_connection, + auto_map_employees_preference="EMAIL", + ) - with mock.patch('fyle_accounting_mappings.models.Mapping.create_or_update_mapping') as mock_call: + with mock.patch( + "fyle_accounting_mappings.models.Mapping.create_or_update_mapping" + ) as mock_call: mapping = Mapping.objects.filter(source=source) mapping.delete() - - mock_call.side_effect = WrongParamsError(msg='wrong parameters', response='wrong parameters') - create_or_update_employee_mapping(expense_group=expense_group, xero_connection=xero_connection, auto_map_employees_preference='NAME') + + mock_call.side_effect = WrongParamsError( + msg="wrong parameters", response="wrong parameters" + ) + create_or_update_employee_mapping( + expense_group=expense_group, + xero_connection=xero_connection, + auto_map_employees_preference="NAME", + ) def test_post_bill_success(mocker, create_task_logs, db): - mocker.patch( - 'xerosdk.apis.Invoices.post', - return_value=data['bill_object'] - ) + mocker.patch("xerosdk.apis.Invoices.post", return_value=data["bill_object"]) workspace_id = 1 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' - task_log.type = 'CREATING_BILL' + task_log.status = "READY" + task_log.type = "CREATING_BILL" task_log.save() expense_group = ExpenseGroup.objects.get(id=4) @@ -184,16 +230,16 @@ def test_post_bill_success(mocker, create_task_logs, db): expense_group.expenses.set(expenses) create_bill(expense_group.id, task_log.id, xero_connection, False) - + task_log = TaskLog.objects.get(pk=task_log.id) bill = Bill.objects.get(expense_group_id=expense_group.id) - assert task_log.status=='COMPLETE' - assert bill.currency == 'USD' + assert task_log.status == "COMPLETE" + assert bill.currency == "USD" task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' - task_log.type = 'CREATING_BILL' + task_log.status = "READY" + task_log.type = "CREATING_BILL" task_log.save() expense_group = ExpenseGroup.objects.get(id=3) @@ -212,23 +258,25 @@ def test_post_bill_success(mocker, create_task_logs, db): expense_group.expenses.set(expenses) create_bill(expense_group.id, task_log.id, xero_connection, False) - + task_log = TaskLog.objects.get(pk=task_log.id) bill = Bill.objects.get(expense_group_id=expense_group.id) - assert task_log.status=='COMPLETE' - assert bill.currency == 'USD' + assert task_log.status == "COMPLETE" + assert bill.currency == "USD" def test_create_bill_exceptions(db): workspace_id = 1 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' - task_log.type = 'CREATING_BILL' + task_log.status = "READY" + task_log.type = "CREATING_BILL" task_log.save() expense_group = ExpenseGroup.objects.get(id=4) @@ -245,45 +293,108 @@ def test_create_bill_exceptions(db): bill_lineitems.delete() expense_group.expenses.set(expenses) - - with mock.patch('apps.xero.utils.XeroConnector.post_bill') as mock_call: + + with mock.patch("apps.xero.utils.XeroConnector.post_bill") as mock_call: mock_call.side_effect = XeroCredentials.DoesNotExist() create_bill(expense_group.id, task_log.id, xero_connection, False) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'FAILED' + assert task_log.status == "FAILED" - mock_call.side_effect = BulkError(msg='employess not found', response='mapping error') + mock_call.side_effect = BulkError( + msg="employess not found", response="mapping error" + ) create_bill(expense_group.id, task_log.id, xero_connection, False) - mock_call.side_effect = InvalidGrant(msg='invalid grant', response='invalid grant') + mock_call.side_effect = InvalidGrant( + msg="invalid grant", response="invalid grant" + ) create_bill(expense_group.id, task_log.id, xero_connection, False) - - mock_call.side_effect = RateLimitError(msg='rate limit exceeded', response='rate limit exceeded') + + mock_call.side_effect = RateLimitError( + msg="rate limit exceeded", response="rate limit exceeded" + ) create_bill(expense_group.id, task_log.id, xero_connection, False) - - mock_call.side_effect = NoPrivilegeError(msg='no privilage error', response='no privilage error') + + mock_call.side_effect = NoPrivilegeError( + msg="no privilage error", response="no privilage error" + ) create_bill(expense_group.id, task_log.id, xero_connection, False) - - mock_call.side_effect = XeroSDKError(msg='wrong parameter', response='xerosdk error') + + mock_call.side_effect = XeroSDKError( + msg="wrong parameter", response="xerosdk error" + ) create_bill(expense_group.id, task_log.id, xero_connection, False) mock_call.side_effect = Exception() create_bill(expense_group.id, task_log.id, xero_connection, False) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'FATAL' + assert task_log.status == "FATAL" - mock_call.side_effect = WrongParamsError(msg={ - 'Message': 'Invalid parametrs' - }, response='Invalid params') + mock_call.side_effect = WrongParamsError( + msg={"Message": "Invalid parametrs"}, response="Invalid params" + ) create_bill(expense_group.id, task_log.id, xero_connection, False) - mock_call.side_effect = WrongParamsError({'ErrorNumber': 10, 'Type': 'ValidationException', 'Message': 'A validation exception occurred', 'Elements': [{'BankAccount': {'AccountID': '562555f2-8cde-4ce9-8203-0363922537a4', 'Code': '090', 'ValidationErrors': []}, 'Type': 'SPEND', 'Reference': 'E/2022/03/T/1', 'Url': 'None/app/admin/#/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn', 'IsReconciled': False, 'Contact': {'ContactID': '73e6b7fb-ba7e-4b0a-a08b-f971b8ebbed8', 'Addresses': [], 'Phones': [], 'ContactGroups': [], 'ContactPersons': [], 'HasValidationErrors': False, 'ValidationErrors': []}, 'DateString': '2022-03-30T00:00:00', 'Date': '/Date(1648598400000+0000)/', 'Status': 'AUTHORISED', 'LineAmountTypes': 'Exclusive', 'LineItems': [{'Description': 'ashwin.t@fyle.in, category - Food spent on 2022-03-30, report number - C/2022/03/R/1 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn', 'UnitAmount': 92.38, 'TaxType': 'OUTPUT', 'TaxAmount': 7.62, 'LineAmount': 92.38, 'AccountCode': '425', 'Tracking': [], 'Quantity': 1.0, 'AccountID': 'c4b1c463-9913-4672-a8b8-01a3b546126f', 'ValidationErrors': []}], 'SubTotal': 92.38, 'TotalTax': 7.62, 'Total': 100.0, 'CurrencyCode': 'USD', 'ValidationErrors': [{'Message': 'Url must be a valid absolute url'}]}]}) + mock_call.side_effect = WrongParamsError( + { + "ErrorNumber": 10, + "Type": "ValidationException", + "Message": "A validation exception occurred", + "Elements": [ + { + "BankAccount": { + "AccountID": "562555f2-8cde-4ce9-8203-0363922537a4", + "Code": "090", + "ValidationErrors": [], + }, + "Type": "SPEND", + "Reference": "E/2022/03/T/1", + "Url": "None/app/admin/#/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn", + "IsReconciled": False, + "Contact": { + "ContactID": "73e6b7fb-ba7e-4b0a-a08b-f971b8ebbed8", + "Addresses": [], + "Phones": [], + "ContactGroups": [], + "ContactPersons": [], + "HasValidationErrors": False, + "ValidationErrors": [], + }, + "DateString": "2022-03-30T00:00:00", + "Date": "/Date(1648598400000+0000)/", + "Status": "AUTHORISED", + "LineAmountTypes": "Exclusive", + "LineItems": [ + { + "Description": "ashwin.t@fyle.in, category - Food spent on 2022-03-30, report number - C/2022/03/R/1 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn", + "UnitAmount": 92.38, + "TaxType": "OUTPUT", + "TaxAmount": 7.62, + "LineAmount": 92.38, + "AccountCode": "425", + "Tracking": [], + "Quantity": 1.0, + "AccountID": "c4b1c463-9913-4672-a8b8-01a3b546126f", + "ValidationErrors": [], + } + ], + "SubTotal": 92.38, + "TotalTax": 7.62, + "Total": 100.0, + "CurrencyCode": "USD", + "ValidationErrors": [ + {"Message": "Url must be a valid absolute url"} + ], + } + ], + } + ) create_bill(expense_group.id, task_log.id, xero_connection, False) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'FAILED' + assert task_log.status == "FAILED" def test_schedule_bills_creation(db): @@ -298,36 +409,39 @@ def test_schedule_bills_creation(db): bill.save() task_log = TaskLog.objects.filter(bill_id=bill.id).first() - task_log.status = 'READY' + task_log.status = "READY" task_log.save() - chaining_attributes = schedule_bills_creation(workspace_id=workspace_id, expense_group_ids=[4]) + chaining_attributes = schedule_bills_creation( + workspace_id=workspace_id, expense_group_ids=[4] + ) assert len(chaining_attributes) == 1 def test_post_create_bank_transaction_success(mocker, db): mocker.patch( - 'xerosdk.apis.BankTransactions.post', - return_value=data['bank_transaction_object'] + "xerosdk.apis.BankTransactions.post", + return_value=data["bank_transaction_object"], ) mocker.patch( - 'xerosdk.apis.Contacts.search_contact_by_contact_name', - return_value=data['create_contact']['Contacts'][0] + "xerosdk.apis.Contacts.search_contact_by_contact_name", + return_value=data["create_contact"]["Contacts"][0], ) mocker.patch( - 'xerosdk.apis.Contacts.post', - return_vaue=data['create_contact']['Contacts'][0] + "xerosdk.apis.Contacts.post", return_vaue=data["create_contact"]["Contacts"][0] ) workspace_id = 1 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' - task_log.type = 'CREATING_BANK_TRANSACTION' + task_log.status = "READY" + task_log.type = "CREATING_BANK_TRANSACTION" task_log.save() expense_group = ExpenseGroup.objects.get(id=5) @@ -336,23 +450,25 @@ def test_post_create_bank_transaction_success(mocker, db): for expense in expenses: expense.expense_group_id = expense_group.id expense.save() - - bank_transaction_lineitems = BankTransactionLineItem.objects.get(expense_id=expense.id) + + bank_transaction_lineitems = BankTransactionLineItem.objects.get( + expense_id=expense.id + ) bank_transaction_lineitems.delete() - + expense_group.expenses.set(expenses) - + create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - + task_log = TaskLog.objects.get(pk=task_log.id) bank_transaction = BankTransaction.objects.get(expense_group_id=expense_group.id) - assert task_log.status=='COMPLETE' - assert bank_transaction.currency == 'USD' + assert task_log.status == "COMPLETE" + assert bank_transaction.currency == "USD" task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' - task_log.type = 'CREATING_BANK_TRANSACTION' + task_log.status = "READY" + task_log.type = "CREATING_BANK_TRANSACTION" task_log.save() expense_group = ExpenseGroup.objects.get(id=6) @@ -361,19 +477,21 @@ def test_post_create_bank_transaction_success(mocker, db): for expense in expenses: expense.expense_group_id = expense_group.id expense.save() - - bank_transaction_lineitems = BankTransactionLineItem.objects.get(expense_id=expense.id) + + bank_transaction_lineitems = BankTransactionLineItem.objects.get( + expense_id=expense.id + ) bank_transaction_lineitems.delete() - + expense_group.expenses.set(expenses) - + create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - + task_log = TaskLog.objects.get(pk=task_log.id) bank_transaction = BankTransaction.objects.get(expense_group_id=expense_group.id) - assert task_log.status=='COMPLETE' - assert bank_transaction.currency == 'USD' + assert task_log.status == "COMPLETE" + assert bank_transaction.currency == "USD" def test_schedule_bank_transaction_creation(db): @@ -383,15 +501,19 @@ def test_schedule_bank_transaction_creation(db): expense_group.exported_at = None expense_group.save() - bank_transaction = BankTransaction.objects.filter(expense_group_id=expense_group.id).first() + bank_transaction = BankTransaction.objects.filter( + expense_group_id=expense_group.id + ).first() bank_transaction.expense_group_id = 4 bank_transaction.save() task_log = TaskLog.objects.filter(bank_transaction_id=bank_transaction.id).first() - task_log.status = 'READY' + task_log.status = "READY" task_log.save() - chaining_attributes = schedule_bank_transaction_creation(workspace_id=workspace_id, expense_group_ids=[5]) + chaining_attributes = schedule_bank_transaction_creation( + workspace_id=workspace_id, expense_group_ids=[5] + ) assert len(chaining_attributes) == 1 @@ -399,11 +521,13 @@ def test_create_bank_transactions_exceptions(db): workspace_id = 1 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' - task_log.type = 'CREATING_BANK_TRANSACTION' + task_log.status = "READY" + task_log.type = "CREATING_BANK_TRANSACTION" task_log.save() expense_group = ExpenseGroup.objects.get(id=5) @@ -416,64 +540,128 @@ def test_create_bank_transactions_exceptions(db): expense.expense_group_id = expense_group.id expense.save() - bank_transaction_lineitems = BankTransactionLineItem.objects.get(expense_id=expense.id) + bank_transaction_lineitems = BankTransactionLineItem.objects.get( + expense_id=expense.id + ) bank_transaction_lineitems.delete() - + expense_group.expenses.set(expenses) - general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=expense_group.workspace_id) + general_settings = WorkspaceGeneralSettings.objects.get( + workspace_id=expense_group.workspace_id + ) general_settings.map_merchant_to_contact = False general_settings.auto_map_employees = True general_settings.auto_create_destination_entity = True general_settings.save() - - with mock.patch('apps.xero.utils.XeroConnector.post_bank_transaction') as mock_call: + + with mock.patch("apps.xero.utils.XeroConnector.post_bank_transaction") as mock_call: mock_call.side_effect = XeroCredentials.DoesNotExist() create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'FAILED' + assert task_log.status == "FAILED" - mock_call.side_effect = BulkError(msg='employess not found', response='mapping error') + mock_call.side_effect = BulkError( + msg="employess not found", response="mapping error" + ) create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - mock_call.side_effect = InvalidGrant(msg='invalid grant', response='invalid grant') + mock_call.side_effect = InvalidGrant( + msg="invalid grant", response="invalid grant" + ) create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - - mock_call.side_effect = RateLimitError(msg='rate limit exceeded', response='rate limit exceeded') + + mock_call.side_effect = RateLimitError( + msg="rate limit exceeded", response="rate limit exceeded" + ) create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - - mock_call.side_effect = NoPrivilegeError(msg='no privilage error', response='no privilage error') + + mock_call.side_effect = NoPrivilegeError( + msg="no privilage error", response="no privilage error" + ) create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - - mock_call.side_effect = XeroSDKError(msg='xerosdk error', response='xerosdk error') + + mock_call.side_effect = XeroSDKError( + msg="xerosdk error", response="xerosdk error" + ) create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) mock_call.side_effect = Exception() create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - mock_call.side_effect = WrongParamsError(msg={ - 'Message': 'Invalid parametrs' - }, response='Invalid params') + mock_call.side_effect = WrongParamsError( + msg={"Message": "Invalid parametrs"}, response="Invalid params" + ) create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) - mock_call.side_effect = WrongParamsError({'ErrorNumber': 10, 'Type': 'ValidationException', 'Message': 'A validation exception occurred', 'Elements': [{'BankAccount': {'AccountID': '562555f2-8cde-4ce9-8203-0363922537a4', 'Code': '090', 'ValidationErrors': []}, 'Type': 'SPEND', 'Reference': 'E/2022/03/T/1', 'Url': 'None/app/admin/#/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn', 'IsReconciled': False, 'Contact': {'ContactID': '73e6b7fb-ba7e-4b0a-a08b-f971b8ebbed8', 'Addresses': [], 'Phones': [], 'ContactGroups': [], 'ContactPersons': [], 'HasValidationErrors': False, 'ValidationErrors': []}, 'DateString': '2022-03-30T00:00:00', 'Date': '/Date(1648598400000+0000)/', 'Status': 'AUTHORISED', 'LineAmountTypes': 'Exclusive', 'LineItems': [{'Description': 'ashwin.t@fyle.in, category - Food spent on 2022-03-30, report number - C/2022/03/R/1 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn', 'UnitAmount': 92.38, 'TaxType': 'OUTPUT', 'TaxAmount': 7.62, 'LineAmount': 92.38, 'AccountCode': '425', 'Tracking': [], 'Quantity': 1.0, 'AccountID': 'c4b1c463-9913-4672-a8b8-01a3b546126f', 'ValidationErrors': []}], 'SubTotal': 92.38, 'TotalTax': 7.62, 'Total': 100.0, 'CurrencyCode': 'USD', 'ValidationErrors': [{'Message': 'Url must be a valid absolute url'}]}]}) + mock_call.side_effect = WrongParamsError( + { + "ErrorNumber": 10, + "Type": "ValidationException", + "Message": "A validation exception occurred", + "Elements": [ + { + "BankAccount": { + "AccountID": "562555f2-8cde-4ce9-8203-0363922537a4", + "Code": "090", + "ValidationErrors": [], + }, + "Type": "SPEND", + "Reference": "E/2022/03/T/1", + "Url": "None/app/admin/#/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn", + "IsReconciled": False, + "Contact": { + "ContactID": "73e6b7fb-ba7e-4b0a-a08b-f971b8ebbed8", + "Addresses": [], + "Phones": [], + "ContactGroups": [], + "ContactPersons": [], + "HasValidationErrors": False, + "ValidationErrors": [], + }, + "DateString": "2022-03-30T00:00:00", + "Date": "/Date(1648598400000+0000)/", + "Status": "AUTHORISED", + "LineAmountTypes": "Exclusive", + "LineItems": [ + { + "Description": "ashwin.t@fyle.in, category - Food spent on 2022-03-30, report number - C/2022/03/R/1 - https://staging.fyle.tech/app/main/#/enterprise/view_expense/txkImp4VID2Z?org_id=orhlmPm4H0wn", + "UnitAmount": 92.38, + "TaxType": "OUTPUT", + "TaxAmount": 7.62, + "LineAmount": 92.38, + "AccountCode": "425", + "Tracking": [], + "Quantity": 1.0, + "AccountID": "c4b1c463-9913-4672-a8b8-01a3b546126f", + "ValidationErrors": [], + } + ], + "SubTotal": 92.38, + "TotalTax": 7.62, + "Total": 100.0, + "CurrencyCode": "USD", + "ValidationErrors": [ + {"Message": "Url must be a valid absolute url"} + ], + } + ], + } + ) create_bank_transaction(expense_group.id, task_log.id, xero_connection, False) task_log = TaskLog.objects.get(id=task_log.id) - assert task_log.status == 'FAILED' + assert task_log.status == "FAILED" def test_create_payment(mocker, db): - mocker.patch( - 'apps.xero.utils.XeroConnector.post_payment', - return_value={} - ) + mocker.patch("apps.xero.utils.XeroConnector.post_payment", return_value={}) workspace_id = 1 mocker.patch( - 'fyle.platform.apis.v1beta.admin.Reimbursements.list_all', - return_value=fyle_data['get_all_reimbursements'] + "fyle.platform.apis.v1beta.admin.Reimbursements.list_all", + return_value=fyle_data["get_all_reimbursements"], ) bills = Bill.objects.all() @@ -485,19 +673,21 @@ def test_create_payment(mocker, db): for expense in expenses: Reimbursement.objects.update_or_create( settlement_id=expense.settlement_id, - reimbursement_id='qwertyuio', - state='COMPLETE', - workspace_id=workspace_id + reimbursement_id="qwertyuio", + state="COMPLETE", + workspace_id=workspace_id, ) general_mappings = GeneralMapping.objects.filter(workspace_id=workspace_id).first() - general_mappings.payment_account_id = '2' + general_mappings.payment_account_id = "2" general_mappings.save() create_payment(workspace_id) - task_log = TaskLog.objects.filter(task_id='PAYMENT_{}'.format(bill.expense_group.id)).first() - assert task_log.status == 'COMPLETE' + task_log = TaskLog.objects.filter( + task_id="PAYMENT_{}".format(bill.expense_group.id) + ).first() + assert task_log.status == "COMPLETE" bill = Bill.objects.last() bill.payment_synced = False @@ -508,16 +698,16 @@ def test_create_payment(mocker, db): try: create_payment(workspace_id) - except: - logger.info('Xero Account not connected') + except Exception: + logger.info("Xero Account not connected") def test_create_payment_exceptions(mocker, db): workspace_id = 1 mocker.patch( - 'fyle.platform.apis.v1beta.admin.Reimbursements.list_all', - return_value=fyle_data['get_all_reimbursements'] + "fyle.platform.apis.v1beta.admin.Reimbursements.list_all", + return_value=fyle_data["get_all_reimbursements"], ) bills = Bill.objects.all() @@ -529,25 +719,33 @@ def test_create_payment_exceptions(mocker, db): for expense in expenses: Reimbursement.objects.update_or_create( settlement_id=expense.settlement_id, - reimbursement_id='qwertyuio', - state='COMPLETE', - workspace_id=workspace_id + reimbursement_id="qwertyuio", + state="COMPLETE", + workspace_id=workspace_id, ) general_mappings = GeneralMapping.objects.filter(workspace_id=workspace_id).first() - general_mappings.payment_account_id = '2' + general_mappings.payment_account_id = "2" general_mappings.save() - - with mock.patch('apps.workspaces.models.XeroCredentials.objects.get') as mock_call: - mock_call.side_effect = BulkError(msg='employess not found', response='mapping error') + + with mock.patch("apps.workspaces.models.XeroCredentials.objects.get") as mock_call: + mock_call.side_effect = BulkError( + msg="employess not found", response="mapping error" + ) create_payment(workspace_id) - task_log = TaskLog.objects.filter(workspace_id=workspace_id, detail='mapping error').first() - assert task_log.status == 'FAILED' + task_log = TaskLog.objects.filter( + workspace_id=workspace_id, detail="mapping error" + ).first() + assert task_log.status == "FAILED" - mock_call.side_effect = WrongParamsError(msg='wrong parameter', response='invalid parameter') + mock_call.side_effect = WrongParamsError( + msg="wrong parameter", response="invalid parameter" + ) create_payment(workspace_id) - task_log = TaskLog.objects.filter(workspace_id=workspace_id, detail='wrong parameter').first() - assert task_log.status == 'FAILED' + task_log = TaskLog.objects.filter( + workspace_id=workspace_id, detail="wrong parameter" + ).first() + assert task_log.status == "FAILED" mock_call.side_effect = Exception() create_payment(workspace_id) @@ -557,29 +755,34 @@ def test_schedule_payment_creation(db): workspace_id = 1 general_mappings = GeneralMapping.objects.filter(workspace_id=workspace_id).first() - general_mappings.payment_account_id = '2' + general_mappings.payment_account_id = "2" general_mappings.save() - schedule_payment_creation(sync_fyle_to_xero_payments=True, workspace_id=workspace_id) - schedule = Schedule.objects.filter(func='apps.xero.tasks.create_payment').count() + schedule_payment_creation( + sync_fyle_to_xero_payments=True, workspace_id=workspace_id + ) + schedule = Schedule.objects.filter(func="apps.xero.tasks.create_payment").count() assert schedule == 1 - schedule_payment_creation(sync_fyle_to_xero_payments=False, workspace_id=workspace_id) - schedule = Schedule.objects.filter(func='apps.xero.tasks.create_payment').count() + schedule_payment_creation( + sync_fyle_to_xero_payments=False, workspace_id=workspace_id + ) + schedule = Schedule.objects.filter(func="apps.xero.tasks.create_payment").count() assert schedule == 0 def test_check_xero_object_status(mocker, db): mocker.patch( - 'apps.xero.utils.XeroConnector.get_bill', - return_value=data['bill_object'] + "apps.xero.utils.XeroConnector.get_bill", return_value=data["bill_object"] ) workspace_id = 1 xero_credentials = XeroCredentials.objects.get(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) expense_group = ExpenseGroup.objects.get(id=4) expenses = expense_group.expenses.all() @@ -590,22 +793,22 @@ def test_check_xero_object_status(mocker, db): for expense in expenses: expense.expense_group_id = expense_group.id expense.save() - + expense_group.expenses.set(expenses) expense_group.save() task_log = TaskLog.objects.filter(workspace_id=workspace_id).first() - task_log.status = 'READY' + task_log.status = "READY" task_log.expense_group = expense_group task_log.save() - + create_bill(expense_group.id, task_log.id, xero_connection, False) task_log = TaskLog.objects.get(id=task_log.id) - + check_xero_object_status(workspace_id) bills = Bill.objects.filter(expense_group_id=expense_group.id) - for bill in bills: + for bill in bills: assert bill.paid_on_xero == True assert bill.payment_synced == True @@ -618,41 +821,55 @@ def test_check_xero_object_status(mocker, db): def test_schedule_reimbursements_sync(db): workspace_id = 1 - schedule = Schedule.objects.filter(func='apps.xero.tasks.process_reimbursements', args=workspace_id).count() + schedule = Schedule.objects.filter( + func="apps.xero.tasks.process_reimbursements", args=workspace_id + ).count() assert schedule == 1 - schedule_reimbursements_sync(sync_xero_to_fyle_payments=True, workspace_id=workspace_id) + schedule_reimbursements_sync( + sync_xero_to_fyle_payments=True, workspace_id=workspace_id + ) - schedule_count = Schedule.objects.filter(func='apps.xero.tasks.process_reimbursements', args=workspace_id).count() + schedule_count = Schedule.objects.filter( + func="apps.xero.tasks.process_reimbursements", args=workspace_id + ).count() assert schedule_count == 1 - schedule_reimbursements_sync(sync_xero_to_fyle_payments=False, workspace_id=workspace_id) + schedule_reimbursements_sync( + sync_xero_to_fyle_payments=False, workspace_id=workspace_id + ) - schedule_count = Schedule.objects.filter(func='apps.xero.tasks.process_reimbursements', args=workspace_id).count() + schedule_count = Schedule.objects.filter( + func="apps.xero.tasks.process_reimbursements", args=workspace_id + ).count() assert schedule_count == 0 def test_process_reimbursements(db, mocker): mocker.patch( - 'fyle_integrations_platform_connector.apis.Reimbursements.bulk_post_reimbursements', - return_value=[] + "fyle_integrations_platform_connector.apis.Reimbursements.bulk_post_reimbursements", + return_value=[], ) mocker.patch( - 'fyle_integrations_platform_connector.apis.Reimbursements.sync', + "fyle_integrations_platform_connector.apis.Reimbursements.sync", return_value=[], ) workspace_id = 1 - reimbursements = data['reimbursements'] + reimbursements = data["reimbursements"] - expenses = Expense.objects.filter(fund_source='PERSONAL') + expenses = Expense.objects.filter(fund_source="PERSONAL") for expense in expenses: - expense.paid_on_xero=True + expense.paid_on_xero = True expense.save() - Reimbursement.create_or_update_reimbursement_objects(reimbursements=reimbursements, workspace_id=workspace_id) + Reimbursement.create_or_update_reimbursement_objects( + reimbursements=reimbursements, workspace_id=workspace_id + ) - reimbursement_count = Reimbursement.objects.filter(workspace_id=workspace_id).count() + reimbursement_count = Reimbursement.objects.filter( + workspace_id=workspace_id + ).count() assert reimbursement_count == 4 process_reimbursements(workspace_id) @@ -665,26 +882,31 @@ def test_process_reimbursements(db, mocker): def test_schedule_xero_objects_status_sync(db): workspace_id = 1 - schedule_xero_objects_status_sync(sync_xero_to_fyle_payments=True, workspace_id=workspace_id) + schedule_xero_objects_status_sync( + sync_xero_to_fyle_payments=True, workspace_id=workspace_id + ) - schedule_count = Schedule.objects.filter(func='apps.xero.tasks.check_xero_object_status', args=workspace_id).count() + schedule_count = Schedule.objects.filter( + func="apps.xero.tasks.check_xero_object_status", args=workspace_id + ).count() assert schedule_count == 1 - schedule_xero_objects_status_sync(sync_xero_to_fyle_payments=False, workspace_id=workspace_id) + schedule_xero_objects_status_sync( + sync_xero_to_fyle_payments=False, workspace_id=workspace_id + ) - schedule_count = Schedule.objects.filter(func='apps.xero.tasks.check_xero_object_status', args=workspace_id).count() + schedule_count = Schedule.objects.filter( + func="apps.xero.tasks.check_xero_object_status", args=workspace_id + ).count() assert schedule_count == 0 def test_create_missing_currency(db, mocker): mocker.patch( - 'xerosdk.apis.Currencies.get_all', - return_value={'Currencies': [{'Code': 'INR'}]} - ) - mocker.patch( - 'xerosdk.apis.Currencies.post', - return_value=[] + "xerosdk.apis.Currencies.get_all", + return_value={"Currencies": [{"Code": "INR"}]}, ) + mocker.patch("xerosdk.apis.Currencies.post", return_value=[]) workspace_id = 1 create_missing_currency(workspace_id) @@ -697,8 +919,8 @@ def test_create_missing_currency(db, mocker): def test_update_xero_short_code(db, mocker): mocker.patch( - 'xerosdk.apis.Organisations.get_all', - return_value=xero_data['get_all_organisations'] + "xerosdk.apis.Organisations.get_all", + return_value=xero_data["get_all_organisations"], ) workspace_id = 1 @@ -713,7 +935,14 @@ def test_update_xero_short_code(db, mocker): def test_create_chain_and_export(db): workspace_id = 1 - chaining_attributes = [{'expense_group_id': 4, 'export_type': 'bill', 'task_log_id': 3, 'last_export': False}] + chaining_attributes = [ + { + "expense_group_id": 4, + "export_type": "bill", + "task_log_id": 3, + "last_export": False, + } + ] create_chain_and_export(chaining_attributes, workspace_id) @@ -733,29 +962,29 @@ def test_update_last_export_details(db): def test__validate_expense_group(mocker, db): workspace_id = 1 - expense_group = ExpenseGroup.objects.filter(fund_source='PERSONAL').first() + expense_group = ExpenseGroup.objects.filter(fund_source="PERSONAL").first() general_settings = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) - general_settings.corporate_credit_card_expenses_object = 'BANK TRANSACTION' + general_settings.corporate_credit_card_expenses_object = "BANK TRANSACTION" general_settings.import_tax_codes = True general_settings.save() general_mapping = GeneralMapping.objects.get(workspace_id=workspace_id) - general_mapping.default_tax_code_id = '' - general_mapping.default_tax_code_name = '' + general_mapping.default_tax_code_id = "" + general_mapping.default_tax_code_name = "" general_mapping.save() employee_attribute = ExpenseAttribute.objects.filter( - value=expense_group.description.get('employee_email'), + value=expense_group.description.get("employee_email"), workspace_id=expense_group.workspace_id, - attribute_type='EMPLOYEE' + attribute_type="EMPLOYEE", ).first() mapping = Mapping.objects.get( - destination_type='CONTACT', - source_type='EMPLOYEE', + destination_type="CONTACT", + source_type="EMPLOYEE", source=employee_attribute, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ) mapping.delete() @@ -764,33 +993,38 @@ def test__validate_expense_group(mocker, db): __validate_expense_group(expense_group) except BulkError as exception: logger.info(exception.response) - + lineitem = expense_group.expenses.first() - category = lineitem.category if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) else '{0} / {1}'.format( - lineitem.category, lineitem.sub_category) + category = ( + lineitem.category + if (lineitem.category == lineitem.sub_category or lineitem.sub_category == None) + else "{0} / {1}".format(lineitem.category, lineitem.sub_category) + ) category_attribute = ExpenseAttribute.objects.filter( value=category, workspace_id=expense_group.workspace_id, - attribute_type='CATEGORY' + attribute_type="CATEGORY", ).first() account = Mapping.objects.filter( - source_type='CATEGORY', + source_type="CATEGORY", source=category_attribute, - workspace_id=expense_group.workspace_id + workspace_id=expense_group.workspace_id, ).first() account.delete() try: __validate_expense_group(expense_group) - except: - logger.info('Mappings are missing') + except Exception: + logger.info("Mappings are missing") - general_mapping = GeneralMapping.objects.get(workspace_id=expense_group.workspace_id) + general_mapping = GeneralMapping.objects.get( + workspace_id=expense_group.workspace_id + ) general_mapping.delete() try: __validate_expense_group(expense_group) - except: - logger.info('Mappings are missing') + except Exception: + logger.info("Mappings are missing") diff --git a/tests/test_xero/test_utils.py b/tests/test_xero/test_utils.py index 9884bb1d..414d0f04 100644 --- a/tests/test_xero/test_utils.py +++ b/tests/test_xero/test_utils.py @@ -1,67 +1,87 @@ import base64 from asyncio.log import logger from unittest import mock + from fyle_accounting_mappings.models import DestinationAttribute -from apps.xero.utils import XeroConnector, XeroCredentials -from .fixtures import data -from tests.helper import dict_compare_keys from xerosdk.exceptions import WrongParamsError + from apps.workspaces.models import WorkspaceGeneralSettings, XeroCredentials -from apps.xero.models import Bill, BillLineItem, BankTransaction, BankTransactionLineItem, Payment +from apps.xero.models import BankTransaction, BankTransactionLineItem, Bill, BillLineItem, Payment +from apps.xero.utils import XeroConnector +from tests.helper import dict_compare_keys +from tests.test_xero.fixtures import data def test_get_or_create_contact(mocker, db): - mocker.patch( - 'xerosdk.apis.Contacts.post', - return_value=data['create_contact'] - ) + mocker.patch("xerosdk.apis.Contacts.post", return_value=data["create_contact"]) mocker.patch( - 'xerosdk.apis.Contacts.search_contact_by_contact_name', + "xerosdk.apis.Contacts.search_contact_by_contact_name", return_value=[], ) workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - contact_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='CONTACT').count() + contact_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="CONTACT" + ).count() assert contact_count == 48 - xero_connection.get_or_create_contact(contact_name='sample', email='sample@fyle.in', create=True) + xero_connection.get_or_create_contact( + contact_name="sample", email="sample@fyle.in", create=True + ) - new_contact_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='CONTACT').count() + new_contact_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="CONTACT" + ).count() assert new_contact_count == 49 - xero_connection.get_or_create_contact(contact_name='sample', email='sample@fyle.in', create=True) + xero_connection.get_or_create_contact( + contact_name="sample", email="sample@fyle.in", create=True + ) - new_contact_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='CONTACT').count() + new_contact_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="CONTACT" + ).count() assert new_contact_count == 49 def test_sync_tenants(mocker, db): workspace_id = 1 - mocker.patch( - 'xerosdk.apis.Tenants.get_all', - return_value=data['get_all_tenants'] - ) + mocker.patch("xerosdk.apis.Tenants.get_all", return_value=data["get_all_tenants"]) - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) xero_connection.sync_tenants() - - tenant_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='TENANT').count() + + tenant_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="TENANT" + ).count() assert tenant_count == 2 def test_get_tax_inclusive_amount(db): workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) tax_inclusive_amount = xero_connection.get_tax_inclusive_amount(100, 4) assert tax_inclusive_amount == 100.0 @@ -71,57 +91,78 @@ def test_sync_tax_codes(mocker, db): workspace_id = 1 mocker.patch( - 'xerosdk.apis.TaxRates.get_all', - return_value=data['get_all_tax_codes'] + "xerosdk.apis.TaxRates.get_all", return_value=data["get_all_tax_codes"] ) - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - tax_code_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='TAX_CODE').count() + tax_code_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="TAX_CODE" + ).count() assert tax_code_count == 8 xero_connection.sync_tax_codes() - new_tax_code_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='TAX_CODE').count() + new_tax_code_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="TAX_CODE" + ).count() assert new_tax_code_count == 8 def test_sync_accounts(mocker, db): workspace_id = 1 - mocker.patch( - 'xerosdk.apis.Accounts.get_all' - ) + mocker.patch("xerosdk.apis.Accounts.get_all") - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - account_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='ACCOUNT').count() + account_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="ACCOUNT" + ).count() assert account_count == 56 xero_connection.sync_accounts() - new_account_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='ACCOUNT').count() + new_account_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="ACCOUNT" + ).count() assert new_account_count == 56 - + def test_sync_contacts(mocker, db): mocker.patch( - 'xerosdk.apis.Contacts.list_all_generator', - return_value=data['get_all_contacts'] + "xerosdk.apis.Contacts.list_all_generator", + return_value=data["get_all_contacts"], ) workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - contact_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='CONTACT').count() + contact_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="CONTACT" + ).count() assert contact_count == 48 xero_connection.sync_contacts() - new_contact_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='CONTACT').count() + new_contact_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="CONTACT" + ).count() assert new_contact_count == 66 @@ -129,19 +170,27 @@ def test_sync_customers(mocker, db): workspace_id = 1 mocker.patch( - 'xerosdk.apis.Contacts.list_all_generator', - return_value=data['get_all_contacts'] + "xerosdk.apis.Contacts.list_all_generator", + return_value=data["get_all_contacts"], ) - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - customers_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='CUSTOMER').count() + customers_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="CUSTOMER" + ).count() assert customers_count == 14 xero_connection.sync_customers() - new_customers_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='CUSTOMER').count() + new_customers_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="CUSTOMER" + ).count() assert new_customers_count == 14 @@ -149,78 +198,105 @@ def test_sync_tracking_categories(mocker, db): workspace_id = 1 mocker.patch( - 'xerosdk.apis.TrackingCategories.get_all', - return_value=data['get_all_tracking_categories'] + "xerosdk.apis.TrackingCategories.get_all", + return_value=data["get_all_tracking_categories"], ) - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - tracking_categories_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='tracking_categories').count() + tracking_categories_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="tracking_categories" + ).count() assert tracking_categories_count == 0 xero_connection.sync_tracking_categories() - new_tracking_categories_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='tracking_categories').count() + new_tracking_categories_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="tracking_categories" + ).count() assert new_tracking_categories_count == 0 def test_sync_items(mocker, db): workspace_id = 1 - mocker.patch( - 'xerosdk.apis.Items.get_all', - return_value=data['get_all_items'] + mocker.patch("xerosdk.apis.Items.get_all", return_value=data["get_all_items"]) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id ) - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) - items_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='ITEM').count() + items_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="ITEM" + ).count() assert items_count == 16 xero_connection.sync_items() - new_items_count = DestinationAttribute.objects.filter(workspace_id=workspace_id, attribute_type='ITEM').count() + new_items_count = DestinationAttribute.objects.filter( + workspace_id=workspace_id, attribute_type="ITEM" + ).count() assert new_items_count == 16 def test_get_bill(mocker, db): - mocker.patch( - 'xerosdk.apis.Invoices.get_by_id', - return_value=data['bill_response'] - ) + mocker.patch("xerosdk.apis.Invoices.get_by_id", return_value=data["bill_response"]) workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) bill = xero_connection.get_bill(146) - assert dict_compare_keys(bill, data['bill_response']) == [] + assert dict_compare_keys(bill, data["bill_response"]) == [] def test_sync_dimensions(mocker, db): - mocker.patch( - 'xerosdk.apis.Contacts.list_all_generator', - return_value=[] - ) + mocker.patch("xerosdk.apis.Contacts.list_all_generator", return_value=[]) workspace_id = 1 - contact_count = DestinationAttribute.objects.filter(attribute_type='CONTACT', workspace_id=1).count() - project_count = DestinationAttribute.objects.filter(attribute_type='PROJECT', workspace_id=1).count() - categoty_count = DestinationAttribute.objects.filter(attribute_type='EXPENSE_CATEGORY', workspace_id=1).count() + contact_count = DestinationAttribute.objects.filter( + attribute_type="CONTACT", workspace_id=1 + ).count() + project_count = DestinationAttribute.objects.filter( + attribute_type="PROJECT", workspace_id=1 + ).count() + categoty_count = DestinationAttribute.objects.filter( + attribute_type="EXPENSE_CATEGORY", workspace_id=1 + ).count() assert contact_count == 48 assert project_count == 0 assert categoty_count == 0 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) xero_connection.sync_dimensions(workspace_id) - contact_count = DestinationAttribute.objects.filter(attribute_type='CONTACT', workspace_id=1).count() - project_count = DestinationAttribute.objects.filter(attribute_type='PROJECT', workspace_id=1).count() - categoty_count = DestinationAttribute.objects.filter(attribute_type='EXPENSE_CATEGORY', workspace_id=1).count() + contact_count = DestinationAttribute.objects.filter( + attribute_type="CONTACT", workspace_id=1 + ).count() + project_count = DestinationAttribute.objects.filter( + attribute_type="PROJECT", workspace_id=1 + ).count() + categoty_count = DestinationAttribute.objects.filter( + attribute_type="EXPENSE_CATEGORY", workspace_id=1 + ).count() assert contact_count == 48 assert project_count == 0 @@ -230,26 +306,30 @@ def test_sync_dimensions(mocker, db): def test_sync_dimensions_exception(db): workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - with mock.patch('xerosdk.apis.Accounts.get_all') as mock_call: + with mock.patch("xerosdk.apis.Accounts.get_all") as mock_call: mock_call.side_effect = Exception() xero_connection.sync_dimensions(workspace_id) - with mock.patch('xerosdk.apis.Contacts.list_all_generator') as mock_call: + with mock.patch("xerosdk.apis.Contacts.list_all_generator") as mock_call: mock_call.side_effect = Exception() xero_connection.sync_dimensions(workspace_id) - - with mock.patch('xerosdk.apis.Items.get_all') as mock_call: + + with mock.patch("xerosdk.apis.Items.get_all") as mock_call: mock_call.side_effect = Exception() xero_connection.sync_dimensions(workspace_id) - with mock.patch('xerosdk.apis.TrackingCategories.get_all') as mock_call: + with mock.patch("xerosdk.apis.TrackingCategories.get_all") as mock_call: mock_call.side_effect = Exception() xero_connection.sync_dimensions(workspace_id) - with mock.patch('xerosdk.apis.TaxRates.get_all') as mock_call: + with mock.patch("xerosdk.apis.TaxRates.get_all") as mock_call: mock_call.side_effect = Exception() xero_connection.sync_dimensions(workspace_id) @@ -257,87 +337,139 @@ def test_sync_dimensions_exception(db): def test_post_bill_exception(db): workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) bill = Bill.objects.filter(expense_group_id=4).first() bill_lineitems = BillLineItem.objects.filter(bill_id=bill.id) - workspace_general_setting = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + workspace_general_setting = WorkspaceGeneralSettings.objects.get( + workspace_id=workspace_id + ) try: - with mock.patch('xerosdk.apis.Invoices.post') as mock_call: - mock_call.side_effect = [WrongParamsError(msg={ - 'Elements': [{ - 'ValidationErrors': [{ - 'Message': ['The document date cannot be before the end of year lock date'] - }] - }] - }, response='wrong params'), data['bill_object']] + with mock.patch("xerosdk.apis.Invoices.post") as mock_call: + mock_call.side_effect = [ + WrongParamsError( + msg={ + "Elements": [ + { + "ValidationErrors": [ + { + "Message": [ + "The document date cannot be before the end of year lock date" + ] + } + ] + } + ] + }, + response="wrong params", + ), + data["bill_object"], + ] xero_connection.post_bill(bill, bill_lineitems, workspace_general_setting) - except: + except Exception: logger.info("Account period error") def test_post_bank_transaction_exception(db): workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) bank_transaction = BankTransaction.objects.filter(expense_group_id=5).first() - bank_transaction_lineitems = BankTransactionLineItem.objects.filter(bank_transaction_id=bank_transaction.id) - workspace_general_setting = WorkspaceGeneralSettings.objects.get(workspace_id=workspace_id) + bank_transaction_lineitems = BankTransactionLineItem.objects.filter( + bank_transaction_id=bank_transaction.id + ) + workspace_general_setting = WorkspaceGeneralSettings.objects.get( + workspace_id=workspace_id + ) try: - with mock.patch('xerosdk.apis.BankTransactions.post') as mock_call: - mock_call.side_effect = [WrongParamsError(msg={ - 'Elements': [{ - 'ValidationErrors': [{ - 'Message': ['The document date cannot be before the end of year lock date'] - }] - }] - }, response='wrong params'), data['bank_transaction_object']] - xero_connection.post_bank_transaction(bank_transaction, bank_transaction_lineitems, workspace_general_setting) - except: + with mock.patch("xerosdk.apis.BankTransactions.post") as mock_call: + mock_call.side_effect = [ + WrongParamsError( + msg={ + "Elements": [ + { + "ValidationErrors": [ + { + "Message": [ + "The document date cannot be before the end of year lock date" + ] + } + ] + } + ] + }, + response="wrong params", + ), + data["bank_transaction_object"], + ] + xero_connection.post_bank_transaction( + bank_transaction, bank_transaction_lineitems, workspace_general_setting + ) + except Exception: logger.info("Account period error") def test_post_attachments(mocker, db): - mocker.patch( - 'xerosdk.apis.Attachments.post_attachment', - return_value=[] - ) + mocker.patch("xerosdk.apis.Attachments.post_attachment", return_value=[]) workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) + xero_credentials = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) - attachments = xero_connection.post_attachments(ref_id='ref_id', ref_type='ref_type', attachments=[{ - 'id': 'sdfgh', - 'name': 'sample', - 'download_url': base64.b64encode('https://aaa.bbb.cc/x232sds'.encode("ascii")) - }]) + attachments = xero_connection.post_attachments( + ref_id="ref_id", + ref_type="ref_type", + attachments=[ + { + "id": "sdfgh", + "name": "sample", + "download_url": base64.b64encode( + "https://aaa.bbb.cc/x232sds".encode("ascii") + ), + } + ], + ) assert len(attachments) == 1 def test_post_payment(mocker, db): - mocker.patch( - 'xerosdk.apis.Payments.post', - return_value=[] - ) + mocker.patch("xerosdk.apis.Payments.post", return_value=[]) workspace_id = 1 - xero_credentials = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) - xero_connection = XeroConnector(credentials_object=xero_credentials, workspace_id=workspace_id) - - created_payment = xero_connection.post_payment(payment=Payment( - invoice_id='werty', - account_id=346, - amount=45, - expense_group_id=4, + xero_credentials = XeroCredentials.get_active_xero_credentials( workspace_id=workspace_id - )) + ) + xero_connection = XeroConnector( + credentials_object=xero_credentials, workspace_id=workspace_id + ) + + created_payment = xero_connection.post_payment( + payment=Payment( + invoice_id="werty", + account_id=346, + amount=45, + expense_group_id=4, + workspace_id=workspace_id, + ) + ) - assert created_payment == [] \ No newline at end of file + assert created_payment == [] diff --git a/tests/test_xero/test_views.py b/tests/test_xero/test_views.py index 0c73b16b..1986536a 100644 --- a/tests/test_xero/test_views.py +++ b/tests/test_xero/test_views.py @@ -1,31 +1,30 @@ import json from unittest import mock -from apps.tasks.models import TaskLog -from apps.workspaces.models import XeroCredentials, Workspace -from apps.fyle.models import Reimbursement -from .fixtures import data -from ..test_fyle.fixtures import data as fyle_data -from xerosdk.exceptions import InvalidGrant, InvalidTokenError, UnsuccessfulAuthentication + from fyle_accounting_mappings.models import MappingSetting +from xerosdk.exceptions import InvalidGrant, UnsuccessfulAuthentication + +from apps.workspaces.models import Workspace, XeroCredentials + def test_get_token_health(api_client, test_connection): workspace_id = 1 access_token = test_connection.access_token - url = '/api/workspaces/{}/xero/token_health/'.format(workspace_id) + url = "/api/workspaces/{}/xero/token_health/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.get(url) assert response.status_code == 200 - with mock.patch('apps.xero.utils.XeroConnector.__init__') as mock_call: - mock_call.side_effect = InvalidGrant(msg='Invalid grant') + with mock.patch("apps.xero.utils.XeroConnector.__init__") as mock_call: + mock_call.side_effect = InvalidGrant(msg="Invalid grant") response = api_client.get(url) assert response.status_code == 400 - with mock.patch('apps.xero.utils.XeroConnector.__init__') as mock_call: - mock_call.side_effect = UnsuccessfulAuthentication(msg='Auth error') + with mock.patch("apps.xero.utils.XeroConnector.__init__") as mock_call: + mock_call.side_effect = UnsuccessfulAuthentication(msg="Auth error") response = api_client.get(url) assert response.status_code == 400 @@ -34,9 +33,9 @@ def test_get_tenant_view(api_client, test_connection): workspace_id = 1 access_token = test_connection.access_token - url = '/api/workspaces/{}/xero/tenants/?attribute_type=TENANT'.format(workspace_id) + url = "/api/workspaces/{}/xero/tenants/?attribute_type=TENANT".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.get(url) assert response.status_code == 200 @@ -46,40 +45,39 @@ def test_get_tenant_view(api_client, test_connection): def test_post_tenant_view(mocker, api_client, test_connection): - mocker.patch( - 'xerosdk.apis.Tenants.get_all', - return_value = [] - ) + mocker.patch("xerosdk.apis.Tenants.get_all", return_value=[]) workspace_id = 1 access_token = test_connection.access_token - url = '/api/workspaces/{}/xero/tenants/'.format(workspace_id) + url = "/api/workspaces/{}/xero/tenants/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.post(url) assert response.status_code == 200 response = json.loads(response.content) assert len(response) == 0 - - xero_credential = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) + + xero_credential = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) xero_credential.delete() response = api_client.post(url) assert response.status_code == 400 response = json.loads(response.content) - assert response['message'] == 'Xero credentials not found in workspace' + assert response["message"] == "Xero credentials not found in workspace" def test_get_xero_fields_view(api_client, test_connection): workspace_id = 1 access_token = test_connection.access_token - url = '/api/workspaces/{}/xero/xero_fields/'.format(workspace_id) + url = "/api/workspaces/{}/xero/xero_fields/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.get(url) assert response.status_code == 200 @@ -89,16 +87,13 @@ def test_get_xero_fields_view(api_client, test_connection): def test_post_sync_dimensions(mocker, api_client, test_connection): - mocker.patch( - 'apps.xero.utils.XeroConnector.sync_dimensions', - return_value=None - ) + mocker.patch("apps.xero.utils.XeroConnector.sync_dimensions", return_value=None) workspace_id = 1 access_token = test_connection.access_token - url = '/api/workspaces/{}/xero/sync_dimensions/'.format(workspace_id) + url = "/api/workspaces/{}/xero/sync_dimensions/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) workspace = Workspace.objects.get(id=workspace_id) destination_synced_at = workspace.destination_synced_at @@ -109,90 +104,76 @@ def test_post_sync_dimensions(mocker, api_client, test_connection): workspace.destination_synced_at = destination_synced_at workspace.save() - xero_credential = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) + xero_credential = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) xero_credential.delete() response = api_client.post(url) assert response.status_code == 400 response = json.loads(response.content) - assert response['message'] == 'Xero credentials not found in workspace' + assert response["message"] == "Xero credentials not found in workspace" def test_post_refresh_dimensions(mocker, api_client, test_connection): - mocker.patch( - 'apps.xero.utils.XeroConnector.sync_dimensions', - return_value=None - ) - mocker.patch( - 'apps.mappings.signals.upload_attributes_to_fyle', - return_value = [] - ) + mocker.patch("apps.xero.utils.XeroConnector.sync_dimensions", return_value=None) + mocker.patch("apps.mappings.signals.upload_attributes_to_fyle", return_value=[]) workspace_id = 1 MappingSetting.objects.update_or_create( - workspace_id=workspace_id, - source_field = 'PROJECT', - defaults={ - 'destination_field': 'CUSTOMER', - 'import_to_fyle': True - - } + workspace_id=workspace_id, + source_field="PROJECT", + defaults={"destination_field": "CUSTOMER", "import_to_fyle": True}, ) MappingSetting.objects.update_or_create( - workspace_id=workspace_id, - source_field = 'COST_CENTER', - defaults={ - 'destination_field': 'ACCOUNT', - 'import_to_fyle': True - - } + workspace_id=workspace_id, + source_field="COST_CENTER", + defaults={"destination_field": "ACCOUNT", "import_to_fyle": True}, ) MappingSetting.objects.update_or_create( - workspace_id = workspace_id, - source_field = 'Ashutosh Field', - defaults={ - 'destination_field': 'CLASS', - 'import_to_fyle': True, - 'is_custom': True - } + workspace_id=workspace_id, + source_field="Ashutosh Field", + defaults={ + "destination_field": "CLASS", + "import_to_fyle": True, + "is_custom": True, + }, ) - access_token = test_connection.access_token - url = '/api/workspaces/{}/xero/refresh_dimensions/'.format(workspace_id) + access_token = test_connection.access_token + url = "/api/workspaces/{}/xero/refresh_dimensions/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.post(url) assert response.status_code == 200 - xero_credential = XeroCredentials.get_active_xero_credentials(workspace_id=workspace_id) + xero_credential = XeroCredentials.get_active_xero_credentials( + workspace_id=workspace_id + ) xero_credential.delete() response = api_client.post(url) assert response.status_code == 400 response = json.loads(response.content) - assert response['message'] == 'Xero credentials not found in workspace' + assert response["message"] == "Xero credentials not found in workspace" def test_get_destination_attributes_view(api_client, test_connection): workspace_id = 1 access_token = test_connection.access_token - url = '/api/workspaces/{}/xero/destination_attributes/'.format(workspace_id) + url = "/api/workspaces/{}/xero/destination_attributes/".format(workspace_id) - api_client.credentials(HTTP_AUTHORIZATION='Bearer {}'.format(access_token)) + api_client.credentials(HTTP_AUTHORIZATION="Bearer {}".format(access_token)) response = api_client.get( - url, - data={ - 'attribute_type__in': 'CUSTOMER', - 'active': 'true' - } - ) + url, data={"attribute_type__in": "CUSTOMER", "active": "true"} + ) assert response.status_code == 200 response = json.loads(response.content)