timesheetlib/dto/
payslip_request.rs

1use chrono::NaiveDateTime;
2use common::entity::DtoReq;
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 PayslipRequest {
17    pub id: Option<Uuid>,
18    pub user_id: Uuid,
19    pub period_id: Uuid,
20    pub leave_id: Option<Uuid>,
21    pub hours_claimed: f32,
22    pub hours_approved: f32,
23    pub rate: f32,
24    pub entrys: Option<Vec<PayslipEntry>>,
25    pub amount_claimed: f32,
26    pub amount_approved: f32,
27    pub taxable: f32,
28    pub tax: f32,
29    pub accrual: f32,
30    pub bonuses: Option<Vec<Bonus>>,
31    pub amount_paid: Option<f32>,
32    #[serde(default)]
33    #[serde(with = "serialize_option_naive_date")]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub payment_date: Option<NaiveDateTime>,
36    pub payments: Option<Vec<Payment>>,
37    pub payment_type: Option<PaymentType>,
38    pub comment: Option<String>,
39    pub status: Option<PayslipStatus>,
40    pub org_id : Uuid,
41    pub entry : Uuid,
42    pub deductions: Option<Vec<Deduction>>,
43}
44
45impl DtoReq for PayslipRequest {}