using dcnsanplanung.shared.Model; using Npgsql; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace dcnsanplanung.DAL.Services.PostgresqlData { public class SchadenDataService : PostgresqlDataService { public SchadenDataService(string connectionstring) : base(connectionstring, "schaden") { } public async Task> GetAllByHaltung(Haltung haltung) { return await GetAllByHaltung(haltung.Guid.ToString()); } public async Task> GetAllByHaltung(string haltungs_guid) { List result = new List(); string command = "SELECT * FROM " + tableName + " WHERE ref_haltung_guid = @1 ORDER BY id ASC;"; using (var cmd = new NpgsqlCommand(command, conn)) { cmd.Parameters.AddWithValue("1", haltungs_guid); using (var reader = await cmd.ExecuteReaderAsync()) { while (reader.Read()) { Schaden adding = parseSchaden(reader); result.Add(adding); } } } return result; } private Schaden parseSchaden(NpgsqlDataReader reader) { return new Schaden() { ID = reader.GetInt32(0), Guid = Guid.Parse(reader.GetString(1)), Ref_Haltung_Guid = Guid.Parse(reader.GetString(2)), Entfernung = reader.GetDecimal(3), Hauptcode = reader.GetString(4), CH1 = reader.GetString(5), CH2 = reader.GetString(6), Q1 = reader.GetString(7), Q2 = reader.GetString(8), KD = reader.IsDBNull(9) ? 5 : reader.GetInt32(9), KB = reader.IsDBNull(10) ? 5 : reader.GetInt32(10), KS = reader.IsDBNull(11) ? 5 : reader.GetInt32(11), StreckenschadenCode = reader.GetString(12) }; } public async Task Create(Schaden entity) { string command = "INSERT INTO " + tableName + " (guid, ref_haltung_guid, entfernung, hauptcode, ch1,ch2,q1,q2,streckenschaden) VALUES " + "(@1,@2,@3,@4,@5,@6,@7,@8,@9) RETURNING id"; using(var cmd = new NpgsqlCommand(command,conn)) { cmd.Parameters.AddWithValue("1", entity.Guid.ToString()); cmd.Parameters.AddWithValue("2", entity.Ref_Haltung_Guid.ToString()); cmd.Parameters.AddWithValue("3", entity.Entfernung); cmd.Parameters.AddWithValue("4", entity.Hauptcode); cmd.Parameters.AddWithValue("5", entity.CH1); cmd.Parameters.AddWithValue("6", entity.CH2); cmd.Parameters.AddWithValue("7", entity.Q1); cmd.Parameters.AddWithValue("8", entity.Q2); cmd.Parameters.AddWithValue("9", entity.StreckenschadenCode); //cmd.Parameters.AddWithValue("5", NpgsqlTypes.NpgsqlDbType.Oid, entity.Schadensklasse); using var reader = await cmd.ExecuteReaderAsync(); reader.Read(); entity.ID = reader.GetInt32(0); } return entity; } public async Task Update(Schaden entity) { string command = @"UPDATE " + tableName + " SET kd=@1, kb=@2, ks=@3 WHERE id=@4"; using (var cmd = new NpgsqlCommand(command, conn)) { cmd.Parameters.AddWithValue("1", entity.KD); cmd.Parameters.AddWithValue("2", entity.KB); cmd.Parameters.AddWithValue("3", entity.KS); cmd.Parameters.AddWithValue("4", entity.ID); await cmd.ExecuteNonQueryAsync(); } return entity; } public async Task InsertSchadenBulk(List schaden) { foreach(var item in schaden) { await Create(item); } return true; } public async Task UpdateSchadenBuld(List schaden) { foreach(var item in schaden) { await Update(item); } return true; } } }