diff --git a/src/component/CategoryComponent.js b/src/component/CategoryComponent.js index 753342e..ffeda10 100644 --- a/src/component/CategoryComponent.js +++ b/src/component/CategoryComponent.js @@ -34,32 +34,6 @@ export const CategoryComponent = observer((props) => { dataIndex: "name", key: "name", }, - // { - // title: "Gangguan", - // dataIndex: "status", - // key: "status", - // render: (text, record) => ( - // - // {capitalize(record?.status)} - // - // ), - // }, - // { - // title: "Tersedia", - // dataIndex: "tersedia", - // key: "tersedia", - // render: (text, record) => ( - // - // {record?.status === "ACTIVE" ? " Ya" : "Tidak"} - // - // ), - // }, { title: "Action", key: "action", @@ -95,10 +69,12 @@ export const CategoryComponent = observer((props) => { if (idData !== "") { modalLoader.setLoading(true); try { - await store.category.update(idData, data); - message.success("Success Update Data Category"); + const response =await store.category.update(idData, data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Kategori") + : message.error("Gagal Ubah Kategori"); } catch (e) { - message.error("Failed Update Data Category"); + message.error("Gagal Ubah Data Kategori"); } modalLoader.setLoading(false); store.category.visibleModalCategory = false; @@ -107,11 +83,13 @@ export const CategoryComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.category.create(data); - message.success("Success Add New Category"); + const response=await store.category.create(data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Kategori") + : message.error("Gagal Tambah Kategori"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Category"); + message.error("Gagal Tambah Kategori"); } modalLoader.setLoading(false); store.category.visibleModalCategory = false; diff --git a/src/component/CommissionComponent.js b/src/component/CommissionComponent.js index f6bbdfc..97c7e69 100644 --- a/src/component/CommissionComponent.js +++ b/src/component/CommissionComponent.js @@ -52,10 +52,12 @@ export const CommissionComponent = observer((props) => { const handleSubmit = async (data) => { modalLoader.setLoading(true); try { - await store.commission.update(idData, data); - message.success("Success Update Data Member"); + const response=await store.commission.update(idData, data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Komisi") + : message.error("Gagal Ubah Komisi"); } catch (e) { - message.error("Failed Update Data Member"); + message.error("Gagal Ubah Komisi"); } modalLoader.setLoading(false); store.commission.visibleModalCommission = false; diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index cc2e6b6..7ed747c 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -1,11 +1,22 @@ -import React, {useContext, useState} from "react"; -import {Button, Divider, Form, Input, List, message, Modal, Space, Table, Tag,} from "antd"; -import {observer} from "mobx-react-lite"; -import {ExclamationCircleOutlined} from "@ant-design/icons"; -import {useHistory} from "react-router-dom"; -import {useStore} from "../utils/useStore"; -import {LINKS} from "../routes/app"; -import {ModalLoaderContext} from "../utils/modal"; +import React, { useContext, useState } from "react"; +import { + Button, + Divider, + Form, + Input, + List, + message, + Modal, + Space, + Table, + Tag, +} from "antd"; +import { observer } from "mobx-react-lite"; +import { ExclamationCircleOutlined } from "@ant-design/icons"; +import { useHistory } from "react-router-dom"; +import { useStore } from "../utils/useStore"; +import { LINKS } from "../routes/app"; +import { ModalLoaderContext } from "../utils/modal"; export const PartnerComponent = observer((props) => { const store = useStore(); @@ -151,6 +162,7 @@ export const PartnerComponent = observer((props) => { ? "Failed Change Partner Password" : "Success Update Data Partner" ); + //await store.partner.getData() } catch (e) { modalLoader.setLoading(true); @@ -166,12 +178,14 @@ export const PartnerComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.partner.create(data); - message.success("Success Add New Partner"); + const response = await store.partner.create(data); modalLoader.setLoading(false); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Partner") + : message.error("Gagal Tambah Partner"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Partner"); + message.error("Gagal Tambah Partner"); } modalLoader.setLoading(false); store.partner.visibleModalPartner = false; @@ -219,7 +233,7 @@ export const PartnerComponent = observer((props) => { pageSize: store.partner.pageSize, total: store.partner.total_data, current: store.partner.page + 1, - style: {marginBottom: "1rem", marginRight: "1rem"}, + style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.partner.data} style={{ padding: 0 }} diff --git a/src/component/ProductComponent.js b/src/component/ProductComponent.js index 990b7d8..293fffa 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -79,19 +79,17 @@ export const ProductComponent = observer((props) => { currency: "IDR", }).format(text), }, - // { - // title: "Gangguan", - // dataIndex: "status", - // key: "status", - // render: (text, record) => ( - // - // {capitalize(record?.status)} - // - // ), - // }, + { + title: "Supplier", + dataIndex: "supplier_name", + key: "supplier_name", + + }, + { + title: "Sub Category", + dataIndex: "sub_categories_name", + key: "sub_categories_name", + }, { title: "Tersedia", dataIndex: "tersedia", @@ -110,17 +108,17 @@ export const ProductComponent = observer((props) => { key: "action", render: (text, record) => ( + onClick={async () => { + history.push(LINKS.PRODUCT_DETAIL.replace(":id", record.product_id)); + }} + > + Detail + ), }, ]; - + if (store.authentication.userData.role !== "Admin") columns.pop(); + if (store.authentication.userData.role !== "Admin") delete columns[4]; const deleteData = async (id) => { try { console.log(id); @@ -159,10 +157,12 @@ export const ProductComponent = observer((props) => { if (idData !== "") { modalLoader.setLoading(true); try { - await store.product.update(idData, data); - message.success("Success Update Data Member"); + const response=await store.product.update(idData, data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Data Produk") + : message.error("Gagal Ubah Data Produk"); } catch (e) { - message.error("Failed Update Data Member"); + message.error("Gagal Ubah Data Produk"); } modalLoader.setLoading(false); store.product.visibleModalProduct = false; @@ -171,11 +171,13 @@ export const ProductComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.product.create(data); - message.success("Success Add New Member"); + const response=await store.product.create(data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Produk") + : message.error("Gagal Tambah Produk"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Member"); + message.error("Gagal Tambah Produk"); } modalLoader.setLoading(false); store.product.visibleModalProduct = false; @@ -289,7 +291,7 @@ export const ProductComponent = observer((props) => { pageSize: store.product.pageSize, total: store.product.total_data, current: store.product.page + 1, - style: {marginBottom: "1rem", marginRight: "1rem"}, + style: { marginBottom: "1rem", marginRight: "1rem" }, }} dataSource={store.product.data} style={{ padding: 0 }} diff --git a/src/component/SubcategoryComponent.js b/src/component/SubcategoryComponent.js index db1a7e5..cec4f97 100644 --- a/src/component/SubcategoryComponent.js +++ b/src/component/SubcategoryComponent.js @@ -67,11 +67,13 @@ export const SubcategoryComponent = observer((props) => { if (idData !== "") { modalLoader.setLoading(true); try { - await store.subcategory.update(idData, data); + const response=await store.subcategory.update(idData, data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Data Sub Kategori") + : message.error("Gagal Ubah Data Sub Kategori"); //await getData(); - message.success("Success Update Data Category"); } catch (e) { - message.error("Failed Update Data Category"); + message.error("Gagal Ubah Data Sub Kategori"); } modalLoader.setLoading(false); store.subcategory.visibleModalSubcategory = false; @@ -80,11 +82,13 @@ export const SubcategoryComponent = observer((props) => { } else { modalLoader.setLoading(true); try { - await store.subcategory.create(data); - message.success("Success Add New Category"); + const response =await store.subcategory.create(data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Sub Kategori") + : message.error("Gagal Tambah Sub Kategori"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Category"); + message.error("Gagal Tambah Sub Kategori"); } modalLoader.setLoading(false); store.subcategory.visibleModalSubcategory = false; diff --git a/src/component/SupplierComponent.js b/src/component/SupplierComponent.js index 7efd50e..331f028 100644 --- a/src/component/SupplierComponent.js +++ b/src/component/SupplierComponent.js @@ -160,11 +160,13 @@ export const SupplierComponent = observer((props) => { if (idData !== "") { try { modalLoader.setLoading(true); - await store.supplier.update(idData, data); - message.success("Success Update Data Member"); + const response=await store.supplier.update(idData, data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Ubah Data Supplier") + : message.error("Gagal Ubah Data Supplier"); } catch (e) { modalLoader.setLoading(false); - message.error("Failed Update Data Member"); + message.error("Gagal Ubah Data Supplie"); } modalLoader.setLoading(false); @@ -174,11 +176,13 @@ export const SupplierComponent = observer((props) => { } else { try { modalLoader.setLoading(true); - await store.supplier.create(data); - message.success("Success Add New Member"); + const response=await store.supplier.create(data); + response?.body?.statusCode === 201 || response?.body?.statusCode === 200 + ? message.success("Berhasil Tambah Supplier Baru") + : message.error("Gagal Tambah Supplier Baru"); } catch (e) { console.log(e, "apa errornya"); - message.error("Failed Add Member"); + message.error("Gagal Tambah Supplier Baru"); } modalLoader.setLoading(false); diff --git a/src/pages/App/DesktopLayout.js b/src/pages/App/DesktopLayout.js index 8e1edd0..23c2b32 100644 --- a/src/pages/App/DesktopLayout.js +++ b/src/pages/App/DesktopLayout.js @@ -120,15 +120,15 @@ export const DesktopLayout = observer(() => { - - Home + + Beranda {store.authentication.userData.role !== "Retail" && ( - - Membership + + Keanggotaan )} @@ -141,14 +141,14 @@ export const DesktopLayout = observer(() => { > - - Partner + + Rekanan - - Commision + + Komisi @@ -167,23 +167,23 @@ export const DesktopLayout = observer(() => { > - - Product + + Produk {store.authentication.userData.role === "Admin" && ( - - Category + + Kategori )} {store.authentication.userData.role === "Admin" && ( - - Sub Category + + Sub Kategori )} @@ -192,29 +192,29 @@ export const DesktopLayout = observer(() => { {store.authentication.userData.role !== "Admin" && ( - - Product + + Produk )} {store.authentication.userData.role === "Retail" && ( - - Transaction + + Transaksi )} } - title="Created" + title="Pembayaran" > {store.authentication.userData.role !== "Retail" && ( - Confirmation + Konfirmasi )} @@ -222,7 +222,7 @@ export const DesktopLayout = observer(() => { - Created + Dibuat oleh Saya )} @@ -230,8 +230,8 @@ export const DesktopLayout = observer(() => { {store.authentication.userData.role !== "Admin" && ( - - Profile + + Profil )} diff --git a/src/pages/App/MenuList.js b/src/pages/App/MenuList.js index 6bd6c96..db26d51 100644 --- a/src/pages/App/MenuList.js +++ b/src/pages/App/MenuList.js @@ -2,7 +2,6 @@ import React, {useEffect, useState} from "react"; import {Menu} from "antd"; import {Link} from "react-router-dom"; import { - AlipayOutlined, AppstoreOutlined, DatabaseOutlined, FileAddOutlined, @@ -11,7 +10,6 @@ import { HomeOutlined, MenuUnfoldOutlined, MoneyCollectOutlined, - PayCircleOutlined, ProfileOutlined, ProjectOutlined, ShoppingCartOutlined, @@ -52,14 +50,14 @@ export const MenuList = observer((props) => { - Home + Beranda {store.authentication.userData.role !== "Retail" && ( - Membership + Keanggotaan )} @@ -68,13 +66,13 @@ export const MenuList = observer((props) => { - Partner + Rekanan - Commission + Komisi @@ -90,14 +88,14 @@ export const MenuList = observer((props) => { - Product + Produk {store.authentication.userData.role === "Admin" && ( - Category + Kategori )} @@ -105,7 +103,7 @@ export const MenuList = observer((props) => { - Sub Category + Sub Kategori )} @@ -115,7 +113,7 @@ export const MenuList = observer((props) => { - Product + Produk )} @@ -123,24 +121,24 @@ export const MenuList = observer((props) => { - Transaction + Transaksi )} - } title="Payback"> + } title="Pembayaran"> {store.authentication.userData.role !== "Retail" && ( - - Confirmation + + Konfirmasi )} {store.authentication.userData.role !== "Admin" && ( - - Created + + Dibuat oleh Saya )} @@ -148,17 +146,11 @@ export const MenuList = observer((props) => { {store.authentication.userData.role !== "Admin" && ( - - Profile + + Profil )} - {/**/} - {/* */} - {/* */} - {/* About*/} - {/* */} - {/**/} ); diff --git a/src/pages/Config/Partner.js b/src/pages/Config/Partner.js index e1e8b41..c43e6b6 100644 --- a/src/pages/Config/Partner.js +++ b/src/pages/Config/Partner.js @@ -40,7 +40,7 @@ export const Partner = observer(() => { }, { route: LINKS.PARTNER, - name: Partner, + name: Rekanan, }, ]; @@ -49,21 +49,21 @@ export const Partner = observer(() => { - - {/* */} - - - + */} + + {/* + /> */} diff --git a/src/pages/Config/Supplier.js b/src/pages/Config/Supplier.js index fc088b5..e009362 100644 --- a/src/pages/Config/Supplier.js +++ b/src/pages/Config/Supplier.js @@ -71,7 +71,7 @@ export const Supplier = observer(() => { */} - { marginBottom: store.ui.mediaQuery.isMobile ? 10 : 0, }} onSearch={(value) => console.log(value)} - /> + /> */} + } + {store.authentication.userData.role === "Admin" && + + } + {store.authentication.userData.role === "Admin" && + + } +
- History Top Up - - + + History Top Up + -
+
+ { + onSubmit(data); + }} + onCancel={() => { + setInitialData({}); + setVisibleModal(false); + }} + />
- ) + ); }); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 526f41e..fb81a4b 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -1,32 +1,28 @@ -import React, {useContext, useEffect, useState} from "react"; +import React, { useContext, useEffect, useState } from "react"; import { - Button, - Card, - Col, - Divider, - Form, - Input, - InputNumber, - List, - message, - Modal, - Row, - Select, - Space, - Table, - Tag, + Button, + Card, + Col, + Divider, + Form, + InputNumber, + List, + message, + Modal, + Row, + Space, + Table, + Tag, } from "antd"; -import {useStore} from "../../utils/useStore"; -import {observer} from "mobx-react-lite"; -import {DownloadOutlined, PlusSquareOutlined} from "@ant-design/icons"; -import {MembershipModal} from "./MembershipModal"; -import {BreadcumbComponent} from "../../component/BreadcumbComponent"; -import {LINKS} from "../../routes/app"; -import {useHistory} from "react-router-dom"; -import {ModalLoaderContext} from "../../utils/modal"; +import { useStore } from "../../utils/useStore"; +import { observer } from "mobx-react-lite"; +import { DownloadOutlined, PlusSquareOutlined } from "@ant-design/icons"; +import { MembershipModal } from "./MembershipModal"; +import { BreadcumbComponent } from "../../component/BreadcumbComponent"; +import { LINKS } from "../../routes/app"; +import { useHistory } from "react-router-dom"; +import { ModalLoaderContext } from "../../utils/modal"; -const {Search} = Input; -const {Option} = Select; export const Membership = observer(() => { const history = useHistory(); const [form] = Form.useForm(); @@ -71,14 +67,14 @@ export const Membership = observer(() => { const status = isActive ? "inactive" : "active"; const status2 = isActive ? "Inactivating" : "Activating"; try { - modalLoader.setLoading(true); - const response = await store.membership.changeStatus(id, status); - modalLoader.setLoading(false); + modalLoader.setLoading(true); + const response = await store.membership.changeStatus(id, status); + modalLoader.setLoading(false); - response?.body?.statusCode === 201 - ? message.success(`Success ${status2} Membership`) - : message.error(`Failed ${status2} Membership`); - await getData(); + response?.body?.statusCode === 201 + ? message.success(`Success ${status2} Membership`) + : message.error(`Failed ${status2} Membership`); + await getData(); } catch (err) { modalLoader.setLoading(false); message.error(`Failed ${status2} Membership`); @@ -93,26 +89,26 @@ export const Membership = observer(() => { const handleSubmitTransaction = async (data) => { modalLoader.setLoading(true); try { - data.destination = destination; - if (data.amount) { - data = { - ...data, - amount: Number(data.amount), - }; - } + data.destination = destination; + if (data.amount) { + data = { + ...data, + amount: Number(data.amount), + }; + } - let response = null; + let response = null; - (await store.authentication.userData.role) === "Admin" - ? (response = await store.transaction.distributeAdmin(data)) - : (response = await store.transaction.distribute(data)); + (await store.authentication.userData.role) === "Admin" + ? (response = await store.transaction.distributeAdmin(data)) + : (response = await store.transaction.distribute(data)); - response?.body?.statusCode === 201 - ? message.success("Success Top Up") - : message.error("Failed Top Up"); + response?.body?.statusCode === 201 + ? message.success("Success Top Up") + : message.error("Failed Top Up"); - modalLoader.setLoading(false); - await getData(); + modalLoader.setLoading(false); + await getData(); } catch (e) { console.log(e, "apa errornya"); modalLoader.setLoading(false); @@ -142,79 +138,30 @@ export const Membership = observer(() => { key: ["coa", "amount"], width: "20%", 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"} - - ), + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { title: "Action", key: "action", render: (text, record) => ( - - {store.authentication.userData.role === "Admin" && } - - {store.authentication.userData.role === "Admin" && } - {store.authentication.userData.role === "Admin" && } + + */}
- + /> */} +

} @@ -394,7 +366,7 @@ export const Membership = observer(() => { margin: 0, }} > - + */}

diff --git a/src/pages/Membership/MembershipModal.js b/src/pages/Membership/MembershipModal.js index 4a21904..169850f 100644 --- a/src/pages/Membership/MembershipModal.js +++ b/src/pages/Membership/MembershipModal.js @@ -12,100 +12,96 @@ export const MembershipModal = ({ const {Option} = Select; const store = useStore(); - return ( - { - form.resetFields(); - onCancel(); - }} - onOk={() => { - form - .validateFields() - .then((values) => { - let input = values; - if (initialData.id) - input.username = initialData.username; - - onCreate(input); - form.resetFields(); - }) - .catch((info) => { - console.log("Validate Failed:", info); - }); - }} - > -
- {((initialData.id && !initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - {!initialData.id && ( - - - - )} - {((initialData.id && initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - {((initialData.id && !initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - {((initialData.id && !initialData.isChangePassword) || - !initialData.id) && ( - - - - )} - -
- ); + return ( + { + form.resetFields(); + onCancel(); + }} + onOk={() => { + form + .validateFields() + .then((values) => { + onCreate(values); + form.resetFields(); + }) + .catch((info) => { + console.log("Validate Failed:", info); + }); + }} + > +
+ {((initialData.id && !initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + {!initialData.id && ( + + + + )} + {((initialData.id && initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + {((initialData.id && !initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + {((initialData.id && !initialData.isChangePassword) || + !initialData.id) && ( + + + + )} + +
+ ); }; diff --git a/src/pages/Payback/Payback.js b/src/pages/Payback/Payback.js index bbb5291..80c0c48 100644 --- a/src/pages/Payback/Payback.js +++ b/src/pages/Payback/Payback.js @@ -1,271 +1,295 @@ -import React, {useContext, useEffect} from "react"; -import {Button, Card, Col, Divider, Image, Input, List, message, Modal, Row, Space, Table, Tag,} from "antd"; -import {useStore} from "../../utils/useStore"; -import {observer} from "mobx-react-lite"; -import {CheckCircleOutlined, CheckOutlined, CloseOutlined, FilterOutlined, StopOutlined,} from "@ant-design/icons"; -import {BreadcumbComponent} from "../../component/BreadcumbComponent"; -import {LINKS} from "../../routes/app"; -import {ModalLoaderContext} from "../../utils/modal"; -import {appConfig} from "../../config/app"; -import {capitalize} from "lodash"; -import {PAYBACK_STATUS} from "../../constants/payback"; +import React, { useContext, useEffect } from "react"; +import { + Button, + Card, + Col, + Divider, + Image, + Input, + List, + message, + Modal, + Row, + Space, + Table, + Tag, +} from "antd"; +import { useStore } from "../../utils/useStore"; +import { observer } from "mobx-react-lite"; +import { + CheckCircleOutlined, + CheckOutlined, + CloseOutlined, + FilterOutlined, + StopOutlined, +} from "@ant-design/icons"; +import { BreadcumbComponent } from "../../component/BreadcumbComponent"; +import { LINKS } from "../../routes/app"; +import { ModalLoaderContext } from "../../utils/modal"; +import { appConfig } from "../../config/app"; +import { capitalize } from "lodash"; +import { PAYBACK_STATUS } from "../../constants/payback"; -const {Search} = Input; +const { Search } = Input; export const Payback = observer(() => { - const store = useStore(); - const modalLoader = useContext(ModalLoaderContext); + const store = useStore(); + const modalLoader = useContext(ModalLoaderContext); - useEffect(() => { - const init = async () => { - try { - modalLoader.setLoading(true); - await store.payback.getDataConfirmation(); - modalLoader.setLoading(false); - } catch (e) { - modalLoader.setLoading(false); - if (e.response?.body?.message) { - message.error(e.response.body.message); - return; - } - message.error(e.message); + useEffect(() => { + const init = async () => { + try { + modalLoader.setLoading(true); + await store.payback.getDataConfirmation(); + modalLoader.setLoading(false); + } catch (e) { + modalLoader.setLoading(false); + if (e.response?.body?.message) { + message.error(e.response.body.message); + return; + } + message.error(e.message); + } + }; + + init(); + }, []); + + const columns = [ + { + title: "Name", + dataIndex: "userData_name", + key: "userData_name", + }, + { + title: "Picture", + dataIndex: "image_prove", + key: "image_prove", + render: (text, record) => ( + + ), + }, + { + title: "Amount", + dataIndex: "amount", + key: "amount", + width: "20%", + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), + }, + { + title: "Action", + dataIndex: "amount", + key: "action", + width: "10%", + render: (text, record) => + PAYBACK_STATUS[record.status] === PAYBACK_STATUS[0] ? ( + + + + + ) : ( + ( - - ), - }, - { - title: "Amount", - dataIndex: "amount", - key: "amount", - width: '20%', - render: (text) => - new Intl.NumberFormat("id-ID", { - style: "currency", - currency: "IDR", - }).format(text), - }, - { - title: "Action", - dataIndex: "amount", - key: "action", - width: '10%', - render: (text, record) => ( - PAYBACK_STATUS[record.status] === PAYBACK_STATUS[0] ? - - - - : - - {PAYBACK_STATUS[record.status]} - - ), - }, + style={{ color: "#4F566B" }} + > + {PAYBACK_STATUS[record.status]} + + ), + }, ]; if (store.authentication.userData.role === "Retail") columns.pop(); const routeData = [ - { - route: LINKS.HOME, - name: "Home", - }, - { - route: LINKS.PAYBACK, - name: Payback Confirmation, - }, + { + route: LINKS.HOME, + name: "Home", + }, + { + route: LINKS.PAYBACK, + name: Konfirmasi Pembayaran, + }, ]; - const handleAction = async (id, type) => { - modalLoader.setLoading(true); - try { - const response = await store.payback.confirmPayback(id, type); - if (response.body.status !== 201) { - message.error(`Failed ${capitalize(type)} Payback`); - } else { - message.success(`Success ${capitalize(type)} Payback`); - } - } catch (e) { - console.error(e, "apa errornya"); - message.error("Failed Handler Action Payback"); - } - modalLoader.setLoading(false); - }; + const handleAction = async (id, type) => { + modalLoader.setLoading(true); + try { + const response = await store.payback.confirmPayback(id, type); + if (response.body.status !== 201) { + message.error(`Failed ${capitalize(type)} Payback`); + } else { + message.success(`Success ${capitalize(type)} Payback`); + } + } catch (e) { + console.error(e, "apa errornya"); + message.error("Failed Handler Action Payback"); + } + modalLoader.setLoading(false); + }; - return ( -
- - -
- -
- - - - + + +
+ +
+ + + + {/* + /> */} {store.ui.mediaQuery.isDesktop && ( -
{ - let pageNumber = page.current; - store.payback.pageSizeConfirmation = page.pageSize; - store.payback.pageConfirmation = pageNumber - 1; - modalLoader.setLoading(true); - await store.payback.getDataConfirmation(); - modalLoader.setLoading(false); - }} - /> +
{ + let pageNumber = page.current; + store.payback.pageSizeConfirmation = page.pageSize; + store.payback.pageConfirmation = pageNumber - 1; + modalLoader.setLoading(true); + await store.payback.getDataConfirmation(); + modalLoader.setLoading(false); + }} + /> )} {store.ui.mediaQuery.isMobile && ( - { - store.payback.pageSizeConfirmation = page.pageSize; - store.payback.pageConfirmation = page.current - 1; - modalLoader.setLoading(true); - await store.payback.getDataConfirmation(); - modalLoader.setLoading(false); - }, - pageSize: store.payback.pageSizeConfirmation, - total: store.payback.totalDataConfirmation, - current: store.payback.pageConfirmation + 1, - style: {marginBottom: "1rem", marginRight: "1rem"}, - }} - dataSource={store.payback.dataConfirmation} - style={{padding: 0}} - renderItem={(item) => { - return ( -
- - - -
- } - /> -
-

- {item.amount} -

-
- - + { + store.payback.pageSizeConfirmation = page.pageSize; + store.payback.pageConfirmation = page.current - 1; + modalLoader.setLoading(true); + await store.payback.getDataConfirmation(); + modalLoader.setLoading(false); + }, + pageSize: store.payback.pageSizeConfirmation, + total: store.payback.totalDataConfirmation, + current: store.payback.pageConfirmation + 1, + style: { marginBottom: "1rem", marginRight: "1rem" }, + }} + dataSource={store.payback.dataConfirmation} + style={{ padding: 0 }} + renderItem={(item) => { + return ( +
+ + + +
+ } + /> +
+

+ {item.amount} +

+
+ + ); }} diff --git a/src/pages/Payback/PaybackCreated.js b/src/pages/Payback/PaybackCreated.js index 54005ef..8420b1a 100644 --- a/src/pages/Payback/PaybackCreated.js +++ b/src/pages/Payback/PaybackCreated.js @@ -84,7 +84,7 @@ export const PaybackCreated = observer(() => { }, { route: LINKS.PAYBACK_CREATED, - name: Payback Created, + name: Buat Pembayaran, }, ]; @@ -101,14 +101,14 @@ export const PaybackCreated = observer(() => {
- + /> */} {store.authentication.userData.role !== "Admin" && ( + {/* - - - */} + + {/* + /> */} - - - -
- - {store.authentication.userData.role === "Admin" && ( -
- +
+ + +
+ +
+ + +
+ {/* */} + + {store.authentication.userData.role == "Admin" &&
+ +
} +
+ + + + + + + { + form.resetFields(); + handleCancel(); + }} + onOk={() => { + form + .validateFields() + .then((values) => { + console.log(values, "isi form"); + handleSubmit(values); + form.resetFields(); + }) + .catch((info) => { + console.error("Validate Failed:", info); + }); + }} + > +
+ + beforeUpload(file)} + customRequest={(args) => uploadHandler(args)} + onRemove={(file) => { + setLoading(false); + setFileList([]); + setExcel(""); + }} + > +
+ - -
- )} - - - - - - +
+
+ + + + +
+ ); }); diff --git a/src/pages/Product/ProductDetail.js b/src/pages/Product/ProductDetail.js index 79887af..a62d047 100644 --- a/src/pages/Product/ProductDetail.js +++ b/src/pages/Product/ProductDetail.js @@ -1,17 +1,18 @@ import React, {useContext, useEffect} from "react"; -import {Button, Card, Col, Row, Table, Typography} from "antd"; +import {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"; +import {useParams} from "react-router-dom"; const {Title, Text} = Typography; export const ProductDetail = observer(() => { const store = useStore(); + const {id} = useParams(); const modalLoader = useContext(ModalLoaderContext); const routeData = [ @@ -21,11 +22,11 @@ export const ProductDetail = observer(() => { }, { route: LINKS.PRODUCT, - name: Product, + name: Produk, }, { route: LINKS.PRODUCT_DETAIL, - name: Product Detail, + name: Detail Produk, }, ]; @@ -33,89 +34,105 @@ export const ProductDetail = observer(() => { (async () => { modalLoader.setLoading(true); await Promise.allSettled([ - store.authentication.getProfile(), - store.transaction.getDataHistoryTransaction(), + store.product.getPriceHistoryByProduct(id), + store.product.getDetailProduct(id), ]); modalLoader.setLoading(false); - })() + })(); }, []); const columns = [ { - title: 'Markup Price', - dataIndex: 'mark_up_price', - key: 'mark_up_price', - width: '20%', + title: "Markup Price", + dataIndex: "mark_up_price", + key: "mark_up_price", + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { - title: 'Name', - dataIndex: 'name', - key: 'name', - width: '50%', + title: "Price", + dataIndex: "price", + key: "price", + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { - title: 'Transaction Date', - dataIndex: 'created_at', - key: 'created_at', - render: (text, record) => { + title: "Tanggal Berlaku", + dataIndex: "startDate", + key: "startDate", + render: (text) => { return ( - {format(parseISO(record.created_at), 'dd MMMM yyyy HH:mm')} - ) + {text ? format(parseISO(text), "dd MMMM yyyy") : "-"} + ); }, }, - ] + { + title: "Tanggal Berakhir", + dataIndex: "endDate", + key: "endDate", + render: (text) => { + return ( + {text ? format(parseISO(text), "dd MMMM yyyy") : "Sampai Sekarang"} + ); + }, + }, + ]; - 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; + 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 (
- + Product Detail - +
Kode- {store.authentication.profileData?.userDetail?.name} + {store.product?.dataDetailProduct?.code}- Produk + Nama Produk + + + {store.product?.dataDetailProduct?.name}- {store.authentication.profileData?.userDetail?.phone_number} + Supplier- Harga Beli - - - {store.authentication.profileData?.username} - - - Harga Jual - - - {store.authentication.profileData.roles?.name} + {store.product?.dataDetailProduct?.supplier?.name}Status- {store.authentication.profileData.superior?.username} + {store.product?.dataDetailProduct?.status} - + {/* Saldo @@ -124,29 +141,46 @@ export const ProductDetail = observer(() => { {store.authentication.profileData?.wallet} - + */}
- History User Transaction + + Product Price History + - + */}
{ + let pageNumber = page.current; + store.product.pageSizePriceHistory = page.pageSize; + store.product.pagePriceHistory = pageNumber - 1; + modalLoader.setLoading(true); + await store.product.getPriceHistoryByProduct(id); + modalLoader.setLoading(false); + }} /> -
+
- ) + ); }); diff --git a/src/pages/Product/Subcategory.js b/src/pages/Product/Subcategory.js index 0ffa767..08e26cb 100644 --- a/src/pages/Product/Subcategory.js +++ b/src/pages/Product/Subcategory.js @@ -45,7 +45,7 @@ export const Subcategory = observer(() => { }, { route: LINKS.SUBCATEGORY, - name: Sub Category, + name: Sub Kategori, }, ]; @@ -54,21 +54,21 @@ export const Subcategory = observer(() => { -
- {/* + */} - - - + */} + + {/* + /> */} - + Produk & Nominal - - + + {/* */} {store.transaction.data.length != 0 && ( - - {store.transaction.data.map((item, index) => ( - - { - Modal.confirm({ - title: `Are you sure buy ${item.product_name}?`, - icon: , - okText: "Confirm", - cancelText: "Cancel", - okType: "primary", - onOk() { - handleBuyProduct(item.product_code) - }, - onCancel() { - console.log("Cancel"); - }, - }); - }} - style={{cursor: "pointer"}} - > - {item.product_name} -
- + + {store.transaction.data.map((item, index) => ( +
+ { + Modal.confirm({ + title: `Are you sure buy ${item.product_name}?`, + icon: , + okText: "Confirm", + cancelText: "Cancel", + okType: "primary", + onOk() { + handleBuyProduct(item.product_code); + }, + onCancel() { + console.log("Cancel"); + }, + }); + }} + hoverable + style={{ + cursor: "pointer", + marginLeft: 10, + borderColor: "salmon", + height: 100, + marginBottom: 10, + }} + > + {item.product_name} +
+ {new Intl.NumberFormat("id-ID", { style: "currency", currency: "IDR", }).format(item?.price)} -
- - ))} - + + + ))} + )} - {store.transaction.data.length !== 0 && ( + {/* {store.transaction.data.length !== 0 && ( - )} + )} */} ); }); diff --git a/src/pages/Transaction/Transaction.js b/src/pages/Transaction/Transaction.js index 4d7a9cc..a71111e 100644 --- a/src/pages/Transaction/Transaction.js +++ b/src/pages/Transaction/Transaction.js @@ -50,7 +50,7 @@ export const Transaction = observer(() => { }, { route: LINKS.TRANSACTION, - name: Transaction, + name: Transaksi, }, ]; diff --git a/src/routes/app.js b/src/routes/app.js index 00ee1cf..8df28d0 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -29,8 +29,8 @@ export const LINKS = { PAYBACK: "/app/payback", PAYBACK_CREATED: "/app/payback-created", SUBCATEGORY: "/app/subcategory", - USER_DETAIL: "/app/user-detail", - PRODUCT_DETAIL: "/app/product-detail", + USER_DETAIL: "/app/user-detail/:id", + PRODUCT_DETAIL: "/app/product-detail/:id", }; export const AppRoute = () => { diff --git a/src/store/authentication.js b/src/store/authentication.js index 0edda9e..2d2ee4d 100644 --- a/src/store/authentication.js +++ b/src/store/authentication.js @@ -63,5 +63,6 @@ export class Authentication { TokenUtil.clearAccessToken(); TokenUtil.persistToken(); this.isLoggedIn = false; + window.location.reload(); } } diff --git a/src/store/membership.js b/src/store/membership.js index 7b2d44b..5fb1f9d 100644 --- a/src/store/membership.js +++ b/src/store/membership.js @@ -5,7 +5,9 @@ export class Membership { page = 0; pageSize = 10 data = []; - total_data = 0 + totalData = 0; + + dataDetail = {}; constructor(ctx) { this.ctx = ctx; @@ -18,12 +20,23 @@ export class Membership { this.data = response.body.data.map((item, idx) => { item.key = idx; item.name = item?.user_detail?.name; - item.phone_number = item?.user_detail?.phone_number;item.roleId = item?.roles.id; + item.phone_number = item?.user_detail?.phone_number; + item.roleId = item?.roles.id; item.roleName = item?.roles.name; return item }) ?? [] - this.total_data = response?.body?.count ?? 0 + this.totalData = response?.body?.count ?? 0 + } catch (e) { + console.error(e); + } + } + + async getDetail(id) { + try { + const response = await http.get(`/users/`+id); + console.log(response,'Data Detail') + this.dataDetail = response.body.data } catch (e) { console.error(e); } @@ -35,12 +48,13 @@ export class Membership { this.data = response.body.data.map((item, idx) => { item.key = idx; item.name = item?.user_detail?.name; - item.phone_number = item?.user_detail?.phone_number;item.roleId = item?.roles.id; + item.phone_number = item?.user_detail?.phone_number; + item.roleId = item?.roles.id; item.roleName = item?.roles?.name; return item }) ?? [] - this.total_data = response?.body?.count ?? 0 + this.totalData = response?.body?.count ?? 0 } catch (e) { console.error(e); } @@ -64,6 +78,15 @@ export class Membership { } } + async changePassword(id, data) { + try { + const response = await http.put('/users/change-password/' + id).send(data); + return response; + } catch (e) { + console.error(e); + } + } + async delete(id) { try { const response = await http.del('/users/' + id); diff --git a/src/store/payback.js b/src/store/payback.js index d0a5c83..279d56f 100644 --- a/src/store/payback.js +++ b/src/store/payback.js @@ -93,4 +93,13 @@ export class Payback { console.error(e); } } + + async uploadImages(data) { + try { + const response = await http.upload(data); + return response; + } catch (e) { + console.error(e); + } + } } diff --git a/src/store/product.js b/src/store/product.js index 5881c38..36a8295 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -13,7 +13,7 @@ export class Product { uploadBtnProduct = false; pageCategories = 0; - pageSizeCategories = 10 + pageSizeCategories = 100; dataCategories = []; total_dataCategories = 0; @@ -23,6 +23,13 @@ export class Product { total_dataSubCategories = 0; filterCategory = null; + dataPriceHistory = []; + totalDataPriceHistory = 0; + pagePriceHistory = 0; + pageSizePriceHistory = 10 + + dataDetailProduct = {}; + constructor(ctx) { this.ctx = ctx; makeAutoObservable(this); @@ -31,7 +38,7 @@ export class Product { async getData() { try { const response = await http.get(`/product/all?supplier=${this.filterSupplier}&sub-category=${this.filterSubCategory}&page=${this.page}&pageSize=${this.pageSize}`); - //console.log(response) + console.log(response) this.data = response.body.data.map((item, idx) => { item.key = idx; return item @@ -68,6 +75,25 @@ export class Product { } } + async getPriceHistoryByProduct(id) { + try { + const response = await http.get(`/product/price-history/${id}?page=${this.pagePriceHistory}&pageSize${this.pageSizePriceHistory}`); + this.dataPriceHistory = response.body.data + this.totalDataPriceHistory = response?.body?.count ?? 0 + } catch (e) { + console.error(e); + } + } + + async getDetailProduct(id) { + try { + const response = await http.get(`/product/${id}`); + this.dataDetailProduct = response.body.data + } catch (e) { + console.error(e); + } + } + async create(data) { try { const response = await http.post('/product').send(data); @@ -107,6 +133,24 @@ export class Product { console.error(e); } } + + async uploadExcel(data) { + try { + const response = await http.upload(data); + return response; + } catch (e) { + console.error(e); + } + } + + async uploadProduct(data) { + try { + const response = await http.post('/product/upload-product').send(data); + return response; + } catch (e) { + console.error(e); + } + } } diff --git a/src/store/transaction.js b/src/store/transaction.js index 307f4bd..951c4d8 100644 --- a/src/store/transaction.js +++ b/src/store/transaction.js @@ -22,14 +22,15 @@ export class Transaction { filterSubCategory = null; pageHistoryTransaction = 0; - pageHistoryTopUp = 0; pageSizeHistoryTransaction = 10 dataHistoryTransaction = []; total_dataHistoryTransaction = 0; - dataHistoryTopUp=[]; + pageHistoryTopUp = 0; + pageSizeHistoryTopUp = 10; + dataHistoryTopUp = []; total_dataHistoryTopUp = 0; - + constructor(ctx) { this.ctx = ctx; makeAutoObservable(this); @@ -58,7 +59,6 @@ export class Transaction { async getDataCategories() { try { const response = await http.get(`/product/categories?page=${this.pageCategories}&pageSize=${this.pageSizeCategories}`); - this.dataCategories = response.body.data ?? [] this.total_dataCategories = response?.body?.count ?? 0 if (this.dataCategories.length > 0) { @@ -72,7 +72,6 @@ export class Transaction { async getDataHistoryTransaction() { try { const response = await http.get(`/transaction/history?page=${this.pageHistoryTransaction}&pageSize=${this.pageSizeHistoryTransaction}`); - this.dataHistoryTransaction = response.body.data ?? [] this.total_dataHistoryTransaction = response?.body?.count ?? 0 } catch (e) { @@ -82,9 +81,7 @@ export class Transaction { async getDataHistoryTopUp(id) { try { - console.log("Top up") - const response = await http.get(`/transaction/history-deposit?page=${this.pageHistoryTopUp}&user-destination=${id}`); - + const response = await http.get(`/transaction/history-deposit?page=${this.pageHistoryTopUp}&pageSize=${this.pageSizeHistoryTopUp}&user-destination=${id}`); this.dataHistoryTopUp = response.body.data ?? [] this.total_dataHistoryTopUp = response?.body?.count ?? 0 } catch (e) {