public int Process(ref string emailBody, ref bool debugLevel, ref bool success, string fileName, string folder) { numberOfSupoerPortRecords = 0; logger.Write(" Nykrdit format"); string counterPart = "NY"; if (folder.ToLower().Contains("handelsbanken")) { counterPart = "HA"; } // Removing qoutes if (lines[0].IndexOf("\"") == 0) { for (int k = 1; k < lines.Length; k++) { lines[k] = lines[k].Substring(1, lines[k].Length - 2); } } int ks = 0; int ub = 0; int ud = 0; int an = 0; int db = 0; int kb = 0; int dk = 0; ImpRecord uBImpRecord = null; if (lines.Length > 2) { for (int k = 1; k < lines.Length - 1; k++) { string[] fields = lines[k].Split(';'); if (debugLevel) { logger.WriteFields(fields); } if (lines[k].IndexOf("KS;") == 0) { ks++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 35) { emailBody += Environment.NewLine + "Nykredit KS record " + ks + " has too few fields"; logger.Write(" KS record too few fields"); } else { if (fields[20].CompareTo("ORDRE") == 0) { continue; } impRecord.setTransactionType(fields[10]); // Salg impRecord.setDepotNumber(fields[1]); impRecord.setAccountNumber(fields[2]); impRecord.setIdCode(fields[4].TrimEnd()); // impRecord.setTransactionNumber(fields[5]); use SuperPorts impRecord.setTransactionDate(fields[13]); impRecord.setSettlementDate(fields[14]); if (fields[6][0] == 'P') // PENDING { impRecord.setStatus('O'); } else if (fields[6][0] == 'S') // SETTLED { impRecord.setStatus('N'); } else // CANCELLED { impRecord.setStatus('D'); } if (fields[10] == "S") { impRecord.setTransactionType("K"); } else if (fields[10] == "B") { impRecord.setTransactionType("S"); } else { logger.Write(" KS unknown transaction type" + fields[10]); } impRecord.setCurrenciesCross(fields[11] + "/" + fields[12]); impRecord.setCurrenciesRate(fields[15]); impRecord.setAmount(fields[16]); impRecord.setPrice(fields[17]); impRecord.setCost("-" + fields[22]); impRecord.setKurtage("-" + fields[21]); impRecord.setNota('N'); impRecord.setCounterPart(counterPart); // Nykredit impRecord.setUnknown("000000737632.00000000000"); numberOfSupoerPortRecords++; impRecord.writeKoebSalgAktier(fileName); } } else if (lines[k].IndexOf("UB;") == 0) { ub++; //ImpRecord impRecord = new ImpRecord(logger); if (uBImpRecord == null) { uBImpRecord = new ImpRecord(logger); } else if (uBImpRecord.getDepotNumber().TrimStart().CompareTo(fields[1].TrimEnd()) == 0 && uBImpRecord.getIdCode().TrimStart().CompareTo(fields[23].TrimEnd()) == 0) { // handle extra tax record DecimalNumber yeildTax = new DecimalNumber(12, 7, true, logger); yeildTax.setDecimalNumber("-" + fields[18]); // set if not set if (!uBImpRecord.yieldTaxSet()) { uBImpRecord.setYieldTax("-" + fields[18]); } else { // set if bigger than value if (uBImpRecord.getYieldTax().CompareTo(yeildTax.getDecimalNumber()) < 0) { uBImpRecord.setYieldTax("-" + fields[18]); } } continue; } else { numberOfSupoerPortRecords++; uBImpRecord.writeUdbytteAktier(fileName); uBImpRecord = new ImpRecord(logger); } if (fields.Length < 23) { emailBody += Environment.NewLine + "Nykredit UB record " + ub + " has too few fields"; logger.Write(" UB record too few fields"); } else { uBImpRecord.setDepotNumber(fields[1]); uBImpRecord.setAccountNumber(fields[2]); uBImpRecord.setIdCode(fields[23].TrimEnd()); // impRecord.setTransactionNumber(fields[4].Substring(0, fields[4].Length < 8 ? fields[4].Length : 8)); use SuperPorts if (fields[5][0] == 'N' || fields[5][0] == 'A') // NEW // AMENDED { uBImpRecord.setStatus('N'); } else // CANCELLED { uBImpRecord.setStatus('D'); } if (fields[7] == "A") { uBImpRecord.setTransactionType("U"); } else if (fields[7] == "K") { uBImpRecord.setTransactionType("KR"); } else { logger.Write(" UB unknown transaction type" + fields[10]); } uBImpRecord.setCurrenciesCross(fields[8] + "/" + fields[9]); uBImpRecord.setTransactionDate(fields[11]); // has to be same as valør dato! uBImpRecord.setSettlementDate(fields[11]); uBImpRecord.setCurrenciesRate(fields[12]); //impRecord.setAmount(fields[21]); uBImpRecord.setPrice(fields[15]); uBImpRecord.setCost(fields[19]); uBImpRecord.setNota('N'); /*numberOfSupoerPortRecords++; * uBImpRecord.writeUdbytteAktier(fileName); * uBImpRecord = null;*/ } } else if (lines[1].IndexOf("UD;") == 0) { ud++; } else if (lines[1].IndexOf("AN;") == 0) { an++; } else if (lines[1].IndexOf("DB;") == 0) { db++; } else if (lines[1].IndexOf("KB;") == 0) { kb++; } else if (lines[1].IndexOf("DK;") == 0) { dk++; } else if (lines[k] == String.Empty) { } else { success = false; logger.Write(" Ukendt fil format, " + lines[k]); } } if (uBImpRecord != null) { numberOfSupoerPortRecords++; uBImpRecord.writeUdbytteAktier(fileName); uBImpRecord = null; } if (ks > 0) { logger.Write(" Depotbevægelser : " + ks); } if (ub > 0) { logger.Write(" Udbytte, Aktier og obligationer : " + ub); } if (ud > 0) { logger.Write(" Udtrukne obligationer : " + ud); } if (an > 0) { logger.Write(" Kontobevægelse : " + an); } if (db > 0) { logger.Write(" Depotbeholdninger : " + db); } if (kb > 0) { logger.Write(" Kontantbeholdninger : " + kb); } if (dk > 0) { logger.Write(" Relationer mellem depoter og konti : " + dk); } } else { if (lines.Length == 2 && lines[1].IndexOf("TAIL;") == 0) { logger.Write(" Filen indeholder ingen rcords"); } else { success = false; logger.Write(" Ukendt fil format"); } } return(numberOfSupoerPortRecords); }
public int Process(ref string emailBody, ref bool debugLevel, ref bool success, string fileName, string folder) { numberOfSupoerPortRecords = 0; logger.Write(" Jyske Bank format"); string counterPart = "JB"; if (folder.ToLower().Contains("sydbank")) { counterPart = "SB"; } if (lines.Length > 1) { int ub = 0; int kr = 0; int ks = 0; int ksAnuls = 0; for (int k = 1; k < lines.Length; k++) { string[] fields = lines[k].Split(';'); if (fields[0].CompareTo("KS") == 0) { if (fields[5].CompareTo("95") == 0) { annuls.Add(fields[6]); } } } for (int k = 1; k < lines.Length; k++) { string[] fields = lines[k].Split(';'); if (debugLevel) { logger.WriteFields(fields); } if (fields[0].CompareTo("UB") == 0) { ImpRecord impRecord = new ImpRecord(logger); impRecord.setTransactionDate(fields[10]); // // not fields[6] as it has to be the same as settlementdate // use the dictionary to get the isin code impRecord.setIdCode(fondCode.getIsin(fields[3])); impRecord.setSettlementDate(fields[10]); // impRecord.setTransactionNumber(fields[4]); use SuperPorts // The file does not contain the original amount so we have to calculate it from the currency rate and the settled amount, in danish number format CultureInfo cultureInfo = new CultureInfo("da-DK"); Decimal currencyRate = Convert.ToDecimal(fields[11], cultureInfo); Decimal settlementAmount = Convert.ToDecimal(fields[14], cultureInfo); impRecord.setPrice(Math.Round(settlementAmount / currencyRate * 100, 2).ToString()); impRecord.setCurrenciesRate(fields[11]); // yeield tax should be decucted - hence negativ and the dash infront of the field Decimal tax = Convert.ToDecimal(fields[15], cultureInfo); impRecord.setYieldTax("-" + Math.Round(tax / currencyRate * 100, 2).ToString()); // take last 14 digits impRecord.setAccountNumber(fields[2], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[1], false, 14); impRecord.setNota('N'); impRecord.blankAmount(); impRecord.blankKurtage(); Decimal cost = Convert.ToDecimal(fields[16], cultureInfo); impRecord.setCost("-" + Math.Round(cost / currencyRate * 100, 2).ToString()); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[8] + "/" + fields[9]); if (fields[7] == "A") { ub++; impRecord.setTransactionType("U"); numberOfSupoerPortRecords++; impRecord.writeUdbytteAktier(fileName); } else if (fields[7] == "K") { kr++; impRecord.setTransactionType("KR"); numberOfSupoerPortRecords++; impRecord.writeRenteKuponer(fileName); } } if (fields[0].CompareTo("KS") == 0) { ImpRecord impRecord = new ImpRecord(logger); impRecord.setTransactionDate(fields[11]); impRecord.setTransactionType(fields[8]); impRecord.setSettlementDate(fields[12]); // impRecord.setTransactionNumber(fields[4]); use SuperPorts impRecord.setAmount(fields[14]); impRecord.setExchangeRate(fields[15]); CultureInfo cultureInfo = new CultureInfo("da-DK"); Decimal currencyRate = Convert.ToDecimal(fields[13], cultureInfo); // Remove negative kurtage, as all kurtage is negative Decimal kurtage = Convert.ToDecimal(fields[17].Replace('-', ' '), cultureInfo); impRecord.setKurtage("-" + Math.Round(kurtage / currencyRate * 100, 2).ToString()); impRecord.setCurrenciesRate(fields[13]); // take last 14 digits impRecord.setAccountNumber(fields[2], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[1], false, 14); impRecord.setNota('N'); impRecord.setCounterPart(counterPart); // Jydske bank impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[9], fields[10]); // use the dictionary to get the isin code string idCode = fondCode.getIsin(fields[3]); if (idCode.Equals(string.Empty)) { success = false; emailBody += "Try to get Isin code " + fields[3] + " but was not found in the fondcode file.\n"; } else { impRecord.setIdCode(idCode); // check for anuls if (isAnul(fields[4])) { ksAnuls++; } else { ks++; numberOfSupoerPortRecords++; impRecord.writeKoebSalgAktier(fileName); } } } } if (ub > 0) { logger.Write(" Udbytte : " + ub); } if (kr > 0) { logger.Write(" Kupon : " + kr); } if (ks > 0) { logger.Write(" Køb Salg : " + ks); } if (ksAnuls > 0) { logger.Write(" Køb Salg, annuleret : " + ksAnuls); } } return(numberOfSupoerPortRecords); }
static void Main(string[] args) { String date = DateTime.Now.ToShortDateString(); if (args.Length == 0) { Console.Write("Too few parameters!\n"); Console.Write(" Input folder\n"); Console.Write(" Output folder\n"); Console.Write(" SMTP server\n"); Console.Write(" Port\n"); Console.Write(" Username\n"); Console.Write(" Password\n"); Console.Write(" Uses Ssl\n"); Console.Write(" To email\n"); Console.Write(" Fondkode file\n"); Console.Write(" Nordea depot file\n"); Console.Write(" [Debug level]\n"); Environment.Exit(5); } Logger logger = new Logger(args[1] + "\\" + date); bool debugLevel = false; if (args.Length < 10) { logger.Write("Too few parameters!", true); logger.Write(" Input folder", true); logger.Write(" Output folder", true); logger.Write(" SMTP server", true); logger.Write(" Port", true); logger.Write(" Username", true); logger.Write(" Password", true); logger.Write(" Uses Ssl", true); logger.Write(" To email", true); logger.Write(" Fondkode file", true); logger.Write(" Nordea depot file", true); logger.Write(" [Debug level]", true); Environment.Exit(1); } Email email = new Email(args[2], Int16.Parse(args[3]), args[4], args[5], args[6], args[7], logger); if (Directory.Exists(args[1] + "\\" + date)) { Console.Write("Program already run today.\n"); Console.Write("To run againg output folder needs to be cleaned!\n"); email.Send("Superport converter already run today.", "To run againg output folder needs to be cleaned!"); Environment.Exit(2); } String emailBody = String.Empty; int numberOfSupoerPortRecords = 0; Directory.CreateDirectory(args[1] + "\\" + date); FondCode fondCode = new FondCode(logger); NordeaDepot nordeaDepot = new NordeaDepot(logger); logger.Write("---- Start " + Assembly.GetCallingAssembly().GetName().Version + " --------------", true); if (args.Length >= 11) { debugLevel = args[10].ToLower() == "true"; if (debugLevel) { logger.Write("Debug level : true", true); } } if (!fondCode.readFile(args[8], ref debugLevel)) { email.Send("Superport cannot find fond code file.", "The parameter given for the fond code file is " + args[8] + " but cannot be found!"); Environment.Exit(3); } if (!nordeaDepot.readFile(args[9], ref debugLevel)) { email.Send("Superport cannot find Nordea Depot file.", "The parameter given for the depot code file is " + args[9] + " but cannot be found!"); Environment.Exit(3); } string folder = args[9].Substring(0, args[9].LastIndexOf('\\')); logger.Write("Old nordea records folder : " + folder); NordeaOldRecords nordeaOldRecords = new NordeaOldRecords(folder, logger); nordeaOldRecords.readFile(); logger.Write("Output directory : " + args[1] + "\\" + date); string[] banks = Directory.GetDirectories(args[0]); for (int i = 0; i < banks.Length; i++) { logger.Write("Processing bank : " + banks[i].Substring(args[0].Length + 1), true); Directory.CreateDirectory(args[1] + "\\" + date + "\\" + banks[i].Substring(args[0].Length + 1)); string[] files = Directory.GetFiles(banks[i]); if (files.Length == 0) { logger.Write(" No files to process"); continue; } for (int j = 0; j < files.Length; j++) { logger.Write(" Processing : " + files[j].Substring(banks[i].Length + 1)); bool success = true; string[] lines = System.IO.File.ReadAllLines(files[j]); if (lines.Length > 0) { // If first line start with HEAD; then it is a Nykredit file, sometime whole lines is in quotes if (lines[0].IndexOf("HEAD;") == 0 || lines[0].IndexOf("\"HEAD;") == 0) { Nykredit nykredit = new Nykredit(lines, logger); numberOfSupoerPortRecords += nykredit.Process(ref emailBody, ref debugLevel, ref success, args[1] + "\\" + date, banks[i]); } else if ((lines[0].IndexOf("\"REC-TYPE\";") == 0) || (lines[0].IndexOf("REC-TYPE;") == 0)) { BankData jydskeBank = new BankData(lines, ref fondCode, logger); numberOfSupoerPortRecords += jydskeBank.Process(ref emailBody, ref debugLevel, ref success, args[1] + "\\" + date, banks[i]); } else if ((lines[0].IndexOf("HEAD") == 0) && (lines[0][4] == 31)) { DanskeBank danskeBank = new DanskeBank(lines, logger); numberOfSupoerPortRecords += danskeBank.Process(ref emailBody, ref debugLevel, ref success, args[1] + "\\" + date); } else if ((lines[0].IndexOf("UDBAKT") == 0) || (lines[0].IndexOf("HDLAKT") == 0) || (lines[0].IndexOf("KNTOPD") == 0) || (lines[0].IndexOf("GBRTRN") == 0) || (lines[0][10] == 31)) { Nordea nordea = new Nordea(lines, ref nordeaDepot, nordeaOldRecords, logger); numberOfSupoerPortRecords += nordea.Process(ref emailBody, ref debugLevel, ref success, args[1] + "\\" + date); } else { success = false; logger.Write(" Ukendt fil format, program niveau"); } } // if process of file went ok, move to output folder if (success) { Directory.Move(files[j], args[1] + "\\" + date + "\\" + banks[i].Substring(args[0].Length + 1) + "\\" + files[j].Substring(banks[i].Length + 1)); } } } nordeaOldRecords.writeFile(); if (numberOfSupoerPortRecords == 0) { ImpRecord impRecord = new ImpRecord(logger); impRecord.createEmptyFile(args[1] + "\\" + date); } logger.Write("", true); logger.Write("---- Converted successfully ----", true); logger.Write("Generated superport file in : " + args[1] + "\\" + date, true); logger.Write(" has : " + numberOfSupoerPortRecords + " records.", true); logger.Write("---- Ended ---------------------", true); if (emailBody != String.Empty) { email.Send("Superport converter has error.", emailBody); Environment.Exit(2); } email.Send("Superport converter converted " + numberOfSupoerPortRecords + " records", "Converter ended sucessfully, and converted " + numberOfSupoerPortRecords + " records."); }
public int Process(ref string emailBody, ref bool debugLevel, ref bool success, string fileName) { numberOfSupoerPortRecords = 0; logger.Write(" Nordea format"); int hdlobl = 0; int udbakt = 0; int kntopd = 0; int hdlakt = 0; int rntobl = 0; int rntknt = 0; int gbrtrn = 0; int behold = 0; if (lines.Length > 0) { for (int k = 0; k < lines.Length; k++) { string[] fields = lines[k].Split((char)31); if (debugLevel) { logger.WriteFields(fields); } // skip previous records if (nordeaOldRecords.previousRecord(lines[k])) { logger.Write(" Denne record er allerede bogført"); continue; } // write this to the file of previous records nordeaOldRecords.addRecord(lines[k]); if (lines[k].IndexOf("UDBAKT") == 0) { udbakt++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Nordea UDBAKT record " + udbakt + " has too few fields"; logger.Write(" Udbytte aktier record too few fields"); } else { impRecord.setIdCode(fields[4]); impRecord.setSettlementDate(fields[11]); impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setPrice(fields[17]); // yeield tax should be decucted - hence negativ and the dash infront of the field impRecord.setYieldTax("-" + fields[24]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 10); impRecord.setCurrenciesRate(fields[56]); // take last 14 digits // impRecord.setDepotNumber(fields[34], false, 14); string depot = nordeaDepot.getDepot(impRecord.getAccountNumber()); if (depot.Equals(string.Empty)) { success = false; string acc = fields[30]; acc = acc.Trim(); acc = acc.TrimStart('0'); emailBody += "Try to get Nordea Depot code for account " + acc + " but was not found in the Nordea depot file.\n"; } impRecord.setDepotNumber("0000000000" + depot, false, 10); impRecord.setTransactionType("U"); impRecord.setNota('N'); impRecord.blankAmount(); impRecord.blankKurtage(); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeUdbytteAktier(fileName); } } else if (lines[k].IndexOf("KNTOPD") == 0) { kntopd++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Nordea KNTOPD record " + kntopd + " has too few fields"; logger.Write(" Konto opdatering record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setPrice(fields[17]); impRecord.setCurrenciesRate(fields[23]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 10); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); impRecord.setTransactionType("I"); impRecord.setNota('N'); impRecord.setAmount(fields[17]); impRecord.blankKurtage(); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeIndsaetHaev(fileName); } } else if (lines[k].IndexOf("HDLAKT") == 0) { hdlakt++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Nordea HDLAKT record " + hdlakt + " has too few fields"; logger.Write(" Handel med aktier record too few fields"); } else { impRecord.setTransactionDate(fields[3]); impRecord.setIdCode(fields[4]); if (fields[17].Length > 0 && fields[17][0] == '-') { impRecord.setTransactionType("S"); // Salg } else { impRecord.setTransactionType("K"); // Køb } impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setAmount(fields[17]); impRecord.setExchangeRate(fields[18]); CultureInfo cultureInfo = new CultureInfo("en-US"); Decimal currencyRate = Convert.ToDecimal(fields[56], cultureInfo); Decimal kurtage = Convert.ToDecimal(fields[21], cultureInfo); Decimal cost = Convert.ToDecimal(fields[20], cultureInfo); impRecord.setKurtage("-" + Math.Round(cost + kurtage / currencyRate * 100, 2).ToString()); //impRecord.setKurtage("-" + fields[21]); impRecord.setCurrenciesRate(fields[56]); impRecord.setYieldTax("-" + fields[24]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 10); // take last 14 digits string depot = nordeaDepot.getDepot(impRecord.getAccountNumber()); if (depot.Equals(string.Empty)) { success = false; string acc = fields[30]; acc = acc.Trim(); acc = acc.TrimStart('0'); emailBody += "Try to get Nordea Depot code for account " + acc + " but was not found in the Nordea depot file.\n"; } impRecord.setDepotNumber("0000000000" + depot, false, 10); impRecord.setNota('N'); impRecord.setCounterPart("NO"); // Nordea impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeKoebSalgAktier(fileName); } } else if (lines[k].IndexOf("GBRTRN") == 0) { gbrtrn++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Nordea GBRTRN record " + gbrtrn + " has too few fields"; logger.Write(" Konto opdatering record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setPrice(fields[17]); impRecord.setCurrenciesRate(fields[23]); // take last 10 digits impRecord.setAccountNumber(fields[30], false, 10); /* depot not used for gebyr * string depot = nordeaDepot.getDepot(impRecord.getAccountNumber()); * if (depot.Equals(string.Empty)) * { * success = false; * string acc = fields[30]; * acc = acc.Trim(); * acc = acc.TrimStart('0'); * emailBody += "Try to get Nordea Depot code for account " + acc + " but was not found in the Nordea depot file.\n"; * } * impRecord.setDepotNumber("0000000000" + depot, false, 10);*/ impRecord.setTransactionType("I"); impRecord.setNota('N'); impRecord.setAmount(fields[17]); impRecord.blankKurtage(); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeIndsaetHaev(fileName); } } else if (lines[k].Length > 12 && lines[k][10] == 31 && lines[k][11] == 31) { behold++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 6) { emailBody += Environment.NewLine + "Nordea BEHOLD record " + behold + " has too few fields"; logger.Write(" Konto opdatering record too few fields (" + fields.Length + ")"); } else { // TODO } } else if (lines[k].Length > 12 && lines[k][10] == 31) { kntopd++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 9) { emailBody += Environment.NewLine + "Nordea KNTOPD record " + kntopd + " has too few fields"; logger.Write(" Konto opdatering record too few fields (" + fields.Length + ")"); } else { // TODO } } else { // success = false; It is ok with unknown danske bank formats logger.Write(" Ukendt record format, " + lines[k].Split((char)31)[0]); } } if (hdlobl > 0) { logger.Write(" Handel med obligationer og pantebreve : " + hdlobl); } if (udbakt > 0) { logger.Write(" Udbytte aktier : " + udbakt); } if (hdlakt > 0) { logger.Write(" Handel med aktier : " + hdlakt); } if (rntobl > 0) { logger.Write(" Kupon rente for obligationer og pantebreve : " + rntobl); } if (rntknt > 0) { logger.Write(" Rente konto : " + rntknt); } if (gbrtrn > 0) { logger.Write(" Gebyr konto : " + gbrtrn); } if (kntopd > 0) { logger.Write(" Konto opdatering : " + kntopd); } if (behold > 0) { logger.Write(" Konto beholdning : " + behold); } } else { if (lines.Length == 2 && lines[1].IndexOf("TAIL") == 0) { logger.Write(" Filen indeholder ingen rcords"); } else { success = false; logger.Write(" Ukendt fil format"); } } return(numberOfSupoerPortRecords); }
public int Process(ref string emailBody, ref bool debugLevel, ref bool success, string fileName) { numberOfSupoerPortRecords = 0; logger.Write(" Danske Bank format"); int hdlobl = 0; int udbakt = 0; int kntopd = 0; int hdlakt = 0; int rntobl = 0; int rntknt = 0; int gbrtrn = 0; if (lines.Length > 2) { for (int k = 1; k < lines.Length - 1; k++) { string[] fields = lines[k].Split((char)31); if (debugLevel) { logger.WriteFields(fields); } if (lines[k].IndexOf("HDLOBL") == 0) { hdlobl++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 70) { emailBody += Environment.NewLine + "Danske bank KS record " + hdlobl + " has too few fields"; logger.Write(" Handel med obligationer og pantebreve record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setIdCode(fields[4]); impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setAmount(fields[17]); impRecord.setExchangeRate(fields[18]); CultureInfo cultureInfo = new CultureInfo("en-US"); Decimal currencyRate = Convert.ToDecimal(fields[23], cultureInfo); Decimal kurtage = Convert.ToDecimal(fields[21], cultureInfo); Decimal cost = Convert.ToDecimal(fields[22], cultureInfo); impRecord.setKurtage("-" + Math.Round(cost + kurtage / currencyRate * 100, 2).ToString()); //impRecord.setKurtage("-" + fields[21]); impRecord.setCurrenciesCross(fields[55], fields[53]); impRecord.setCurrenciesRate(fields[23]); impRecord.setInterest(fields[24]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 14); //impRecord.setPrice(fields[31]); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); if (fields[17].Length > 0 && fields[17][0] == '-') { impRecord.setTransactionType("S"); // Salg } else { impRecord.setTransactionType("K"); // Køb } impRecord.setStatus('N'); impRecord.setNota('N'); impRecord.setCounterPart("DB"); // Danske bank impRecord.writeKoebSalgObligationer(fileName); } } else if (lines[k].IndexOf("UDBAKT") == 0) { udbakt++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Danske Bank UDBAKT record " + udbakt + " has too few fields"; logger.Write(" Udbytte aktier record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setIdCode(fields[4]); impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setPrice(fields[17]); impRecord.setCurrenciesRate(fields[23]); // yeield tax should be decucted - hence negativ and the dash infront of the field impRecord.setYieldTax("-" + fields[24]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); impRecord.setTransactionType("U"); impRecord.setNota('N'); impRecord.blankAmount(); impRecord.blankKurtage(); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeUdbytteAktier(fileName); } } else if (lines[k].IndexOf("KNTOPD") == 0) { kntopd++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Danske Bank KNTOPD record " + kntopd + " has too few fields"; logger.Write(" Konto opdatering record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setPrice(fields[17]); impRecord.setCurrenciesRate(fields[23]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); impRecord.setTransactionType("I"); impRecord.setNota('N'); impRecord.setAmount(fields[17]); impRecord.blankKurtage(); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeIndsaetHaev(fileName); } } else if (lines[k].IndexOf("HDLAKT") == 0) { hdlakt++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 72) { emailBody += Environment.NewLine + "Danske Bank HDLAKT record " + hdlakt + " has too few fields"; logger.Write(" Handel med aktier record too few fields"); } else { impRecord.setTransactionDate(fields[3]); impRecord.setIdCode(fields[4]); if (fields[17].Length > 0 && fields[17][0] == '-') { impRecord.setTransactionType("S"); // Salg } else { impRecord.setTransactionType("K"); // Køb } impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setAmount(fields[17]); impRecord.setExchangeRate(fields[18]); CultureInfo cultureInfo = new CultureInfo("en-US"); Decimal currencyRate = Convert.ToDecimal(fields[23], cultureInfo); Decimal kurtage = Convert.ToDecimal(fields[21], cultureInfo); Decimal cost = Convert.ToDecimal(fields[22], cultureInfo); impRecord.setKurtage("-" + Math.Round(cost + kurtage / currencyRate * 100, 2).ToString()); //impRecord.setKurtage("-" + fields[21]); impRecord.setCurrenciesRate(fields[23]); impRecord.setYieldTax(fields[24]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); impRecord.setNota('N'); impRecord.setCounterPart("DB"); // Danske bank impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeKoebSalgAktier(fileName); } } else if (lines[k].IndexOf("RNTOBL") == 0) { rntobl++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Danske Bank RNTOBL record " + rntobl + " has too few fields"; logger.Write(" Kupon rente for obligationer og pantebreve record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setIdCode(fields[4]); impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setPrice(fields[17]); impRecord.setExchangeRate(fields[17]); impRecord.setKurtage("-" + fields[21]); impRecord.setAmount(fields[32]); impRecord.setCurrenciesRate(fields[23]); impRecord.setYieldTax(fields[24]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); impRecord.setTransactionType("KR"); impRecord.setNota('N'); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeRenteKuponer(fileName); } } else if (lines[k].IndexOf("RNTKNT") == 0) { rntknt++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Danske Bank RNTKNT record " + rntknt + " has too few fields"; logger.Write(" Konto opdatering record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setPrice(fields[17]); impRecord.setCurrenciesRate(fields[23]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); impRecord.setTransactionType("I"); impRecord.setNota('N'); impRecord.setAmount(fields[17]); impRecord.blankKurtage(); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeIndsaetHaev(fileName); } } else if (lines[k].IndexOf("GBRTRN") == 0) { gbrtrn++; ImpRecord impRecord = new ImpRecord(logger); if (fields.Length < 58) { emailBody += Environment.NewLine + "Danske Bank GBRTRN record " + gbrtrn + " has too few fields"; logger.Write(" Konto opdatering record too few fields"); } else { impRecord.setTransactionDate(fields[11]); // not fields[3] as it has to be the same as settlementdate impRecord.setSettlementDate(fields[11]); // impRecord.setTransactionNumber(splitTransactioNumber(fields[16])); use SuperPorts impRecord.setPrice(fields[17]); impRecord.setCurrenciesRate(fields[23]); // take last 14 digits impRecord.setAccountNumber(fields[30], false, 14); // take last 14 digits impRecord.setDepotNumber(fields[34], false, 14); impRecord.setTransactionType("I"); impRecord.setNota('N'); impRecord.setAmount(fields[17]); impRecord.blankKurtage(); impRecord.setStatus('N'); impRecord.setCurrenciesCross(fields[55], fields[53]); numberOfSupoerPortRecords++; impRecord.writeIndsaetHaev(fileName); } } else { // success = false; It is ok with unknown danske bank formats logger.Write(" Ukendt record format, " + lines[k].Split((char)31)[0]); } } if (hdlobl > 0) { logger.Write(" Handel med obligationer og pantebreve : " + hdlobl); } if (udbakt > 0) { logger.Write(" Udbytte aktier : " + udbakt); } if (hdlakt > 0) { logger.Write(" Handel med aktier : " + hdlakt); } if (rntobl > 0) { logger.Write(" Kupon rente for obligationer og pantebreve : " + rntobl); } if (rntknt > 0) { logger.Write(" Rente konto : " + rntknt); } if (gbrtrn > 0) { logger.Write(" Ren-gebyrte konto : " + gbrtrn); } if (kntopd > 0) { logger.Write(" Konto opdatering : " + kntopd); } } else { if (lines.Length == 2 && lines[1].IndexOf("TAIL") == 0) { logger.Write(" Filen indeholder ingen rcords"); } else { success = false; logger.Write(" Ukendt fil format"); } } return(numberOfSupoerPortRecords); }