|
@@ -1,5 +1,6 @@
|
1
|
1
|
import click
|
2
|
|
-from piket_client.model import ServerStatus, NetworkError
|
|
2
|
+from piket_client.model import ServerStatus, NetworkError, Consumption, Settlement
|
|
3
|
+from prettytable import PrettyTable
|
3
|
4
|
|
4
|
5
|
|
5
|
6
|
@click.group()
|
|
@@ -23,7 +24,9 @@ def status():
|
23
|
24
|
open_consumptions = ServerStatus.unsettled_consumptions()
|
24
|
25
|
|
25
|
26
|
if isinstance(open_consumptions, NetworkError):
|
26
|
|
- print_error(f"Failed to get unsettled consumptions, error {open_consumptions.value}")
|
|
27
|
+ print_error(
|
|
28
|
+ f"Failed to get unsettled consumptions, error {open_consumptions.value}"
|
|
29
|
+ )
|
27
|
30
|
return
|
28
|
31
|
|
29
|
32
|
click.echo(f"There are {open_consumptions.amount} unsettled consumptions.")
|
|
@@ -43,6 +46,42 @@ def settlements():
|
43
|
46
|
pass
|
44
|
47
|
|
45
|
48
|
|
|
49
|
+@settlements.command("show")
|
|
50
|
+@click.argument("settlement_id", type=click.INT)
|
|
51
|
+def show_settlement(settlement_id: int) -> None:
|
|
52
|
+ """Get and view the contents of a Settlement."""
|
|
53
|
+ s = Settlement.get(settlement_id)
|
|
54
|
+
|
|
55
|
+ if isinstance(s, NetworkError):
|
|
56
|
+ print_error(f"Could not get Settlement: {s.value}")
|
|
57
|
+ return
|
|
58
|
+
|
|
59
|
+ click.echo(f"Settlement {settlement_id}, \"{s.name}\"")
|
|
60
|
+
|
|
61
|
+ click.echo(f"Summary:")
|
|
62
|
+ for key, value in s.consumption_summary.items():
|
|
63
|
+ click.echo(f" - {value['count']} {value['name']} ({key})")
|
|
64
|
+
|
|
65
|
+ ct_name_by_id = {key: value["name"] for key, value in s.consumption_summary.items()}
|
|
66
|
+
|
|
67
|
+ table = PrettyTable()
|
|
68
|
+ table.field_names = ["Name", *ct_name_by_id.values()]
|
|
69
|
+ table.sortby = "Name"
|
|
70
|
+ table.align = "r"
|
|
71
|
+ table.align["Name"] = "l" # type: ignore
|
|
72
|
+
|
|
73
|
+ zero_fields = {k: "" for k in ct_name_by_id.values()}
|
|
74
|
+
|
|
75
|
+ for item in s.per_person_counts.values():
|
|
76
|
+ r = {"Name": item["full_name"], **zero_fields}
|
|
77
|
+ for key, value in item["counts"].items():
|
|
78
|
+ r[ct_name_by_id[key]] = value
|
|
79
|
+
|
|
80
|
+ table.add_row(r.values())
|
|
81
|
+
|
|
82
|
+ print(table)
|
|
83
|
+
|
|
84
|
+
|
46
|
85
|
def print_ok(msg: str) -> None:
|
47
|
86
|
click.echo(click.style(msg, fg="green"))
|
48
|
87
|
|