You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
7.0 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AppointmentsLib.Models
{
public class Contact
{
private static string primaryKey = "contactId";
private static List<string> fields = new()
{
"salutationId",
"firstname",
"surname",
"street",
"postalId",
"phone",
"phoneTypeId",
"mobil",
"companyId",
"department"
};
public readonly int ContactId;
public Salutation Salutation;
public string FirstName;
public string LastName;
public string Street;
public Postal Postal;
public string Phone;
public PhoneType PhoneType;
public string Mobil;
public Company Company;
public string Department;
internal Contact(int contactId, int salutationId, string firstName, string lastName, string street, int postalId, string phone, int phoneTypeId, string mobil, int companyId, string department)
{
ContactId = contactId;
FirstName = firstName;
LastName = lastName;
Street = street;
Phone = phone;
Mobil = mobil;
Department = department;
Company = Company.GetCompanyById(companyId);
}
public static IEnumerable<Contact> GetContacts()
{
var reader = Database.Execute($"SELECT {primaryKey}, {string.Join(", ", fields.ToArray())} FROM Contact;").ExecuteReader();
2 years ago
List<ContactData> data = new();
List<Contact> contacts = new();
2 years ago
while(reader.Read())
{
2 years ago
data.Add(new ContactData()
{
ContactId = reader.GetInt32(0),
SalutationId = reader.GetInt32(1),
FirstName = reader.GetString(2),
LastName = reader.GetString(3),
Street = reader.GetString(4),
PostalId = reader.GetInt32(5),
Phone = reader.GetString(6),
PhoneTypeId = reader.GetInt32(7),
Mobil = reader.GetString(8),
CompanyId = reader.GetInt32(9),
Department = reader.GetString(10)
});
}
reader.Close();
2 years ago
foreach (ContactData cd in data)
{
contacts.Add(cd.Finalize());
}
return contacts;
}
public static Contact GetContactById(int contactId)
{
var cmd = Database.Execute($"SELECT {primaryKey}, {string.Join(", ", fields.ToArray())} FROM Contact WHERE {primaryKey} = @id;");
cmd.Parameters.AddWithValue("id", contactId);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
2 years ago
var data = new ContactData()
{
ContactId = reader.GetInt32(0),
SalutationId = reader.GetInt32(1),
FirstName = reader.GetString(2),
LastName = reader.GetString(3),
Street = reader.GetString(4),
PostalId = reader.GetInt32(5),
Phone = reader.GetString(6),
PhoneTypeId = reader.GetInt32(7),
Mobil = reader.GetString(8),
CompanyId = reader.GetInt32(9),
Department = reader.GetString(10)
};
reader.Close();
2 years ago
return data.Finalize();
}
throw new Exception("contact does not exist");
}
public static Contact Create(int salutationId, string firstName, string lastName, string street, int postalId, string phone, int phoneTypeId, string mobil, int companyId, string department)
{
var cmd = Database.Execute($"INSERT INTO Contact ({string.Join(", ", fields.ToArray())}) VALUES ({string.Join(", ", fields.Select(delegate(string name) { return $"@{name}"; }).ToArray())})");
cmd.Parameters.AddWithValue("salutationId", salutationId);
cmd.Parameters.AddWithValue("firstname", firstName);
cmd.Parameters.AddWithValue("surname", lastName);
cmd.Parameters.AddWithValue("street", street);
cmd.Parameters.AddWithValue("postalId", postalId);
cmd.Parameters.AddWithValue("phone", phone);
cmd.Parameters.AddWithValue("phoneTypeId", phoneTypeId);
cmd.Parameters.AddWithValue("mobil", mobil);
cmd.Parameters.AddWithValue("companyId", companyId);
cmd.Parameters.AddWithValue("department", department);
cmd.ExecuteNonQuery();
int contactId = (int)cmd.LastInsertedId;
return new Contact(contactId, salutationId, firstName, lastName, street, postalId, phone, phoneTypeId, mobil, companyId, department);
}
public void Save()
{
var cmd = Database.Execute($"UPDATE Company SET {string.Join(", ", fields.Select(delegate(string name) { return $"@{name}"; }).ToArray())} WHERE {primaryKey} = @id");
cmd.Parameters.AddWithValue("id", ContactId);
cmd.Parameters.AddWithValue("salutationId", Salutation.SalutationId); // Salutation.salutationId
cmd.Parameters.AddWithValue("firstname", FirstName);
cmd.Parameters.AddWithValue("surname", LastName);
cmd.Parameters.AddWithValue("street", Street);
cmd.Parameters.AddWithValue("postalId", Postal.PostalId); // Postal.postalId
cmd.Parameters.AddWithValue("phone", Phone);
cmd.Parameters.AddWithValue("phoneTypeId", PhoneType.PhoneTypeId); // PhoneType.phoneTypeId
cmd.Parameters.AddWithValue("mobil", Mobil);
cmd.Parameters.AddWithValue("companyId", Company.CompanyId);
cmd.Parameters.AddWithValue("department", Department);
cmd.ExecuteNonQuery();
}
public void Delete()
{
var cmd = Database.Execute($"DELETE FROM Contact WHERE {primaryKey} = @id");
cmd.Parameters.AddWithValue("id", ContactId);
cmd.ExecuteNonQuery();
}
}
2 years ago
internal class ContactData
{
public int ContactId;
public int SalutationId;
public string FirstName;
public string LastName;
public string Street;
public int PostalId;
public string Phone;
public int PhoneTypeId;
public string Mobil;
public int CompanyId;
public string Department;
public Contact Finalize()
{
return new Contact(ContactId, SalutationId, FirstName, LastName, Street, PostalId, Phone, PhoneTypeId, Mobil, CompanyId, Department);
}
}
}