DONE: layout letter with letterhead and footer, notification for newly...

This commit is contained in:
ISMAIL MASSERAN
2026-06-28 02:16:49 +00:00
parent 94ecbe5887
commit 034ecf947f
400 changed files with 29802 additions and 5446 deletions
@@ -0,0 +1,51 @@
import { api } from '@/core/services/api'
import type {
AddressApiResponse,
AddressPayload,
AddressesApiResponse,
} from '../types/address.types'
export async function listAddresses(perPage = 100): Promise<AddressesApiResponse> {
const { data } = await api.get<AddressesApiResponse>('/v1/addresses', {
params: { per_page: perPage },
})
if (!data.success) {
throw new Error(data.message ?? 'Gagal memuatkan alamat.')
}
return data
}
export async function createAddress(payload: AddressPayload): Promise<AddressApiResponse> {
const { data } = await api.post<AddressApiResponse>('/v1/addresses', payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal menambah alamat.')
}
return data
}
export async function updateAddress(
id: string,
payload: AddressPayload,
): Promise<AddressApiResponse> {
const { data } = await api.put<AddressApiResponse>(`/v1/addresses/${id}`, payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal mengemas kini alamat.')
}
return data
}
export async function deleteAddress(id: string): Promise<AddressApiResponse> {
const { data } = await api.delete<AddressApiResponse>(`/v1/addresses/${id}`)
if (!data.success) {
throw new Error(data.message ?? 'Gagal memadam alamat.')
}
return data
}
@@ -0,0 +1,12 @@
import { api } from '@/core/services/api'
import type { BanksApiResponse } from '../types/bank.types'
export async function listActiveBanks(): Promise<BanksApiResponse> {
const { data } = await api.get<BanksApiResponse>('/v1/banks/active')
if (!data.success) {
throw new Error(data.message ?? 'Gagal memuatkan senarai bank.')
}
return data
}
@@ -0,0 +1,51 @@
import { api } from '@/core/services/api'
import type {
BankDetailApiResponse,
BankDetailPayload,
BankDetailsApiResponse,
} from '../types/bankDetail.types'
export async function listBankDetails(perPage = 100): Promise<BankDetailsApiResponse> {
const { data } = await api.get<BankDetailsApiResponse>('/v1/bank_details', {
params: { per_page: perPage },
})
if (!data.success) {
throw new Error(data.message ?? 'Gagal memuatkan akaun bank.')
}
return data
}
export async function createBankDetail(payload: BankDetailPayload): Promise<BankDetailApiResponse> {
const { data } = await api.post<BankDetailApiResponse>('/v1/bank_details', payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal menambah akaun bank.')
}
return data
}
export async function updateBankDetail(
id: string,
payload: BankDetailPayload,
): Promise<BankDetailApiResponse> {
const { data } = await api.put<BankDetailApiResponse>(`/v1/bank_details/${id}`, payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal mengemas kini akaun bank.')
}
return data
}
export async function deleteBankDetail(id: string): Promise<BankDetailApiResponse> {
const { data } = await api.delete<BankDetailApiResponse>(`/v1/bank_details/${id}`)
if (!data.success) {
throw new Error(data.message ?? 'Gagal memadam akaun bank.')
}
return data
}
@@ -0,0 +1,51 @@
import { api } from '@/core/services/api'
import type {
EmploymentApiResponse,
EmploymentPayload,
EmploymentsApiResponse,
} from '../types/employment.types'
export async function listEmployments(perPage = 100): Promise<EmploymentsApiResponse> {
const { data } = await api.get<EmploymentsApiResponse>('/v1/employments', {
params: { per_page: perPage },
})
if (!data.success) {
throw new Error(data.message ?? 'Gagal memuatkan pekerjaan.')
}
return data
}
export async function createEmployment(payload: EmploymentPayload): Promise<EmploymentApiResponse> {
const { data } = await api.post<EmploymentApiResponse>('/v1/employments', payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal menambah pekerjaan.')
}
return data
}
export async function updateEmployment(
id: string,
payload: EmploymentPayload,
): Promise<EmploymentApiResponse> {
const { data } = await api.put<EmploymentApiResponse>(`/v1/employments/${id}`, payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal mengemas kini pekerjaan.')
}
return data
}
export async function deleteEmployment(id: string): Promise<EmploymentApiResponse> {
const { data } = await api.delete<EmploymentApiResponse>(`/v1/employments/${id}`)
if (!data.success) {
throw new Error(data.message ?? 'Gagal memadam pekerjaan.')
}
return data
}
@@ -0,0 +1,44 @@
import { api } from '@/core/services/api'
import type { HeirApiResponse, HeirPayload, HeirsApiResponse } from '../types/heir.types'
export async function listHeirs(perPage = 100): Promise<HeirsApiResponse> {
const { data } = await api.get<HeirsApiResponse>('/v1/heirs', {
params: { per_page: perPage },
})
if (!data.success) {
throw new Error(data.message ?? 'Gagal memuatkan pewaris.')
}
return data
}
export async function createHeir(payload: HeirPayload): Promise<HeirApiResponse> {
const { data } = await api.post<HeirApiResponse>('/v1/heirs', payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal menambah pewaris.')
}
return data
}
export async function updateHeir(id: string, payload: HeirPayload): Promise<HeirApiResponse> {
const { data } = await api.put<HeirApiResponse>(`/v1/heirs/${id}`, payload)
if (!data.success) {
throw new Error(data.message ?? 'Gagal mengemas kini pewaris.')
}
return data
}
export async function deleteHeir(id: string): Promise<HeirApiResponse> {
const { data } = await api.delete<HeirApiResponse>(`/v1/heirs/${id}`)
if (!data.success) {
throw new Error(data.message ?? 'Gagal memadam pewaris.')
}
return data
}
@@ -31,6 +31,10 @@ export async function updateProfile(payload: UpdateProfilePayload): Promise<Upda
appendIfDefined(formData, 'ic_number', payload.ic_number)
appendIfDefined(formData, 'position', payload.position)
appendIfDefined(formData, 'phone_number', payload.phone_number)
appendIfDefined(formData, 'gender', payload.gender)
appendIfDefined(formData, 'marriage_status', payload.marriage_status)
appendIfDefined(formData, 'birth_date', payload.birth_date)
appendIfDefined(formData, 'birth_place', payload.birth_place)
formData.append('image', payload.image!)
const { data } = await api.post<UpdateProfileResponse>('/v1/profile', formData, {
@@ -46,6 +50,10 @@ export async function updateProfile(payload: UpdateProfilePayload): Promise<Upda
if (payload.ic_number?.trim()) body.ic_number = payload.ic_number.trim()
if (payload.position?.trim()) body.position = payload.position.trim()
if (payload.phone_number?.trim()) body.phone_number = payload.phone_number.trim()
if (payload.gender?.trim()) body.gender = payload.gender.trim()
if (payload.marriage_status?.trim()) body.marriage_status = payload.marriage_status.trim()
if (payload.birth_date?.trim()) body.birth_date = payload.birth_date.trim()
if (payload.birth_place?.trim()) body.birth_place = payload.birth_place.trim()
const { data } = await api.post<UpdateProfileResponse>('/v1/profile', body)
return data