Esempio n. 1
0
        public int Save(ImportResult result, IEnumerable<Transaction> transactions)
        {
            using (var transaction = new TransactionScope())
            {
                var model = result.Map<Models.ImportResult>();
                var transactionRecords = new List<Models.Transaction>();
                var transactionComponents = new List<Models.TransactionComponent>();

                foreach (var item in transactions)
                {
                    var record = item.Map<Models.Transaction>();
                    transactionRecords.Add(record);
                    transactionComponents.AddRange(item.Credit.Select(amount => amount.Map(new Models.TransactionComponent {TransactionId = record.Id, EntryTypeName = EntryType.Credit.ToString() })));
                    transactionComponents.AddRange(item.Debit.Select(amount => amount.Map(new Models.TransactionComponent {TransactionId = record.Id, EntryTypeName = EntryType.Debit.ToString() })));
                }

                _database.Execute(
                    @"INSERT INTO [Transaction] (Id, Date, Amount, Reference, Description)
                        VALUES (@id, @date, @amount, @reference, @description)",
                    transactionRecords);

                _database.Execute(
                    @"INSERT INTO [TransactionComponent] (TransactionId, AccountId, EntryTypeName, Amount, Annotation, AppliedByRuleId)
                        VALUES (@transactionId, @accountId, @entryTypeName, @amount, ISNULL(@annotation, ''), @appliedByRuleId)",
                    transactionComponents);

                var importId = _database.ExecuteScalar<int>(
                    @"INSERT INTO ImportResult (Name, ImportTypeName, Date)
                        OUTPUT inserted.id
                        VALUES (@name, @importType, @date)", model);

                _database.Execute(
                    @"INSERT INTO ImportedTransaction (Id, ImportId, Unclassified, Amount)
                        VALUES (@id, @importId, @unclassified, @amount)",
                    transactionRecords
                        .MapAll<Models.ImportedTransaction>()
                        .Select(t => new {t.Id, importId, t.Unclassified, t.Amount}));

                transaction.Complete();
                return importId;
            }
        }