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