Merge branch 'main' of https://gitlab.com/empatnusabangsa/ppob/ppob-frontend into devops-production

This commit is contained in:
Muhammad Fadli 2023-06-22 02:43:41 +07:00
commit a1d1077515
3 changed files with 159 additions and 3 deletions

View File

@ -15,26 +15,28 @@ import {
Tag, Tag,
Select, Select,
Option, Option,
Typography, Typography, DatePicker,
} from "antd"; } from "antd";
import { useStore } from "../../utils/useStore"; import { useStore } from "../../utils/useStore";
import { observer } from "mobx-react-lite"; import { observer } from "mobx-react-lite";
import { import {
DownloadOutlined, DownloadOutlined,
PlusSquareOutlined, PlusSquareOutlined,
FilterOutlined, FilterOutlined, ExportOutlined,
} from "@ant-design/icons"; } from "@ant-design/icons";
import { MembershipModal } from "./MembershipModal"; import { MembershipModal } from "./MembershipModal";
import { BreadcumbComponent } from "../../component/BreadcumbComponent"; import { BreadcumbComponent } from "../../component/BreadcumbComponent";
import { LINKS } from "../../routes/app"; import { LINKS } from "../../routes/app";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import { ModalLoaderContext } from "../../utils/modal"; import { ModalLoaderContext } from "../../utils/modal";
import moment from "moment";
export const Membership = observer(() => { export const Membership = observer(() => {
const history = useHistory(); const history = useHistory();
const { Option } = Select; const { Option } = Select;
const { Title } = Typography; const { Title } = Typography;
const [form] = Form.useForm(); const [form] = Form.useForm();
const [formExport] = Form.useForm();
const store = useStore(); const store = useStore();
const [visibleModal, setVisibleModal] = useState(false); const [visibleModal, setVisibleModal] = useState(false);
const [isVisibleTopUpModal, setIsVisibleTopUpModal] = useState(false); const [isVisibleTopUpModal, setIsVisibleTopUpModal] = useState(false);
@ -44,6 +46,9 @@ export const Membership = observer(() => {
const modalLoader = useContext(ModalLoaderContext); const modalLoader = useContext(ModalLoaderContext);
const [filterMembership, setFilterMembership] = useState([]); const [filterMembership, setFilterMembership] = useState([]);
const [filterPartner, setFilterPartner] = useState([]); const [filterPartner, setFilterPartner] = useState([]);
const [filterBuyer, setFilterBuyer] = useState("");
const [modalExport, setModalExport] = useState(false);
const [filterSupplier, setFilterSupplier] = useState("");
useEffect(() => { useEffect(() => {
const init = async () => { const init = async () => {
@ -52,8 +57,10 @@ export const Membership = observer(() => {
const isAdmin = store.authentication.userData.role === "Admin"; const isAdmin = store.authentication.userData.role === "Admin";
await getData(); await getData();
await store.membership.getData(); await store.membership.getData();
await store.membership.getDataFilter();
await store.membership.getDataBySuperior(); await store.membership.getDataBySuperior();
await store.partner.getData(); await store.partner.getData();
await store.supplier.getData();
await store.role.getData(isAdmin); await store.role.getData(isAdmin);
modalLoader.setLoading(false); modalLoader.setLoading(false);
} catch (e) { } catch (e) {
@ -167,6 +174,29 @@ export const Membership = observer(() => {
setDestination(null); setDestination(null);
}; };
const handleSubmitExport = async () => {
const date = formExport.getFieldsValue();
const dataAll ={
dateStart: moment(date.start_date).format("YYYY-MM-DD"),
dateEnd: moment(date.end_date).format("YYYY-MM-DD"),
supplier: filterSupplier,
buyer: filterBuyer
}
modalLoader.setLoading(true);
try {
await store.transaction.exportTransactionAll(dataAll)
// console.log('responseiniyak', response);
// message.success("Success export");
setModalExport(false);
modalLoader.setLoading(false);
} catch (e) {
setModalExport(false);
console.error(e, "apa errornya");
message.error(e.response?.body?.message || "Failed to export");
modalLoader.setLoading(false);
}
};
const columns = [ const columns = [
{ {
title: "Nama", title: "Nama",
@ -344,6 +374,16 @@ export const Membership = observer(() => {
Filter Filter
</Button> </Button>
)} )}
{store.authentication.userData.role === "Admin" && (
<Button
style={{
marginLeft: "10px"
}}
onClick={() => setModalExport(true)}
>
<ExportOutlined /> Export
</Button>
)}
</Col> </Col>
<Col span={12} style={{ textAlign: "right" }}> <Col span={12} style={{ textAlign: "right" }}>
{/* <Search {/* <Search
@ -616,6 +656,78 @@ export const Membership = observer(() => {
</Col> </Col>
</Row> </Row>
</Modal> </Modal>
<Modal
visible={modalExport}
title={"Export"}
onOk={handleSubmitExport}
onCancel={() => {
setModalExport(false);
}}
>
<Row>
<Col span={24}>
<Form layout="vertical" name="filter" form={formExport}>
<Form.Item
name="start_date"
label="Dari"
rules={[{ required: true, message: "Please input Date!" }]}
>
<DatePicker style={{ width: "100%" }} />
</Form.Item>
<Form.Item
name="end_date"
label="Sampai"
rules={[{ required: true, message: "Please input Date!" }]}
>
<DatePicker style={{ width: "100%" }} />
</Form.Item>
<Form.Item
name="supplier"
label="Supplier"
>
<Select
mode={"single"}
placeholder="Choose Supplier"
onChange={(val) => {
setFilterSupplier(val);
}}
style={{ width: "100%" }}
value={filterSupplier}
>
<Option value="all">All Supplier</Option>
{store.supplier.data.map((item) => (
<Option value={item.id} key={item.id}>
{item.name}
</Option>
))}
</Select>
</Form.Item>
<Form.Item
name="buyer"
label="Buyer"
>
<Select
mode={"single"}
placeholder="Choose Buyer"
onChange={(val) => {
setFilterBuyer(val);
}}
style={{ width: "100%" }}
value={filterBuyer}
>
<Option value="all">All Buyer</Option>
{store.membership.dataFilterMembership.map((item) => (
<Option value={item.id} key={item.id}>
{item.name} ({item.username})
</Option>
))}
</Select>
</Form.Item>
</Form>
</Col>
</Row>
</Modal>
</div> </div>
); );
}); });

View File

@ -5,6 +5,7 @@ export class Membership {
page = 0; page = 0;
pageSize = 10 pageSize = 10
data = []; data = [];
dataFilterMembership = [];
total_data = 0; total_data = 0;
dataTotal=0; dataTotal=0;
@ -44,6 +45,26 @@ export class Membership {
} }
} }
async getDataFilter() {
try {
const response = await http.get(`/users?page=${this.page}&pageSize=1000&superior=${this.filterMembership}&type=${this.filterPartner}`);
this.dataFilterMembership = response.body.data ?? []
this.dataFilterMembership = response.body.data.map((item, idx) => {
item.key = idx;
item.name = item?.user_detail?.name;
item.username = item?.username
item.phone_number = item?.user_detail?.phone_number;
item.roleId = item?.roles.id;
item.roleName = item?.roles.name;
return item
}) ?? []
console.log(this.dataTotal)
} catch (e) {
console.error(e);
}
}
async getDetail(id) { async getDetail(id) {
try { try {
const response = await http.get(`/users/`+id); const response = await http.get(`/users/`+id);
@ -53,7 +74,7 @@ export class Membership {
console.error(e); console.error(e);
} }
} }
async getDataBySuperior() { async getDataBySuperior() {
try { try {
const response = await http.get(`/users/find-by-supperior?page=${this.page}&pageSize=${this.pageSize}`); const response = await http.get(`/users/find-by-supperior?page=${this.page}&pageSize=${this.pageSize}`);

View File

@ -303,4 +303,27 @@ export class Transaction {
console.error(e,':)') console.error(e,':)')
} }
} }
exportTransactionAll(data) {
try {
axios({
url: appConfig.apiUrl + `/excel/history-user/export-all`,
headers: {"Authorization" : `Bearer ${TokenUtil.accessToken}`},
method: 'POST',
data: data,
responseType: 'blob'
}).then((response) => {
var fileDownload = require('react-file-download');
message.success("Success export");
fileDownload(response.data, `Mutasi Transaksi ${data.dateStart} - ${data.dateEnd}.xlsx`);
return fileDownload;
}).catch(function (error) {
message.error("No data to export");
return error;
});
} catch (e) {
console.error(e,':)')
}
}
} }