From 459ce9246892e2e408f8e43ae14f399e4d17bca7 Mon Sep 17 00:00:00 2001 From: Will Kelly Date: Mon, 31 Jan 2022 18:28:57 +0000 Subject: [PATCH 1/7] Add company income statement summary command --- package-lock.json | 12 +++++++++ src/commands/company.ts | 25 ++++++++++++++--- src/loggers/logCompanyIncome.ts | 48 +++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 src/loggers/logCompanyIncome.ts diff --git a/package-lock.json b/package-lock.json index 776c624..5923be9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1912,9 +1912,15 @@ } }, "node_modules/onair-api": { +<<<<<<< HEAD "version": "1.0.13", "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.13.tgz", "integrity": "sha512-BOeuamfbtg4q2/mBSfzqAu2XnRdziW538O2b+IyLOIfLnz5kFJI2Ixn+96w9LyIeKWj6GzX9qtsZvGwNfMm8GA==", +======= + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.7.tgz", + "integrity": "sha512-k+/36SuCI5kLo9DJDMLYQFD8dD46L73zoDDYZPBpE4BCIer8QupulKABoL7u3WzaEO/7gn3AnaXOBRyCmXdbaw==", +>>>>>>> Add company income statement summary command "dependencies": { "axios": "^0.24.0", "dotenv": "^14.1.0" @@ -3956,9 +3962,15 @@ } }, "onair-api": { +<<<<<<< HEAD "version": "1.0.13", "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.13.tgz", "integrity": "sha512-BOeuamfbtg4q2/mBSfzqAu2XnRdziW538O2b+IyLOIfLnz5kFJI2Ixn+96w9LyIeKWj6GzX9qtsZvGwNfMm8GA==", +======= + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.7.tgz", + "integrity": "sha512-k+/36SuCI5kLo9DJDMLYQFD8dD46L73zoDDYZPBpE4BCIer8QupulKABoL7u3WzaEO/7gn3AnaXOBRyCmXdbaw==", +>>>>>>> Add company income statement summary command "requires": { "axios": "^0.24.0", "dotenv": "^14.1.0" diff --git a/src/commands/company.ts b/src/commands/company.ts index ddaee9d..a6d7ea1 100644 --- a/src/commands/company.ts +++ b/src/commands/company.ts @@ -1,6 +1,6 @@ import yargs, { BuilderCallback, CommandModule } from 'yargs'; import chalk from 'chalk'; -import OnAirApi, { OnAirApiConfig, Company, Aircraft, Flight, Fbo, Job } from 'onair-api'; +import OnAirApi, { OnAirApiConfig, Company, Aircraft, Flight, Fbo, Job, IncomeStatement } from 'onair-api'; import { CommonConfig } from '../utils/commonTypes'; import { logFlights } from '../loggers/logFlights'; @@ -8,6 +8,7 @@ import { logCompany } from '../loggers/logCompany'; import { logCompanyFleet } from '../loggers/logCompanyFleet'; import { logCompanyFbos } from '../loggers/logCompanyFbos'; import { logCompanyJobs } from '../loggers/logCompanyJobs'; +import { logCompanyIncome } from '../loggers/logCompanyIncome'; const log = console.log; @@ -16,19 +17,25 @@ const builder = (yargs: yargs.Argv) => { .positional('action', { describe: 'Optional info to lookup from your company', type: 'string', - choices: ['fleet', 'flights', 'fbos', 'jobs'], + choices: ['fleet', 'flights', 'fbos', 'jobs', 'income'], }) .option('page', { 'describe': 'Page number (flights only)', 'type': 'number', 'alias': 'p', }) + .option('days', { + 'describe': 'Days to display (Income statement only)', + 'type': 'number', + }) .example('$0 company','Get summary information for your company') .example('$0 company fleet','List your aircraft') .example('$0 company flights','List your flights') .example('$0 company flights -p=2','List your flights, showing page 2') .example('$0 company fbos', 'List your FBOs') - .example('$0 company jobs', 'List your pending jobs'); + .example('$0 company jobs', 'List your pending jobs') + .example('$0 company income', 'Display your company income statement summary') + .example('$0 company income --days=30', 'Display your statement summary for the last 30 days'); } type CompanyCommand = (typeof builder) extends BuilderCallback ? CommandModule : never; @@ -109,6 +116,18 @@ export const companyCommand: CompanyCommand = { } break; } + + case 'income': { + const daysToDisplay = + typeof argv['days'] === 'undefined' || argv['days'] < 1 || argv['days'] > 30 + ? 7 : argv['days']; + const currentDate = new Date(); + const currentDateStr = currentDate.toISOString(); + const priorDate = new Date().setDate(currentDate.getDate() - daysToDisplay); + const priorDateStr = new Date(priorDate).toISOString(); + const income: IncomeStatement = await api.getCompanyIncomeStatement(priorDateStr, currentDateStr); + logCompanyIncome(income, daysToDisplay); + } } } diff --git a/src/loggers/logCompanyIncome.ts b/src/loggers/logCompanyIncome.ts new file mode 100644 index 0000000..2bcf23a --- /dev/null +++ b/src/loggers/logCompanyIncome.ts @@ -0,0 +1,48 @@ +import chalk from "chalk"; +import { IncomeStatement, ISAccount } from "onair-api"; + +const log = console.log; + +const logAccounts = (account: ISAccount[], cols: number): void => { + account.forEach((ISAccount) => { + const amount = ISAccount.Amount.toLocaleString('en-GB'); + const paddingCount = cols - ISAccount.Name.length - amount.length; + log(ISAccount.Name + ' '.repeat(paddingCount) + amount); + }); +} + +export const logCompanyIncome = (income: IncomeStatement, daysToDisplay: number, cols:number = 80): void => { + + + const lengthLabel = daysToDisplay > 1 ? daysToDisplay + ' days' : 'day'; + + log(chalk.greenBright.bold(`Your income statement summary for the last ${lengthLabel}\n`)); + + const revLabel = 'Revenues'; + const revAmountLabel = income.REVAmount.toLocaleString('en-GB') + ' 💰'; + const revPaddingCount = cols - revLabel.length - revAmountLabel.length; + + log(chalk.cyanBright(revLabel) + ' '.repeat(revPaddingCount) + revAmountLabel + '\n'); + + const headersPaddingCount = cols - 'Name'.length - 'Amount'.length; + + log(chalk.green('Name') + ' '.repeat(headersPaddingCount) + chalk.green('Amount')); + + logAccounts(income.REVAccounts, cols); + + const expLabel = 'Expenses'; + const expAmountLabel = income.EXPAmount.toLocaleString('en-GB') + ' 💰'; + const expPaddingCount = cols - expLabel.length - expAmountLabel.length; + + log('\n' + chalk.cyanBright(expLabel) + ' '.repeat(expPaddingCount) + expAmountLabel + '\n'); + + log(chalk.green('Name') + ' '.repeat(headersPaddingCount) + chalk.green('Amount')); + + logAccounts(income.EXPAccounts, cols); + + const netIncomeLabel = 'Net income for the period'; + const netIncomeAmountLabel = income.NetIncomeAmount.toLocaleString('en-GB') + ' 💰'; + const netIncomePaddingCount = cols - netIncomeLabel.length - netIncomeAmountLabel.length; + + log('\n' + chalk.cyanBright(netIncomeLabel) + ' '.repeat(netIncomePaddingCount) + netIncomeAmountLabel); +} \ No newline at end of file From 449aaf5340a8132fbeae3103041bc0657d6a2c40 Mon Sep 17 00:00:00 2001 From: Will Kelly Date: Mon, 31 Jan 2022 18:34:43 +0000 Subject: [PATCH 2/7] Use periods rather than spaces for amount lines --- src/loggers/logCompanyIncome.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/loggers/logCompanyIncome.ts b/src/loggers/logCompanyIncome.ts index 2bcf23a..3b36e6a 100644 --- a/src/loggers/logCompanyIncome.ts +++ b/src/loggers/logCompanyIncome.ts @@ -7,7 +7,7 @@ const logAccounts = (account: ISAccount[], cols: number): void => { account.forEach((ISAccount) => { const amount = ISAccount.Amount.toLocaleString('en-GB'); const paddingCount = cols - ISAccount.Name.length - amount.length; - log(ISAccount.Name + ' '.repeat(paddingCount) + amount); + log(ISAccount.Name + chalk.gray('.'.repeat(paddingCount)) + amount); }); } From a597d9fec39034b539fcc84a14675d717507d63b Mon Sep 17 00:00:00 2001 From: Will Kelly Date: Tue, 1 Feb 2022 15:36:43 +0000 Subject: [PATCH 3/7] README Re-add VA setup instructions to setup section --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 94d534b..03793f4 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,10 @@ For ease of use save your OnAir credentials. Your OnAir API key and Company ID are found in the bottom left of the settings page in the OnAir client. The world name is 'cumulus', 'stratus', or 'thunder'. Use 'stratus' for Clear Sky server. +If you are a member of a Virtual Airline (VA), you can also add your VA ID. This can be found in the Manage VA options screen. + +`onair-cli set-creds --apiKey=[API_KEY] --world=[WORLD] --companyId=[COMPANY_ID] --vaId=[VIRTUAL_AIRLINE_ID]` + ## Commands ### Aircraft From 5053e2c0d6e5df005f7ee667b347a8230405448a Mon Sep 17 00:00:00 2001 From: Will Kelly Date: Tue, 1 Feb 2022 16:01:26 +0000 Subject: [PATCH 4/7] 1.5.0-alpha.0 --- package-lock.json | 4 ++-- package.json | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5923be9..a1a8997 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "onair-cli", - "version": "1.4.1", + "version": "1.5.0-alpha.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "onair-cli", - "version": "1.4.1", + "version": "1.5.0-alpha.0", "license": "MIT", "dependencies": { "axios": "^0.22.0", diff --git a/package.json b/package.json index 30bafc0..4a4c37b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,11 @@ { "name": "onair-cli", "description": "A CLI to display information from OnAir Airline Manager", +<<<<<<< HEAD "version": "1.4.1", +======= + "version": "1.5.0-alpha.0", +>>>>>>> 1.5.0-alpha.0 "main": "bin/index.js", "author": { "name": "Will Kelly", From 26774e0d20cdf440a617ca16e5351121b3773acb Mon Sep 17 00:00:00 2001 From: Will Kelly Date: Fri, 4 Feb 2022 14:05:46 +0000 Subject: [PATCH 5/7] Resolve missed merge conflicts --- package-lock.json | 12 ------------ package.json | 4 ---- 2 files changed, 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1a8997..506d686 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1912,15 +1912,9 @@ } }, "node_modules/onair-api": { -<<<<<<< HEAD "version": "1.0.13", "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.13.tgz", "integrity": "sha512-BOeuamfbtg4q2/mBSfzqAu2XnRdziW538O2b+IyLOIfLnz5kFJI2Ixn+96w9LyIeKWj6GzX9qtsZvGwNfMm8GA==", -======= - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.7.tgz", - "integrity": "sha512-k+/36SuCI5kLo9DJDMLYQFD8dD46L73zoDDYZPBpE4BCIer8QupulKABoL7u3WzaEO/7gn3AnaXOBRyCmXdbaw==", ->>>>>>> Add company income statement summary command "dependencies": { "axios": "^0.24.0", "dotenv": "^14.1.0" @@ -3962,15 +3956,9 @@ } }, "onair-api": { -<<<<<<< HEAD "version": "1.0.13", "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.13.tgz", "integrity": "sha512-BOeuamfbtg4q2/mBSfzqAu2XnRdziW538O2b+IyLOIfLnz5kFJI2Ixn+96w9LyIeKWj6GzX9qtsZvGwNfMm8GA==", -======= - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/onair-api/-/onair-api-1.0.7.tgz", - "integrity": "sha512-k+/36SuCI5kLo9DJDMLYQFD8dD46L73zoDDYZPBpE4BCIer8QupulKABoL7u3WzaEO/7gn3AnaXOBRyCmXdbaw==", ->>>>>>> Add company income statement summary command "requires": { "axios": "^0.24.0", "dotenv": "^14.1.0" diff --git a/package.json b/package.json index 4a4c37b..736fed6 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,7 @@ { "name": "onair-cli", "description": "A CLI to display information from OnAir Airline Manager", -<<<<<<< HEAD - "version": "1.4.1", -======= "version": "1.5.0-alpha.0", ->>>>>>> 1.5.0-alpha.0 "main": "bin/index.js", "author": { "name": "Will Kelly", From 53be738fadc09a358d3e36064aa917f589a93528 Mon Sep 17 00:00:00 2001 From: Will Kelly Date: Fri, 4 Feb 2022 14:21:05 +0000 Subject: [PATCH 6/7] Fix name of Account interface --- src/loggers/logCompanyIncome.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/loggers/logCompanyIncome.ts b/src/loggers/logCompanyIncome.ts index 3b36e6a..bb50852 100644 --- a/src/loggers/logCompanyIncome.ts +++ b/src/loggers/logCompanyIncome.ts @@ -1,9 +1,9 @@ import chalk from "chalk"; -import { IncomeStatement, ISAccount } from "onair-api"; +import { IncomeStatement, Account } from "onair-api"; const log = console.log; -const logAccounts = (account: ISAccount[], cols: number): void => { +const logAccounts = (account: Account[], cols: number): void => { account.forEach((ISAccount) => { const amount = ISAccount.Amount.toLocaleString('en-GB'); const paddingCount = cols - ISAccount.Name.length - amount.length; From 578eb2ccf525ecf4d1e108f543ba5b551df9435c Mon Sep 17 00:00:00 2001 From: Will Kelly Date: Fri, 4 Feb 2022 14:34:43 +0000 Subject: [PATCH 7/7] 1.5.0-alpha.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 506d686..6327a25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "onair-cli", - "version": "1.5.0-alpha.0", + "version": "1.5.0-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "onair-cli", - "version": "1.5.0-alpha.0", + "version": "1.5.0-alpha.1", "license": "MIT", "dependencies": { "axios": "^0.22.0", diff --git a/package.json b/package.json index 736fed6..9a2748d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "onair-cli", "description": "A CLI to display information from OnAir Airline Manager", - "version": "1.5.0-alpha.0", + "version": "1.5.0-alpha.1", "main": "bin/index.js", "author": { "name": "Will Kelly",