timesheetlib/dto/
payslip_response.rs

1use 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 {}