Minor parts order additions.

This commit is contained in:
Patrick Fic
2020-02-18 10:52:30 -08:00
parent 4dc3fb492a
commit dbf5c38752
6 changed files with 225 additions and 13 deletions

View File

@@ -1,4 +1,4 @@
<babeledit_project be_version="2.6.1" version="1.2">
<babeledit_project version="1.2" be_version="2.6.1">
<!--
BabelEdit project file
@@ -5884,6 +5884,136 @@
</folder_node>
</children>
</folder_node>
<folder_node>
<name>parts_orders</name>
<children>
<folder_node>
<name>errors</name>
<children>
<concept_node>
<name>creating</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
<folder_node>
<name>fields</name>
<children>
<concept_node>
<name>deliver_by</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
<folder_node>
<name>labels</name>
<children>
<concept_node>
<name>email</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>print</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
<folder_node>
<name>successes</name>
<children>
<concept_node>
<name>created</name>
<definition_loaded>false</definition_loaded>
<description></description>
<comment></comment>
<default_text></default_text>
<translations>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-MX</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-CA</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</folder_node>
</children>
</folder_node>
<folder_node>
<name>profile</name>
<children>

View File

@@ -1,8 +1,13 @@
import React, { useState } from "react";
import { AutoComplete, Icon } from "antd";
import { AutoComplete, Icon, DatePicker, Radio } from "antd";
import { useTranslation } from "react-i18next";
export default function PartsOrderModalComponent({ vendorList, state }) {
export default function PartsOrderModalComponent({
vendorList,
state,
sendTypeState
}) {
const [partsOrder, setPartsOrder] = state;
const [sendType, setSendType] = sendTypeState;
const [vendorComplete, setVendorComplete] = useState(vendorList);
const { t } = useTranslation();
@@ -17,27 +22,42 @@ export default function PartsOrderModalComponent({ vendorList, state }) {
};
const handleSelect = (value, option) => {
console.log("value", value);
console.log("option", option);
setPartsOrder({ ...partsOrder, vendorid: value });
setPartsOrder({ ...partsOrder, vendorid: option.key });
};
return (
<div>
TODO Not sure why name is not populating.
<AutoComplete
onSearch={handleSearch}
onSelect={handleSelect}
optionLabelProp='id'
defaultOpen
backfill
optionLabelProp='value'
dataSource={vendorComplete}
placeholder={t("vendors.labels.search")}>
{vendorComplete.map(v => (
<AutoComplete.Option key={v.id}>
<AutoComplete.Option value={v.name} key={v.id}>
<div>{v.name}</div>
<div> {v.favorite ? <Icon type='heart' /> : null}</div>
</AutoComplete.Option>
))}
</AutoComplete>
{t("parts_orders.fields.deliver_by")}
<DatePicker
defaultValue={partsOrder.deliver_by}
onChange={e => {
setPartsOrder({ ...partsOrder, deliver_by: e });
}}
/>
<Radio.Group
defaultValue={sendType}
onChange={e => setSendType(e.target.value)}>
<Radio value={"e"}>{t("parts_orders.labels.email")}</Radio>
<Radio value={"p"}>{t("parts_orders.labels.print")}</Radio>
</Radio.Group>
</div>
);
}

View File

@@ -1,4 +1,4 @@
import { Modal } from "antd";
import { Modal, notification } from "antd";
import React, { useState } from "react";
import { useQuery, useMutation } from "react-apollo";
import { connect } from "react-redux";
@@ -12,6 +12,7 @@ import {
import AlertComponent from "../alert/alert.component";
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
import PartsOrderModalComponent from "./parts-order-modal.component";
import { useTranslation } from "react-i18next";
const mapStateToProps = createStructuredSelector({
currentUser: selectCurrentUser,
@@ -32,8 +33,9 @@ export default connect(
fetchPolicy: "network-only",
skip: !modalVisible
});
const { t } = useTranslation();
const [insertPartOrder] = useMutation(INSERT_NEW_PARTS_ORDERS);
const sendTypeState = useState("e");
const partsOrderState = useState({
vendorid: null,
@@ -41,7 +43,8 @@ export default connect(
user_email: currentUser.email
});
const [partsOrder, setPartsOrder] = partsOrderState;
console.log("sendTypeState[0]", sendTypeState[0]);
const partsOrder = partsOrderState[0];
const handleOk = () => {
insertPartOrder({
variables: {
@@ -53,7 +56,9 @@ export default connect(
data: linesToOrder.reduce((acc, value) => {
acc.push({
line_desc: value.line_desc,
joblineid: value.joblineid
joblineid: value.joblineid,
status:
bodyshop.md_order_statuses.default_ordered || "Ordered*"
});
return acc;
}, [])
@@ -61,8 +66,19 @@ export default connect(
}
]
}
});
setModalVisible(false);
})
.then(r => {
notification["success"]({
message: t("parts_orders.successes.created")
});
setModalVisible(false);
})
.catch(error => {
notification["error"]({
message: t("parts_orders.errors.creating"),
description: error.message
});
});
};
return (
@@ -75,6 +91,7 @@ export default connect(
<PartsOrderModalComponent
vendorList={(data && data.vendors) || []}
state={partsOrderState}
sendTypeState={sendTypeState}
/>
</LoadingSpinner>
</Modal>

View File

@@ -378,6 +378,21 @@
"order": "Order Parts"
}
},
"parts_orders": {
"errors": {
"creating": "Error encountered when creating parts order. "
},
"fields": {
"deliver_by": "Deliver By"
},
"labels": {
"email": "Send by Email",
"print": "Show Printed Form"
},
"successes": {
"created": "Parts order created successfully. "
}
},
"profile": {
"errors": {
"state": "Error reading page state. Please refresh."

View File

@@ -378,6 +378,21 @@
"order": "Pedido de piezas"
}
},
"parts_orders": {
"errors": {
"creating": "Se encontró un error al crear el pedido de piezas."
},
"fields": {
"deliver_by": "Entregado por"
},
"labels": {
"email": "Enviar por correo electrónico",
"print": "Mostrar formulario impreso"
},
"successes": {
"created": "Pedido de piezas creado con éxito."
}
},
"profile": {
"errors": {
"state": "Error al leer el estado de la página. Porfavor refresca."

View File

@@ -378,6 +378,21 @@
"order": "Commander des pièces"
}
},
"parts_orders": {
"errors": {
"creating": "Erreur rencontrée lors de la création de la commande de pièces."
},
"fields": {
"deliver_by": "Livrer par"
},
"labels": {
"email": "Envoyé par email",
"print": "Afficher le formulaire imprimé"
},
"successes": {
"created": "Commande de pièces créée avec succès."
}
},
"profile": {
"errors": {
"state": "Erreur lors de la lecture de l'état de la page. Rafraichissez, s'il vous plait."