Ejemplo n.º 1
0
        public SuiQuickRecorderController(SuiQuickRecorderControllerOptions options)
        {
            Options = options;

            HttpClientHandler clientHandler = new HttpClientHandler();

            clientHandler.CookieContainer = new CookieContainer();
            foreach (var line in File.ReadAllText(Options.CookiesFile).Split(';'))
            {
                clientHandler.CookieContainer.Add(new Uri(Options.ApiBaseUrl), new Cookie(line.Substring(0, line.IndexOf('=')).Trim(), line.Substring(line.IndexOf('=') + 1).Trim()));
            }

            if (!string.IsNullOrEmpty(Options.ProxyHost) && Options.ProxyPort.HasValue)
            {
                clientHandler.Proxy = new WebProxy(Options.ProxyHost, Options.ProxyPort.Value);
            }

            clientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

            Client = new HttpClient(clientHandler);

            Client.DefaultRequestHeaders.Add("accept", "*/*");
            Client.DefaultRequestHeaders.Add("accept-language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");
            Client.DefaultRequestHeaders.Add("cache-control", "no-cache");
            Client.DefaultRequestHeaders.Add("dnt", "1");
            Client.DefaultRequestHeaders.Add("origin", Options.ApiBaseUrl);
            Client.DefaultRequestHeaders.Add("pragma", "no-cache");
            Client.DefaultRequestHeaders.Add("referer", $"{Options.ApiBaseUrl}/tally/new.do");
            Client.DefaultRequestHeaders.Add("sec-fetch-mode", "cors");
            Client.DefaultRequestHeaders.Add("sec-fetch-site", "same-origin");
            Client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36");
            Client.DefaultRequestHeaders.Add("x-requested-with", "XMLHttpRequest");

            Reference = new SuiRecordReference(
                new SuiKVPairs(Options.AccountsFile),
                new SuiKVPairs(Options.CategoriesInFile),
                new SuiKVPairs(Options.CategoriesOutFile),
                new SuiKVPairs(Options.StoresFile),
                new SuiKVPairs(Options.LoanersFile));
        }
        public static ISuiRecord Create(SuiRecordOrigin origin, SuiRecordReference reference)
        {
            var recordType = origin.GetRecordType(reference);

            switch (recordType)
            {
            case SuiRecordType.Out:
                return(new SuiRecordOut(origin, reference, recordType));

            case SuiRecordType.In:
                return(new SuiRecordIn(origin, reference, recordType));

            case SuiRecordType.Transfer:
                return(new SuiRecordTransfer(origin, reference, recordType));

            case SuiRecordType.Loan:
                return(new SuiRecordLoan(origin, reference, recordType));

            // This branch should never be falled onto
            default:
                throw new ArgumentOutOfRangeException($"Cannot detect record type by category {origin.Category}, or account {origin.Account} & {origin.Account2}");
            }
        }
 public SuiRecordOut(string date, string category, string account, string price, string store, string memo, SuiRecordReference reference, SuiRecordType recordType) : base(date, price, memo, recordType)
 {
     Category = reference.CategoriesOut[category];
     Account  = reference.Accounts[account];
     if (!string.IsNullOrEmpty(store))
     {
         Store = reference.Stores[store];
     }
 }
 public SuiRecordOut(SuiRecordOrigin recordModel, SuiRecordReference reference, SuiRecordType recordType) : this(recordModel.Date, recordModel.Category, recordModel.Account, recordModel.Price, recordModel.Store, recordModel.Memo, reference, recordType)
 {
 }
Ejemplo n.º 5
0
        public SuiRecordLoan(string date, string account, string account2, string price, string memo, SuiRecordReference reference, SuiRecordType recordType) : base(date, price, memo.Substring(memo.IndexOf(':') + 1), recordType)
        {
            APAccount = reference.Accounts["A-P"];
            ARAccount = reference.Accounts["A-R"];

            if (account.StartsWith(">>") && !account2.StartsWith(">>")) // IN
            {
                InAccount = reference.Accounts[account2];
                InPrice   = price;

                Loaner    = reference.Loaners.GetOfficialName(account.Substring(2));
                DebtId    = reference.Loaners[account.Substring(2)];
                Direction = SuiRecordLoanDirection.In;
            }

            else if (!account.StartsWith(">>") && account2.StartsWith(">>")) // OUT
            {
                OutAccount = reference.Accounts[account];
                OutPrice   = price;

                Loaner    = reference.Loaners.GetOfficialName(account2.Substring(2));
                DebtId    = reference.Loaners[account2.Substring(2)];
                Direction = SuiRecordLoanDirection.Out;
            }

            Price2 = price;
            if (!memo.Contains(":"))
            {
                throw new ArgumentOutOfRangeException("Loan record tag is not found");
            }
            Tag = memo.Substring(0, memo.IndexOf(':'));
        }
Ejemplo n.º 6
0
 public SuiRecordLoan(SuiRecordOrigin recordModel, SuiRecordReference reference, SuiRecordType recordType) : this(recordModel.Date, recordModel.Account, recordModel.Account2, recordModel.Price, recordModel.Memo, reference, recordType)
 {
 }
 public SuiRecordTransfer(string date, string accountOut, string accountIn, string price, string memo, SuiRecordReference reference, SuiRecordType recordType) : base(date, price, memo, recordType)
 {
     OutAccount = reference.Accounts[accountOut];
     InAccount  = reference.Accounts[accountIn];
 }