/// <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; } }