lrzcc_wire/budgeting/
user_budget.rs

1use crate::common::is_false;
2use serde::{Deserialize, Serialize};
3use sqlx::FromRow;
4use std::fmt::Display;
5use tabled::Tabled;
6
7#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq, FromRow)]
8pub struct UserBudget {
9    pub id: u32,
10    pub user: u32,
11    pub username: String,
12    pub year: u32,
13    pub amount: u32,
14}
15
16impl Display for UserBudget {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        f.write_str(&format!("UserBudget(id={})", self.id))
19    }
20}
21
22#[derive(Clone, Debug, Serialize, Deserialize)]
23pub struct UserBudgetListParams {
24    pub user: Option<u32>,
25    pub project: Option<u32>,
26    pub all: Option<bool>,
27    pub year: Option<u32>,
28}
29
30#[derive(Clone, Debug, Serialize, Deserialize)]
31pub struct UserBudgetCreateData {
32    pub user: u32,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub year: Option<u32>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub amount: Option<i64>,
37}
38
39impl UserBudgetCreateData {
40    pub fn new(user: u32) -> Self {
41        Self {
42            user,
43            year: None,
44            amount: None,
45        }
46    }
47}
48
49#[derive(Clone, Debug, Serialize, Deserialize)]
50pub struct UserBudgetModifyData {
51    pub id: u32,
52
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub amount: Option<u32>,
55    #[serde(skip_serializing_if = "is_false")]
56    pub force: bool,
57}
58
59impl UserBudgetModifyData {
60    pub fn new(id: u32) -> Self {
61        Self {
62            id,
63            amount: None,
64            force: false,
65        }
66    }
67}
68
69#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
70pub struct UserBudgetOver {
71    pub budget_id: u32,
72    pub user_id: u32,
73    pub user_name: String,
74    pub over: bool,
75}
76
77#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
78pub struct UserBudgetCombined {
79    pub budget_id: u32,
80    pub user_id: u32,
81    pub user_name: String,
82    pub project_budget_id: u32,
83    pub project_id: u32,
84    pub project_name: String,
85    pub over: bool,
86}
87
88#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
89pub struct UserBudgetDetail {
90    pub budget_id: u32,
91    pub user_id: u32,
92    pub user_name: String,
93    pub over: bool,
94    pub cost: f64,
95    pub budget: u32,
96}
97
98#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
99pub struct UserBudgetCombinedDetail {
100    pub budget_id: u32,
101    pub user_id: u32,
102    pub user_name: String,
103    pub project_budget_id: u32,
104    pub project_id: u32,
105    pub project_name: String,
106    pub over: bool,
107    pub project_cost: f64,
108    pub project_budget: u32,
109    pub user_cost: f64,
110    pub user_budget: u32,
111}
112
113#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
114pub struct UserBudgetSync {
115    pub updated_budget_count: u32,
116}