koprogo_api/application/dto/
owner_contribution_dto.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::domain::entities::{
6    ContributionPaymentMethod, ContributionPaymentStatus, ContributionType, OwnerContribution,
7};
8
9/// DTO for creating a new owner contribution
10#[derive(Debug, Deserialize)]
11pub struct CreateOwnerContributionRequest {
12    pub owner_id: Uuid,
13    pub unit_id: Option<Uuid>,
14    pub description: String,
15    pub amount: f64,
16    pub contribution_type: ContributionType,
17    pub contribution_date: DateTime<Utc>,
18    pub account_code: Option<String>,
19}
20
21/// DTO for recording a payment
22#[derive(Debug, Deserialize)]
23pub struct RecordPaymentRequest {
24    pub payment_date: DateTime<Utc>,
25    pub payment_method: ContributionPaymentMethod,
26    pub payment_reference: Option<String>,
27}
28
29/// DTO for owner contribution response
30#[derive(Debug, Serialize)]
31pub struct OwnerContributionResponse {
32    pub id: Uuid,
33    pub organization_id: Uuid,
34    pub owner_id: Uuid,
35    pub unit_id: Option<Uuid>,
36    pub description: String,
37    pub amount: f64,
38    pub account_code: Option<String>,
39    pub contribution_type: ContributionType,
40    pub contribution_date: DateTime<Utc>,
41    pub payment_date: Option<DateTime<Utc>>,
42    pub payment_method: Option<ContributionPaymentMethod>,
43    pub payment_reference: Option<String>,
44    pub payment_status: ContributionPaymentStatus,
45    pub notes: Option<String>,
46    pub created_at: DateTime<Utc>,
47    pub updated_at: DateTime<Utc>,
48}
49
50impl From<OwnerContribution> for OwnerContributionResponse {
51    fn from(contribution: OwnerContribution) -> Self {
52        Self {
53            id: contribution.id,
54            organization_id: contribution.organization_id,
55            owner_id: contribution.owner_id,
56            unit_id: contribution.unit_id,
57            description: contribution.description,
58            amount: contribution.amount,
59            account_code: contribution.account_code,
60            contribution_type: contribution.contribution_type,
61            contribution_date: contribution.contribution_date,
62            payment_date: contribution.payment_date,
63            payment_method: contribution.payment_method,
64            payment_reference: contribution.payment_reference,
65            payment_status: contribution.payment_status,
66            notes: contribution.notes,
67            created_at: contribution.created_at,
68            updated_at: contribution.updated_at,
69        }
70    }
71}