timesheetlib/dto/
payslip_response.rs1use chrono::NaiveDateTime;
2use common::entity::DtoResp;
3use common::utils::serialize_option_naive_date;
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7use crate::enums::payment_type::PaymentType;
8use crate::enums::payslip_status::PayslipStatus;
9use crate::jsonb::bonus::Bonus;
10use crate::jsonb::deduction::Deduction;
11use crate::jsonb::payment::Payment;
12use crate::jsonb::payslip_entry::PayslipEntry;
13
14#[derive(Serialize, Deserialize, Debug, Clone)]
15#[serde(rename_all = "camelCase")]
16pub struct PayslipResponse {
17 pub id: Uuid,
18 pub user_id: Uuid,
19 pub period_id: Uuid,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub leave_id: Option<Uuid>,
22 pub hours_claimed: f32,
23 pub hours_approved: f32,
24 pub rate: f32,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub entrys: Option<Vec<PayslipEntry>>,
27 pub amount_claimed: f32,
28 pub amount_approved: f32,
29 pub taxable: f32,
30 pub tax: f32,
31 pub accrual: f32,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub bonuses: Option<Vec<Bonus>>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub amount_paid: Option<f32>,
36 #[serde(default)]
37 #[serde(with = "serialize_option_naive_date")]
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub payment_date: Option<NaiveDateTime>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub payments: Option<Vec<Payment>>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub payment_type: Option<PaymentType>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub comment: Option<String>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub status: Option<PayslipStatus>,
48 pub org_id : Uuid,
49 pub entry : Uuid,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub deductions: Option<Vec<Deduction>>,
52}
53
54impl DtoResp for PayslipResponse {}