public Customer AddCustomer(Customer customer)
        {
            customer.VismaID = new Random().Next().ToString();

            Console.WriteLine(String.Format("Add Customer: {0}", customer.ToString()));
            return customer;
        }
        public Customer AddCustomer(Customer customer)
        {
            try
            {
                int pData = Api.AdkCreateData(Api.ADK_DB_CUSTOMER);
                //error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_ORGANISATION_NUMBER, ref customer.PersonalID);
                PopulateAdkData(pData, customer);

                error = Api.AdkAdd(pData);
                HandleError();
                var str16 = new string(' ', 16);
                error = Api.AdkGetStr(pData, Api.ADK_CUSTOMER_NUMBER, ref str16, 16);
                customer.VismaID = str16;
                Api.AdkClose();
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
                throw;
            }

            return customer;
        }
 public Customer UpdateCustomer(string id, Customer customer)
 {
     Console.WriteLine(string.Format("Update: {0}", customer.ToString()));
     return customer;
 }
 public IEnumerable<Customer> GetCustomer(Customer customer)
 {
     return new List<Customer>{customer};
 }
        private Customer ReadCustomer(int pData)
        {
            var customer = new Customer();
            var str12 = new string(' ', 12);
            var str16 = new string(' ', 16);
            var str20 = new string(' ', 20);
            var str24 = new string(' ', 24);
            var str35 = new string(' ', 35);
            var str50 = new string(' ', 50);
            var str70 = new string(' ', 70);
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_NUMBER, ref str16, 16);
            customer.VismaID = str16;
            str16 = new string(' ', 16);
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_ORGANISATION_NUMBER, ref str16, 16);
            customer.PersonalID = str16;

            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_NAME, ref str50, 50);
            customer.SetName(str50);
            str50 = new string(' ', 50);
            //Api.AdkGetStr(pData, Api.ADK_CUSTOMER_LAST, ref str50, 50);
            //customer.LastName = str50;
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_TELEPHONE, ref str20, 20);
            customer.Phone = str20;
            str20 = new string(' ', 20);
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_MAILING_ADDRESS, ref str35, 35);
            customer.Address = str35;
            str35 = new string(' ', 35);
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_MAILING_ADDRESS2, ref str35, 35);
            customer.Address2 = str35;
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_ZIPCODE, ref str12, 12);
            customer.Postalnr = str12.Replace(" ","");

            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_EMAIL, ref str70, 70);
            customer.Email = str70;
            //Api.AdkSetStr(pData, Api.ADK_CUSTOMER_EMAIL, ref customer.Email2, 70);
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_CITY, ref str24, 24);
            customer.City = str24;
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_MOBILE_PHONE, ref str20, 20);
            customer.Mobile = str20;
            str20 = new string(' ', 20);
            if (customer.Mobile == string.Empty)
            {
                Api.AdkGetStr(pData, Api.ADK_CUSTOMER_TELEPHONE2, ref str20, 20);
                customer.Mobile = str20;
            }
            str20 = new string(' ', 20);
            Api.AdkGetStr(pData, Api.ADK_CUSTOMER_FAX, ref str20, 20);
            customer.Fax = str20;
            //Api.AdkSetStr(pData, Api.ADK_CUSTOMER_EMAIL, ref customer.SeNumber, 70);
            return customer;
        }
        private void PopulateAdkData(int pData, Customer customer)
        {
            if (!string.IsNullOrEmpty(customer.FirstName) || !string.IsNullOrEmpty(customer.LastName))
            {
                var nameStr = string.Format("{1} {0}", customer.LastName, customer.FirstName);
                Console.WriteLine("Name: " + nameStr);
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_NAME, ref nameStr);
                HandleError();
            }
            if (!string.IsNullOrEmpty(customer.Address))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_MAILING_ADDRESS, ref customer.Address);
                HandleError();
            }
            if (!string.IsNullOrEmpty(customer.Address2))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_MAILING_ADDRESS2, ref customer.Address2);
                HandleError();
            }
            if (!string.IsNullOrEmpty(customer.Postalnr))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_ZIPCODE, ref customer.Postalnr);
                HandleError();
            }
            if (!string.IsNullOrEmpty(customer.City))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_CITY, ref customer.City);
                HandleError();
            }

            if (!string.IsNullOrEmpty(customer.Email))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_EMAIL, ref customer.Email);
                HandleError();
            }
            //error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_EMAIL, ref customer.Email2);
            //HandleError();

            if (!string.IsNullOrEmpty(customer.Phone))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_TELEPHONE, ref customer.Phone);
                HandleError();
            }
            if (!string.IsNullOrEmpty(customer.Mobile))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_MOBILE_PHONE, ref customer.Mobile);
                HandleError();
            }
            if (!string.IsNullOrEmpty(customer.Fax))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_FAX, ref customer.Fax);
                HandleError();
            }
            if (!string.IsNullOrEmpty(customer.PersonalID))
            {
                error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_ORGANISATION_NUMBER, ref customer.PersonalID);
                HandleError();
            }
            //error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_MAILING_ADDRESS2, ref customer.SeNumber);
            //HandleError();
        }
        public Customer UpdateCustomer(string id, Customer customer)
        {
            int pData = Api.AdkCreateData(Api.ADK_DB_CUSTOMER);
            error = Api.AdkSetStr(pData, Api.ADK_CUSTOMER_NUMBER, ref id);
            HandleError();
            Api.AdkFind(pData);
            HandleError();

            while (error.lRc != Api.ADKE_EOF)
            {
                var str16 = new string(' ', 16);
                Api.AdkGetStr(pData, Api.ADK_CUSTOMER_NUMBER, ref str16, 16);
                if (str16 == id)
                {
                    PopulateAdkData(pData, customer);

                    error = Api.AdkUpdate(pData);
                    HandleError();
                    break;
                }
                error = Api.AdkNext(pData);
            }

            Api.AdkClose();
            return customer;
        }
        public IEnumerable<Customer> GetCustomer(Customer customer)
        {
            int pData = Api.AdkCreateData(Api.ADK_DB_CUSTOMER);
            PopulateAdkData(pData, customer);
            Api.AdkSetSortOrder(pData, Api.ADK_SORT_ORDER.eCustomerNr);
            error = Api.AdkFind(pData);
            HandleError();

            var customers = new List<Customer>();
            while (error.lRc != Api.ADKE_EOF)
            {
                var c = ReadCustomer(pData);
                int res;
                if (int.TryParse(c.VismaID, out res))
                {
                    customers.Add(c);
                }

                error = Api.AdkNext(pData);

            }
            Api.AdkClose();
            return customers;
        }