diff --git a/.env b/.env index 053bf82..04d3402 100644 --- a/.env +++ b/.env @@ -3,4 +3,5 @@ VITE_APP_VERSION=1=9.1.1 GENERATE_SOURCEMAP=false VITE_APP_API_URL=https://tpay.shiblysolution.id/api +# VITE_APP_API_URL=http://0.0.0.0:4001/api VITE_ENV=default \ No newline at end of file diff --git a/src/pages/account/manage-account/ManageAccount.tsx b/src/pages/account/manage-account/ManageAccount.tsx index 7663276..6fd1190 100644 --- a/src/pages/account/manage-account/ManageAccount.tsx +++ b/src/pages/account/manage-account/ManageAccount.tsx @@ -1,10 +1,10 @@ import { apiConfig } from '@/config/api.config'; import { Account, columns } from './Columns'; -import { DataTable } from '@/components/ui/DataTable'; import axios from 'axios'; import { useEffect, useState } from 'react'; import { getData } from '@/utils'; import { useCallApi } from '@/hooks'; +import { DataTable } from '@/components/ui/DataTable'; const API_URL = apiConfig.service_dashboard; @@ -79,8 +79,8 @@ const ManageAccount = () => { console.log('update')} - onDelete={() => console.log('delete')} + onUpdate={() => console.log('Callback update')} + onDelete={() => console.log('Callback delete')} /> diff --git a/src/pages/members/kyc/Columns.tsx b/src/pages/members/kyc/Columns.tsx new file mode 100644 index 0000000..195f62a --- /dev/null +++ b/src/pages/members/kyc/Columns.tsx @@ -0,0 +1,195 @@ +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu'; +import { ColumnDef } from '@tanstack/react-table'; +import { ArrowUpDown, MoreHorizontal } from 'lucide-react'; + +export type Members = { + // id: number; + username: number; + fullname: string; + group: string; + email: string; + created_at: Date; +}; + +export const columns: ColumnDef[] = [ + { + accessorKey: 'no', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'username', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'name', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'group_name', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'destinationGroup', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'email', + header: ({ column }) => { + return ( + + ); + } + }, + { + accessorKey: 'created_at', + header: ({ column }) => { + return ( + + ); + }, + cell: ({ row }) => new Date(row.original.created_at).toLocaleDateString() + }, + { + accessorKey: 'statusApproval', + header: ({ column }) => { + return ( + + ); + } + }, + { + id: 'actions', + cell: ({ row }) => { + const dataMembers = row.original; + return ( + + + ); + } + } +]; + +export const initialMember = { + id: "", + fullname: "", + email: "", + username: "", + msisdn: "", + password: "", + pin: "", + try_pin: "", + mother_fullname: "", + agent_name: "", + bank_name: "", + bank_account: "", + ibank_number: "", + address: "", + longitude: "", + latitude: "", + nationality: "", + photouser: "", + photomerchant: "", + file_selfie: "", + file_document_id: "", + file_document_id_selfie: "", + file_commercial_license: "", + identity_type: "", + identity_number: "", + license_number: "", + date_birth: "", + gender: "", + status: "N", + isneedapproval: "", + isapproved: "", + approveddate: "", + approvedby: "", + created_by: "", + created_at: "", + updated_by: "", + updated_at: "", + deleted_by: "", + deleted_at: "", + group: "", + point_tier: "", + language: "", + municipio: "", + posto_adms: "", + suco: "", + aldeia: "", + profession: "", +} diff --git a/src/pages/members/kyc/Kyc.tsx b/src/pages/members/kyc/Kyc.tsx index 77f4074..ab4d62a 100644 --- a/src/pages/members/kyc/Kyc.tsx +++ b/src/pages/members/kyc/Kyc.tsx @@ -3,9 +3,10 @@ import { DataTable } from '@/components/ui/DataTable'; import { Table } from '@tanstack/react-table'; import React, { createContext, useContext, useState, useEffect } from 'react'; import { ManageKycContextProvider } from './hooks'; -import { columns, initialMember } from '../manage-members/Columns'; +import { columns, initialMember } from './Columns'; import { useAuthContext } from '@/auth'; import { apiConfig } from '@/config/api.config'; +import ConfirmDialog from '@/components/confirm'; import axios from 'axios'; const BASE_URL = apiConfig.service_customer; import CustomerDialog from '../manage-members/CustomerDetailModal'; @@ -52,7 +53,7 @@ const Kyc = () => { with_deleted: false, order_field: 'fullname', order_direction: 'ASC', - // type: "Reguler" + type: "kyc" } }); let temp = 1 @@ -79,10 +80,16 @@ const Kyc = () => { setDialogOpen(true) } + function handleReject(data: any) { + setDialogType('reject') + setMember(data) + setDialogOpen(true) + } + const handleYes = async () => { let userLogin: any = await getUser(); let updateData: any = member; - let customerId = member.id; + const customerId = member.id; updateData.updated_by = userLogin.data ? userLogin.data.id : '' let today = new Date(); updateData.updated_at = today.toString(); @@ -104,11 +111,19 @@ const Kyc = () => { delete updateData.group_deleted_by; delete updateData.group_deleted_at; try { - await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + if (dialogType === 'reject') { + await axios.post(`${BASE_URL}/customer/reject`, {customerid: customerId}) + } + if (dialogType === 'update') { + await axios.put(`${BASE_URL}/customer/update/${customerId}`, updateData) + if (updateData.isneedapproval == 1) await axios.post(`${BASE_URL}/customer/approve`, {customerid: customerId}) + } await fetchGroups(); + setDialogOpen(false) setIsDialogOpen(false) } catch (error: any) { alert(error.message) + setDialogOpen(false) setIsDialogOpen(false) } } @@ -116,15 +131,18 @@ const Kyc = () => { return (
- + setDialogOpen(false)} + title="Confirm Action" + content={`Are you sure you want to ${dialogType}?`} + onYes={handleYes} + onNo={() => setDialogOpen(false)} + /> +

