@ -7,12 +7,11 @@ namespace Gremlin_BlazorServer.Services;
public class GenericImporter {
public static async Task ImportCsvAsync < T > ( string fileContent ) where T : class , IMetadata , new ( ) {
public static void ImportCsv < T > ( string fileContent ) where T : class , IMetadata , new ( ) {
Console . WriteLine ( $"GENERIC IMPORTER: Importing {typeof(T)} from csv..." ) ;
List < string [ ] > splitLines = await Task . Run ( ( ) = > SplitLines ( fileContent ) ) ;
List < string [ ] > splitLines = SplitLines ( fileContent ) ;
Console . WriteLine ( $"Found {splitLines.Count} potential {typeof(T)} in csv." ) ;
ParseLinesToResultSet < T > ( splitLines ) ;
Console . WriteLine ( $"GENERIC IMPORTER: Ready!" ) ;
Console . WriteLine ( ParseLinesToResultSet < T > ( splitLines ) ? $"GENERIC IMPORTER: Ready." : $"GENERIC IMPORTER: Error by writing to db!" ) ;
}
private static List < string [ ] > SplitLines ( string fileContent ) {
@ -21,7 +20,7 @@ public class GenericImporter {
return fileList ;
}
private static async void ParseLinesToResultSet < T > ( IEnumerable < string [ ] > lineList ) where T : class , IMetadata , new ( ) {
private static bool ParseLinesToResultSet < T > ( IEnumerable < string [ ] > lineList ) where T : class , IMetadata , new ( ) {
Tuple < T ? , T ? > ? resultSet = new ( new ( ) , new ( ) ) ;
List < T > updatedItems = new ( ) ;
List < T > newItems = new ( ) ;
@ -35,9 +34,12 @@ public class GenericImporter {
if ( resultSet . Item2 is not null ) newItems . Add ( resultSet . Item2 ) ;
}
int success = 0 ;
Console . WriteLine ( $"Found {updatedItems.Count} updates and {newItems.Count} new items." ) ;
if ( updatedItems . Count > 0 ) await GenericController . UpdateAsync ( updatedItems ) ;
if ( newItems . Count > 0 ) await GenericController . InsertAsync ( newItems ) ;
if ( updatedItems . Count > 0 ) success + = GenericController . Update ( updatedItems ) ;
if ( newItems . Count > 0 ) success + = GenericController . Insert ( newItems ) ;
return success > 0 ;
}
private static Tuple < Account ? , Account ? > ? ParseToAccount ( IReadOnlyList < string > line ) { // "ID" "Name" "Street" "City" "BP Role" "Postal Code" "Customer Type" "Market Indicator" "Phone" "E-Mail" "Market code"
@ -81,7 +83,6 @@ public class GenericImporter {
existingAccount . PhoneNumber = readAccount . PhoneNumber ;
existingAccount . Street = readAccount . Street ;
existingAccount . Zip = readAccount . Zip ;
Console . WriteLine ( $"Update in Account {existingAccount.SapAccountNumber}:{existingAccount.AccountName}" ) ;
updatedAccount = existingAccount ;
}
else {
@ -119,12 +120,11 @@ public class GenericImporter {
Gender = 0
} ;
Contact ? existingContact = GenericController . Get < Contact > ( a = > a . SapContactNumber = = sapContactNumber
| | ( a . LastName = = readContact . LastName & & a . FirstName = = readContact . FirstName ) ) ;
Contact ? existingContact = GenericController . Get < Contact > ( a = > a . SapContactNumber = = sapContactNumber | | ( a . LastName = = readContact . LastName & & a . FirstName = = readContact . FirstName ) ) ;
if ( existingContact is not null ) {
if ( IsEqualContact ( readContact , existingContact ) ) {
Console . WriteLine ( $"---> The contact {readContact.SapContactNumber}:{readContact.FirstName} {readContact.LastName} ist aktuell." ) ;
// Console.WriteLine( $"---> The contact {readContact.SapContactNumber}:{readContact.FirstName} {readContact.LastName} ist aktuell.");
return null ;
}
@ -148,24 +148,46 @@ public class GenericImporter {
return new ( updatedContact , newContact ) ;
}
private static bool IsEqualAccount ( Account account , Account existingAccount )
= > account . AccountName = = existingAccount . AccountName
& & account . City = = existingAccount . City
& & account . EMail = = existingAccount . EMail
& & account . PhoneNumber = = existingAccount . PhoneNumber
& & account . Street = = existingAccount . Street
& & account . Zip = = existingAccount . Zip ;
private static bool IsEqualContact ( Contact contact , Contact existingContact )
= > contact . LastName = = existingContact . LastName
& & contact . FirstName = = existingContact . FirstName
& & contact . EMail = = existingContact . EMail
& & contact . PhoneNumber = = existingContact . PhoneNumber
& & contact . EmailBounced = = existingContact . EmailBounced
& & contact . OptInStatus = = existingContact . OptInStatus ;
}
internal class Result < T > {
public T ? NewItem { get ; set ; }
public T ? UpdatedItem { get ; set ; }
private static bool IsEqualAccount ( Account readAccount , Account existingAccount ) {
bool equalAccount = true ;
if ( readAccount . AccountName ! = existingAccount . AccountName ) {
equalAccount = false ;
Console . WriteLine ( $"--- UPDATE in Account {readAccount.SapAccountNumber} ---" ) ;
Console . WriteLine ( $"{readAccount.AccountName} | {existingAccount.AccountName}" ) ;
}
if ( readAccount . City ! = existingAccount . City ) {
equalAccount = false ;
Console . WriteLine ( $"--- UPDATE in Account {readAccount.SapAccountNumber} ---" ) ;
Console . WriteLine ( $"{readAccount.City} | {existingAccount.City}" ) ;
}
if ( readAccount . EMail ! = existingAccount . EMail ) {
equalAccount = false ;
Console . WriteLine ( $"--- UPDATE in Account {readAccount.SapAccountNumber} ---" ) ;
Console . WriteLine ( $"{readAccount.EMail} | {existingAccount.EMail}" ) ;
}
if ( readAccount . PhoneNumber ! = existingAccount . PhoneNumber ) {
equalAccount = false ;
Console . WriteLine ( $"--- UPDATE in Account {readAccount.SapAccountNumber} ---" ) ;
Console . WriteLine ( $"{readAccount.PhoneNumber} | {existingAccount.PhoneNumber}" ) ;
}
if ( readAccount . Street ! = existingAccount . Street ) {
equalAccount = false ;
Console . WriteLine ( $"--- UPDATE in Account {readAccount.SapAccountNumber} ---" ) ;
Console . WriteLine ( $"{readAccount.Street} | {existingAccount.Street}" ) ;
}
if ( readAccount . Zip ! = existingAccount . Zip ) {
equalAccount = false ;
Console . WriteLine ( $"--- UPDATE in Account {readAccount.SapAccountNumber} ---" ) ;
Console . WriteLine ( $"{readAccount.Zip} | {existingAccount.Zip}" ) ;
}
return equalAccount ;
}
private static bool IsEqualContact ( Contact readContact , Contact existingContact )
= > readContact . LastName = = existingContact . LastName
& & readContact . FirstName = = existingContact . FirstName
& & readContact . EMail = = existingContact . EMail
& & readContact . PhoneNumber = = existingContact . PhoneNumber
& & readContact . EmailBounced = = existingContact . EmailBounced
& & readContact . OptInStatus = = existingContact . OptInStatus ;
}