diff --git a/client/src/components/invoice-detail-edit/invoice-detail-edit.container.jsx b/client/src/components/invoice-detail-edit/invoice-detail-edit.container.jsx index 752d7a38d..d6165216c 100644 --- a/client/src/components/invoice-detail-edit/invoice-detail-edit.container.jsx +++ b/client/src/components/invoice-detail-edit/invoice-detail-edit.container.jsx @@ -1,18 +1,21 @@ -import { useQuery } from "@apollo/react-hooks"; -import { Form } from "antd"; +import { useMutation, useQuery } from "@apollo/react-hooks"; +import { Form, Button } from "antd"; import moment from "moment"; import queryString from "query-string"; import React, { useEffect } from "react"; +import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { useLocation } from "react-router-dom"; import { createStructuredSelector } from "reselect"; -import { QUERY_INVOICE_BY_PK } from "../../graphql/invoices.queries"; +import { + QUERY_INVOICE_BY_PK, + UPDATE_INVOICE, +} from "../../graphql/invoices.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; import AlertComponent from "../alert/alert.component"; import InvoiceFormContainer from "../invoice-form/invoice-form.container"; import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component"; -import { useTranslation } from "react-i18next"; - +import { UPDATE_INVOICE_LINE } from "../../graphql/invoice-lines.queries"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); @@ -21,14 +24,34 @@ export function InvoiceDetailEditContainer({ bodyshop }) { const search = queryString.parse(useLocation().search); const { t } = useTranslation(); const [form] = Form.useForm(); + const [updateInvoice] = useMutation(UPDATE_INVOICE); + const [updateInvoiceLine] = useMutation(UPDATE_INVOICE_LINE); const { loading, error, data } = useQuery(QUERY_INVOICE_BY_PK, { variables: { invoiceid: search.invoiceid }, skip: !!!search.invoiceid, }); - const handleFinish = (values) => { - console.log("values", values); + const handleFinish = async (values) => { + const { invoicelines, upload, ...invoice } = values; + const updates = []; + console.log("Start"); + updates.push( + updateInvoice({ + variables: { invoiceId: search.invoiceid, invoice: invoice }, + }) + ); + + invoicelines.forEach((il) => { + delete il.__typename; + updates.push( + updateInvoiceLine({ + variables: { invoicelineId: il.id, invoiceLine: il }, + }) + ); + }); + + await Promise.all(updates); }; useEffect(() => { @@ -38,7 +61,8 @@ export function InvoiceDetailEditContainer({ bodyshop }) { }, [form, search.invoiceid]); if (error) return ; - if (!!!search.invoiceid) return
{t("invoices.labels.noneselected")}
; + if (!!!search.invoiceid) + return
{t("invoices.labels.noneselected")}
; return (
+
diff --git a/client/src/components/invoice-form/invoice-form.component.jsx b/client/src/components/invoice-form/invoice-form.component.jsx index e104c9aac..97d3576d6 100644 --- a/client/src/components/invoice-form/invoice-form.component.jsx +++ b/client/src/components/invoice-form/invoice-form.component.jsx @@ -1,4 +1,12 @@ -import { Button, DatePicker, Form, Input, Statistic, Switch, Upload } from "antd"; +import { + Button, + DatePicker, + Form, + Input, + Statistic, + Switch, + Upload, +} from "antd"; import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; @@ -124,36 +132,18 @@ export default function InvoiceFormComponent({ diff --git a/client/src/graphql/invoice-lines.queries.js b/client/src/graphql/invoice-lines.queries.js new file mode 100644 index 000000000..991d6e48f --- /dev/null +++ b/client/src/graphql/invoice-lines.queries.js @@ -0,0 +1,17 @@ +import gql from "graphql-tag"; + +export const UPDATE_INVOICE_LINE = gql` + mutation UPDATE_INVOICE_LINE( + $invoicelineId: uuid! + $invoiceLine: invoicelines_set_input! + ) { + update_invoicelines( + where: { id: { _eq: $invoicelineId } } + _set: $invoiceLine + ) { + returning { + id + } + } + } +`; diff --git a/client/src/graphql/invoices.queries.js b/client/src/graphql/invoices.queries.js index 58b1d5eb8..eb2b193d8 100644 --- a/client/src/graphql/invoices.queries.js +++ b/client/src/graphql/invoices.queries.js @@ -110,3 +110,13 @@ export const QUERY_INVOICE_BY_PK = gql` } } `; + +export const UPDATE_INVOICE = gql` + mutation UPDATE_INVOICE($invoiceId: uuid!, $invoice: invoices_set_input!) { + update_invoices(where: { id: { _eq: $invoiceId } }, _set: $invoice) { + returning { + id + } + } + } +`;