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 party
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.
 
External references to methods used in examples
#Code reference - GET.language_by_code
#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
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.
  
External references to methods used in examples
#Code reference - InternalTypes
    
    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
    
  
 
Create a debtor and add to a party
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.
 
External references to methods used in examples
#Code reference - GET.party_by_name
#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
		}
	]
}
    
  
 
Create a creditor and add to a party
A party might be a debtor or creditor. A party might be both in some cases.
 
External references to methods used in examples
#Code reference - Create.paymethod
#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
		}
	]
}
  
 
Create a paymethod and add to a creditor
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.).
 
External references to methods used in examples
#Code reference - GET.party_by_name
#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
		}
	]
}