Added project option for list and report

This commit is contained in:
Nikolas Schmidt-Voigt 2021-10-25 21:56:16 +02:00
parent 8a74fb6486
commit 73f76d9637
4 changed files with 37 additions and 23 deletions

View file

@ -91,13 +91,14 @@ This will create a report of how much time has been spent on which projects and
bartib report
```
The `report` subcommand accepts most of the arguments that the `list` subcommand accepts:
The `report` subcommand accepts several arguments to refine the selection of activities:
```
bartib report --today
bartib report --yesterday
bartib report --from 2021-09-01 --to 2021-09-05
bartib report --date 2021-09-03
bartib report --project "The most exciting project"
```
#### List activities
@ -114,28 +115,18 @@ Do not group activities by date:
bartib list --no_grouping
```
List activities in a given time range:
```
bartib list --from 2021-03-01 --to 2021-11-01
```
List activities on a given day:
```
bartib list --date 2021-05-17
```
List activities of special days:
The `list` subcommand accepts several arguments to refine the selection of activities:
```
bartib list --today
bartib list --yesterday
bartib list --from 2021-09-01 --to 2021-09-05
bartib list --date 2021-09-03
bartib list --project "The most exciting project"
```
### Miscellaneous commands
#### Edit activities
To change tracked activities, just open the file with your activities log in any text editor. To facilitate this, bartib offers the `edit` subcommand:

View file

@ -25,7 +25,7 @@ pub fn list(file_name: &str, filter: getter::ActivityFilter, do_group_activities
filtered_activities.sort_by_key(|activity| activity.start);
let first_element =filtered_activities.len().saturating_sub(filter.number_of_activities.unwrap_or(filtered_activities.len()));
let first_element = filtered_activities.len().saturating_sub(filter.number_of_activities.unwrap_or(filtered_activities.len()));
if do_group_activities {
list::list_activities_grouped_by_date(

View file

@ -5,11 +5,12 @@ use crate::data::activity;
use crate::data::bartib_file;
use crate::data::activity::Activity;
pub struct ActivityFilter {
pub struct ActivityFilter<'a> {
pub number_of_activities: Option<usize>,
pub from_date: Option<NaiveDate>,
pub to_date: Option<NaiveDate>,
pub date: Option<NaiveDate>,
pub project: Option<&'a str>
}
pub fn get_descriptions_and_projects(file_content: &[bartib_file::Line]) -> Vec<(&String, &String)> {
@ -59,7 +60,7 @@ pub fn get_activities(file_content: &[bartib_file::Line]) -> impl Iterator<Item
pub fn filter_activities<'a>(
activities: impl Iterator<Item = &'a activity::Activity>,
filter: &ActivityFilter,
filter: &'a ActivityFilter,
) -> impl Iterator<Item = &'a activity::Activity> {
let from_date: NaiveDate;
let to_date: NaiveDate;
@ -72,9 +73,9 @@ pub fn filter_activities<'a>(
to_date = filter.to_date.unwrap_or(naive::MAX_DATE);
}
activities.filter(move |activity| {
activity.start.date() >= from_date && activity.start.date() <= to_date
})
activities
.filter(move |activity| {activity.start.date() >= from_date && activity.start.date() <= to_date})
.filter(move |activity| filter.project.map(|p| activity.project == *p).unwrap_or(true))
}
pub fn get_last_activity_by_end(file_content: &[bartib_file::Line]) -> Option<&activity::Activity> {

View file

@ -55,12 +55,14 @@ fn main() -> Result<()> {
let arg_description = Arg::with_name("description")
.short("d")
.long("description")
.value_name("DESCRIPTION")
.help("the description of the new activity")
.takes_value(true);
let arg_project = Arg::with_name("project")
.short("p")
.long("project")
.value_name("PROJECT")
.help("the project to which the new activity belongs")
.takes_value(true);
@ -121,6 +123,15 @@ fn main() -> Result<()> {
.arg(&arg_date)
.arg(&arg_today)
.arg(&arg_yesterday)
.arg(
Arg::with_name("project")
.short("p")
.long("project")
.value_name("PROJECT")
.help("do list activities for this project only")
.takes_value(true)
.required(false)
)
.arg(
Arg::with_name("no_grouping")
.long("no_grouping")
@ -143,8 +154,17 @@ fn main() -> Result<()> {
.arg(&arg_to_date)
.arg(&arg_date)
.arg(&arg_today)
.arg(&arg_yesterday),
)
.arg(&arg_yesterday)
.arg(
Arg::with_name("project")
.short("p")
.long("project")
.value_name("PROJECT")
.help("do report activities for this project only")
.takes_value(true)
.required(false)
)
)
.subcommand(
SubCommand::with_name("last")
.about("displays the descriptions and projects of recent activities")
@ -219,6 +239,7 @@ fn run_subcommand(matches: &ArgMatches, file_name: &str) -> Result<()> {
from_date: get_date_argument_or_ignore(sub_m.value_of("from_date"), "--from"),
to_date: get_date_argument_or_ignore(sub_m.value_of("to_date"), "--to"),
date: get_date_argument_or_ignore(sub_m.value_of("date"), "-d/--date"),
project: sub_m.value_of("project")
};
if sub_m.is_present("today") {
@ -238,6 +259,7 @@ fn run_subcommand(matches: &ArgMatches, file_name: &str) -> Result<()> {
from_date: get_date_argument_or_ignore(sub_m.value_of("from_date"), "--from"),
to_date: get_date_argument_or_ignore(sub_m.value_of("to_date"), "--to"),
date: get_date_argument_or_ignore(sub_m.value_of("date"), "-d/--date"),
project: sub_m.value_of("project")
};
if sub_m.is_present("today") {