koprogo_api/application/dto/
owner_contribution_dto.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::domain::entities::{
6 ContributionPaymentMethod, ContributionPaymentStatus, ContributionType, OwnerContribution,
7};
8
9#[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#[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#[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}