Skip to content

Commit

Permalink
feat: update deposit placement
Browse files Browse the repository at this point in the history
  • Loading branch information
goen94 committed Apr 10, 2024
1 parent 0f4fb3c commit 3fb82de
Show file tree
Hide file tree
Showing 12 changed files with 3,681 additions and 20 deletions.
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"@vuelidate/validators": "^2.0.0-alpha.11",
"axios": "^1.3.5",
"chart.js": "^3.7.1",
"date-fns": "^3.6.0",
"dayjs": "^1.10.4",
"dropzone": "^5.7.6",
"highlight.js": "^10.6.0",
Expand All @@ -40,6 +41,7 @@
"lucide": "^0.274.0",
"lucide-vue-next": "^0.274.0",
"moment-timezone": "^0.5.43",
"numeral": "^2.0.6",
"pinia": "^2.0.9",
"simplebar": "^5.3.6",
"tabulator-tables": "^4.9.3",
Expand All @@ -49,13 +51,15 @@
"toastify-js": "^1.9.3",
"tom-select": "^1.7.5",
"vue": "^3.2.25",
"vue-cleave-component": "^3.0.2",
"vue-router": "4",
"vue3-toastify": "^0.1.6",
"xlsx": "^0.16.9",
"zoom-vanilla.js": "^2.0.6"
},
"devDependencies": {
"@tailwindcss/forms": "^0.5.1",
"@types/numeral": "^2.0.5",
"@typescript-eslint/eslint-plugin": "^5.42.1",
"@typescript-eslint/parser": "^5.42.1",
"@vitejs/plugin-vue": "2.3.3",
Expand Down
58 changes: 57 additions & 1 deletion src/router/investment/deposit.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { NavItem } from "@/stores/nav";
import Deposit from "@/views/investment/deposit/Main.vue";
import Placement from "@/views/investment/deposit/placement/Main.vue";
import ViewPlacement from "@/views/investment/deposit/placement/View.vue";
import { useAuthStore } from "@/stores/auth";
import { roleNav } from "@/router/master";
import CreatePlacement from "@/views/investment/deposit/placement/Create.vue";
import EditPlacement from "@/views/investment/deposit/placement/Edit.vue";

export namespace depositNav {
export const home: NavItem = {
Expand All @@ -14,6 +16,21 @@ export namespace depositNav {
label: "Deposit Placement",
name: "deposit-placement",
};

export const createPlacement: NavItem = {
label: "Create Deposit Placement",
name: "create-deposit-placement",
};

export const viewPlacement: NavItem = {
label: "Deposit Placement Details",
name: "view-deposit-placement",
};

export const editPlacement: NavItem = {
label: "Edit Deposit Placement",
name: "edit-deposit-placement",
};
}

export const depositRoute = [
Expand Down Expand Up @@ -43,4 +60,43 @@ export const depositRoute = [
}
},
},
{
path: "/deposit/placement/create",
name: "create-deposit-placement",
component: CreatePlacement,
beforeEnter: async (to, from, next) => {
const authStore = useAuthStore();
if (authStore.permissions.includes("deposit.create")) {
next();
} else {
next({ name: "404" });
}
},
},
{
path: "/deposit/placement/view/:id",
name: "view-deposit-placement",
component: ViewPlacement,
beforeEnter: async (to, from, next) => {
const authStore = useAuthStore();
if (authStore.permissions.includes("deposit.view")) {
next();
} else {
next({ name: "404" });
}
},
},
{
path: "/deposit/placement/edit/:id",
name: "edit-deposit-placement",
component: EditPlacement,
beforeEnter: async (to, from, next) => {
const authStore = useAuthStore();
if (authStore.permissions.includes("deposit.update")) {
next();
} else {
next({ name: "404" });
}
},
},
];
161 changes: 161 additions & 0 deletions src/stores/deposit.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
import api from "@/api";
import { ApiResponse, ErrorResponse } from "@/types/api/ApiResponse";
import { IPagination } from "@/types/api/Pagination";
import { QueryParams } from "@/types/api/QueryParams";
import { AxiosError } from "axios";
import { defineStore } from "pinia";
import { Deposit } from "@/types/deposit";

const url = "/deposits";

export type RootState = {
deposits: Deposit[];
deposit: Deposit;
pagination: IPagination;
};

export const deposit = {
_id: "",
date: "",
bilyetNumber: "",
bank: {
_id: "",
name: "",
account: {
number: 0,
name: "",
},
},
owner: {
_id: "",
name: "",
},
baseDate: 0,
tenor: 0,
isRollOver: false,
amount: 0,
sourceBank: {
_id: "",
name: "",
account: {
number: 0,
name: "",
},
},
recipientBank: {
_id: "",
name: "",
account: {
number: 0,
name: "",
},
},
paymentMethod: "",
interestRate: 0,
taxRate: 0,
isCashback: false,
};

export const depositForm = {
_id: "",
date: new Date().toISOString(),
bilyetNumber: "",
bank_id: "",
accountNumber: 0,
owner_id: "",
baseDate: 0,
tenor: 0,
isRollOver: false,
amount: 0,
sourceBank_id: "",
sourceAccountNumber: 0,
recipientBank_id: "",
recipientAccountNumber: 0,
paymentMethod: "advance",
interestRate: 0,
taxRate: 0,
isCashback: false,
};

