internal BasicResult AddPaymentToTransaction1(string transaction1Id, TransactionResult data)
        {
            if (string.IsNullOrEmpty(transaction1Id))
            {
                throw new ArgumentException("The value cannot be empty", "transaction1Id");
            }
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            using (var session = this.store.Write())
            {
                var result = new BasicResult();
                var tran   = session.Data.Transactions1.SingleOrDefault(t => t.OrderId == transaction1Id);
                result.Data["Transaction"] = tran;

                if (tran == null)
                {
                    result.Errors.Add(new BasicResultError("Cannot find transaction " + transaction1Id));
                    return(result);
                }

                var paymentIds = tran.PaymentIds ?? new List <string>();
                tran.PaymentIds = paymentIds;
                if (paymentIds.Contains(data.OrderId))
                {
                    result.Errors.Add(new BasicResultError("This payment is already associated with this item"));
                    return(result);
                }

                if (data.AmountCents != null)
                {
                    paymentIds.Add(data.OrderId);

                    tran.AmountPaid += (data.AmountCents.Value / 100M);
                }

                if (tran.AmountPaid >= tran.Amount)
                {
                    tran.IsPaid = true;
                }

                session.Save();
                result.Succeed = true;
                return(result);
            }
        }
        internal BasicResult AddPaymentToTransaction1(string transaction1Id, string paymentId)
        {
            if (string.IsNullOrEmpty(transaction1Id))
            {
                throw new ArgumentException("The value cannot be empty", "transaction1Id");
            }
            if (string.IsNullOrEmpty(paymentId))
            {
                throw new ArgumentException("The value cannot be empty", "paymentId");
            }

            using (var session = this.store.Write())
            {
                var result = new BasicResult();
                var tran   = session.Data.Transactions1.SingleOrDefault(t => t.OrderId == transaction1Id);

                if (tran == null)
                {
                    result.Errors.Add(new BasicResultError("Cannot find transaction " + transaction1Id));
                    return(result);
                }

                if (tran.PaymentIds != null && tran.PaymentIds.Contains(paymentId))
                {
                    result.Errors.Add(new BasicResultError("Payment " + paymentId + " in already associated with this transaction"));
                    return(result);
                }

                tran.PaymentIds = tran.PaymentIds ?? new List <string>();
                tran.PaymentIds.Add(paymentId);

                session.Save();
                result.Succeed = true;
                return(result);
            }
        }
        internal BasicResult AddPaymentToTransaction1(string transaction1Id, string paymentId)
        {
            if (string.IsNullOrEmpty(transaction1Id))
                throw new ArgumentException("The value cannot be empty", "transaction1Id");
            if (string.IsNullOrEmpty(paymentId))
                throw new ArgumentException("The value cannot be empty", "paymentId");

            using (var session = this.store.Write())
            {
                var result = new BasicResult();
                var tran = session.Data.Transactions1.SingleOrDefault(t => t.OrderId == transaction1Id);

                if (tran == null)
                {
                    result.Errors.Add(new BasicResultError("Cannot find transaction " + transaction1Id));
                    return result;
                }

                if (tran.PaymentIds != null && tran.PaymentIds.Contains(paymentId))
                {
                    result.Errors.Add(new BasicResultError("Payment " + paymentId + " in already associated with this transaction"));
                    return result;
                }

                tran.PaymentIds = tran.PaymentIds ?? new List<string>();
                tran.PaymentIds.Add(paymentId);

                session.Save();
                result.Succeed = true;
                return result;
            }
        }
        internal BasicResult AddPaymentToTransaction1(string transaction1Id, TransactionResult data)
        {
            if (string.IsNullOrEmpty(transaction1Id))
                throw new ArgumentException("The value cannot be empty", "transaction1Id");
            if (data == null)
                throw new ArgumentNullException("data");

            using (var session = this.store.Write())
            {
                var result = new BasicResult();
                var tran = session.Data.Transactions1.SingleOrDefault(t => t.OrderId == transaction1Id);
                result.Data["Transaction"] = tran;

                if (tran == null)
                {
                    result.Errors.Add(new BasicResultError("Cannot find transaction " + transaction1Id));
                    return result;
                }

                var paymentIds = tran.PaymentIds ?? new List<string>();
                tran.PaymentIds = paymentIds;
                if (paymentIds.Contains(data.OrderId))
                {
                    result.Errors.Add(new BasicResultError("This payment is already associated with this item"));
                    return result;
                }

                if (data.AmountCents != null)
                {
                    paymentIds.Add(data.OrderId);

                    tran.AmountPaid += (data.AmountCents.Value / 100M);
                }

                if (tran.AmountPaid >= tran.Amount)
                {
                    tran.IsPaid = true;
                }

                session.Save();
                result.Succeed = true;
                return result;
            }
        }