Manager

A communication between a 3rd Party Application (Client) and Topal (Server) need to pass additional information between client and server.
Such information is passed via HTTP Header respectively via HTTP request or response calls.
The following code sample aggregates various information required with every request and response as Client, Fiscal year, token etc.
 
Manager
Example of a Manager. The manager handles requests and respective payloads.
 
    
    public class Manager
    {
        HttpClient httpclient = null;
        Credentials credentials = null;
        FormUrlEncodedContent loginContent = null;
        string token = "";
        Client _currentClient = null;
        FiscalYear _currentFiscalYear = null;

        public Manager()
        {
            ServicePointManager.ServerCertificateValidationCallback +=
                        (sender, cert, chain, sslPolicyErrors) => true;

            credentials = new Credentials();
            httpclient = new HttpClient();

            string host = Configuration.host;
            string api_version = Configuration.api_version;

            string baseurl = host + api_version;
            httpclient.BaseAddress = new Uri(baseurl);
            loginContent = new FormUrlEncodedContent(credentials.loginParameters);

            token = this.getToken(loginContent);
            if (token.Equals("")) {
                string message = "Can't retrieve token"; 
                Assert.AreEqual(true, false, message);
            }

            this.httpClient = httpclient;
            this.Token = token;

            httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer" + " " + token);

            this.set_current_client(httpClient, Configuration.defaultClient);
            this.set_current_fiscalYear(httpClient, Configuration.defaultFiscalyear);
        }

        public Manager(string client_name, string fiscalyear_name)
        {
            ServicePointManager.ServerCertificateValidationCallback +=
                        (sender, cert, chain, sslPolicyErrors) => true;

            credentials = new Credentials();
            httpclient = new HttpClient();

            string host = Configuration.host;
            string api_version = Configuration.api_version;
            string baseurl = host + api_version;

            httpclient.BaseAddress = new Uri(baseurl);
            loginContent = new FormUrlEncodedContent(credentials.loginParameters);
            token = this.getToken(loginContent);

            this.httpClient = httpclient;
            this.Token = token;
            httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

            this.set_current_client(httpClient, client_name);
            this.set_current_fiscalYear(httpClient, fiscalyear_name);
        }

        public HttpClient httpClient { get; set; }
        private string Token { get; set; }

        private string getToken(FormUrlEncodedContent loginContent)
        {
            HttpResponseMessage response = null;
            try
            {
                token = "";
                response = httpclient.PostAsync("Token", loginContent).Result;
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var tokenResponse = response.Content.ReadAsStringAsync().Result;
                    dynamic accessToken = JsonConvert.DeserializeObject(tokenResponse);
                    token = accessToken.access_token;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception information: {0}", ex);
            }
            return token;
        }

        public void set_current_client(HttpClient httpClient, string client_name)
        {
            var response = httpClient.GetAsync(string.Format("clients")).Result;
            var clients = JsonConvert.DeserializeObject>(response.Content.ReadAsStringAsync().Result);
            Client client = clients.SingleOrDefault(c => (c.name == client_name));

            if (client != null)
            {
                this._currentClient = client;
                this._currentClient.isCurrent = true;
            }
            else {
                MessageBox.Show("Default Client not found", "Important Message");
            }
        }

        public void set_current_fiscalYear(HttpClient httpClient, string fiscalyearname)
        {
            IList fiscalyears = _currentClient.fiscalYears;
            FiscalYear fiscalyear = fiscalyears.SingleOrDefault(f => (f.name == fiscalyearname));

            if (fiscalyear != null) {
                this._currentFiscalYear = fiscalyear;
            } else {
                MessageBox.Show("Default FiscalYear not found", "Important Message");
            }
        }

        public FiscalYear getCurrentFiscalYear() { return _currentFiscalYear; }

        public Client getCurrentClient() { return _currentClient; }
    }
    
  
Manager Object
    
class Manager:
    """
    Manager class
    """

    # Constructor
    def __init__(self):

        self._token = self._gettoken()
        self._headers = {'Content-Type': 'application/x-www-form-urlencoded', # 'text/plain',
                         'Authorization': '{0}'.format(self._token)}
        self._currentclient = self._defaultclient()
        self._currentfiscalyear = self._defaultfiscalyear()

    def _gettoken(self):
        """
        Method to retrieve token for a given user
        """
        host = Configuration().host

        url = '{0}{1}Token'.format(host, Configuration().api_version)

        payload = {'grant_type': 'password',
                   'username': Configuration().username,
                   'password': Configuration().password,
                   'localization': Configuration().localization
                   }

        try:
            response = requests.post(url, data=payload, headers={'Content-Type': 'text/plain'})

            if response.status_code == 200:
                token = response.json()
                bearer_token = token['token_type'] + ' ' + token['access_token']
            else:
                bearer_token = None

        except Exception as err:
            print("Error: {0}".format(err))
            bearer_token = None

        return bearer_token

    def token(self):
        """
        Method doc string
        """
        return self._token

    def headers(self):
        """
        Method doc string
        """

        return self._headers

    def base_url(self):
        """
        Method doc string
        """

        # return self.__base_url
        return Configuration().baseurl

    def _defaultclient(self):
        """
        Method doc string
        """

        url = '{0}clients'.format(self.base_url())
        response = requests.get(url, headers=self.headers())
        clients = response.json()
        defaultclient = Configuration().defaultclient

        if clients is not None:

            for client in enumerate(clients, start=0):

                if client[1]['name'] == defaultclient:
                    currentclient = client[1]
                    break

        return currentclient

    def _defaultfiscalyear(self):

        fiscalyears = self._currentclient['fiscalYears']
        defaultfiscalyear = Configuration().defaultfiscalyear

        if fiscalyears is not None:

            for fiscalyear in enumerate(fiscalyears, start=0):

                if fiscalyear[1]['name'] == defaultfiscalyear:
                    currentfiscalyear = fiscalyear[1]
                    break

        return currentfiscalyear

    def setcurrentclient(self, client):
        """
        Method doc string
        """

        self._currentclient = client

    def getcurrentclient(self):
        """
        Method doc string
        """

        client = self._currentclient
        return client

    def setcurrentfiscalyear(self, fiscalyear):
        """
        Method doc string
        """

        self._currentfiscalyear = fiscalyear

    def getcurrentfiscalyear(self):
        """
        Method doc string
        """

        fiscalyear = self._currentfiscalyear
        return fiscalyear

    # TODO -- submission of parameters
    def logout(self):
        """
        Method doc string
        """

        # GET /api/v1/useraccount/logout
        url = '{0}useraccounts/logout'.format(self.base_url())
        payload = {'Authorization': self._token}

        response = requests.get(url, data=payload)
        response = response
        return True
    
    
  
Manager Object
    
    UNDER CONSTRUCTION