lrzcc_wire/budgeting/
project_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 ProjectBudget {
9    pub id: u32,
10    pub project: u32,
11    pub project_name: String,
12    pub year: u32,
13    pub amount: u32,
14}
15
16impl Display for ProjectBudget {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        f.write_str(&format!("ProjectBudget(id={})", self.id))
19    }
20}
21
22#[derive(Clone, Debug, Serialize, Deserialize)]
23pub struct ProjectBudgetListParams {
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 ProjectBudgetCreateData {
32    pub project: 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 ProjectBudgetCreateData {
40    pub fn new(project: u32) -> Self {
41        Self {
42            project,
43            year: None,
44            amount: None,
45        }
46    }
47}
48
49#[derive(Clone, Debug, Serialize, Deserialize)]
50pub struct ProjectBudgetModifyData {
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 ProjectBudgetModifyData {
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 ProjectBudgetOver {
71    pub budget_id: u32,
72    pub project_id: u32,
73    pub project_name: String,
74    pub over: bool,
75}
76
77#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
78pub struct ProjectBudgetDetail {
79    pub budget_id: u32,
80    pub project_id: u32,
81    pub project_name: String,
82    pub over: bool,
83    pub cost: f64,
84    pub budget: u32,
85}