Party
A party is used to create an address (master) for all customer and vendor accounts. A party can be a supplier or a customer. In some
cases even both. A party consist basically of a party name, party address a contact person. It might act as a creditor or debtor.
In some cases both.
Example Code
Create a simple party object without a creditor or deptor. A Party is used to create your address master for customer and vendor accounts.
A party can have a supplier or a customer account, in some cases both.
A party can have a supplier or a customer account, in some cases both.
#Code reference - GET.country_by_code
#Code reference - DELETE.party
#Code reference - Create.person
[TestMethod]
public void REST_Party_create()
{
state = new ErrorState { passed = false };
Party party = GET.party_by_name("Hunkeler", manager);
if (party != null)
{
state.passed = DELETE.party("Hunkeler", manager);
Assert.AreEqual(true, state.passed, state.message);
}
party = Create.party(manager);
state.passed = POST.party(party, manager);
Assert.AreEqual(true, state.passed, state.message);
}
class Create
{
public static Party party(Manager manager)
{
Party party = new Party();
Language language = GET.language_by_code("DE", manager);
Country country = GET.country_by_code("CH", manager);
party.name = "Hunkeler";
party.shortName = "Hunki";
party.freePartyNum = "Hunki 21";
party.address1 = "RandomStreet 1";
party.city = "RandomCity";
party.zip = "8000";
party.email = "RandomParty@business.ch";
party.telephone = "062 123 45 67";
party.languageCode = language.code;
party.languageFID = language.id;
party.countryCode = country.code;
party.countryFID = country.id;
party.person = Create.person();
return party;
}
}
UNDER CONSTRUCTION
POST Request:
{
"id": -1,
"countryFID": 110,
"languageFID": 1,
"shortName": "Hunki",
"name": "Hunkeler",
"line1": null,
"line2": null,
"city": "RandomCity",
"address1": "RandomStreet 1",
"address2": null,
"addressBlock": null,
"email": "RandomParty@business.ch",
"remarks": null,
"telefax": null,
"telephone": "062 123 45 67",
"web": null,
"isPrivate": false,
"partyNum": -1,
"freePartyNum": "Hunki 21",
"isHaveDebtor": false,
"isHaveCreditor": false,
"countryCode": "CH",
"languageCode": "DE",
"zip": "8000",
"person": {
"partyFID": -1,
"personRoleFID": 1,
"firstName": "Cavin",
"middleName": "M",
"lastName": "Matters",
"email": "Cavin.Matters@business.ch",
"jobTitle": "Product Manager",
"mobile": "079 123 45 67",
"salutation": "Herr",
"telephone": "062 123 45 67",
"title": "Dr.",
"titleSuffix": null,
"isMale": false
},
"debtor": null,
"creditor": null
}
Create a person (contact person) with a party. Each party can hold a contact person. Such a person might be marked as private- or business person.
A person is optional to a party.
A person is optional to a party.
class Create
{
private static Person person()
{
Person person = new Person();
person.title = "Dr.";
person.firstName = "Cavin";
person.middleName = "M";
person.lastName = "Matters";
person.email = "Cavin.Matters@business.ch";
person.isMale = true;
person.jobTitle = "Product Manager";
person.mobile = "079 123 45 67";
person.telephone = "062 123 45 67";
person.personRoleFID = (int)InternalTypes.PersonRole.Party;
return person;
}
}
UNDER CONSTRUCTION
The term debtor or creditor refers to nothing other than a customer. A party might be a debtor or creditor. In some cases might be both. A creditor/debtor is relevant,
if one is using subledgers. In such cases a party needs to be either debtor, creditor or both.
#Code reference - GET.party_by_id
#Code reference - GET.account_by_account_code
#Code reference - Create.debtor_paymethod
#Code reference - DELETE.debtor
#Code reference - Create.debtor
[TestMethod]
public void REST_Party_debtor_create()
{
ErrorState state = new ErrorState();
Party party = GET.party_by_name("Hunkeler", manager);
if (party == null) {
party = Create.party(manager);
state.passed = POST.party(party, manager);
party = GET.party_by_name("Hunkeler", manager);
}
Assert.AreEqual(true, state.passed, state.message);
if (party.isHaveDebtor) {
state.passed = DELETE.debtor(party, manager);
Assert.AreEqual(true, state.passed, state.message);
}
Debtor debtor = Create.debtor(party.id, manager);
state.passed = POST.debtor(debtor, party, manager);
Assert.AreEqual(true, state.passed, state.message);
}
class Create
{
public static Debtor debtor(int partyID, Manager manager)
{
Debtor debtor = new Debtor();
debtor.isInactiv = false;
debtor.creditLine = 100000m;
debtor.freeCode = "NC";
debtor.noReminders = true;
debtor.payTermFID = GET.payterm_by_code("30T", manager).id; // 30 Tage netto id = 9;
debtor.payMethodFID = -1;
debtor.accountFID = GET.account_by_account_code("3300", manager).id;
debtor.payMethods.Add(Create.debtor_paymethod(partyID, manager));
debtor.person = Create.person();
debtor.person.personRoleFID = (int)InternalTypes.PersonRole.Debtor;
debtor.person.partyFID = partyID;
return debtor;
}
}
class POST
{
public static bool debtor(Debtor debtor, Party party, Manager manager)
{
var currentClient = manager.getCurrentClient();
ErrorState state = new ErrorState();
state.passed = false;
if ((debtor != null) & (party != null))
{
var serialized = JsonConvert.SerializeObject(debtor);
var content = new StringContent(serialized, Encoding.UTF8, "application/json");
string request = "clients/{0}/parties/{1}/debtor";
var response = manager.httpClient.PostAsync(string.Format(request, currentClient.id, party.id), content).Result;
if (response.StatusCode != HttpStatusCode.OK)
{
ResponseDetails details = new ResponseDetails(response);
}
state.passed = response.IsSuccessStatusCode;
}
return state.passed;
}
}
UNDER CONSTRUCTION
Post Request:
{
"partyFID": 145,
"accountFID": -1,
"payMethodFID": -1,
"payTermFID": 9,
"freeCode": "DEB_1000",
"isInactiv": false,
"noReminders": true,
"noRemindersFee": false,
"creditLine": 100000.0,
"maxReminderLevel": 0,
"person": {
"partyFID": 145,
"personRoleFID": 2,
"firstName": "Cavin",
"middleName": "M",
"lastName": "Matters",
"email": "Cavin.Matters@business.ch",
"jobTitle": "Product Manager",
"mobile": "079 123 45 67",
"salutation": "Herr",
"telephone": "062 123 45 67",
"title": "Dr.",
"titleSuffix": null,
"isMale": false
},
"payMethods": [
{
"id": -1,
"partyFID": 145,
"accountFID": 20,
"bankAccountFID": 4,
"bankFID": 26,
"payTypeFID": 6,
"accountNum": "400000.40",
"name": "manual",
"payslipCode": null,
"personRoleFID": 2
}
]
}
A party might be a debtor or creditor. A party might be both in some cases.
#Code reference - Create.person
#Code reference - POST.party
#Code reference - DELETE.creditor
[TestMethod]
public void REST_Parties_Creditor_Create()
{
state = new ErrorState();
Party party = GET.party_by_name("Hunkeler", manager);
if (party == null)
{
party = Create.party(manager);
state.passed = POST.party(party, manager);
party = GET.party_by_name("Hunkeler", manager);
}
Assert.AreEqual(true, state.passed, state.message);
if (party.isHaveCreditor)
{
state.passed = DELETE.creditor(party, manager);
Assert.AreEqual(true, state.passed, state.message);
}
Creditor creditor = Create.creditor(party.id, manager);
state.passed = POST.creditor(creditor, party, manager);
Assert.AreEqual(true, state.passed, state.message);
}
class Create {
public static Creditor creditor(int partyID, Manager manager) {
Creditor creditor = new Creditor();
creditor.isInactiv = false;
creditor.creditLine = 10000m;
creditor.freeCode = "NC";
creditor.payTermFID = GET.payterm_by_code("30T", manager).id;
creditor.payMethodFID = -1;
creditor.accountFID = GET.account_by_account_code("3200", manager).id;
creditor.partyFID = partyID;
creditor.payMethods.Add(Create.paymethod_IBAN(partyID));
creditor.payMethods.Add(Create.paymethod_ESR(partyID));
creditor.person = Create.person();
return creditor;
}
}
class POST{
public static bool creditor(Creditor creditor, Party party, Manager manager)
{
var currentClient = manager.getCurrentClient();
ErrorState state = new ErrorState { passed = false };
state.passed = false;
if ((creditor != null) & (party != null))
{
var content = JsonConvert.SerializeObject(creditor);
var _cont = new StringContent(content, Encoding.UTF8, "application/json");
string request = "clients/{0}/parties/{1}/creditor";
var response = manager.httpClient.PostAsync(string.Format(request, currentClient.id, party.id), _cont).Result;
if (response.StatusCode != HttpStatusCode.OK)
{
ResponseDetails details = new ResponseDetails(response);
}
state.passed = response.IsSuccessStatusCode;
}
return state.passed;
}
}
UNDER CONSTRUCTION
POST Request:
{
"partyFID": 146,
"accountFID": 155,
"payMethodFID": 26,
"payTermFID": 9,
"freeCode": "CR_1001",
"ourCustomerNum": null,
"isInactiv": false,
"creditLine": 10000.0,
"billerID": null,
"vatNumber": null,
"noDefaultVAT": false,
"person": {
"partyFID": 146,
"personRoleFID": 3,
"firstName": "Cavin",
"middleName": "M",
"lastName": "Matters",
"email": "Cavin.Matters@business.ch",
"jobTitle": "Product Manager",
"mobile": "079 123 45 67",
"salutation": "Herr",
"telephone": "062 123 45 67",
"title": "Dr.",
"titleSuffix": null,
"isMale": false
},
"payMethods": [
{
"id": -1,
"partyFID": 146,
"accountFID": 46,
"bankAccountFID": 4,
"bankFID": 1080,
"payTypeFID": 9,
"accountNum": "CH170024024081139040W",
"name": "IBAN",
"payslipCode": null,
"personRoleFID": 3
},
{
"id": -1,
"partyFID": 146,
"accountFID": 46,
"bankAccountFID": 4,
"bankFID": 1080,
"payTypeFID": 1,
"accountNum": "CH1700548099062161999",
"name": "ESR_CHF",
"payslipCode": null,
"personRoleFID": 3
}
]
}
A party might be a debtor or creditor. A pay method subsumes various central functions of a customer subledger account as payment type, currency, IBAN etc.).
#Code reference - GET.party_by_id
#Code reference - GET.account_by_account_code
#Code reference - DELETE.party
#Code reference - Create.party
#Code reference - Create.creditor
#Code reference - POST.party
#Code reference - POST.creditor
[TestMethod]
public void REST_Party_creditor_paymethod_add()
{
ErrorState state = new ErrorState { passed = false };
Party party = GET.party_by_name("Hunkeler", manager);
party = GET.party_by_id(party.id, manager);
if (party != null)
{
state.passed = DELETE.party("Hunkeler", manager);
Assert.AreEqual(true, state.passed, state.message);
}
state.passed = false;
party = Create.party(manager);
state.passed = POST.party(party, manager);
Assert.AreEqual(true, state.passed, state.message);
party = GET.party_by_name("Hunkeler", manager);
party = GET.party_by_id(party.id, manager);
state.passed = false;
Creditor creditor = Create.creditor(party.id, manager);
state.passed = POST.creditor(creditor, party, manager);
Assert.AreEqual(true, state.passed, state.message);
party = GET.party_by_name("Hunkeler", manager);
party = GET.party_by_id(party.id, manager);
state.passed = false;
creditor = party.creditor;
creditor.payMethods.Add(Create.paymethod_QR(party.id, manager));
state.passed = POST.creditor(creditor, party, manager);
Assert.AreEqual(true, state.passed, state.message);
}
class Create
{
public static PayMethod paymethod_QR(int partyID, Manager manager)
{
var paymethod = new PayMethod
{
name = "QR_CHF",
accountNum = "CH1700548099062161999",
personRoleFID = (int)InternalTypes.PersonRole.Creditor,
payTypeFID = (int)InternalTypes.payType.QR,
accountFID = GET.account_by_account_code("2000", manager).id, // 46
bankAccountFID = GET.bankaccount_by_name("UBS CHF", manager).id, // 4
bankFID = GET.bankaccount_by_name("UBS CHF", manager).bankFID, // 1179;
partyFID = partyID,
id = -1
};
return paymethod;
}
}
class GET
{
public static BankAccount bankaccount_by_name(String name, Manager manager)
{
BankAccount bank_account = null;
string request = "clients/{0}/bankaccounts/byname/{1}";
var response = manager.httpClient.GetAsync(string.Format(request, manager.getCurrentClient().id, name)).Result;
if (response.StatusCode == HttpStatusCode.OK)
{
bank_account = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
}
return bank_account;
}
}
UNDER CONSTRUCTION
POST Request:
{
"partyFID": 152,
"accountFID": 155,
"payMethodFID": 26,
"payTermFID": 9,
"freeCode": "CR_1001",
"ourCustomerNum": "",
"isInactiv": false,
"creditLine": 10000.0,
"billerID": "",
"vatNumber": "",
"noDefaultVAT": false,
"person": {
"partyFID": 152,
"personRoleFID": 3,
"firstName": "Cavin",
"middleName": "M",
"lastName": "Matters",
"email": "Cavin.Matters@business.ch",
"jobTitle": "Product Manager",
"mobile": "079 123 45 67",
"salutation": "Herr",
"telephone": "062 123 45 67",
"title": "Dr.",
"titleSuffix": "",
"isMale": false
},
"payMethods": [
{
"id": 196,
"partyFID": 152,
"accountFID": 46,
"bankAccountFID": 4,
"bankFID": 1080,
"payTypeFID": 1,
"accountNum": "CH1700548099062161999",
"name": "ESR_CHF",
"payslipCode": "",
"personRoleFID": 3
},
{
"id": 195,
"partyFID": 152,
"accountFID": 46,
"bankAccountFID": 4,
"bankFID": 1080,
"payTypeFID": 9,
"accountNum": "CH170024024081139040W",
"name": "IBAN",
"payslipCode": "",
"personRoleFID": 3
},
{
"id": -1,
"partyFID": 152,
"accountFID": 46,
"bankAccountFID": 4,
"bankFID": 1080,
"payTypeFID": 11,
"accountNum": "CH1700548099062161999",
"name": "QR_CHF",
"payslipCode": null,
"personRoleFID": 3
}
]
}