Exemple #1
0
        private static Voucher ParseVoucher(JToken obj)
        {
            var      dateStr = obj["date"]?.Value <string>();
            DateTime?date    = null;

            if (dateStr != null)
            {
                date = ClientDateTime.Parse(dateStr);
            }
            var detail  = obj["detail"];
            var typeStr = obj["type"]?.Value <string>();
            var type    = VoucherType.Ordinary;

            if (typeStr != null)
            {
                Enum.TryParse(typeStr, out type);
            }

            return(new Voucher
            {
                ID = obj["id"]?.Value <string>(),
                Date = date,
                Remark = obj["remark"]?.Value <string>(),
                Type = type,
                Details = detail == null
                        ? new List <VoucherDetail>()
                        : detail.Select(ParseVoucherDetail).ToList(),
            });
        }
        public void WithinTestBy(bool expected, string valueS)
        {
            var value  = valueS == null ? (DateTime?)null : ClientDateTime.Parse(valueS);
            var filter = new DateFilter(null, new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Utc));

            Assert.True(filter.Nullable);
            Assert.Equal(expected, DateHelper.Within(value, filter));
        }
        private AssetItem ParseAssetItem(JToken obj)
        {
            var      dateStr = obj["date"]?.Value <string>();
            DateTime?date    = null;

            if (dateStr != null)
            {
                date = ClientDateTime.Parse(dateStr);
            }
            var voucherId = obj["voucherId"]?.Value <string>();
            var value     = obj["value"]?.Value <double>() ?? 0;
            var remark    = obj["remark"]?.Value <string>();

            switch (obj["type"].Value <string>())
            {
            case "acquisation":
                return(new AcquisationItem
                {
                    Date = date,
                    VoucherID = voucherId,
                    Value = value,
                    Remark = remark,
                    OrigValue = obj["origValue"].Value <double>()
                });

            case "depreciation":
                return(new DepreciateItem
                {
                    Date = date,
                    VoucherID = voucherId,
                    Value = value,
                    Remark = remark,
                    Amount = obj["amount"].Value <double>()
                });

            case "devaluation":
                return(new DevalueItem
                {
                    Date = date,
                    VoucherID = voucherId,
                    Value = value,
                    Remark = remark,
                    FairValue = obj["fairValue"].Value <double>()
                });

            case "disposition":
                return(new DispositionItem
                {
                    Date = date,
                    VoucherID = voucherId,
                    Value = value,
                    Remark = remark
                });

            default:
                throw new ArgumentException("类型未知", nameof(obj));
            }
        }
Exemple #4
0
        public void WithinTestSinceA(bool expected, string valueS)
        {
            var value  = valueS == null ? (DateTime?)null : ClientDateTime.Parse(valueS);
            var filter = new DateFilter(new(2017, 1, 1, 0, 0, 0, DateTimeKind.Utc), null)
            {
                Nullable = true
            };

            Assert.Equal(expected, DateHelper.Within(value, filter));
        }
    }
Exemple #5
0
        /// <inheritdoc />
        public Asset ParseAsset(string str)
        {
            if (str.StartsWith(AssetToken, StringComparison.OrdinalIgnoreCase))
            {
                str = str.Substring(AssetToken.Length);
            }

            var      obj     = ParseJson(str);
            var      dateStr = obj["date"]?.Value <string>();
            DateTime?date    = null;

            if (dateStr != null)
            {
                date = ClientDateTime.Parse(dateStr);
            }
            var schedule = obj["schedule"];
            var typeStr  = obj["method"]?.Value <string>();
            var method   = DepreciationMethod.StraightLine;

            if (typeStr != null)
            {
                Enum.TryParse(typeStr, out method);
            }

            return(new Asset
            {
                StringID = obj["id"]?.Value <string>(),
                Name = obj["name"]?.Value <string>(),
                Date = date,
                User = obj["user"]?.Value <string>(),
                Currency = obj["currency"]?.Value <string>(),
                Value = obj["value"]?.Value <double?>(),
                Salvage = obj["salvage"]?.Value <double?>(),
                Life = obj["life"]?.Value <int?>(),
                Title = obj["title"]?.Value <int?>(),
                Method = method,
                DepreciationTitle = obj["depreciation"]?["title"]?.Value <int?>(),
                DepreciationExpenseTitle = obj["depreciation"]?["expense"]?["title"]?.Value <int?>(),
                DepreciationExpenseSubTitle = obj["depreciation"]?["expense"]?["subtitle"]?.Value <int?>(),
                DevaluationTitle = obj["devaluation"]?["title"]?.Value <int?>(),
                DevaluationExpenseTitle = obj["devaluation"]?["expense"]?["title"]?.Value <int?>(),
                DevaluationExpenseSubTitle = obj["devaluation"]?["expense"]?["subtitle"]?.Value <int?>(),
                Remark = obj["remark"]?.Value <string>(),
                Schedule = schedule == null ? new List <AssetItem>() : schedule.Select(ParseAssetItem).ToList(),
            });
        }
