Transaction

In the following you will find examples to create a transaction.
 
Example Code
 
Create a simple transaction
A transaction in general refers to a simple general ledger transaction. Simple transactions are the ones regarding two accounts
(one Debit account and one Credit account) and entered in one single row.
 
External references to methods used in examples
#Code reference - GET.transactions
#Code reference - POST.transaction
#Code reference - GET.defaults
#Code reference - GET.account_by_account_code
#Code reference - DELETE.transaction
    
        [TestMethod]
        public void REST_Transaction_simple_POST()
        {
            state = new ErrorState { passed = false };

            Transaction transaction = Create.transaction_simple(5000m, 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 Create{
           public static Transaction transaction_simple(decimal payment_amount, Manager manager)
            {
                DateTime date = DateTime.Today;

                Transaction transaction = new Transaction
                {
                    numRangeFID = GET.defaults(manager).defSimpleNumRangeFID,
                    transactionTypeFID = (int)InternalTypes.TransactionType.Simple,
                    docNum = GET.defaults(manager).defSimpleCurrNum,
                    docType = "A",
                    docDate = new DateTime(date.Year, date.Month, date.Day)
                };

                Posting posting1 = new Posting
                {
                    accountFID = GET.account_by_account_code("1020", manager).id,
                    text = "Test Case Simple Transaction Posting #1",
                    freeCode = "SimpleTransaction free 1",
                    amount = payment_amount,
                    fcAmount = payment_amount,
                    exchangeRate = 1,
                    isDebit = true,
                    isInclusive = false,
                    costCenterFID = -1
                };

                Posting posting2 = new Posting
                {
                    accountFID = GET.account_id_by_account_code("3200", manager),
                    text = "Test Case Simple Transaction Posting #2",
                    freeCode = "SimpleTransaction free 2",
                    amount = payment_amount,
                    fcAmount = payment_amount,
                    exchangeRate = 1,
                    isDebit = false,
                    isInclusive = false,
                    costCenterFID = -1
                };

                transaction.postings.Add(posting1);
                transaction.postings.Add(posting2);
                transaction.isConfirmed = true;

                return transaction;
            }
       } 
    
  
    
   UNDER CONSTRUCTION
    
  
    
    {
	"partyFID": 2497,
	"accountFID": 155,
	"payMethodFID": 26,
	"payTermFID": 9,
	"freeCode": "NC",
	"ourCustomerNum": null,
	"isInactiv": false,
	"creditLine": 10000.0,
	"person": {
		"partyFID": 2497,
		"personRoleFID": 3,
		"firstName": "Cavin",
		"middleName": "M",
		"lastName": "Matters",
		"email": "Cavin.Matters@business.ch",
		"jobTitle": "Product Manager",
		"mobile": "079 123 45 67",
		"salutation": null,
		"telephone": "062 123 45 67",
		"title": "Dr.",
		"titleSuffix": null,
		"isMale": true
	},
	"payMethods": [
		{
			"id": -1,
			"partyFID": 2497,
			"accountFID": 46,
			"bankAccountFID": 4,
			"bankFID": 1179,
			"payTypeFID": 9,
			"accountNum": "CH170024024081139040W",
			"name": "IBAN",
			"payslipCode": null,
			"personRoleFID": 3
		},
		{
			"id": -1,
			"partyFID": 2497,
			"accountFID": 46,
			"bankAccountFID": 4,
			"bankFID": 1179,
			"payTypeFID": 1,
			"accountNum": "CH1700548099062161999",
			"name": "ESR_CHF",
			"payslipCode": null,
			"personRoleFID": 3
		}
	]
}    
  
 
Create a compound transaction
A compound transaction is an accounting where there is more than one debit or credit postings. It is essentially a combination of several
simple transaction entries.
 
External references to methods used in examples
#Code reference - GET.transactions
#Code reference - POST.transaction
#Code reference - GET.defaults
#Code reference - GET.account_by_account_code
#Code reference - DELETE.transaction
    
        [TestMethod]
        public void REST_Transactions_simple_create()
        {
            state = new ErrorState();
            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 = Load.transactions(manager);
            var _transaction = transactions.FirstOrDefault(t => t.docType.Equals("XX"));

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

       class Create{
        public static Transaction transaction_simple(decimal payment_amount, Manager manager)
        {
            Transaction transaction = new Transaction();
            transaction.numRangeFID = GET.defaults(manager).defSimpleNumRangeFID;
            transaction.transactionTypeFID = (int)InternalTypes.TransactionType.Simple;
            transaction.docNum = GET.defaults(manager).defSimpleCurrNum;

            transaction.docType = "XX";
            DateTime date = DateTime.Today;
            transaction.docDate = new DateTime(date.Year, date.Month, date.Day);

            Posting posting1 = new Posting();
            posting1.accountFID = GET.account_id_by_account_code("1020", manager);

            posting1.text = "Test Case Simple Transaction Posting #1";
            posting1.freeCode = "SimpleTransaction free 1";
            posting1.amount = payment_amount;
            posting1.fcAmount = payment_amount;
            posting1.exchangeRate = 1;
            posting1.isDebit = true;
            posting1.isInclusive = false;
            posting1.costCenterFID = -1;

            Posting posting2 = new Posting();
            posting2.accountFID = GET.account_id_by_account_code("3200", manager);
            posting2.text = "Test Case Simple Transaction Posting #2";
            posting2.freeCode = "SimpleTransaction free 2";
            posting2.amount = payment_amount;
            posting2.fcAmount = payment_amount;
            posting2.exchangeRate = 1;
            posting2.isDebit = false;
            posting2.isInclusive = false;
            posting2.costCenterFID = -1;

            transaction.postings.Add(posting1);
            transaction.postings.Add(posting2);

            transaction.isConfirmed = true;

            return transaction;
        }
       } 

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

            state.passed = false;
            if (transaction != null)
            {
                var serialized = JsonConvert.SerializeObject(transaction);
                var content = new StringContent(serialized, Encoding.UTF8, "application/json");

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

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    ResponseDetails details = new ResponseDetails();
                    string message = details.responseDetails(response);
                }
                state.passed = response.IsSuccessStatusCode;
            }
            return state.passed;
        }
      }
    
  
    
   UNDER CONSTRUCTION
    
  
    
    {
	"partyFID": 2497,
	"accountFID": 155,
	"payMethodFID": 26,
	"payTermFID": 9,
	"freeCode": "NC",
	"ourCustomerNum": null,
	"isInactiv": false,
	"creditLine": 10000.0,
	"person": {
		"partyFID": 2497,
		"personRoleFID": 3,
		"firstName": "Cavin",
		"middleName": "M",
		"lastName": "Matters",
		"email": "Cavin.Matters@business.ch",
		"jobTitle": "Product Manager",
		"mobile": "079 123 45 67",
		"salutation": null,
		"telephone": "062 123 45 67",
		"title": "Dr.",
		"titleSuffix": null,
		"isMale": true
	},
	"payMethods": [
		{
			"id": -1,
			"partyFID": 2497,
			"accountFID": 46,
			"bankAccountFID": 4,
			"bankFID": 1179,
			"payTypeFID": 9,
			"accountNum": "CH170024024081139040W",
			"name": "IBAN",
			"payslipCode": null,
			"personRoleFID": 3
		},
		{
			"id": -1,
			"partyFID": 2497,
			"accountFID": 46,
			"bankAccountFID": 4,
			"bankFID": 1179,
			"payTypeFID": 1,
			"accountNum": "CH1700548099062161999",
			"name": "ESR_CHF",
			"payslipCode": null,
			"personRoleFID": 3
		}
	]
}