feat: print deal
This commit is contained in:
@@ -1,6 +1,18 @@
|
|||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
import { useDealPageContext } from "../../../contexts/DealPageContext.tsx";
|
import { useDealPageContext } from "../../../contexts/DealPageContext.tsx";
|
||||||
import { Button, Checkbox, Divider, Fieldset, Flex, Group, rem, Textarea, TextInput } from "@mantine/core";
|
import {
|
||||||
|
ActionIcon,
|
||||||
|
Button,
|
||||||
|
Checkbox,
|
||||||
|
Divider,
|
||||||
|
Fieldset,
|
||||||
|
Flex,
|
||||||
|
Group,
|
||||||
|
rem,
|
||||||
|
Textarea,
|
||||||
|
TextInput,
|
||||||
|
Tooltip,
|
||||||
|
} from "@mantine/core";
|
||||||
import { useForm } from "@mantine/form";
|
import { useForm } from "@mantine/form";
|
||||||
import { ClientService, DealSchema, DealService, ShippingWarehouseSchema } from "../../../../../client";
|
import { ClientService, DealSchema, DealService, ShippingWarehouseSchema } from "../../../../../client";
|
||||||
import { DealStatus, DealStatusDictionary } from "../../../../../shared/enums/DealStatus.ts";
|
import { DealStatus, DealStatusDictionary } from "../../../../../shared/enums/DealStatus.ts";
|
||||||
@@ -14,6 +26,7 @@ import { useClipboard } from "@mantine/hooks";
|
|||||||
import ButtonCopy from "../../../../../components/ButtonCopy/ButtonCopy.tsx";
|
import ButtonCopy from "../../../../../components/ButtonCopy/ButtonCopy.tsx";
|
||||||
import FileSaver from "file-saver";
|
import FileSaver from "file-saver";
|
||||||
import { getCurrentDateTimeForFilename } from "../../../../../shared/lib/date.ts";
|
import { getCurrentDateTimeForFilename } from "../../../../../shared/lib/date.ts";
|
||||||
|
import { IconPrinter } from "@tabler/icons-react";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
deal: DealSchema
|
deal: DealSchema
|
||||||
@@ -159,36 +172,54 @@ const Content: FC<Props> = ({ deal }) => {
|
|||||||
<Flex mt={"md"} gap={rem(10)} align={"center"} justify={"flex-end"}>
|
<Flex mt={"md"} gap={rem(10)} align={"center"} justify={"flex-end"}>
|
||||||
<Flex align={"center"} gap={rem(10)} justify={"center"}>
|
<Flex align={"center"} gap={rem(10)} justify={"center"}>
|
||||||
|
|
||||||
<Flex gap={rem(10)}>
|
<Flex gap={rem(10)} align={"center"} justify={"space-between"}>
|
||||||
{(deal.billRequest && deal.billRequest.pdfUrl) ?
|
<Tooltip
|
||||||
<ButtonCopy
|
label={"Распечатать сделку"}
|
||||||
onCopiedLabel={"Ссылка скопирована в буфер обмена"}
|
>
|
||||||
value={deal.billRequest.pdfUrl}
|
<ActionIcon
|
||||||
>
|
onClick={() => {
|
||||||
Ссылка на оплату
|
const pdfWindow = window.open(`${import.meta.env.VITE_API_URL}/deal/detailedDocument/${deal.id}`);
|
||||||
</ButtonCopy>
|
if (!pdfWindow) return;
|
||||||
:
|
pdfWindow.print();
|
||||||
<ButtonCopyControlled
|
|
||||||
onCopyClick={() => {
|
|
||||||
// get current datetime for filename, replaced dots with _
|
|
||||||
const date = getCurrentDateTimeForFilename();
|
|
||||||
|
|
||||||
|
|
||||||
FileSaver.saveAs(`${import.meta.env.VITE_API_URL}/deal/document/${deal.id}`,
|
|
||||||
`bill_${deal.id}_${date}.pdf`);
|
|
||||||
}}
|
}}
|
||||||
copied={false}
|
variant={"default"}>
|
||||||
|
<IconPrinter />
|
||||||
|
</ActionIcon>
|
||||||
|
</Tooltip>
|
||||||
|
|
||||||
|
<Flex gap={rem(10)}>
|
||||||
|
|
||||||
|
{(deal.billRequest && deal.billRequest.pdfUrl) ?
|
||||||
|
<ButtonCopy
|
||||||
|
onCopiedLabel={"Ссылка скопирована в буфер обмена"}
|
||||||
|
value={deal.billRequest.pdfUrl}
|
||||||
|
>
|
||||||
|
Ссылка на оплату
|
||||||
|
</ButtonCopy>
|
||||||
|
:
|
||||||
|
<ButtonCopyControlled
|
||||||
|
onCopyClick={() => {
|
||||||
|
// get current datetime for filename, replaced dots with _
|
||||||
|
const date = getCurrentDateTimeForFilename();
|
||||||
|
|
||||||
|
|
||||||
|
FileSaver.saveAs(`${import.meta.env.VITE_API_URL}/deal/document/${deal.id}`,
|
||||||
|
`bill_${deal.id}_${date}.pdf`);
|
||||||
|
}}
|
||||||
|
copied={false}
|
||||||
|
onCopiedLabel={"Ссылка скопирована в буфер обмена"}
|
||||||
|
>
|
||||||
|
Ссылка на оплату (PDF)
|
||||||
|
</ButtonCopyControlled>
|
||||||
|
}
|
||||||
|
<ButtonCopyControlled
|
||||||
|
onCopyClick={onCopyGuestUrlClick}
|
||||||
onCopiedLabel={"Ссылка скопирована в буфер обмена"}
|
onCopiedLabel={"Ссылка скопирована в буфер обмена"}
|
||||||
>
|
copied={clipboard.copied}>
|
||||||
Ссылка на оплату (PDF)
|
Ссылка на редактирование
|
||||||
</ButtonCopyControlled>
|
</ButtonCopyControlled>
|
||||||
}
|
</Flex>
|
||||||
<ButtonCopyControlled
|
|
||||||
onCopyClick={onCopyGuestUrlClick}
|
|
||||||
onCopiedLabel={"Ссылка скопирована в буфер обмена"}
|
|
||||||
copied={clipboard.copied}>
|
|
||||||
Ссылка на редактирование
|
|
||||||
</ButtonCopyControlled>
|
|
||||||
</Flex>
|
</Flex>
|
||||||
<Flex gap={rem(10)}>
|
<Flex gap={rem(10)}>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user