×

Transaction

In the following you will find a few basic POST operations related to transactions.
 
Example Code
 
POST a simple transaction
Create a simple transaction and POST the transaction with Topal Server.
 
External references to methods used in examples
#Code reference - Create.simple_transaction
#Code reference - GET.transactions
#Code reference - DELETE.transaction
    
    [TestMethod]
    public void REST_Transaction_simple_POST()
    {
       state = new ErrorState { passed = false };

       decimal amount = 5000m;
       Transaction transaction = Create.transaction_simple(amount, manager);
       state.passed = POST.transaction(transaction, manager);
        Assert.AreEqual(true, state.passed, state.message);

        var transactions = GET.transactions(manager);
        var _transaction = transactions.FirstOrDefault(t => t.docNum == transaction.docNum);

        if (_transaction != null) {
            state.passed = DELETE.transaction(_transaction, manager);
            Assert.AreEqual(true, state.passed, state.message);
        }
    }

    class POST
    {
        public static bool transaction(Transaction transaction, Manager manager)
        {
            var currentClient = manager.getCurrentClient();
            var currentFiscalYear = manager.getCurrentFiscalYear();
            ErrorState state = new ErrorState { passed = false };

            if (transaction != null)
            {
                var transactionContent = JsonConvert.SerializeObject(transaction);
                var _cont = new StringContent(transactionContent, Encoding.UTF8, "application/json");

                string request = "clients/{0}/fiscalYears/{1}/transactions";
                var response = manager.httpClient.PostAsync(string.Format(request, currentClient.id, currentFiscalYear.id), _cont).Result;

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    ResponseDetails details = new ResponseDetails(response);
                }
                state.passed = response.IsSuccessStatusCode;
            }
            return state.passed;
        }
    }
    
  
Save transaction
    
class Save:
    # TODO Recheck
    @staticmethod
    def transaction(manager, transaction):
        
        _currentClient = manager.getCurrentClient()
        _currentFiscalYear = manager.getCurrentFiscalYear()
        
        try:
            url = '{0}clients/{1}/fiscalYears/{2}/transactions'.format(manager.baseURL(), _currentClient['id'], _currentFiscalYear['id'])
            response = requests.post(url, data = json.dumps(transaction), headers = manager.headers())
        
        except Exception as err:
                print("Error: {0}".format(err))
                print(response.headers)
                response.raise_for_status()

        if response.status_code == 200:
            return response.json()
        else: 
           return None
    
  
Save transaction
    
    UNDER CONSTRUCTION
    
  
JSON representation of a transaction
    
    POST Request:
    {
	"id": "00000000-0000-0000-0000-000000000000",
	"fiscalYearFID": -1,
	"userFID": -1,
	"transactionTypeFID": 1,
	"docType": "A",
	"docNum": 42,
	"docDate": "2022-05-09T00:00:00",
	"modifyDate": "0001-01-01T00:00:00",
	"isConfirmed": true,
	"numRangeFID": 129,
	"hasDocument": false,
	"postings": [
		{
			"id": "00000000-0000-0000-0000-000000000000",
			"transactionFID": "00000000-0000-0000-0000-000000000000",
			"invoiceFID": "00000000-0000-0000-0000-000000000000",
			"accountFID": 10,
			"contraAccountFID": -1,
			"vatFID": -1,
			"vatAccountFID": -1,
			"costCenterFID": -1,
			"postingTypeFID": 1,
			"amount": 5000.0,
			"fcAmount": 5000.0,
			"exchangeRate": 1.0,
			"vatAmount": 0.0,
			"vatFcAmount": 0.0,
			"vatPercent": 0.0,
			"vatQuote": 0.0,
			"text": "Posting text",
			"freeCode": "SimpleTransaction free 1",
			"isDebit": true,
			"isInclusive": false,
			"isInvisible": false,
			"postingIndex": 0,
			"partyNum": 0,
			"freepartyNum": null,
			"partyName": null,
			"invoiceNum": 0,
			"freeInvoiceNum": null,
			"invoiceDate": "0001-01-01T00:00:00"
		},
		{
			"id": "00000000-0000-0000-0000-000000000000",
			"transactionFID": "00000000-0000-0000-0000-000000000000",
			"invoiceFID": "00000000-0000-0000-0000-000000000000",
			"accountFID": 71,
			"contraAccountFID": -1,
			"vatFID": -1,
			"vatAccountFID": -1,
			"costCenterFID": -1,
			"postingTypeFID": 1,
			"amount": 5000.0,
			"fcAmount": 5000.0,
			"exchangeRate": 1.0,
			"vatAmount": 0.0,
			"vatFcAmount": 0.0,
			"vatPercent": 0.0,
			"vatQuote": 0.0,
			"text": "Test Case Simple Transaction Posting #2",
			"freeCode": "SimpleTransaction free 2",
			"isDebit": false,
			"isInclusive": false,
			"isInvisible": false,
			"postingIndex": 0,
			"partyNum": 0,
			"freepartyNum": null,
			"partyName": null,
			"invoiceNum": 0,
			"freeInvoiceNum": null,
			"invoiceDate": "0001-01-01T00:00:00"
		}
	]
}
    
  
 