Exemple #6
0
        private static AmortItem ParseAmortItem(JToken obj)
        {
            var      dateStr = obj["date"]?.Value <string>();
            DateTime?date    = null;

            if (dateStr != null)
            {
                date = ClientDateTime.Parse(dateStr);
            }

            return(new AmortItem
            {
                Date = date,
                VoucherID = obj["voucherId"]?.Value <string>(),
                Amount = obj["amount"].Value <double>(),
                Remark = obj["remark"]?.Value <string>(),
                Value = obj["value"]?.Value <double?>() ?? 0,
            });
        }
Exemple #7
0
        /// <inheritdoc />
        public Amortization ParseAmort(string str)
        {
            if (str.StartsWith(AmortToken, StringComparison.OrdinalIgnoreCase))
            {
                str = str.Substring(AmortToken.Length);
            }

            var      obj     = ParseJson(str);
            var      dateStr = obj["date"]?.Value <string>();
            DateTime?date    = null;

            if (dateStr != null)
            {
                date = ClientDateTime.Parse(dateStr);
            }
            var schedule = obj["schedule"];
            var typeStr  = obj["interval"]?.Value <string>();
            var interval = AmortizeInterval.EveryDay;

            if (typeStr != null)
            {
                Enum.TryParse(typeStr, out interval);
            }

            return(new Amortization
            {
                StringID = obj["id"]?.Value <string>(),
                Name = obj["name"]?.Value <string>(),
                Date = date,
                User = obj["user"]?.Value <string>(),
                Value = obj["value"]?.Value <double?>(),
                TotalDays = obj["totalDays"]?.Value <int?>(),
                Interval = interval,
                Template = ParseVoucher(obj["template"]),
                Remark = obj["remark"]?.Value <string>(),
                Schedule = schedule == null ? new List <AmortItem>() : schedule.Select(ParseAmortItem).ToList(),
            });
        }
Exemple #8
0
 public static DateTime?ToDateTime(this string b1S) => b1S == null
     ? (DateTime?)null
     : ClientDateTime.Parse(b1S);
