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) { }
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(':')); }
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]; }