diff --git a/src/component/PartnerComponent.js b/src/component/PartnerComponent.js index cc2e6b6..b5c7da1 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,9 +178,11 @@ 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 === 200 + ? message.success("Success Add New Partner") + : message.error("Failed Add Partner"); } catch (e) { console.log(e, "apa errornya"); message.error("Failed Add Partner"); @@ -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 5490a1d..1162005 100644 --- a/src/component/ProductComponent.js +++ b/src/component/ProductComponent.js @@ -115,13 +115,15 @@ export const ProductComponent = observer((props) => { key: "action", render: (text, record) => ( + onClick={async () => { + await store.product.getDetail(record.product_id); + await store.product.getDetailProduct(record.product_id); + history.push(LINKS.PRODUCT_DETAIL.replace(":id", record.product_id)); + //console.log(record.product_id); + }} + > + Detail + ), }, ]; diff --git a/src/pages/Config/Partner.js b/src/pages/Config/Partner.js index 4b5f5ce..d7226e9 100644 --- a/src/pages/Config/Partner.js +++ b/src/pages/Config/Partner.js @@ -49,13 +49,13 @@ export const Partner = observer(() => { - - {/* */} - - + + */} + {/* { useEffect(() => { (async () => { modalLoader.setLoading(true); + await getData(); await Promise.allSettled([ store.transaction.getDataHistoryTopUp(id), store.membership.getDetail(id), @@ -43,6 +45,71 @@ export const DetailUser = observer(() => { })(); }, []); + const getData = async () => { + store.authentication.userData.role === "Admin" + ? await store.membership.getData() + : await store.membership.getDataBySuperior(); + }; + const changeStatus = async (id, isActive) => { + 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); + + 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`); + } + }; + + const onSubmit = async (data) => { + data.superior = true; + + if (initialData.id) { + setConfirmLoading(true); + modalLoader.setLoading(true); + try { + await store.membership.update(initialData.id, data); + message.success( + initialData.isChangePassword + ? "Success Change Member Password" + : "Success Update Data Member" + ); + await getData(); + modalLoader.setLoading(false); + } catch (e) { + modalLoader.setLoading(true); + message.error( + initialData.isChangePassword + ? "Failed Update Member Password" + : "Failed Update Data Member" + ); + } + setConfirmLoading(false); + setVisibleModal(false); + } else { + setConfirmLoading(true); + modalLoader.setLoading(true); + try { + await store.membership.create(data); + message.success("Success Add New Member"); + await getData(); + } catch (e) { + console.log(e, "apa errornya"); + message.error("Failed Add Member"); + } + modalLoader.setLoading(false); + setConfirmLoading(false); + setVisibleModal(false); + setInitialData({}); + } + }; const columns = [ { title: "Amount", @@ -61,6 +128,69 @@ export const DetailUser = observer(() => { ); }, }, + { + title: "Status", + dataIndex: "isActive", + key: "isActive", + render: (text, record) => ( + + {record?.isActive === true ? " ACTIVE" : "INACTIVE"} + + ), + }, + { + title: "Action", + key: "action", + render: (text, record) => ( + + {/* {store.authentication.userData.role === "Admin" && */} + + {/* } */} + {/* {store.authentication.userData.role === "Admin" && */} + + {/* } + {store.authentication.userData.role === "Admin" && */} + + {/* } */} + + ), + }, ]; const routeData = [ @@ -68,6 +198,10 @@ export const DetailUser = observer(() => { route: LINKS.HOME, name: "Home", }, + { + route: LINKS.MEMBERSHIP, + name: Keanggotaan, + }, { route: LINKS.USER_DETAIL, name: Detail User, @@ -91,30 +225,30 @@ export const DetailUser = observer(() => { Username - - {store.membership.dataDetail.superior?.username} - + {store.membership.dataDetail.superior?.username} Role - - {store.membership.dataDetail.roles?.name} - + {store.membership.dataDetail.roles?.name} Phone Number - {store.membership.dataDetail.userDetail?.phone_number} + + {store.membership.dataDetail.userDetail?.phone_number} + Status - {store.membership.dataDetail.isActive === true ? "Aktif": "Inaktif"} + {store.membership.dataDetail.isActive === true + ? "Aktif" + : "Inaktif"} @@ -141,7 +275,7 @@ export const DetailUser = observer(() => { History Top Up - + */} {
+ {/* { + form.resetFields(); + handleCancelTransaction(); + }} + onOk={() => { + form + .validateFields() + .then((values) => { + console.log(values, "isi form"); + handleSubmitTransaction(values); + form.resetFields(); + }) + .catch((info) => { + console.error("Validate Failed:", info); + }); + }} + > +
+ + + `Rp. ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + } + parser={(value) => value.replace(/\Rp.\s?|(,*)/g, "")} + /> + + +
*/} + { + onSubmit(data); + }} + onCancel={() => { + setInitialData({}); + setVisibleModal(false); + }} + />
); }); diff --git a/src/pages/Membership/Membership.js b/src/pages/Membership/Membership.js index 83de9c3..9eb9a91 100644 --- a/src/pages/Membership/Membership.js +++ b/src/pages/Membership/Membership.js @@ -147,31 +147,33 @@ export const Membership = observer(() => { currency: "IDR", }).format(text), }, - // { - // title: "Status", - // dataIndex: "isActive", - // key: "isActive", - // render: (text, record) => ( - // - // {record?.isActive === true ? " ACTIVE" : "INACTIVE"} - // - // ), - // }, + { + title: "Status", + dataIndex: "isActive", + key: "isActive", + render: (text, record) => ( + + {record?.isActive === true ? " ACTIVE" : "INACTIVE"} + + ), + }, { title: "Action", key: "action", render: (text, record) => ( - {/* {store.authentication.userData.role === "Admin" && } - - {store.authentication.userData.role === "Admin" && } - {store.authentication.userData.role === "Admin" && } */} + + {/* } */} - + {/* {store.authentication.userData.role === "Admin" && ( */} + + {/* ) */} + {/* } */} ), }, @@ -239,8 +248,8 @@ export const Membership = observer(() => { name: "Home", }, { - route: "/app/membership", - name: Membership, + route: LINKS.MEMBERSHIP, + name: Keanggotaan, }, ]; @@ -300,14 +309,14 @@ export const Membership = observer(() => { */} - + /> */} + {/* - - + */} + {/* { const store = useStore(); + const { id } = useParams(); const modalLoader = useContext(ModalLoaderContext); const routeData = [ @@ -21,11 +23,11 @@ export const ProductDetail = observer(() => { }, { route: LINKS.PRODUCT, - name: Product, + name: Product, }, { route: LINKS.PRODUCT_DETAIL, - name: Product Detail, + name: Product Detail, }, ]; @@ -33,89 +35,121 @@ export const ProductDetail = observer(() => { (async () => { modalLoader.setLoading(true); await Promise.allSettled([ - store.authentication.getProfile(), - store.transaction.getDataHistoryTransaction(), + //store.authentication.getProfile(), + store.product.getDetail(id), + store.product.getDetailProduct(id), ]); modalLoader.setLoading(false); - })() + })(); }, []); + //console.log(id) 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", + width: "20%", + 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", + width: "50%", + render: (text) => + new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(text), }, { - title: 'Transaction Date', - dataIndex: 'created_at', - key: 'created_at', + title: "Transaction Date", + dataIndex: "startDate", + key: "startDate", render: (text, record) => { return ( - {format(parseISO(record.created_at), 'dd MMMM yyyy HH:mm')} - ) + {format(parseISO(record.startDate), "dd MMMM yyyy")} + ); }, }, - ] + ]; - 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.authentication.profileData?.userDetail?.phone_number} + + {store.product.dataDetailProduct.name}Harga Beli- {store.authentication.profileData?.username} + + {new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(store.product.dataDetailProduct.basePrice)} + Harga Jual- {store.authentication.profileData.roles?.name} + + {new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + }).format(store.product.dataDetailProduct.price)} + + + + Supplier + + + {store.product.dataDetailProduct.supplier.name}Status- {store.authentication.profileData.superior?.username} + {store.product.dataDetailProduct.status} - + {/* Saldo @@ -124,29 +158,31 @@ export const ProductDetail = observer(() => { {store.authentication.profileData?.wallet} - + */}
- History User Transaction + + Product Price History + - + */}
-
+
- ) + ); }); diff --git a/src/pages/Product/Subcategory.js b/src/pages/Product/Subcategory.js index cc99349..a2c0292 100644 --- a/src/pages/Product/Subcategory.js +++ b/src/pages/Product/Subcategory.js @@ -54,13 +54,13 @@ export const Subcategory = observer(() => { -
- {/* + */} - - + + */} + {/* { const store = useStore(); @@ -18,8 +18,8 @@ export const Product = observer(() => { modalLoader.setLoading(true); await Promise.allSettled([ store.transaction.getDataSubCategories(), - store.transaction.getDataCategories() - ]) + store.transaction.getDataCategories(), + ]); modalLoader.setLoading(false); } catch (e) { modalLoader.setLoading(false); @@ -44,7 +44,9 @@ export const Product = observer(() => { const handleBuyProduct = async (data) => { modalLoader.setLoading(true); try { - const response = await store.transaction.buyProduct({productCode: data}); + const response = await store.transaction.buyProduct({ + productCode: data, + }); if (response.status === 201) { message.success("Success Buy Product"); } else { @@ -64,16 +66,18 @@ export const Product = observer(() => { return (
- Sub Category + + Sub Category +
- + 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",marginLeft:10}} - > - {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 && ( diff --git a/src/routes/app.js b/src/routes/app.js index 9bc009f..8df28d0 100644 --- a/src/routes/app.js +++ b/src/routes/app.js @@ -30,7 +30,7 @@ export const LINKS = { PAYBACK_CREATED: "/app/payback-created", SUBCATEGORY: "/app/subcategory", USER_DETAIL: "/app/user-detail/:id", - PRODUCT_DETAIL: "/app/product-detail", + PRODUCT_DETAIL: "/app/product-detail/:id", }; export const AppRoute = () => { diff --git a/src/store/product.js b/src/store/product.js index 5881c38..24fd675 100644 --- a/src/store/product.js +++ b/src/store/product.js @@ -22,6 +22,11 @@ export class Product { dataSubCategories = []; total_dataSubCategories = 0; filterCategory = null; + dataDetail=[] + dataDetailProduct=[] + + pageGetDetail=0 + supplier=null constructor(ctx) { this.ctx = ctx; @@ -31,7 +36,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 @@ -67,6 +72,26 @@ export class Product { console.error(e); } } + async getDetail(id) { + try { + const response = await http.get(`/product/price-history/${id}?page=${this.pageGetDetail}&supplier=${this.supplier}`); + //console.log(response,' Detail') + this.dataDetail = response.body.data + this.total_data = response?.body?.count ?? 0 + } catch (e) { + console.error(e); + } + } + async getDetailProduct(id) { + try { + const response = await http.get(`/product/${id}`); + //console.log(response,' Detail Product') + this.dataDetailProduct = response.body.data + this.total_data = response?.body?.count ?? 0 + } catch (e) { + console.error(e); + } + } async create(data) { try {