From 47bb82563d2c1fd51453b01c09c23da7e472a490 Mon Sep 17 00:00:00 2001 From: sks444 <krishnasingh.ss30@gmail.com> Date: Mon, 8 Nov 2021 12:56:54 +0530 Subject: [PATCH] Add env variables and test purchasing api --- .../projects/services/sageintacct/__init__.py | 26 ++++++++ .../services/sageintacct/sageintacctsdk.py | 62 +++++++++++++++++++ .../services/sageintacct/wrapper/__init__.py | 7 +++ .../services/sageintacct/wrapper/api_base.py | 20 ++++-- .../services/sageintacct/wrapper/constants.py | 10 +++ .../sageintacct/wrapper/purchasing.py | 12 ++++ hypha/settings/base.py | 14 ++++- requirements.txt | 1 + 8 files changed, 144 insertions(+), 8 deletions(-) create mode 100644 hypha/apply/projects/services/sageintacct/sageintacctsdk.py create mode 100644 hypha/apply/projects/services/sageintacct/wrapper/constants.py create mode 100644 hypha/apply/projects/services/sageintacct/wrapper/purchasing.py diff --git a/hypha/apply/projects/services/sageintacct/__init__.py b/hypha/apply/projects/services/sageintacct/__init__.py index e69de29bb..ecc225b1c 100644 --- a/hypha/apply/projects/services/sageintacct/__init__.py +++ b/hypha/apply/projects/services/sageintacct/__init__.py @@ -0,0 +1,26 @@ +""" +Sage Intacct init +""" +from .exceptions import ( + ExpiredTokenError, + InternalServerError, + InvalidTokenError, + NoPrivilegeError, + NotFoundItemError, + SageIntacctSDKError, + WrongParamsError, +) +from .sageintacctsdk import SageIntacctSDK + +__all__ = [ + 'SageIntacctSDK', + 'SageIntacctSDKError', + 'ExpiredTokenError', + 'InvalidTokenError', + 'NoPrivilegeError', + 'WrongParamsError', + 'NotFoundItemError', + 'InternalServerError' +] + +name = "sageintacctsdk" diff --git a/hypha/apply/projects/services/sageintacct/sageintacctsdk.py b/hypha/apply/projects/services/sageintacct/sageintacctsdk.py new file mode 100644 index 000000000..977912e3e --- /dev/null +++ b/hypha/apply/projects/services/sageintacct/sageintacctsdk.py @@ -0,0 +1,62 @@ +from .wrapper import ApiBase, Purchasing + + +class SageIntacctSDK: + """ + Sage Intacct SDK + """ + + def __init__( + self, sender_id: str, sender_password: str, + user_id: str, company_id: str, user_password: str, + entity_id: str = None + ): + """ + Initialize connection to Sage Intacct + :param sender_id: Sage Intacct sender id + :param sender_password: Sage Intacct sener password + :param user_id: Sage Intacct user id + :param company_id: Sage Intacct company id + :param user_password: Sage Intacct user password + :param (optional) entity_id: Sage Intacct entity ID + """ + # Initializing variables + self.__sender_id = sender_id + self.__sender_password = sender_password + self.__user_id = user_id + self.__company_id = company_id + self.__user_password = user_password + self.__entity_id = entity_id + + self.api_base = ApiBase() + self.purchasing = Purchasing() + self.update_sender_id() + self.update_sender_password() + self.update_session_id() + + def update_sender_id(self): + """ + Update the sender id in all API objects. + """ + self.api_base.set_sender_id(self.__sender_id) + self.purchasing.set_sender_id(self.__sender_id) + + def update_sender_password(self): + """ + Update the sender password in all API objects. + """ + self.api_base.set_sender_password(self.__sender_password) + self.purchasing.set_sender_password(self.__sender_password) + + def update_session_id(self): + """ + Update the session id and change it in all API objects. + """ + self.__session_id = self.api_base.get_session_id( + self.__user_id, + self.__company_id, + self.__user_password, + self.__entity_id + ) + self.api_base.set_session_id(self.__session_id) + self.purchasing.set_session_id(self.__session_id) diff --git a/hypha/apply/projects/services/sageintacct/wrapper/__init__.py b/hypha/apply/projects/services/sageintacct/wrapper/__init__.py index e69de29bb..2e601e935 100644 --- a/hypha/apply/projects/services/sageintacct/wrapper/__init__.py +++ b/hypha/apply/projects/services/sageintacct/wrapper/__init__.py @@ -0,0 +1,7 @@ +from .api_base import ApiBase +from .purchasing import Purchasing + +__all__ = [ + 'ApiBase', + 'Purchasing', +] diff --git a/hypha/apply/projects/services/sageintacct/wrapper/api_base.py b/hypha/apply/projects/services/sageintacct/wrapper/api_base.py index 3f17309f4..03689f6b6 100644 --- a/hypha/apply/projects/services/sageintacct/wrapper/api_base.py +++ b/hypha/apply/projects/services/sageintacct/wrapper/api_base.py @@ -1,16 +1,24 @@ -import json import datetime +import json +import re import uuid -from warnings import warn from typing import Dict, List, Tuple from urllib.parse import unquote -import re +from warnings import warn -import xmltodict import requests +import xmltodict -from ..exceptions import SageIntacctSDKError, ExpiredTokenError, InvalidTokenError, NoPrivilegeError, \ - WrongParamsError, NotFoundItemError, InternalServerError, DataIntegrityWarning +from ..exceptions import ( + DataIntegrityWarning, + ExpiredTokenError, + InternalServerError, + InvalidTokenError, + NoPrivilegeError, + NotFoundItemError, + SageIntacctSDKError, + WrongParamsError, +) from .constants import dimensions_fields_mapping diff --git a/hypha/apply/projects/services/sageintacct/wrapper/constants.py b/hypha/apply/projects/services/sageintacct/wrapper/constants.py new file mode 100644 index 000000000..6c6acad5d --- /dev/null +++ b/hypha/apply/projects/services/sageintacct/wrapper/constants.py @@ -0,0 +1,10 @@ +dimensions_fields_mapping = { + 'PODOCUMENTENTRY': [ + 'ITEMID', + 'ITEMNAME', + 'ITEMDESC', + 'QUANTITY', + 'UNIT', + 'DEPARTMENTID', + ], +} diff --git a/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py b/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py new file mode 100644 index 000000000..c9e0774d5 --- /dev/null +++ b/hypha/apply/projects/services/sageintacct/wrapper/purchasing.py @@ -0,0 +1,12 @@ + +""" +Sage Intacct purchasing +""" + +from .api_base import ApiBase + + +class Purchasing(ApiBase): + """Class for Purchasing APIs.""" + def __init__(self): + ApiBase.__init__(self, dimension='PODOCUMENTENTRY') diff --git a/hypha/settings/base.py b/hypha/settings/base.py index 241c62784..c57e91d00 100644 --- a/hypha/settings/base.py +++ b/hypha/settings/base.py @@ -651,5 +651,15 @@ if env.str('AWS_STORAGE_BUCKET_NAME', None): FILE_FORM_TEMP_STORAGE = PRIVATE_FILE_STORAGE # Matomo tracking -MATOMO_URL = env.str('MATOMO_URL', None) -MATOMO_SITEID = env.str('MATOMO_SITEID', None) + +MATOMO_URL = env.get('MATOMO_URL', False) +MATOMO_SITEID = env.get('MATOMO_SITEID', False) + +# SAGE INTACCT Configuration +if 'INITIALISE_INTACCT' in env: + INITIALISE_INTACCT = env['INITIALISE_INTACCT'] + INTACCT_SENDER_ID = env['INTACCT_SENDER_ID'] + INTACCT_SENDER_PASSWORD = env['INTACCT_SENDER_PASSWORD'] + INTACCT_USER_ID = env['INTACCT_USER_ID'] + INTACCT_COMPANY_ID = env['INTACCT_COMPANY_ID'] + INTACCT_USER_PASSWORD = env['INTACCT_USER_PASSWORD'] diff --git a/requirements.txt b/requirements.txt index d3b75a8e9..e8a75a81f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,3 +48,4 @@ wagtail-cache==1.0.2 wagtail-purge==0.1 wagtail==2.16.1 whitenoise==5.3.0 +xmltodict==0.12.0 -- GitLab