public void Save(AccountingArticle entity)
 {
     try
     {
         this.Save(new List <AccountingArticle>()
         {
             entity
         });
     }
     catch
     {
         throw;
     }
 }
 public void Insert(AccountingArticle entity)
 {
     try
     {
         if (entity.ID == Guid.Empty)
         {
             entity.ID = Guid.NewGuid();
         }
         this.Table.Add(entity);
         this.SubmitChanges();
     }
     catch
     {
         throw;
     }
 }
        /// <summary>
        /// فاکتور فروش
        /// </summary>
        /// <param name="storeOrder"></param>
        /// <param name="document"></param>
        public void SaveAutomaticForSaleReturnInvoice(StoreOrder storeOrder, AccountingDocument document)
        {
            try
            {
                var accountingArticles       = new List <Data.AccountingArticle>();
                var accountingTafsilArticles = new List <Data.AccountingTafsilArticle>();
                var dictionary = new Dictionary <Data.AccountingArticle, Data.AccountingTafsilArticle>();

                var company = Business.GetCompanyBusiness().GetById(storeOrder.IdCompany.Value);
                if (!company.IdAccountingTafsillevelsDetails.HasValue)
                {
                    throw new Exception(string.Format(Localize.ex_company_no_accountingtafsillevelsdetails, company.CName));
                }
                var storeOrderDetails = Business.GetStoreOrderDetailBusiness().GetByStoreOrderId(storeOrder.Id).ToList();

                var accountingArticle = new AccountingArticle()
                {
                    IDAccountingDocument = document.Id,
                    ADescription         = null,
                    ADebtor   = null,
                    ACreditor = storeOrder.OSumMoney,
                    ACount    = 1
                };
                accountingArticles.Add(accountingArticle);

                var companyTafsilLevelsDetail         = Business.GetAccountingTafsilLevelDetailBusiness().GetById(company.IdAccountingTafsillevelsDetails.Value);
                var companyTafsilLevel                = Business.GetAccountingTafsilLevelBusiness().GetById(companyTafsilLevelsDetail.IdAccountingTafsilLevels.Value);
                var companyAccountingMoeinTafsilLevel = Business.GetAccountingMoeinTafsilLevelBusiness().GetByIdAccountingTafsilLevels(companyTafsilLevel.Id);

                var accountingTafsilArticle = new AccountingTafsilArticle()
                {
                    IDAccountingMoein          = companyAccountingMoeinTafsilLevel.IdAccountingMoein,
                    IdAccountingTafsilLDetails = companyTafsilLevelsDetail.Id,
                    //IdAccountingTafsilLevels = tafsilLevel.Id
                };

                accountingTafsilArticles.Add(accountingTafsilArticle);

                dictionary.Add(accountingArticle, accountingTafsilArticle);

                var commodities = Business.GetGoodiesBusiness().GetByIds(storeOrderDetails.Select(r => r.IdCommodity).ToList()).ToList();
                if (commodities.Any(r => !r.IdAccountingTafsillevelsDetails.HasValue))
                {
                    throw new Exception(string.Format(Localize.ex_commodity_no_accountingtafsillevelsdetails, commodities.First(r => !r.IdAccountingTafsillevelsDetails.HasValue).CName));
                }
                var tafsilLevelsDetails         = Business.GetAccountingTafsilLevelDetailBusiness().GetByIds(commodities.Where(r => r.IdAccountingTafsillevelsDetails.HasValue).Select(r => r.IdAccountingTafsillevelsDetails.Value).ToList());
                var tafsilLevels                = Business.GetAccountingTafsilLevelBusiness().GetByIds(tafsilLevelsDetails.Where(r => r.IdAccountingTafsilLevels.HasValue).Select(r => r.IdAccountingTafsilLevels.Value).ToList());
                var accountingMoeinTafsilLevels = Business.GetAccountingMoeinTafsilLevelBusiness().GetByIdAccountingTafsilLevels(tafsilLevels.Select(r => r.Id).ToList()).ToList();

                foreach (var item in storeOrderDetails)
                {
                    accountingArticle = new AccountingArticle()
                    {
                        IDAccountingDocument = document.Id,
                        ADescription         = item.ODDescription,
                        ADebtor   = item.ODMoney,
                        ACreditor = null,
                        ACount    = item.ODCount
                    };
                    accountingArticles.Add(accountingArticle);

                    var commodity                  = commodities.Find(r => r.ID == item.IdCommodity);
                    var tafsilLevelDetail          = tafsilLevelsDetails.Find(r => r.Id == commodity.IdAccountingTafsillevelsDetails);
                    var tafsilLevel                = tafsilLevels.Find(r => r.Id == tafsilLevelDetail.IdAccountingTafsilLevels);
                    var accountingMoeinTafsilLevel = accountingMoeinTafsilLevels.Find(r => r.IdAccountingTafsilLevels == tafsilLevel.Id);

                    accountingTafsilArticle = new AccountingTafsilArticle()
                    {
                        IDAccountingMoein          = accountingMoeinTafsilLevel.IdAccountingMoein,
                        IdAccountingTafsilLDetails = tafsilLevelDetail.Id,
                        //IdAccountingTafsilLevels = tafsilLevel.Id
                    };
                    accountingTafsilArticles.Add(accountingTafsilArticle);

                    dictionary.Add(accountingArticle, accountingTafsilArticle);
                }
                this.Save(accountingArticles);

                foreach (var item in dictionary)
                {
                    item.Value.IdAccountingArticle = item.Key.ID;
                }

                Business.GetAccountingTafsilArticleBusiness().Save(accountingTafsilArticles);
            }
            catch
            {
                throw;
            }
        }