diff --git a/backend/src/contracts/contracts.py b/backend/src/contracts/contracts.py index 5eab4b9..a7114c6 100644 --- a/backend/src/contracts/contracts.py +++ b/backend/src/contracts/contracts.py @@ -80,7 +80,6 @@ async def create_contract( recurrents = list(map(lambda x: {"product": x.product, "quantity": x.quantity}, filter(lambda contract_product: contract_product.product.type == models.ProductType.RECCURENT, new_contract.products))) recurrent_price = compute_recurrent_prices(recurrents, len(new_contract.form.shipments)) price = recurrent_price + compute_occasional_prices(occasionals) - total_price = '{:10.2f}'.format(price) cheques = list(map(lambda x: {"name": x.name, "value": x.value}, new_contract.cheques)) # TODO: send contract to referer @@ -90,8 +89,8 @@ async def create_contract( cheques, occasionals, recurrents, - recurrent_price, - total_price + '{:10.2f}'.format(recurrent_price), + '{:10.2f}'.format(price) ) pdf_file = io.BytesIO(pdf_bytes) contract_id = f'{new_contract.firstname}_{new_contract.lastname}_{new_contract.form.productor.type}_{new_contract.form.season}' diff --git a/frontend/src/pages/Contract/index.tsx b/frontend/src/pages/Contract/index.tsx index 8bec61e..9e59363 100644 --- a/frontend/src/pages/Contract/index.tsx +++ b/frontend/src/pages/Contract/index.tsx @@ -18,7 +18,7 @@ import { Title, } from "@mantine/core"; import { useForm } from "@mantine/form"; -import { IconMail, IconPhone, IconUser } from "@tabler/icons-react"; +import { IconDownload, IconMail, IconPhone, IconUser } from "@tabler/icons-react"; import { useCallback, useMemo, useRef } from "react"; import { useParams } from "react-router"; import { computePrices } from "./price"; @@ -140,6 +140,7 @@ export function Contract() { products: tranformProducts(withDefaultValues(inputForm.getValues().products)), }; await createContractMutation.mutateAsync(contract); + window.location.href = '/'; } else { const firstErrorField = Object.keys(errors.errors)[0]; const ref = inputRefs.current[firstErrorField]; @@ -316,8 +317,10 @@ export function Contract() { currency: "EUR", }).format(price)} - diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index cc29a8f..819eb6e 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -752,7 +752,6 @@ export function useGetAllContractFile() { disposition && disposition?.includes("filename=") ? disposition.split("filename=")[1].replace(/"/g, "") : `contract_${form_id}.zip`; - console.log(disposition); return { blob, filename }; }, onSuccess: ({ blob, filename }) => { @@ -770,20 +769,28 @@ export function useCreateContract() { const queryClient = useQueryClient(); return useMutation({ - mutationFn: (newContract: ContractCreate) => { - return fetch(`${Config.backend_uri}/contracts`, { + mutationFn: async (newContract: ContractCreate) => { + const res = await fetch(`${Config.backend_uri}/contracts`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(newContract), - }).then(async (res) => await res.blob()); + }).then((res) => res); + if (!res.ok) throw new Error(); + const blob = await res.blob(); + const disposition = res.headers.get("Content-Disposition"); + const filename = + disposition && disposition?.includes("filename=") + ? disposition.split("filename=")[1].replace(/"/g, "") + : `contract_${newContract.form_id}.pdf`; + return { blob, filename }; }, - onSuccess: async (pdfBlob) => { - const url = URL.createObjectURL(pdfBlob); + onSuccess: async ({ blob, filename }) => { + const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; - link.download = `contract.pdf`; + link.download = filename; link.click(); URL.revokeObjectURL(url); await queryClient.invalidateQueries({ queryKey: ["contracts"] });