private async Task <AccountTafzili> CalcAccountByCodeTafziliAsync(int organId, string code) { var organId2 = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId); decimal amount = 0; TransactionRule transactionRule = new TransactionRule(); var transactions = await transactionRule.GetAllByOrganIdAsync(organId2); AccountRule accountRule = new AccountRule(); var accounts = await accountRule.GetAllByOrganIdAsync(organId); var operatinIncomeAccount = accounts.Where(x => x.ComplteCoding == code).SingleOrDefault(); var selected = transactions.Where(a => a.AccountId == operatinIncomeAccount.ID).ToList(); AccountTafzili accountTafzili = new AccountTafzili(); if (selected.Any()) { accountTafzili.sumCredit = selected.Sum(x => x.Credit); accountTafzili.sumDebit = selected.Sum(x => x.Debit); accountTafzili.sumTotal = accountTafzili.sumDebit - accountTafzili.sumCredit; } return(accountTafzili); }
private async Task <decimal> CalcBalanceBank(string code, int organId) { AccountRule accountRule = new AccountRule(); var accounts = await accountRule.GetAllByOrganIdAsync(organId); var account = accounts.Find(x => x.ComplteCoding == "1103" + code || x.ComplteCoding == "2102" + code || x.ComplteCoding == "1106" + code); TransactionRule transactionRule = new TransactionRule(); var transactions = await transactionRule.GetAllByOrganIdAsync(organId); transactions = transactions.FindAll(x => x.AccountId == account.ID); decimal credit = 0; decimal debit = 0; foreach (var item in transactions) { credit += item.Credit; debit += item.Debit; } return(debit - credit); }
public virtual async Task <HttpResponseMessage> ChangeChequeStatus([FromBody] ChequesAndStatsVM chequesAndStatsVM) { var organId = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId); ChequeVM chequeVM = new ChequeVM(); switch (chequesAndStatsVM.change) { // وصول چک پرداختی case "PaidChequeReceipt": { chequesAndStatsVM.description = " وصول چک پرداختی"; var doucument = await CreateDocumentPaidChequeReceipt(chequesAndStatsVM, organId); ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.Passed; chequeRule.Update(cheque); await chequeRule.SaveChangesAsync(); DocumentRule documentRule = new DocumentRule(); await documentRule.InsertAsync(doucument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } // وصول چک دریافتی case "ReceivedChequeReceipt": { chequesAndStatsVM.description = " وصول چک دریافتی"; var doucument = await CreateDocumentChangeChequeStatus(chequesAndStatsVM, organId); ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.Passed; chequeRule.Update(cheque); await chequeRule.SaveChangesAsync(); DocumentRule documentRule = new DocumentRule(); await documentRule.InsertAsync(doucument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } // وصول چک واگذار شده به بانک case "DepositChequeReceipt": { chequesAndStatsVM.description = "وصول چک واگذار شده به بانک"; var doucument = await CreateDocumentDepositChequeReceipt(chequesAndStatsVM, organId); ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.Passed; chequeRule.Update(cheque); await chequeRule.SaveChangesAsync(); DocumentRule documentRule = new DocumentRule(); await documentRule.InsertAsync(doucument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } // واگذاری چک به بانک case "ReceivedChequeDeposit": { chequesAndStatsVM.description = "واگذاری چک به بانک"; var doucument = await CreateDocumentReceivedChequeDeposit(chequesAndStatsVM, organId); ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.InProgress; BankRule bankRule = new BankRule(); var banks = await bankRule.GetAllByOrganIdAsync(organId); var bank = banks.Where(x => x.Code == chequesAndStatsVM.detailAccount.Code).SingleOrDefault(); cheque.DepositBankId = bank.ID; chequeRule.Update(cheque); await chequeRule.SaveChangesAsync(); DocumentRule documentRule = new DocumentRule(); await documentRule.InsertAsync(doucument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } // عودت دادن چک پرداختی case "PaidChequeReturn": { //chequesAndStatsVM.description = "عودت دادن چک پرداختی"; var doucument = await CreateDocumentPaidChequeReturn(chequesAndStatsVM, organId); ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.ChequeReturn; chequeRule.Update(cheque); await chequeRule.SaveChangesAsync(); DocumentRule documentRule = new DocumentRule(); await documentRule.InsertAsync(doucument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } // عودت دادن چک دریافتی case "ReceivedChequeReturn": { chequesAndStatsVM.description = "عودت دادن چک دریافتی"; var doucument = await CreateDocumentReceivedChequeReturn(chequesAndStatsVM, organId); ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.ChequeReturn; chequeRule.Update(cheque); await chequeRule.SaveChangesAsync(); DocumentRule documentRule = new DocumentRule(); await documentRule.InsertAsync(doucument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } // تغییر وضعیت چک پرداختی به پاس نشده case "PaidChequeToNotPass": { chequesAndStatsVM.description = "تغییر وضعیت چک پرداختی به پاس نشده"; chequesAndStatsVM.date = PersianDateUtils.ToPersianDate(DateTime.Now); var doucument = await CreateDocumentPaidChequeToNotPass(chequesAndStatsVM, organId); ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.Normal; chequeRule.Update(cheque); await chequeRule.SaveChangesAsync(); DocumentRule documentRule = new DocumentRule(); await documentRule.InsertAsync(doucument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } // تغییر وضعیت چک دریافتی به وصول نشده case "ReceivedChequeToNotPass": { chequesAndStatsVM.description = "تغییر وضعیت چک دریافتی به وصول نشده"; ChequeRule chequeRule = new ChequeRule(); var cheque = await chequeRule.FindAsync(chequesAndStatsVM.chequeId); PayRecevieRule payRecevieRule = new PayRecevieRule(); List <Document> doucuments = await payRecevieRule.GetDoucumentIDByChequeIdAsync(chequesAndStatsVM.chequeId); cheque.Status = ZhivarEnums.ChequeStatus.Normal; chequeRule.Update(cheque); Document newDocument = new Document(); DocumentRule documentRule = new DocumentRule(); foreach (var document in doucuments) { newDocument = new Document() { Credit = document.Credit, Description = chequesAndStatsVM.description, Debit = document.Debit, DateTime = DateTime.Now, DisplayDate = PersianDateUtils.ToPersianDate(DateTime.Now), FinanYear = document.FinanYear, FinanYearId = document.FinanYearId, IsFirsDocument = document.IsFirsDocument, IsManual = document.IsManual, Number = await documentRule.createNumberDocumentAsync(organId), Number2 = await documentRule.createNumberDocumentAsync(organId), OrganId = organId, Status = ZhivarEnums.DocumentStatus.TaeedShode, StatusString = document.StatusString, Type = ZhivarEnums.NoeDoc.Pay }; TransactionRule transactionRule = new TransactionRule(); var transactions = await transactionRule.GetAllByOrganIdAsync(organId); transactions = transactions.Where(x => x.DocumentId == document.ID).ToList(); newDocument.Transactions = new List <Transaction>(); Transaction newTransaction = new Transaction(); foreach (var transaction in transactions) { //newTransaction.AccDocument = newDocument; //newTransaction.Account = transaction.Account; newTransaction.AccountId = transaction.AccountId; newTransaction.Amount = transaction.Amount; newTransaction.Cheque = transaction.Cheque; newTransaction.ChequeId = transaction.ChequeId; newTransaction.ContactId = transaction.ContactId; newTransaction.Credit = transaction.Debit; newTransaction.Date = DateTime.Now; newTransaction.Debit = transaction.Credit; newTransaction.Description = chequesAndStatsVM.description; newTransaction.DisplayDate = PersianDateUtils.ToPersianDate(DateTime.Now); newTransaction.DocumentId = newDocument.ID; newTransaction.InvoiceId = transaction.InvoiceId; newTransaction.IsCredit = transaction.IsDebit; newTransaction.IsDebit = transaction.IsCredit; newTransaction.PaymentMethod = transaction.PaymentMethod; newTransaction.PaymentMethodString = transaction.PaymentMethodString; newTransaction.Reference = transaction.Reference; newTransaction.RefTrans = transaction.RefTrans; newTransaction.Remaining = transaction.Remaining; newTransaction.RemainingType = transaction.RemainingType; newTransaction.RowNumber = transaction.RowNumber; newTransaction.Stock = transaction.Stock; newTransaction.TransactionTypeString = transaction.TransactionTypeString; newTransaction.Type = transaction.Type; newTransaction.UnitPrice = transaction.UnitPrice; newDocument.Transactions.Add(newTransaction); } } await documentRule.InsertAsync(newDocument, organId); await documentRule.SaveChangesAsync(); //AccountNumber: "" chequeVM.Amount = cheque.Amount; chequeVM.BankBranch = cheque.BankBranch; //chequeVM.BankDetailAccount: null chequeVM.BankName = cheque.BankName; chequeVM.ChequeNumber = cheque.ChequeNumber; chequeVM.Contact = cheque.Contact; chequeVM.Date = cheque.Date; chequeVM.DepositBank = cheque.DepositBank; //chequeVM.DepositDate = cheque.DepositBank; chequeVM.DisplayDate = cheque.DisplayDate; chequeVM.ID = cheque.ID; //chequeVM.MyCheque = cheque.DepositBank; //chequeVM.Overdue = cheque.Overdue; //chequeVM.Payee = cheque.Payee; //chequeVM.Payer = cheque.Payer; chequeVM.ReceiptDate = cheque.ReceiptDate; //chequeVM.ReturnDate = cheque.ReturnDate; chequeVM.Status = cheque.Status; chequeVM.StatusString = "وصول شده"; break; } default: break; } return(Request.CreateResponse(HttpStatusCode.OK, new { resultCode = ZhivarEnums.ResultCode.Successful, data = chequeVM })); }
public async Task <HttpResponseMessage> GetRequiredDataToClosingFinanYear() { var organId = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId); TransactionRule transactionRule = new TransactionRule(); var transactions = await transactionRule.GetAllByOrganIdAsync(organId); AccountRule accountRule = new AccountRule(); var accounts = await accountRule.GetAllByOrganIdAsync(organId); var incomeAccount = accounts.Where(x => x.ComplteCoding == "71" || x.ComplteCoding == "72").Select(x => x.ID).ToList(); var costAccount = accounts.Where(x => x.ComplteCoding == "81" || x.ComplteCoding == "82" || x.ComplteCoding == "83").Select(x => x.ID).ToList(); decimal incomeAmount = 0; decimal costAmount = 0; var accountsMoienQuery = accounts.AsQueryable().Where(x => incomeAccount.Contains(x.ParentId)); var allAccountQuery = accounts.AsQueryable(); List <int> childIds = (from account in accountsMoienQuery select account.ID).ToList(); List <int> childChildIds = (from account in allAccountQuery join accountsMoien in accountsMoienQuery on account.ParentId equals accountsMoien.ID select account.ID).ToList(); var selected = transactions.Where(a => incomeAccount.Contains(a.AccountId) || childIds.Contains(a.AccountId) || childChildIds.Contains(a.AccountId)).ToList(); if (selected.Any()) { var credit = selected.Sum(x => x.Credit); var debit = selected.Sum(x => x.Debit); incomeAmount = credit - debit; } var accountsMoienCostQuery = accounts.AsQueryable().Where(x => costAccount.Contains(x.ParentId)); List <int> childIdsCost = (from account in accountsMoienCostQuery select account.ID).ToList(); List <int> childChildIdsCost = (from account in allAccountQuery join accountsMoien in accountsMoienCostQuery on account.ParentId equals accountsMoien.ID select account.ID).ToList(); var selectedCost = transactions.Where(a => costAccount.Contains(a.AccountId) || childIdsCost.Contains(a.AccountId) || childChildIdsCost.Contains(a.AccountId)).ToList(); if (selectedCost.Any()) { var credit = selectedCost.Sum(x => x.Credit); var debit = selectedCost.Sum(x => x.Debit); costAmount = credit - debit; } FinanYearRule finanYearRule = new FinanYearRule(); var finanQuery = await finanYearRule.GetAllByOrganIdAsync(organId); var finanYear = finanQuery.Where(x => x.FirstYear == true).SingleOrDefault(); ShareholderRule shareholderRule = new ShareholderRule(); var shareHolders = await shareholderRule.GetAllByOrganIdAsync(organId); var startDate = PersianDateUtils.ToDateTime(finanYear.DisplayStartDate); var endDate = PersianDateUtils.ToDateTime(finanYear.DisplayEndDate); double diff2 = (endDate - startDate).TotalDays; var startDateNew = endDate.AddDays(1); var endDateNew = endDate.AddDays(diff2); var displayEndDateNew = PersianDateUtils.ToPersianDateTime(endDateNew); var displayStartDateNew = PersianDateUtils.ToPersianDateTime(startDateNew); var startYear = Convert.ToInt32(displayStartDateNew.Substring(0, 4)); var startMonth = Convert.ToInt32(displayStartDateNew.Substring(5, 2)); var startDay = Convert.ToInt32(displayStartDateNew.Substring(8, 2)); var endYear = Convert.ToInt32(displayEndDateNew.Substring(0, 4)); var endMonth = Convert.ToInt32(displayEndDateNew.Substring(5, 2)); var endDay = Convert.ToInt32(displayEndDateNew.Substring(8, 2)); var isMoreThanYear = false; if (diff2 > 365) { isMoreThanYear = true; } var resualt = new DataToClosingFinanYear(); resualt.closingDate = finanYear.DisplayEndDate; resualt.netIncome = incomeAmount - costAmount; resualt.newFinanYear = new FinanYearVM() { Closed = false, DisplayEndDate = displayEndDateNew, DisplayStartDate = displayStartDateNew, EndDate = endDateNew, EndDateDay = endDay, EndDateMonth = endMonth, EndDateYear = endYear, FirstYear = false, Id = 0, IsMoreThanOneYear = isMoreThanYear, Name = endYear + " سال مال منتهی به", Note = "", StartDate = startDate, StartDateDay = startDay, StartDateMonth = startMonth, StartDateYear = startYear, }; resualt.shareholders = new List <ShareholderVM>(); foreach (var shareHolder in shareHolders) { resualt.shareholders.Add(new ShareholderVM() { Address = shareHolder.Address, City = shareHolder.City, Code = shareHolder.Code, ContactEmail = "", ContactType = shareHolder.ContactType, Credits = shareHolder.Credits, //DetailAccount = new DetailAccount() //{ // Accounts = null, // Balance = 0, // BalanceType = 0, // Code = "000001", // Id = 1, // Name = "مونا ابراهیمی", // Node = new Node() // { // FamilyTree = "اشخاص", // Id = 1, // Name = "اشخاص", // Parent = null, // Parents = ",1,", // SystemAccount = 1 // }, // RelatedAccounts = ",6,22,7,32,33,34,35,", // credit = 0, // debit = 0, //}, Email = shareHolder.Email, Fax = shareHolder.Fax, FirstName = shareHolder.FirstName, Id = (int)shareHolder.ID, IsCustomer = shareHolder.IsCustomer, IsEmployee = shareHolder.IsEmployee, IsShareHolder = shareHolder.IsShareHolder, IsVendor = shareHolder.IsVendor, LastName = shareHolder.LastName, Liability = shareHolder.Liability, Mobile = shareHolder.Mobile, Name = shareHolder.Name, NationalCode = shareHolder.NationalCode, Note = shareHolder.Note, People = shareHolder.People, Phone = shareHolder.Phone, PostalCode = shareHolder.PostalCode, Rating = shareHolder.Rating, RegistrationDate = shareHolder.RegistrationDate, RegistrationNumber = shareHolder.RegistrationNumber, SharePercent = shareHolder.SharePercent, State = shareHolder.State, Website = shareHolder.Website, }); } return(Request.CreateResponse(HttpStatusCode.OK, new { resualtCode = (int)ZhivarEnums.ResultCode.Successful, data = resualt })); }
private async Task <ResponseAccountBalance> CalcAccountByCodeAsync(int organId, string code, BalanceType balanceType) { var organId2 = Convert.ToInt32(SecurityManager.CurrentUserContext.OrganizationId); var responseAccountBalance = new ResponseAccountBalance(); decimal amount = 0; TransactionRule transactionRule = new TransactionRule(); var transactions = await transactionRule.GetAllByOrganIdAsync(organId); AccountRule accountRule = new AccountRule(); var accounts = await accountRule.GetAllByOrganIdAsync(organId); var operatinIncomeAccount = accounts.Where(x => x.ComplteCoding == code).SingleOrDefault(); var accountsMoienQuery = accounts.AsQueryable().Where(x => x.ParentId == operatinIncomeAccount.ID); var allAccountQuery = accounts.AsQueryable(); List <int> childIds = (from account in accountsMoienQuery select account.ID).ToList(); List <int> childChildIds = (from account in allAccountQuery join accountsMoien in accountsMoienQuery on account.ParentId equals accountsMoien.ID select account.ID).ToList(); var selected = transactions.Where(a => a.AccountId == operatinIncomeAccount.ID || childIds.Contains(a.AccountId) || childChildIds.Contains(a.AccountId)).ToList(); responseAccountBalance.Type = 2; if (selected.Any()) { var credit = selected.Sum(x => x.Credit); var debit = selected.Sum(x => x.Debit); if (balanceType == BalanceType.Debit) { amount = debit - credit; if (amount > 0) { responseAccountBalance.Type = 0; } else { responseAccountBalance.Type = 1; } } else if (balanceType == BalanceType.Credit) { amount = credit - debit; if (amount < 0) { responseAccountBalance.Type = 0; } else { responseAccountBalance.Type = 1; } } responseAccountBalance.Balance = Math.Abs(amount); } return(responseAccountBalance); }