koprogo_api/application/dto/
etat_date_dto.rs1use crate::domain::entities::{EtatDate, EtatDateLanguage, EtatDateStatus};
2use chrono::{DateTime, Utc};
3
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct CreateEtatDateRequest {
10 #[serde(default)]
11 pub organization_id: Uuid, pub building_id: Uuid,
13 pub unit_id: Uuid,
14 pub reference_date: DateTime<Utc>,
15 pub language: EtatDateLanguage,
16 pub notary_name: String,
17 pub notary_email: String,
18 pub notary_phone: Option<String>,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct UpdateEtatDateFinancialRequest {
24 pub owner_balance: f64,
25 pub arrears_amount: f64,
26 pub monthly_provision_amount: f64,
27 pub total_balance: f64,
28 pub approved_works_unpaid: f64,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct UpdateEtatDateAdditionalDataRequest {
34 pub additional_data: serde_json::Value,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct EtatDateResponse {
40 pub id: Uuid,
41 pub organization_id: Uuid,
42 pub building_id: Uuid,
43 pub unit_id: Uuid,
44 pub reference_date: DateTime<Utc>,
45 pub requested_date: DateTime<Utc>,
46 pub generated_date: Option<DateTime<Utc>>,
47 pub delivered_date: Option<DateTime<Utc>>,
48 pub status: EtatDateStatus,
49 pub language: EtatDateLanguage,
50 pub reference_number: String,
51 pub notary_name: String,
52 pub notary_email: String,
53 pub notary_phone: Option<String>,
54 pub building_name: String,
55 pub building_address: String,
56 pub unit_number: String,
57 pub unit_floor: Option<String>,
58 pub unit_area: Option<f64>,
59 pub ordinary_charges_quota: f64,
60 pub extraordinary_charges_quota: f64,
61 pub owner_balance: f64,
62 pub arrears_amount: f64,
63 pub monthly_provision_amount: f64,
64 pub total_balance: f64,
65 pub approved_works_unpaid: f64,
66 pub additional_data: serde_json::Value,
67 pub pdf_file_path: Option<String>,
68 pub created_at: DateTime<Utc>,
69 pub updated_at: DateTime<Utc>,
70 pub is_overdue: bool,
72 pub is_expired: bool,
73 pub days_since_request: i64,
74}
75
76impl From<EtatDate> for EtatDateResponse {
77 fn from(etat_date: EtatDate) -> Self {
78 let is_overdue = etat_date.is_overdue();
79 let is_expired = etat_date.is_expired();
80 let days_since_request = etat_date.days_since_request();
81
82 Self {
83 id: etat_date.id,
84 organization_id: etat_date.organization_id,
85 building_id: etat_date.building_id,
86 unit_id: etat_date.unit_id,
87 reference_date: etat_date.reference_date,
88 requested_date: etat_date.requested_date,
89 generated_date: etat_date.generated_date,
90 delivered_date: etat_date.delivered_date,
91 status: etat_date.status,
92 language: etat_date.language,
93 reference_number: etat_date.reference_number,
94 notary_name: etat_date.notary_name,
95 notary_email: etat_date.notary_email,
96 notary_phone: etat_date.notary_phone,
97 building_name: etat_date.building_name,
98 building_address: etat_date.building_address,
99 unit_number: etat_date.unit_number,
100 unit_floor: etat_date.unit_floor,
101 unit_area: etat_date.unit_area,
102 ordinary_charges_quota: etat_date.ordinary_charges_quota,
103 extraordinary_charges_quota: etat_date.extraordinary_charges_quota,
104 owner_balance: etat_date.owner_balance,
105 arrears_amount: etat_date.arrears_amount,
106 monthly_provision_amount: etat_date.monthly_provision_amount,
107 total_balance: etat_date.total_balance,
108 approved_works_unpaid: etat_date.approved_works_unpaid,
109 additional_data: etat_date.additional_data,
110 pdf_file_path: etat_date.pdf_file_path,
111 created_at: etat_date.created_at,
112 updated_at: etat_date.updated_at,
113 is_overdue,
114 is_expired,
115 days_since_request,
116 }
117 }
118}
119
120#[derive(Debug, Clone, Serialize, Deserialize)]
122pub struct EtatDateStatsResponse {
123 pub total_requests: i64,
124 pub requested_count: i64,
125 pub in_progress_count: i64,
126 pub generated_count: i64,
127 pub delivered_count: i64,
128 pub expired_count: i64,
129 pub overdue_count: i64, pub average_processing_days: f64,
131}