Example #1
0
 public TransactionListTopEntity(TransactionTopEntity top, ProviderEntity provider, decimal listVariable)
     : this(top, provider)
 {
     ListVariable = listVariable;
 }
Example #2
0
 public TransactionListTopEntity(TransactionTopEntity top, ProviderEntity provider)
     : this()
 {
     Top      = top;
     Provider = provider;
 }
Example #3
0
 public static bool AddOrModifyTransaction(TransactionTopEntity top, List<TransactionListBodyEntity> body)
 {
     return TransactionProvider.AddOrModifyTransaction(top, body);
 }
Example #4
0
 public static bool RemoveTransaction(TransactionTopEntity top)
 {
     return TransactionProvider.RemoveTransaction(p => p.Id == top.Id);
 }
Example #5
0
        /// <summary>
        /// Добавляем или меняем транзакции в базе
        /// </summary>
        /// <param name="top">Если свойство Id = 0, функция добавляет новую транзакцию. Если в базе уже есть транзакция с тем же Id, вункция изменяет ее.</param>
        /// <param name="body"></param>
        /// <returns>Если прошло успешно возвращает true</returns>
        public static bool AddOrModifyTransaction(TransactionTopEntity top, List <TransactionListBodyEntity> body)
        {
            if (top == null || body == null)
            {
                return(false);
            }
            bool result = false;
            bool newTop = (top.Id == 0);

            using (var db = new InventoryContext(DatabaseConnection.ConnectionString))
            {
                using (var dbTransaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        int transactionId = top.Id;

                        //Top записи
                        if (!newTop)    //Изменение
                        {
                            var topQuery = db.TransactionTop.Where(p => p.Id == top.Id);
                            foreach (var record in topQuery)
                            {
                                PropertyInfo[] properties = EntityClone.GetProperties(typeof(TransactionTopEntity));
                                foreach (PropertyInfo property in properties)
                                {
                                    property.SetValue(record, property.GetValue(top));
                                }
                            }

                            db.SaveChanges();
                            result = true;
                        }
                        else    //вставить
                        {
                            db.TransactionTop.Add(top);
                            db.SaveChanges();
                            result        = true;
                            transactionId = top.Id;
                        }

                        if (result)
                        {
                            result = false;
                            foreach (var rec in body)
                            {
                                rec.Body.TransactionId = transactionId;
                            }

                            var query = db.TransactionBody.Where(p => p.TransactionId == transactionId);
                            foreach (var rec in query)
                            {
                                var newRec = body.Where(p => p.Body.Id == rec.Id).FirstOrDefault();
                                if (newRec == null)
                                {
                                    db.TransactionBody.Remove(rec);
                                }
                                else
                                {
                                    PropertyInfo[] properties =
                                        EntityClone.GetProperties(typeof(TransactionBodyEntity));
                                    foreach (PropertyInfo property in properties)
                                    {
                                        property.SetValue(rec, property.GetValue(newRec.Body));
                                    }

                                    body.Remove(newRec);
                                }
                            }

                            // извлекаем новые записи
                            foreach (var rec in body)
                            {
                                db.TransactionBody.Add(rec.Body);
                            }

                            db.SaveChanges();
                            dbTransaction.Commit();
                            result = true;
                        }
                    }
                    catch (Exception e)
                    {
                        dbTransaction.Rollback();
                        Console.WriteLine("Нет изменений в транзакциях");
                    }
                }
            }

            return(result);
        }