Exemplo n.º 1
0
        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);
        }
Exemplo n.º 4
0
 public IEnumerable <AccountingSubject> FetchBy([FromBody] AccountingSubject conditionForFilter)
 {
     return(this.accountingSubjectRepository.FetchBy(conditionForFilter));
 }