public ActionResult SaveBy([FromBody] dynamic data) { AccountingSubject conditionForFilter = JsonConvert.DeserializeObject <AccountingSubject>(JsonConvert.SerializeObject(data.conditionForFilter)); List <AccountingSubject> accountingSubjectsFromClient = JsonConvert.DeserializeObject <List <AccountingSubject> >(JsonConvert.SerializeObject(data.accountingSubjects)); var accountingSubjectsFromEmpty = accountingSubjectsFromClient.Where(item => item.IsEmptyInstance()).ToList(); foreach (var accountingSubjectFromEmpty in accountingSubjectsFromEmpty) { accountingSubjectsFromClient.Remove(accountingSubjectFromEmpty); } var accountingSubjectsFromDB = this.FetchBy(conditionForFilter); try { accountingSubjectRepository.Delete(conditionForFilter); if (accountingSubjectsFromClient.Count() > 0) { accountingSubjectRepository.CreateAll(accountingSubjectsFromClient).Wait(); } } catch (Exception exception) { logger.LogError(JsonConvert.SerializeObject(accountingSubjectsFromDB)); throw exception; } return(Ok(new ValidResult())); }
public void Create() { var accountingSubject = new AccountingSubject() { Type = Domain.Enum.AccountingSubjectType.Assets, Code = "1101", Name = "現金", Description = "凡庫存現金、銀行存款、匯撥中現金、零用金及週轉金、庫存外幣等屬之,但不包括已指定用途,或有法律、契約上之限制者。", }; this.accountingSubjectRepository.Create(accountingSubject).Wait(); }
public Dictionary <string, dynamic> LedgerBy([FromBody] Condition condition) { condition.Recorder = HttpContext.User.Claims.FirstOrDefault(p => p.Type == ClaimTypes.Name).Value; if (condition.TradingDayBegin.HasValue) { condition.TradingDayBegin = condition.TradingDayBegin.Value.ToLocalTime(); } if (condition.TradingDayEnd.HasValue) { condition.TradingDayEnd = condition.TradingDayEnd.Value.ToLocalTime().AddDays(1).AddMilliseconds(-1); } var accountingSubjects = this.accountingSubjectRepository.FetchAll().Result; var ledgers = new Dictionary <AccountingSubject, IList <GraphEntry> >(); var details = this.detailRepository.FetchBy(condition); foreach (var detail in details) { foreach (var entry in detail.Entrys) { // 過濾收入總計與費用總計科目 if (entry.AccountingSubjectCode == "400000" || entry.AccountingSubjectCode == "500000") { continue; } var accountingSubject = accountingSubjects.FirstOrDefault(item => item.Code == entry.AccountingSubjectCode); if (accountingSubject == null) { accountingSubject = new AccountingSubject() { Code = entry.AccountingSubjectCode, Type = AccountingSubjectType.None } } ; if (!ledgers.ContainsKey(accountingSubject)) { ledgers.Add(accountingSubject, new List <GraphEntry>()); } ledgers[accountingSubject].Add(new GraphEntry() { TradingDay = detail.TradingDay.Value, Name = detail.Name, Entry = entry }); } } foreach (var keyValuePair in ledgers) { var graphEntrys = keyValuePair.Value.OrderBy(item => item.TradingDay).ToList(); keyValuePair.Value.Clear(); foreach (var graphEntry in graphEntrys) { keyValuePair.Value.Add(graphEntry); } } var groups = new List <KeyValuePair <string, double> >(); // 實帳號為累積制,故計算時不由零開始 var keyValuePairs = detailRepository.GroupBy(null, condition.TradingDayBegin.Value.AddMilliseconds(-1)); foreach (var keyValuePair in keyValuePairs) { var accountingSubject = accountingSubjects.FirstOrDefault(item => item.Code == keyValuePair.Key); if (accountingSubject == null) { continue; } if (accountingSubject.Type == AccountingSubjectType.Assets || accountingSubject.Type == AccountingSubjectType.Liabilities || accountingSubject.Type == AccountingSubjectType.OwnerEquity) { groups.Add(keyValuePair); if (!ledgers.ContainsKey(accountingSubject)) { ledgers.Add(accountingSubject, new List <GraphEntry>()); } } } var result = new Dictionary <string, dynamic>(); result.Add("ledgers", ledgers.OrderBy(item => item.Key.Type).ThenBy(item => item.Key.Code).ToList()); result.Add("groups", groups); return(result); }
public IEnumerable <AccountingSubject> FetchBy([FromBody] AccountingSubject conditionForFilter) { return(this.accountingSubjectRepository.FetchBy(conditionForFilter)); }