diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 4b0b143..cff586e 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -96,6 +96,20 @@ export const ProductComponent = observer((props) => { ), }, + { + title: "Action", + key: "action", + render: (text, record) => ( + + ), + }, ]; const deleteData = async (id) => { diff --git a/src/pages/App/DesktopLayout.js b/src/pages/App/DesktopLayout.js index 0651668..6e2c27a 100644 --- a/src/pages/App/DesktopLayout.js +++ b/src/pages/App/DesktopLayout.js @@ -215,12 +215,14 @@ export const DesktopLayout = observer(() => { Payback To + {store.authentication.userData.role !== "Admin" && ( Payback + )} {store.authentication.userData.role !== "Admin" && ( diff --git a/src/pages/Membership/DetailUser.js b/src/pages/Membership/DetailUser.js new file mode 100644 index 0000000..c1eac3e --- /dev/null +++ b/src/pages/Membership/DetailUser.js @@ -0,0 +1,148 @@ +import React, {useContext, useEffect} from "react"; +import {Button, Card, Col, Row, Table, Typography} from "antd"; +import {BreadcumbComponent} from "../../component/BreadcumbComponent"; +import {LINKS} from "../../routes/app"; +import {useStore} from "../../utils/useStore"; +import {observer} from "mobx-react-lite"; +import {FilterOutlined} from "@ant-design/icons"; +import {format, parseISO} from "date-fns"; +import {ModalLoaderContext} from "../../utils/modal"; + +const {Title, Text} = Typography; + +export const DetailUser = observer(() => { + const store = useStore(); + const modalLoader = useContext(ModalLoaderContext); + + const routeData = [ + { + route: LINKS.HOME, + name: "Home", + }, + { + route: LINKS.DETAILUSER, + name: Detail User, + }, + ]; + + useEffect(() => { + (async () => { + modalLoader.setLoading(true); + await Promise.allSettled([ + store.authentication.getProfile(), + store.transaction.getDataHistoryTransaction(), + ]); + modalLoader.setLoading(false); + })() + }, []); + + const columns = [ + { + title: 'Markup Price', + dataIndex: 'mark_up_price', + key: 'mark_up_price', + width: '20%', + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: '50%', + }, + { + title: 'Transaction Date', + dataIndex: 'created_at', + key: 'created_at', + render: (text, record) => { + return ( + {format(parseISO(record.created_at), 'dd MMMM yyyy HH:mm')} + ) + }, + }, + ] + + const styleSaldoTitle = store.ui.mediaQuery.isDesktop ? { + display: "flex", + justifyContent: "center" + } : {fontSize: "0.75rem"}; + const styleSaldoContent = store.ui.mediaQuery.isDesktop ? { + fontSize: '1.25rem', + display: "flex", + justifyContent: "center" + } : null; + + return ( +
+ + + Detail User + + + + + Name + + + {store.authentication.profileData?.userDetail?.name} + + + Role + + + {store.authentication.profileData?.userDetail?.phone_number} + + + Saldo Supplier + + + {store.authentication.profileData?.username} + + + Saldo System + + + {store.authentication.profileData.roles?.name} + + + Status + + + {store.authentication.profileData.superior?.username} + + + + \ + + + Saldo + + + {store.authentication.profileData?.wallet} + + + + + + +
+ History User Transaction + + + + + + +
+ +
+ ) +}); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index f241859..8a4cd62 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -1,16 +1,37 @@ -import React, {useContext, useEffect, useState} from "react"; -import {Button, Card, Col, Divider, Form, Input, List, message, Modal, Row, Select, Space, Table, Tag,} from "antd"; -import {useStore} from "../../utils/useStore"; -import {observer} from "mobx-react-lite"; -import {DownloadOutlined, ExclamationCircleOutlined, PlusSquareOutlined,} from "@ant-design/icons"; -import {MembershipModal} from "./MembershipModal"; -import {BreadcumbComponent} from "../../component/BreadcumbComponent"; -import {LINKS} from "../../routes/app"; -import {ModalLoaderContext} from "../../utils/modal"; +import React, { useContext, useEffect, useState } from "react"; +import { + Button, + Card, + Col, + Divider, + Form, + Input, + List, + message, + Modal, + Row, + Select, + Space, + Table, + Tag, +} from "antd"; +import { useStore } from "../../utils/useStore"; +import { observer } from "mobx-react-lite"; +import { + DownloadOutlined, + ExclamationCircleOutlined, + PlusSquareOutlined, +} from "@ant-design/icons"; +import { MembershipModal } from "./MembershipModal"; +import { BreadcumbComponent } from "../../component/BreadcumbComponent"; +import { LINKS } from "../../routes/app"; +import { Link,useHistory } from "react-router-dom"; +import { ModalLoaderContext } from "../../utils/modal"; -const {Search} = Input; -const {Option} = Select; +const { Search } = Input; +const { Option } = Select; export const Membership = observer(() => { + const history = useHistory(); const [form] = Form.useForm(); const store = useStore(); const [visibleModal, setVisibleModal] = useState(false); @@ -117,36 +138,34 @@ export const Membership = observer(() => { dataIndex: ["coa", "amount"], key: ["coa", "amount"], width: "20%", - render: (text) => ( - new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(text) - ) + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { title: "Saldo di System", dataIndex: ["coa_undistribute", "amount"], key: ["coa_undistribute", "amount"], width: "20%", - render: (text) => ( - new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(text) - ) + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { title: "Status", dataIndex: "isActive", key: "isActive", render: (text, record) => ( - - {record?.isActive === true ? " ACTIVE" : "INACTIVE"} - + + {record?.isActive === true ? " ACTIVE" : "INACTIVE"} + ), }, { @@ -167,7 +186,7 @@ export const Membership = observer(() => { setIsVisibleTopUpModal(true); }} > - Top Up Saldo + Top Up Saldo - {/* */} + > + Detail + ), }, @@ -218,7 +238,7 @@ export const Membership = observer(() => { }, { route: "/app/membership", - name: Membership, + name: Membership, }, ]; @@ -264,42 +284,42 @@ export const Membership = observer(() => { } }; - const handleDelete = (record) => { - Modal.confirm({ - title: "Are you sure delete this record?", - icon: , - okText: "Yes", - okType: "primary", - cancelText: "Cancel", - async onOk() { - try { - //TODO: minta apinya ke ka ilham ya, jangan di uncomment kalo pake api reconcile, nanti beneran ke apus datanya - await store.membership.delete(record); - message.success("Success Delete Data"); - await getData(); - } catch (e) { - message.error("Failed Delete Data"); - } - }, - onCancel() { - console.log("Cancel"); - }, - }); + const handleDetail = (record) => { + // Modal.confirm({ + // title: "Are you sure delete this record?", + // icon: , + // okText: "Yes", + // okType: "primary", + // cancelText: "Cancel", + // async onOk() { + // try { + // //TODO: minta apinya ke ka ilham ya, jangan di uncomment kalo pake api reconcile, nanti beneran ke apus datanya + // await store.membership.delete(record); + // message.success("Success Delete Data"); + // await getData(); + // } catch (e) { + // message.error("Failed Delete Data"); + // } + // }, + // onCancel() { + // console.log("Cancel"); + // }, + // }); }; return (
- +
- +
{/* */} - + { setVisibleModal(true); }} > - New + New @@ -358,10 +378,10 @@ export const Membership = observer(() => { pageSize: store.membership.pageSize, total: store.membership.total_data, current: store.membership.page, - style: {marginBottom: "1rem", marginRight: "1rem"}, + style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.membership.data} - style={{padding: 0}} + style={{ padding: 0 }} renderItem={(item) => { return (
@@ -383,12 +403,12 @@ export const Membership = observer(() => { description={

- Username : {item.username}
+ Username : {item.username}

} /> -
+

{

- +
); }} @@ -433,7 +453,7 @@ export const Membership = observer(() => { + diff --git a/src/pages/Product/DetailProduct.js b/src/pages/Product/DetailProduct.js new file mode 100644 index 0000000..40640e4 --- /dev/null +++ b/src/pages/Product/DetailProduct.js @@ -0,0 +1,148 @@ +import React, {useContext, useEffect} from "react"; +import {Button, Card, Col, Row, Table, Typography} from "antd"; +import {BreadcumbComponent} from "../../component/BreadcumbComponent"; +import {LINKS} from "../../routes/app"; +import {useStore} from "../../utils/useStore"; +import {observer} from "mobx-react-lite"; +import {FilterOutlined} from "@ant-design/icons"; +import {format, parseISO} from "date-fns"; +import {ModalLoaderContext} from "../../utils/modal"; + +const {Title, Text} = Typography; + +export const DetailProduct = observer(() => { + const store = useStore(); + const modalLoader = useContext(ModalLoaderContext); + + const routeData = [ + { + route: LINKS.HOME, + name: "Home", + }, + { + route: LINKS.DETAILPRODUCT, + name: Detail Product, + }, + ]; + + useEffect(() => { + (async () => { + modalLoader.setLoading(true); + await Promise.allSettled([ + store.authentication.getProfile(), + store.transaction.getDataHistoryTransaction(), + ]); + modalLoader.setLoading(false); + })() + }, []); + + const columns = [ + { + title: 'Markup Price', + dataIndex: 'mark_up_price', + key: 'mark_up_price', + width: '20%', + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: '50%', + }, + { + title: 'Transaction Date', + dataIndex: 'created_at', + key: 'created_at', + render: (text, record) => { + return ( + {format(parseISO(record.created_at), 'dd MMMM yyyy HH:mm')} + ) + }, + }, + ] + + const styleSaldoTitle = store.ui.mediaQuery.isDesktop ? { + display: "flex", + justifyContent: "center" + } : {fontSize: "0.75rem"}; + const styleSaldoContent = store.ui.mediaQuery.isDesktop ? { + fontSize: '1.25rem', + display: "flex", + justifyContent: "center" + } : null; + + return ( +
+ + + Detail Product + +
+ + + Kode + + + {store.authentication.profileData?.userDetail?.name} + + + Produk + + + {store.authentication.profileData?.userDetail?.phone_number} + + + Harga Beli + + + {store.authentication.profileData?.username} + + + Harga Jual + + + {store.authentication.profileData.roles?.name} + + + Status + + + {store.authentication.profileData.superior?.username} + + + + + + + Saldo + + + {store.authentication.profileData?.wallet} + + + + + + +
+ History User Transaction + + +
+ + + +
+ +
+ ) +}); diff --git a/src/routes/app.js b/src/routes/app.js index 1667fd2..04bc5ab 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -2,7 +2,9 @@ import {Redirect, Route, Switch} from "react-router-dom"; import {Home} from "../pages/Home/Home"; import {About} from "../pages/About/About"; import {Membership} from "../pages/Membership/Membership"; +import {DetailUser} from "../pages/Membership/DetailUser"; import {Product} from "../pages/Product/Product"; +import {DetailProduct} from "../pages/Product/DetailProduct"; import {Transaction} from "../pages/Transaction/Transaction"; import {Profile} from "../pages/Profile/Profile"; import {Commission} from "../pages/Config/Commission"; @@ -27,7 +29,8 @@ export const LINKS = { PAYBACK: "/app/payback", PAYBACKFROMUSER: "/app/payback-from-user", SUBCATEGORY: "/app/subcategory", - + DETAILUSER: "/app/detail-user", + DETAILPRODUCT: "/app/detail-product", }; export const AppRoute = () => { @@ -35,6 +38,12 @@ export const AppRoute = () => { + + + + + +