POST a compound transaction
Create a compound transaction and POST the transaction with Topal Server.
 
External references to methods used in examples
#Code reference - Create.compound_transaction
#Code reference - GET.transactions
#Code reference - DELETE.transaction
    
    [TestMethod]
    public void REST_Transactions_compound_POST()
    {
        state = new ErrorState();
        decimal amount = 10000m;
        Transaction transaction = Create.transaction_compound(amount, manager);
        state.passed = POST.transaction(transaction, manager);
        Assert.AreEqual(true, state.passed, state.message);

        var transactions = GET.transactions(manager);
        var _transaction = transactions.FirstOrDefault(t => t.docType == transaction.docType);
        if (_transaction != null)
        {
            state.passed = DELETE.transaction(_transaction, manager);
            Assert.AreEqual(true, state.passed, state.message);
        }
    }

    class POST
    {
        public static bool transaction(Transaction transaction, Manager manager)
        {
            var currentClient = manager.getCurrentClient();
            var currentFiscalYear = manager.getCurrentFiscalYear();
            ErrorState state = new ErrorState { passed = false };

            if (transaction != null)
            {
                var transactionContent = JsonConvert.SerializeObject(transaction);
                var _cont = new StringContent(transactionContent, Encoding.UTF8, "application/json");

                string request = "clients/{0}/fiscalYears/{1}/transactions";
                var response = manager.httpClient.PostAsync(string.Format(request, currentClient.id, currentFiscalYear.id), _cont).Result;

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    ResponseDetails details = new ResponseDetails(response);
                }
                state.passed = response.IsSuccessStatusCode;
            }
            return state.passed;
        }
    }
    
  
Save transaction
    
class Save:
    # TODO Recheck
    @staticmethod
    def transaction(manager, transaction):
        
        _currentClient = manager.getCurrentClient()
        _currentFiscalYear = manager.getCurrentFiscalYear()
        
        try:
            url = '{0}clients/{1}/fiscalYears/{2}/transactions'.format(manager.baseURL(), _currentClient['id'], _currentFiscalYear['id'])
            response = requests.post(url, data = json.dumps(transaction), headers = manager.headers())
        
        except Exception as err:
                print("Error: {0}".format(err))
                print(response.headers)
                response.raise_for_status()

        if response.status_code == 200:
            return response.json()
        else: 
           return None
    
  
JSON representation of a transaction
    
    POST Request:
    {
	"id": "00000000-0000-0000-0000-000000000000",
	"fiscalYearFID": -1,
	"userFID": -1,
	"transactionTypeFID": 2,
	"docType": "RR",
	"docNum": 42,
	"docDate": "2022-05-09T00:00:00",
	"modifyDate": "0001-01-01T00:00:00",
	"isConfirmed": true,
	"numRangeFID": 129,
	"hasDocument": false,
	"postings": [
		{
			"id": "00000000-0000-0000-0000-000000000000",
			"transactionFID": "00000000-0000-0000-0000-000000000000",
			"invoiceFID": "00000000-0000-0000-0000-000000000000",
			"accountFID": 10,
			"contraAccountFID": -1,
			"vatFID": -1,
			"vatAccountFID": -1,
			"costCenterFID": -1,
			"postingTypeFID": 1,
			"amount": 10000.0,
			"fcAmount": 0.0,
			"exchangeRate": 1.0,
			"vatAmount": 0.0,
			"vatFcAmount": 0.0,
			"vatPercent": 0.0,
			"vatQuote": 0.0,
			"text": "TestCase Compound Transaction Posting #1",
			"freeCode": "CompoundTransaction free 1",
			"isDebit": true,
			"isInclusive": false,
			"isInvisible": false,
			"postingIndex": 0,
			"partyNum": 0,
			"freepartyNum": null,
			"partyName": null,
			"invoiceNum": 0,
			"freeInvoiceNum": null,
			"invoiceDate": "0001-01-01T00:00:00"
		},
		{
			"id": "00000000-0000-0000-0000-000000000000",
			"transactionFID": "00000000-0000-0000-0000-000000000000",
			"invoiceFID": "00000000-0000-0000-0000-000000000000",
			"accountFID": 20,
			"contraAccountFID": -1,
			"vatFID": -1,
			"vatAccountFID": -1,
			"costCenterFID": -1,
			"postingTypeFID": 1,
			"amount": 10000.0,
			"fcAmount": 0.0,
			"exchangeRate": 1.0,
			"vatAmount": 0.0,
			"vatFcAmount": 0.0,
			"vatPercent": 0.0,
			"vatQuote": 0.0,
			"text": "TestCase Compound Transaction Posting #1",
			"freeCode": null,
			"isDebit": false,
			"isInclusive": false,
			"isInvisible": false,
			"postingIndex": 0,
			"partyNum": 0,
			"freepartyNum": null,
			"partyName": null,
			"invoiceNum": 0,
			"freeInvoiceNum": null,
			"invoiceDate": "0001-01-01T00:00:00"
		}
	]
}