Exemple #9
0
        private static HttpResponse Server_OnHttpRequest(HttpRequest request)
        {
#if DEBUG
            var fn = Path.Combine(
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../nginx/"),
                (request.BaseUri == "/" ? "/index.html" : request.BaseUri).TrimStart('/'));
            if (request.Method == "GET")
            {
                if (File.Exists(fn))
                {
                    return(GenerateHttpResponse(File.OpenRead(fn), "text/html"));
                }
            }

            if (request.BaseUri.StartsWith("/api", StringComparison.Ordinal))
            {
                request.BaseUri = request.BaseUri.Substring(4);
            }
#endif
            string user;
            if (request.Header.ContainsKey("x-user"))
            {
                user = request.Header["x-user"];
            }
            else
            {
                return new HttpResponse {
                           ResponseCode = 400
                }
            };
            if (user == "anonymous")
            {
                return new HttpResponse {
                           ResponseCode = 401
                }
            }
            ;

            string spec = null;
            if (request.Header.ContainsKey("x-serializer"))
            {
                spec = request.Header["x-serializer"];
            }

            if (request.Method == "GET")
            {
                if (request.BaseUri == "/emptyVoucher")
                {
                    return(GenerateHttpResponse(Facade.EmptyVoucher(spec), "text/plain; charset=utf-8"));
                }

                return(new HttpResponse {
                    ResponseCode = 404
                });
            }

            if (request.Method != "POST")
            {
                return new HttpResponse {
                           ResponseCode = 405
                }
            }
            ;

            if (!request.Header.ContainsKey("x-clientdatetime") ||
                !ClientDateTime.TryParse(request.Header["x-clientdatetime"], out var timestamp))
            {
                return new HttpResponse {
                           ResponseCode = 400
                }
            }
            ;

            ClientUser.Set(user);
            ClientDateTime.Set(timestamp);

            switch (request.BaseUri)
            {
            case "/execute":
            {
                var expr     = request.ReadToEnd();
                var res      = Facade.Execute(expr, spec);
                var response = GenerateHttpResponse(res.ToString(), "text/plain; charset=utf-8");
                response.Header["X-Type"]       = res.GetType().Name;
                response.Header["X-AutoReturn"] = res.AutoReturn ? "true" : "false";
                response.Header["X-Dirty"]      = res.Dirty ? "true" : "false";
                return(response);
            }

            case "/voucherUpsert":
            {
                var code = request.ReadToEnd();
                var res  = Facade.ExecuteVoucherUpsert(code, spec);
                return(GenerateHttpResponse(res, "text/plain; charset=utf-8"));
            }

            case "/voucherRemoval":
            {
                var code = request.ReadToEnd();
                var res  = Facade.ExecuteVoucherRemoval(code, spec);
                return(new HttpResponse {
                        ResponseCode = res ? 204 : 404
                    });
            }

            case "/assetUpsert":
            {
                var code = request.ReadToEnd();
                var res  = Facade.ExecuteAssetUpsert(code, spec);
                return(GenerateHttpResponse(res, "text/plain; charset=utf-8"));
            }

            case "/assetRemoval":
            {
                var code = request.ReadToEnd();
                var res  = Facade.ExecuteAssetRemoval(code, spec);
                return(new HttpResponse {
                        ResponseCode = res ? 204 : 404
                    });
            }

            case "/amortUpsert":
            {
                var code = request.ReadToEnd();
                var res  = Facade.ExecuteAmortUpsert(code, spec);
                return(GenerateHttpResponse(res, "text/plain; charset=utf-8"));
            }

            case "/amortRemoval":
            {
                var code = request.ReadToEnd();
                var res  = Facade.ExecuteAmortRemoval(code, spec);
                return(new HttpResponse {
                        ResponseCode = res ? 204 : 404
                    });
            }

            default:
                return(new HttpResponse {
                    ResponseCode = 404
                });
            }
        }
    }
}
        public void WithinTestNullOnly(bool expected, string valueS)
        {
            var value = valueS == null ? (DateTime?)null : ClientDateTime.Parse(valueS);

            Assert.Equal(expected, DateHelper.Within(value, DateFilter.TheNullOnly));
        }
        public void WithinTestUnconstrained(bool expected, string valueS)
        {
            var value = valueS == null ? (DateTime?)null : ClientDateTime.Parse(valueS);

            Assert.Equal(expected, DateHelper.Within(value, DateFilter.Unconstrained));
        }
        public void Parse(string expr)
        {
            var headerB = ParsingF.Line(ref expr);
            var header  = headerB;

            var dateId = -1;
            var fundId = -1;

            var dateReg = new Regex(@"^trans(?:\.|action)\s+date$", RegexOptions.IgnoreCase);
            var fundReg = new Regex(@"^(?:amount|fund|value)$", RegexOptions.IgnoreCase);

            for (var i = 0; !string.IsNullOrWhiteSpace(header); i++)
            {
                var f = Next(ref header);
                if (dateReg.IsMatch(f))
                {
                    dateId = i;
                }
                else if (fundReg.IsMatch(f))
                {
                    fundId = i;
                }
            }

            if (dateId < 0)
            {
                header = headerB;
                var dateReg2 = new Regex(@"^date$", RegexOptions.IgnoreCase);
                for (var i = 0; !string.IsNullOrWhiteSpace(header); i++)
                {
                    var f = Next(ref header);
                    if (i == fundId)
                    {
                        continue;
                    }
                    if (dateReg2.IsMatch(f))
                    {
                        dateId = i;
                    }
                }

                if (dateId < 0)
                {
                    throw new ApplicationException("找不到日期字段");
                }
            }
            if (fundId < 0)
            {
                throw new ApplicationException("找不到金额字段");
            }

            Items = new List <BankItem>();
            while (!string.IsNullOrWhiteSpace(expr))
            {
                var l    = ParsingF.Line(ref expr);
                var item = new BankItem {
                    Raw = l
                };
                for (var i = 0; !string.IsNullOrWhiteSpace(l); i++)
                {
                    var f = Next(ref l);
                    if (i == dateId)
                    {
                        item.Date = ClientDateTime.Parse(f);
                    }
                    else if (i == fundId)
                    {
                        item.Fund = m_Dir * Convert.ToDouble(f);
                    }
                }

                Items.Add(item);
            }
        }