Manage Member KYC

- - {/* -
- -
-
*/}
); diff --git a/src/pages/members/manage-members/CustomerDetailModal.tsx b/src/pages/members/manage-members/CustomerDetailModal.tsx index 1da456f..8bf051b 100644 --- a/src/pages/members/manage-members/CustomerDetailModal.tsx +++ b/src/pages/members/manage-members/CustomerDetailModal.tsx @@ -15,7 +15,7 @@ import { import Divider from '@mui/material/Divider'; import { initialMember } from "./Columns"; -const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStats }: any) => { +const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStats, handleReject }: any) => { const [formData, setFormData] = useState(initialData || initialMember); const [viewOnly, setViewOnly] = useState(viewStats || false); @@ -34,6 +34,11 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat handleClose(); }; + const onReject = () => { + handleReject(formData); + handleClose(); + } + function generateDate(date: any, type: any) { if (!date) return '' const today = new Date(date); @@ -43,85 +48,108 @@ const CustomerDialog = ({ open, handleClose, handleSubmit, initialData, viewStat return ( - Customer Form ({viewStats ? 'View' : 'Edit'}) - -
- Customer Data - Created: {generateDate(formData.created_at, 'datetime')} -
- - - - - - - - - - - Gender - - - - - - - {/* */} - {/* */} - - Status - - - - - Municipio - - - - - Posto - - + Customer Form ({viewOnly ? 'View' : 'Edit'}) + +
+ Customer Data + Created: {generateDate(formData.created_at, 'datetime')} +
+ { + formData.isneedapproval == 1 ? ( +
+ User Request for approval +
+ ) : ('') + } - - Suco - - + + + + + + + + + + + Gender + + + + Identity Type + + + + + + {/* */} + {/* */} + + Status + + + + + Municipio + + + + + Posto + + - - Aldeia - - - - - Bank - - - -
- - - - -
+ + Suco + + + + + Aldeia + + + + + Bank + + + + + + + + { + formData.isneedapproval == 1 ? ( + + ) : ('') + } + + + ); }; diff --git a/src/pages/members/manage-members/ManageMembers.tsx b/src/pages/members/manage-members/ManageMembers.tsx index 74c061f..d81ed20 100644 --- a/src/pages/members/manage-members/ManageMembers.tsx +++ b/src/pages/members/manage-members/ManageMembers.tsx @@ -30,7 +30,6 @@ const ManageMembers = () => { with_deleted: false, order_field: 'fullname', order_direction: 'ASC', - type: "Reguler" } }); let temp = 1