diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index 7a3afd0..cc2e6b6 100644 --- a/src/component/PartnerComponent.js +++ b/src/component/PartnerComponent.js @@ -1,23 +1,11 @@ -import React, { useContext, useEffect, useState } from "react"; -import { - Button, - Form, - Input, - message, - Modal, - Select, - Space, - Table, - Tag, - List, - Divider, -} 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(); @@ -223,15 +211,15 @@ export const PartnerComponent = observer((props) => { pagination={{ onChange: async (page) => { store.partner.pageSize = page.pageSize; - store.partner.page = page.current; + store.partner.page = page.current - 1; modalLoader.setLoading(true); await store.partner.getData(); modalLoader.setLoading(false); }, pageSize: store.partner.pageSize, total: store.partner.total_data, - current: store.partner.page, - style: { marginBottom: "1rem", marginRight: "1rem" }, + current: store.partner.page + 1, + 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 47aadb3..990b7d8 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -281,15 +281,15 @@ export const ProductComponent = observer((props) => { pagination={{ onChange: async (page) => { store.product.pageSize = page.pageSize; - store.product.page = page.current; + store.product.page = page.current - 1; modalLoader.setLoading(true); await store.product.getData(); modalLoader.setLoading(false); }, pageSize: store.product.pageSize, total: store.product.total_data, - current: store.product.page, - style: { marginBottom: "1rem", marginRight: "1rem" }, + current: store.product.page + 1, + 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 0b01a76..db1a7e5 100644 --- a/src/component/SubcategoryComponent.js +++ b/src/component/SubcategoryComponent.js @@ -125,15 +125,15 @@ export const SubcategoryComponent = observer((props) => { pagination={{ onChange: async (page) => { store.subcategory.pageSize = page.pageSize; - store.subcategory.page = page.current; + store.subcategory.page = page.current - 1; modalLoader.setLoading(true); await store.subcategory.getData(); modalLoader.setLoading(false); }, pageSize: store.subcategory.pageSize, total: store.subcategory.total_data, - current: store.subcategory.page, - style: { marginBottom: "1rem", marginRight: "1rem" }, + current: store.subcategory.page + 1, + style: {marginBottom: "1rem", marginRight: "1rem"}, }} dataSource={store.subcategory.data} style={{ padding: 0 }} diff --git a/src/component/SupplierComponent.js b/src/component/SupplierComponent.js index af6b6e4..7efd50e 100644 --- a/src/component/SupplierComponent.js +++ b/src/component/SupplierComponent.js @@ -1,23 +1,12 @@ -import React, { useContext, useState } from "react"; -import { - Button, - Form, - Input, - message, - Modal, - Space, - Table, - Tag, - List, - Divider, -} 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 { TopupsaldoModal } from "./TopupsaldoModal"; -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 {TopupsaldoModal} from "./TopupsaldoModal"; +import {ModalLoaderContext} from "../utils/modal"; export const SupplierComponent = observer((props) => { const store = useStore(); @@ -231,15 +220,15 @@ export const SupplierComponent = observer((props) => { pagination={{ onChange: async (page) => { store.supplier.pageSize = page.pageSize; - store.supplier.page = page.current; + store.supplier.page = page.current - 1; modalLoader.setLoading(true); await store.supplier.getData(); modalLoader.setLoading(false); }, pageSize: store.supplier.pageSize, total: store.supplier.total_data, - current: store.supplier.page, - style: { marginBottom: "1rem", marginRight: "1rem" }, + current: store.supplier.page + 1, + style: {marginBottom: "1rem", marginRight: "1rem"}, }} dataSource={store.supplier.data} style={{ padding: 0 }} diff --git a/src/pages/App/DesktopLayout.js b/src/pages/App/DesktopLayout.js index 0769e58..8e1edd0 100644 --- a/src/pages/App/DesktopLayout.js +++ b/src/pages/App/DesktopLayout.js @@ -206,24 +206,24 @@ export const DesktopLayout = observer(() => { )} } - title="Payback" + key="payback-main" + icon={} + title="Created" > {store.authentication.userData.role !== "Retail" && ( - - Payback To + + Confirmation )} {store.authentication.userData.role !== "Admin" && ( - - - Payback - + + + Created + )} diff --git a/src/pages/App/MenuList.js b/src/pages/App/MenuList.js index 5ece71d..6bd6c96 100644 --- a/src/pages/App/MenuList.js +++ b/src/pages/App/MenuList.js @@ -131,16 +131,16 @@ export const MenuList = observer((props) => { {store.authentication.userData.role !== "Retail" && ( - - Payback To + + Confirmation )} {store.authentication.userData.role !== "Admin" && ( - + - Payback + Created )} diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index b7fd1e5..28a278b 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -338,17 +338,17 @@ export const Membership = observer(() => { itemLayout="horizontal" position={"top"} pagination={{ - onChange: async (page) => { - store.membership.pageSize = page.pageSize; - store.membership.page = page.current; - modalLoader.setLoading(true); - await getData(); - modalLoader.setLoading(false); - }, - pageSize: store.membership.pageSize, - total: store.membership.total_data, - current: store.membership.page, - style: { marginBottom: "1rem", marginRight: "1rem" }, + onChange: async (page) => { + store.membership.pageSize = page.pageSize; + store.membership.page = page.current - 1; + modalLoader.setLoading(true); + await getData(); + modalLoader.setLoading(false); + }, + pageSize: store.membership.pageSize, + total: store.membership.total_data, + current: store.membership.page + 1, + style: {marginBottom: "1rem", marginRight: "1rem"}, }} dataSource={store.membership.data} style={{ padding: 0 }} diff --git a/src/pages/Payback/Payback.js b/src/pages/Payback/Payback.js index 3423829..2b77216 100644 --- a/src/pages/Payback/Payback.js +++ b/src/pages/Payback/Payback.js @@ -1,45 +1,45 @@ import React, {useContext, useEffect} from "react"; -import {Button, Card, Col, Divider, Image, Input, List, message, Row, Space, Table,} from "antd"; +import {Button, Card, Col, Divider, Image, Input, List, message, Modal, Row, Space, Table,} from "antd"; import {useStore} from "../../utils/useStore"; import {observer} from "mobx-react-lite"; -import {CheckCircleOutlined, CloseOutlined, FilterOutlined,} from "@ant-design/icons"; +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"; 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.getData(); - 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(); - }, []); + init(); + }, []); - - const columns = [ - { - title: "Picture", - dataIndex: "image_prove", - key: "image_prove", - render: (text, record) => ( + const columns = [ + { + title: "Picture", + dataIndex: "image_prove", + key: "image_prove", + render: (text, record) => ( { - - ), - }, + style={{ + backgroundColor: "#ff1c1c", + color: "#fff", + borderColor: "#ff1c1c", + }} + > + Reject + + + ), + }, ]; if (store.authentication.userData.role === "Retail") columns.pop(); const routeData = [ - { - route: LINKS.HOME, - name: "Home", - }, - { - route: LINKS.PAYBACK, - name: Payback, - }, + { + route: LINKS.HOME, + name: "Home", + }, + { + route: LINKS.PAYBACK, + name: Payback Confirmation, + }, ]; - const onSubmit = async (data) => { - modalLoader.setLoading(true); - try { - // await store.payback.create(data); - // message.success("Success Add New Member"); - // await store.payback.getData(); - } catch (e) { - console.error(e, "apa errornya"); - message.error("Failed Add Member"); - } - modalLoader.setLoading(false); - }; + const handleAction = async (id, type) => { + modalLoader.setLoading(true); + try { + const response = await store.payback.confirmPayback(id, {status: capitalize(type)}); + if (response.body.status !== 201) { + message.error(`Failed ${capitalize(type)} Payback`); + } + 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 (record, type) => { - }; - - return ( -
- - -
- - - - - - + + +
+ + + + + + - {/* {store.authentication.userData.role !== "Admin" && ( - - )} */} {store.ui.mediaQuery.isDesktop && ( @@ -163,23 +177,23 @@ export const Payback = observer(() => { key="1" hasEmpty columns={columns} - dataSource={store.payback.data} + dataSource={store.payback.dataConfirmation} bordered - // pagination={{ - // pageSize: store.payback.page, - // total: store.payback.total_data, - // current: store.payback.pageSize + 1, - // showSizeChanger: true, - // simple: false - // }} - // onChange={async (page) => { - // let pageNumber = page.current; - // store.payback.pageSize = page.pageSize; - // store.payback.page = pageNumber - 1; - // modalLoader.setLoading(true); - // await store.payback.getData(); - // modalLoader.setLoading(false); - // }} + pagination={{ + pageSize: store.payback.pageSizeConfirmation, + total: store.payback.totalDataConfirmation, + current: store.payback.pageSizeConfirmation + 1, + showSizeChanger: true, + simple: false + }} + onChange={async (page) => { + let pageNumber = page.current; + store.payback.pageSizeConfirmation = page.pageSize; + store.payback.pageConfirmation = pageNumber - 1; + modalLoader.setLoading(true); + await store.payback.getDataConfirmation(); + modalLoader.setLoading(false); + }} /> )} @@ -187,30 +201,30 @@ export const Payback = observer(() => { { - // store.payback.pageSize = page.pageSize; - // store.payback.page = page.current; - // modalLoader.setLoading(true); - // await store.payback.getData(); - // modalLoader.setLoading(false); - // }, - // pageSize: store.payback.pageSize, - // total: store.payback.total_data, - // current: store.payback.page, - // style: {marginBottom: "1rem", marginRight: "1rem"}, - // }} - dataSource={store.payback.data} + pagination={{ + onChange: async (page) => { + 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 ( -
- + { +export const PaybackCreated = observer(() => { const store = useStore(); const [initialData, setInitialData] = useState({}); const modalLoader = useContext(ModalLoaderContext); @@ -20,8 +21,8 @@ export const PaybackFromUser = observer(() => { try { modalLoader.setLoading(true); await Promise.allSettled([ - store.payback.getDataUser(), - store.authentication.getProfile() + store.payback.getDataCreated(), + store.authentication.getProfile(), ]); modalLoader.setLoading(false); } catch (e) { @@ -37,19 +38,17 @@ export const PaybackFromUser = observer(() => { init(); }, []); - const columns = [ { title: "Picture", dataIndex: "image_prove", key: "image_prove", render: (text, record) => ( - avatar + {record.id} ), }, { @@ -70,8 +69,8 @@ export const PaybackFromUser = observer(() => { name: "Home", }, { - route: LINKS.PAYBACK_FROM_USER, - name: Payback User, + route: LINKS.PAYBACK_CREATED, + name: Payback Created, }, ]; @@ -113,21 +112,21 @@ export const PaybackFromUser = observer(() => { key="1" hasEmpty columns={columns} - dataSource={store.payback.dataPaybackUser} + dataSource={store.payback.dataCreated} bordered pagination={{ - pageSize: store.payback.pageSizePaybackUser, - total: store.payback.total_dataPaybackUser, - current: store.payback.pageSizePaybackUser + 1, + pageSize: store.payback.pageSizeCreated, + total: store.payback.totalDataCreated, + current: store.payback.pageCreated + 1, showSizeChanger: true, simple: false }} onChange={async (page) => { let pageNumber = page.current; - store.payback.pageSizePaybackUser = page.pageSize; - store.payback.pageSizePaybackUser = pageNumber - 1; + store.payback.pageSizeCreated = page.pageSize; + store.payback.pageCreated = pageNumber - 1; modalLoader.setLoading(true); - //await store.payback.getDataUser(); + await store.payback.getDataCreated(); modalLoader.setLoading(false); }} /> @@ -139,18 +138,18 @@ export const PaybackFromUser = observer(() => { position={"top"} pagination={{ onChange: async (page) => { - store.payback.pageSizePaybackUser = page.pageSize; - store.payback.pageSizePaybackUser = page.current; + store.payback.pageSizeCreated = page.pageSize; + store.payback.pageCreated = page.current - 1; modalLoader.setLoading(true); - await store.payback.getDataUser(); + await store.payback.getDataCreated(); modalLoader.setLoading(false); }, - pageSize: store.payback.pageSizePaybackUser, - total: store.payback.total_dataPaybackUser, - current: store.payback.pageSizePaybackUser, + pageSize: store.payback.pageSizeCreated, + total: store.payback.totalDataCreated, + current: store.payback.pageCreated + 1, style: {marginBottom: "1rem", marginRight: "1rem"}, }} - dataSource={store.payback.dataPaybackUser} + dataSource={store.payback.dataCreated} style={{padding: 0}} renderItem={(item) => { return ( diff --git a/src/pages/Payback/PaybackModal.js b/src/pages/Payback/PaybackModal.js index 34683ec..39ae6b9 100644 --- a/src/pages/Payback/PaybackModal.js +++ b/src/pages/Payback/PaybackModal.js @@ -45,7 +45,6 @@ export const PaybackModal = ({initialData}) => { }; const handleChange = (info) => { - console.log(info, "apa isi onchange") if (info.file.status === 'uploading') { setLoading(true); } else { @@ -69,7 +68,7 @@ export const PaybackModal = ({initialData}) => { image_prove: responseFilename } await store.payback.create(request); - message.success("Success Add Payback"); + message.success("Success Add Created"); } catch (e) { if (e.response?.body?.message) { message.error(e.response.body.message); @@ -98,7 +97,7 @@ export const PaybackModal = ({initialData}) => { return ( { Saldo - {store.authentication.profileData?.wallet} + { + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR" + }) + .format(store.authentication.profileData?.wallet || 0)} + @@ -139,9 +145,24 @@ export const Profile = observer(() => { Filter { + let pageNumber = page.current; + store.transaction.pageSizeHistoryTransaction = page.pageSize; + store.transaction.pageHistoryTransaction = pageNumber - 1; + modalLoader.setLoading(true); + await store.transaction.getDataHistoryTransaction(); + modalLoader.setLoading(false); + }} /> diff --git a/src/routes/app.js b/src/routes/app.js index 9f2d29c..00ee1cf 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -12,7 +12,7 @@ import {Partner} from "../pages/Config/Partner"; import {Supplier} from "../pages/Config/Supplier"; import {Category} from "../pages/Product/Category"; import {Payback} from "../pages/Payback/Payback"; -import {PaybackFromUser} from "../pages/Payback/PaybackFromUser"; +import {PaybackCreated} from "../pages/Payback/PaybackCreated"; import {Subcategory} from "../pages/Product/Subcategory"; export const LINKS = { @@ -27,7 +27,7 @@ export const LINKS = { SUPPLIER: "/app/supplier", CATEGORY: "/app/category", PAYBACK: "/app/payback", - PAYBACK_FROM_USER: "/app/payback-from-user", + PAYBACK_CREATED: "/app/payback-created", SUBCATEGORY: "/app/subcategory", USER_DETAIL: "/app/user-detail", PRODUCT_DETAIL: "/app/product-detail", @@ -47,8 +47,8 @@ export const AppRoute = () => { - - + + diff --git a/src/store/payback.js b/src/store/payback.js index 366f530..592c673 100644 --- a/src/store/payback.js +++ b/src/store/payback.js @@ -2,50 +2,50 @@ import {makeAutoObservable} from "mobx"; import {http} from "../utils/http"; export class Payback { - page = 0; - pageSize = 10; - data = []; - total_data = 0; + pageCreated = 0; + pageSizeCreated = 10; + dataCreated = []; + totalDataCreated = 0; filterCategory = null; visibleModalPayback = false; - pagePaybackUser = 0; - pageSizePaybackUser = 10; - dataPaybackUser = []; - total_dataPaybackUser = 0; + pageConfirmation = 0; + pageSizeConfirmation = 10; + dataConfirmation = []; + totalDataConfirmation = 0; constructor(ctx) { this.ctx = ctx; makeAutoObservable(this); } - async getData() { + async getDataCreated() { try { const response = await http.get( - `/transaction/deposit-return?page=${this.page}&pageSize=${this.pageSize}` + `/transaction/deposit-return?page=${this.pageCreated}&pageSize=${this.pageSizeCreated}` ); - this.data = response.body.data.map((item, idx) => { + this.dataCreated = response.body.data.map((item, idx) => { item.key = idx; return item; }) ?? []; - this.total_data = response.body.count ?? 0; + this.totalDataCreated = response.body.count ?? 0; } catch (e) { console.error(e); } } - async getDataUser() { + async getDataConfirmation() { try { const response = await http.get( - `/transaction/deposit-return/confirmation?page=${this.pagePaybackUser}&pageSize=${this.pageSizePaybackUser}` + `/transaction/deposit-return/confirmation?page=${this.pageConfirmation}&pageSize=${this.pageSizeConfirmation}` ); - this.dataPaybackUser = response.body.data.map((item, idx) => { + this.dataConfirmation = response.body.data.map((item, idx) => { item.key = idx; return item; }) ?? []; - this.total_dataPaybackUser = response.body.count ?? 0; + this.totalDataConfirmation = response.body.count ?? 0; } catch (e) { console.error(e); } @@ -54,7 +54,7 @@ export class Payback { async update(id, data) { try { const response = await http.put(`/config/commission/${id}`).send(data); - await this.getData(); + await this.getDataCreated(); return response; } catch (e) { console.error(e); @@ -64,7 +64,7 @@ export class Payback { async delete(id) { try { const response = await http.del(`/product/${id}`); - await this.getData(); + await this.getDataCreated(); return response; } catch (e) { console.error(e); @@ -74,7 +74,20 @@ export class Payback { async create(data) { try { const response = await http.post("/transaction/deposit-return").send(data); - await this.getData(); + await this.getDataCreated(); + return response; + } catch (e) { + console.error(e); + } + } + + async confirmPayback(id, data) { + try { + const response = await http.put(`/transaction/deposit-return/confirmation/${id}`).send(data); + await Promise.all([ + this.getDataConfirmation(), + this.getDataCreated() + ]) return response; } catch (e) { console.error(e); diff --git a/src/store/transaction.js b/src/store/transaction.js index cad1219..307f4bd 100644 --- a/src/store/transaction.js +++ b/src/store/transaction.js @@ -23,7 +23,7 @@ export class Transaction { pageHistoryTransaction = 0; pageHistoryTopUp = 0; - // pageSizeHistoryTransaction = 10 + pageSizeHistoryTransaction = 10 dataHistoryTransaction = []; total_dataHistoryTransaction = 0; @@ -71,7 +71,7 @@ export class Transaction { async getDataHistoryTransaction() { try { - const response = await http.get(`/transaction/history?page=${this.pageHistoryTransaction}`); + 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