timesheetlib/dto/
payslip_request.rs1use 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 {}