export const useDepositsStore = defineStore("deposits", {
state: () =>
({
deposits: [],
deposit: deposit,
pagination: {
page: 1,
pageSize: 10,
pageCount: 0,
totalDocument: 0,
},
} as RootState),
getters: {
dataBank(state) {
return state.deposits;
},
},
actions: {
async get(params: QueryParams): Promise<ApiResponse> {
try {
const banks = await api.get<RootState>(url, { params: { ...params } });
this.deposits = banks.data.deposits;
this.pagination = banks.data.pagination;
return { data: banks.data };
} catch (error) {
const err = error as AxiosError;
return { error: err.response?.data as ErrorResponse };
}
},
async find(id: string): Promise<ApiResponse> {
try {
const deposit = await api.get<Deposit>(url + "/" + id);
this.deposit = deposit.data;
return { data: deposit.data };
} catch (error) {
const err = error as AxiosError;
return { error: err.response?.data as ErrorResponse };
}
},
async create(deposit: Deposit): Promise<ApiResponse> {
try {
await api.post(url, { ...deposit });
return { error: null };
} catch (error) {
const err = error as AxiosError;
return { error: err.response?.data as ErrorResponse };
}
},
// async update(id: string, payload: Bank): Promise<ApiResponse> {
// try {
// await api.patch(url + "/" + id, { ...payload });
// return { error: null };
// } catch (error) {
// const err = error as AxiosError;
// return { error: err.response?.data as ErrorResponse };
// }
// },
// async delete(id: string, password: string): Promise<ApiResponse> {
// try {
// await api.delete(url + "/" + id, { data: { password } });
// return { error: null };
// } catch (error) {
// const err = error as AxiosError;
// return { error: err.response?.data as ErrorResponse };
// }
// },
// async requestDelete(id: string, params: any): Promise<ApiResponse> {
// try {
// await api.post(url + "/" + id + "/request-delete", {
// ...params,
// });
// return { error: null };
// } catch (error) {
// const err = error as AxiosError;
// return { error: err.response?.data as ErrorResponse };
// }
// },
setDeposit(deposit: Deposit) {
this.deposit = deposit;
},
},
});
3 changes: 2 additions & 1 deletion src/stores/side-menu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { roleNav } from "../router/master/roles";
import { bankNav } from "../router/master";
import { useAuthStore } from "./auth";
import { Newspaper, NfcIcon } from "lucide-vue-next";
import { depositNav } from "@/router/investment";

export const useSideMenuStore = defineStore("sideMenu", {
state: () => ({
Expand Down Expand Up @@ -62,7 +63,7 @@ export const useSideMenuStore = defineStore("sideMenu", {
subMenu: [
{
icon: "NewspaperIcon",
pageName: roleNav.home.name,
pageName: depositNav.placement.name,
title: "Deposit",
path: "/deposit",
canView: authStore.permissions.includes("deposit.view"),
Expand Down
6 changes: 6 additions & 0 deletions src/types/Users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@ export interface User {
mobilephone: string;
role?: Role;
}

export interface UserForm {
_id?: string;
username: string;
name: string;
}
98 changes: 98 additions & 0 deletions src/types/deposit.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import { UserForm } from "@/types/Users";

export interface DepositForm {
_id?: string;
date: string;
bilyetNumber: string;
bank_id: string;
accountNumber: number;
owner_id: string;
baseDate: number;
tenor: number;
dueDate?: string;
isRollOver: boolean;
amount: number;
remaining?: number;
sourceBank_id: string;
sourceAccountNumber: number;
recipientBank_id: string;
recipientAccountNumber: number;
paymentMethod: string;
interestRate: number;
baseInterest?: number;
grossInterest?: number;
taxRate: number;
taxAmount?: number;
netInterest?: number;
isCashback: boolean;
note?: string;
interests?: DepositReturn[];
cashbacks?: DepositCashback[];
}

export interface Deposit {
_id?: string;
date: string;
bilyetNumber: string;
number?: string;
bank: DepositBank;
owner: DepositOwner;
baseDate: number;
tenor: number;
dueDate?: string;
isRollOver: boolean;
amount: number;
remaining?: number;
sourceBank: DepositBank;
recipientBank: DepositBank;
paymentMethod: string;
interestRate: number;
baseInterest?: number;
grossInterest?: number;
taxRate: number;
taxAmount?: number;
netInterest?: number;
isCashback: boolean;
note?: string;
formStatus?: string;
returns?: DepositReturn[];
cashbacks?: DepositCashback[];
createdBy?: UserForm;
createdAt?: string;
updatedBy?: UserForm;
deletedBy?: UserForm;
deletedReason?: string;
}

export interface DepositBank {
_id?: string;
name: string;
account: DepositBankAccount;
}

export interface DepositBankAccount {
number: number;
name: string;
}

export interface DepositOwner {
_id?: string;
name: string;
}

export interface DepositReturn {
_id?: string;
baseDays: number;
dueDate?: string;
gross?: number;
taxAmount?: number;
net?: number;
remaining?: number;
}

export interface DepositCashback {
_id?: string;
rate: number;
amount?: number;
remaining?: number;
}
Loading

0 comments on commit 3fb82de

Please sign in to comment.