Transaction
In the following you will find examples to create a transaction.
Example Code
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.
(one Debit account and one Credit account) and entered in one single row.
#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
}
]
}
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.
simple transaction entries.
#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
}
]
}