コード例 #1
0
ファイル: QifConvUtil.cs プロジェクト: weavver/vendors
        public void PostTransaction(NonInvestmentAccountTransaction transaction)
        {
            if (transaction == null)
                    throw new ArgumentNullException("transaction");

               if (this.transactions.Contains(transaction))
                    throw new InvalidOperationException("Transaction already exists in account.");

               this.transactions.Add(transaction);
        }
コード例 #2
0
ファイル: QifConvUtil.cs プロジェクト: weavver/vendors
        public static NonInvestmentAccount ParseNonInvestmentAccountFile(string filePath)
        {
            StreamReader sr;
               string line;
               NonInvestmentAccount account;
               NonInvestmentAccountTransaction transaction;
               Dictionary<string, object> context;
               const string QIF_HEADER = "!Type:Bank";
               const string QIF_TX_TERM = "^";
               const string QIF_CLRDIND = "*";

               const string QIF_KEY_DATE = "D";
               const string QIF_KEY_AMOUNT = "T";
               const string QIF_KEY_CLEARED = "C";
               const string QIF_KEY_NUMBER = "N";
               const string QIF_KEY_PAYEE = "P";
               const string QIF_KEY_MEMO = "M";
               const string QIF_KEY_CATEGORY = "L";

               account = new NonInvestmentAccount();
               context = new Dictionary<string, object>();

               using (sr = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 32, FileOptions.None), Encoding.ASCII))
               {
                    if ((line = sr.ReadLine() ?? "") != "")
                    {
                         if (line != QIF_HEADER && line != "!Type:CCard")
                              throw new InvalidOperationException("Invalid QIF header: " + line);
                    }

                    while ((line = sr.ReadLine() ?? "") != "")
                    {
                         if (line == QIF_TX_TERM)
                         {
                              if (context.Count == 0)
                                   throw new InvalidOperationException("Invalid QIF transaction context");

                              transaction = new NonInvestmentAccountTransaction(
                                  context.ContainsKey(QIF_KEY_AMOUNT) ? (double?)context[QIF_KEY_AMOUNT] : null,
                                  context.ContainsKey(QIF_KEY_CATEGORY) ? (string)context[QIF_KEY_CATEGORY] : null,
                                  context.ContainsKey(QIF_KEY_CLEARED) ? (bool?)context[QIF_KEY_CLEARED] : null,
                                  context.ContainsKey(QIF_KEY_DATE) ? (DateTime?)context[QIF_KEY_DATE] : null,
                                  context.ContainsKey(QIF_KEY_MEMO) ? (string)context[QIF_KEY_MEMO] : null,
                                  context.ContainsKey(QIF_KEY_NUMBER) ? (string)context[QIF_KEY_NUMBER] : null,
                                  context.ContainsKey(QIF_KEY_PAYEE) ? (string)context[QIF_KEY_PAYEE] : null);

                              account.PostTransaction(transaction);

                              context.Clear();
                              continue;
                         }
                         else
                         {
                              string key;
                              object value;

                              if (line.Length < 2)
                                   throw new InvalidOperationException("Invalid QIF item length: " + line);

                              key = line[0].ToString();
                              line = line.Substring(1);

                              switch (key)
                              {
                                   case QIF_KEY_AMOUNT:
                                        value = double.Parse(line);
                                        break;

                                   case QIF_KEY_CATEGORY:
                                        value = line.ToUpper();
                                        break;

                                   case QIF_KEY_CLEARED:
                                        value = line == QIF_CLRDIND;
                                        break;

                                   case QIF_KEY_DATE:
                                        value = DateTime.Parse(line.Replace("'", "/"));
                                        break;

                                   case QIF_KEY_MEMO:
                                        value = line.ToUpper();
                                        break;

                                   case QIF_KEY_NUMBER:
                                        value = line.ToUpper();
                                        break;

                                   case QIF_KEY_PAYEE:
                                        value = line.ToUpper();
                                        break;

                                   default:
                                        throw new InvalidOperationException("Invalid QIF item key: " + key);
                              }

                              context.Add(key, value);
                         }
                    }
               }

               return account;
        }