Finished moving job totals calculation to server side BOD-267.
This commit is contained in:
@@ -10237,6 +10237,27 @@
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>recalculate</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>reconcile</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
|
||||
@@ -7,20 +7,20 @@
|
||||
"@lourenci/react-kanban": "^2.0.0",
|
||||
"@stripe/react-stripe-js": "^1.1.2",
|
||||
"@stripe/stripe-js": "^1.9.0",
|
||||
"@tanem/react-nprogress": "^3.0.39",
|
||||
"@tanem/react-nprogress": "^3.0.40",
|
||||
"@tinymce/tinymce-react": "^3.6.0",
|
||||
"antd": "^4.5.4",
|
||||
"antd": "^4.6.1",
|
||||
"apollo-boost": "^0.4.9",
|
||||
"apollo-link-context": "^1.0.20",
|
||||
"apollo-link-error": "^1.1.13",
|
||||
"apollo-link-logger": "^1.2.3",
|
||||
"apollo-link-retry": "^2.2.16",
|
||||
"apollo-link-ws": "^1.0.20",
|
||||
"axios": "^0.19.2",
|
||||
"axios": "^0.20.0",
|
||||
"dinero.js": "^1.8.1",
|
||||
"dotenv": "^8.2.0",
|
||||
"fingerprintjs2": "^2.1.2",
|
||||
"firebase": "^7.18.0",
|
||||
"firebase": "^7.19.0",
|
||||
"graphql": "^15.3.0",
|
||||
"i18next": "^19.7.0",
|
||||
"i18next-browser-languagedetector": "^6.0.1",
|
||||
@@ -34,16 +34,16 @@
|
||||
"react": "^16.13.1",
|
||||
"react-apollo": "^3.1.5",
|
||||
"react-barcode": "^1.4.0",
|
||||
"react-big-calendar": "^0.26.0",
|
||||
"react-big-calendar": "^0.26.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-drag-listview": "^0.1.7",
|
||||
"react-email-editor": "^1.1.1",
|
||||
"react-ga": "^3.1.2",
|
||||
"react-grid-gallery": "^0.5.5",
|
||||
"react-grid-layout": "^1.0.0",
|
||||
"react-i18next": "^11.7.0",
|
||||
"react-i18next": "^11.7.1",
|
||||
"react-icons": "^3.11.0",
|
||||
"react-image-file-resizer": "^0.3.1",
|
||||
"react-image-file-resizer": "^0.3.6",
|
||||
"react-moment": "^0.9.7",
|
||||
"react-number-format": "^4.4.1",
|
||||
"react-redux": "^7.2.1",
|
||||
@@ -64,7 +64,7 @@
|
||||
"scripts": {
|
||||
"analyze": "source-map-explorer 'build/static/js/*.js'",
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"build": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
@@ -88,6 +88,6 @@
|
||||
"enzyme": "^3.11.0",
|
||||
"enzyme-adapter-react-16": "^1.15.3",
|
||||
"redux-logger": "^3.0.6",
|
||||
"source-map-explorer": "^2.4.2"
|
||||
"source-map-explorer": "^2.5.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
import { Button, notification } from "antd";
|
||||
import Axios from "axios";
|
||||
import React, { useState } from "react";
|
||||
import { useMutation } from "react-apollo";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { UPDATE_JOB } from "../../graphql/jobs.queries";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
bodyshop: selectBodyshop,
|
||||
});
|
||||
|
||||
export function JobCalculateTotals({ bodyshop, job }) {
|
||||
const { t } = useTranslation();
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [updateJob] = useMutation(UPDATE_JOB);
|
||||
|
||||
const handleCalculate = async () => {
|
||||
setLoading(true);
|
||||
const newTotals = (
|
||||
await Axios.post("/job/totals", {
|
||||
job: job,
|
||||
shoprates: bodyshop.shoprates,
|
||||
})
|
||||
).data;
|
||||
|
||||
const result = await updateJob({
|
||||
refetchQueries: ["GET_JOB_BY_PK"],
|
||||
awaitRefetchQueries: true,
|
||||
variables: {
|
||||
jobId: job.id,
|
||||
job: {
|
||||
job_totals: newTotals,
|
||||
},
|
||||
},
|
||||
});
|
||||
if (!!!result.errors) {
|
||||
notification["success"]({ message: t("jobs.successes.updated") });
|
||||
} else {
|
||||
notification["error"]({
|
||||
message: t("jobs.errors.updating", {
|
||||
error: JSON.stringify(result.errors),
|
||||
}),
|
||||
});
|
||||
}
|
||||
setLoading(false);
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Button loading={loading} onClick={handleCalculate}>
|
||||
{t("jobs.actions.recalculate")}
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
export default connect(mapStateToProps, null)(JobCalculateTotals);
|
||||
@@ -1,12 +1,12 @@
|
||||
import { Statistic, Typography, Row, Col } from "antd";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Col, Result, Row, Statistic, Typography } from "antd";
|
||||
import Dinero from "dinero.js";
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component";
|
||||
import JobCalculateTotals from "../job-calculate-totals/job-calculate-totals.component";
|
||||
import "./job-totals-table.styles.scss";
|
||||
import { CalculateJob } from "./job-totals.utility";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
//currentUser: selectCurrentUser
|
||||
@@ -20,28 +20,16 @@ const colSpan = {
|
||||
|
||||
export function JobsTotalsTableComponent({ bodyshop, job }) {
|
||||
const { t } = useTranslation();
|
||||
const [totals, setTotals] = useState(null);
|
||||
|
||||
useEffect(() => {
|
||||
setTotals(CalculateJob(job, bodyshop.shoprates));
|
||||
}, [bodyshop, job]);
|
||||
console.log("job", job);
|
||||
|
||||
// useEffect(() => {
|
||||
// const Calculate = async () => {
|
||||
// const newTotals = (
|
||||
// await Axios.post("/job/totals", {
|
||||
// job: job,
|
||||
// shoprates: bodyshop.shoprates,
|
||||
// })
|
||||
// ).data;
|
||||
// setTotals(newTotals);
|
||||
// };
|
||||
|
||||
// Calculate();
|
||||
// }, [bodyshop, job]);
|
||||
|
||||
if (!!!totals) {
|
||||
return <LoadingSkeleton />;
|
||||
if (!!!job.job_totals) {
|
||||
return (
|
||||
<Result
|
||||
title={t("jobs.errors.nofinancial")}
|
||||
extra={<JobCalculateTotals job={job} />}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -57,142 +45,142 @@ export function JobsTotalsTableComponent({ bodyshop, job }) {
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_laa")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.laa.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.laa.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.laa.hours.toFixed(2)} @ ${
|
||||
totals.rates.laa.rate
|
||||
<td>{`(${job.job_totals.rates.laa.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.laa.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_lab")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.lab.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.lab.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.lab.hours.toFixed(2)} @ ${
|
||||
totals.rates.lab.rate
|
||||
<td>{`(${job.job_totals.rates.lab.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.lab.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_lad")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.lad.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.lad.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.lad.hours.toFixed(2)} @ ${
|
||||
totals.rates.lad.rate
|
||||
<td>{`(${job.job_totals.rates.lad.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.lad.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_lae")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.lae.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.lae.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.lae.hours.toFixed(2)} @ ${
|
||||
totals.rates.lae.rate
|
||||
<td>{`(${job.job_totals.rates.lae.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.lae.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_laf")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.laf.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.laf.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.laf.hours.toFixed(2)} @ ${
|
||||
totals.rates.laf.rate
|
||||
<td>{`(${job.job_totals.rates.laf.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.laf.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_lag")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.lag.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.lag.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.lag.hours.toFixed(2)} @ ${
|
||||
totals.rates.lag.rate
|
||||
<td>{`(${job.job_totals.rates.lag.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.lag.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_lam")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.lam.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.lam.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.lam.hours.toFixed(2)} @ ${
|
||||
totals.rates.lam.rate
|
||||
<td>{`(${job.job_totals.rates.lam.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.lam.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_lar")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.lar.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.lar.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.lar.hours.toFixed(2)} @ ${
|
||||
totals.rates.lar.rate
|
||||
<td>{`(${job.job_totals.rates.lar.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.lar.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_las")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.las.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.las.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.las.hours.toFixed(2)} @ ${
|
||||
totals.rates.las.rate
|
||||
<td>{`(${job.job_totals.rates.las.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.las.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_lau")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.lau.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.lau.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.lau.hours.toFixed(2)} @ ${
|
||||
totals.rates.lau.rate
|
||||
<td>{`(${job.job_totals.rates.lau.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.lau.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_la1")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.la1.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.la1.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.la1.hours.toFixed(2)} @ ${
|
||||
totals.rates.la1.rate
|
||||
<td>{`(${job.job_totals.rates.la1.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.la1.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_la2")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.la2.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.la2.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.la2.hours.toFixed(2)} @ ${
|
||||
totals.rates.la2.rate
|
||||
<td>{`(${job.job_totals.rates.la2.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.la2.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_la3")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.la3.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.la3.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.la3.hours.toFixed(2)} @ ${
|
||||
totals.rates.la3.rate
|
||||
<td>{`(${job.job_totals.rates.la3.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.la3.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_la4")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.la4.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.la4.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.la4.hours.toFixed(2)} @ ${
|
||||
totals.rates.la4.rate
|
||||
<td>{`(${job.job_totals.rates.la4.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.la4.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.fields.rate_atp")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.atp.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.atp.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.atp.hours.toFixed(2)} @ ${
|
||||
totals.rates.atp.rate
|
||||
<td>{`(${job.job_totals.rates.atp.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.atp.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>{t("jobs.labels.rates_subtotal")}</td>
|
||||
<td>{totals.rates.subtotal.toFormat()}</td>
|
||||
<td>{Dinero(job.job_totals.rates.subtotal).toFormat()}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -203,45 +191,57 @@ export function JobsTotalsTableComponent({ bodyshop, job }) {
|
||||
<div className="job-totals-half">
|
||||
<table>
|
||||
<tbody>
|
||||
{Object.keys(totals.parts.parts.list).map((key, idx) => (
|
||||
<tr key={idx}>
|
||||
<td>{t(`jobs.fields.${key.toLowerCase()}`)}</td>
|
||||
<td className="currency">
|
||||
{totals.parts.parts.list[key].total.toFormat()}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
))}
|
||||
{Object.keys(job.job_totals.parts.parts.list).map(
|
||||
(key, idx) => (
|
||||
<tr key={idx}>
|
||||
<td>{t(`jobs.fields.${key.toLowerCase()}`)}</td>
|
||||
<td className="currency">
|
||||
{Dinero(
|
||||
job.job_totals.parts.parts.list[key].total
|
||||
).toFormat()}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
)
|
||||
)}
|
||||
<tr>
|
||||
<td>{t("jobs.labels.partstotal")}</td>
|
||||
<td className="currency">
|
||||
{totals.parts.parts.total.toFormat()}
|
||||
{Dinero(job.job_totals.parts.parts.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.parts.parts.subtotal.toFormat()} ± ${totals.parts.parts.adjustments.toFormat()})`}</td>
|
||||
<td>{`(${Dinero(
|
||||
job.job_totals.parts.parts.subtotal
|
||||
).toFormat()} ± ${Dinero(
|
||||
job.job_totals.parts.parts.adjustments
|
||||
).toFormat()})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.labels.subletstotal")}</td>
|
||||
<td className="currency">
|
||||
{totals.parts.sublets.total.toFormat()}
|
||||
{Dinero(job.job_totals.parts.sublets.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.parts.sublets.subtotal.toFormat()} ± ${totals.parts.sublets.adjustments.toFormat()})`}</td>
|
||||
<td>{`(${Dinero(
|
||||
job.job_totals.parts.sublets.subtotal
|
||||
).toFormat()} ± ${Dinero(
|
||||
job.job_totals.parts.sublets.adjustments
|
||||
).toFormat()})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.labels.mapa")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.mapa.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.mapa.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.mapa.hours.toFixed(2)} @ ${
|
||||
totals.rates.mapa.rate
|
||||
<td>{`(${job.job_totals.rates.mapa.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.mapa.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{t("jobs.labels.mash")}</td>
|
||||
<td className="currency">
|
||||
{totals.rates.mash.total.toFormat()}
|
||||
{Dinero(job.job_totals.rates.mash.total).toFormat()}
|
||||
</td>
|
||||
<td>{`(${totals.rates.mash.hours.toFixed(2)} @ ${
|
||||
totals.rates.mash.rate
|
||||
<td>{`(${job.job_totals.rates.mash.hours.toFixed(2)} @ ${
|
||||
job.job_totals.rates.mash.rate
|
||||
})`}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -260,15 +260,15 @@ export function JobsTotalsTableComponent({ bodyshop, job }) {
|
||||
>
|
||||
<Statistic
|
||||
title={t("jobs.labels.state_tax_amt")}
|
||||
value={totals.totals.state_tax.toFormat()}
|
||||
value={Dinero(job.job_totals.totals.state_tax).toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.local_tax_amt")}
|
||||
value={totals.totals.local_tax.toFormat()}
|
||||
value={Dinero(job.job_totals.totals.local_tax).toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.federal_tax_amt")}
|
||||
value={totals.totals.federal_tax.toFormat()}
|
||||
value={Dinero(job.job_totals.totals.federal_tax).toFormat()}
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
@@ -285,17 +285,18 @@ export function JobsTotalsTableComponent({ bodyshop, job }) {
|
||||
>
|
||||
<Statistic
|
||||
title={t("jobs.labels.subtotal")}
|
||||
value={totals.totals.subtotal.toFormat()}
|
||||
value={Dinero(job.job_totals.totals.subtotal).toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.total_repairs")}
|
||||
value={totals.totals.total_repairs.toFormat()}
|
||||
value={Dinero(job.job_totals.totals.total_repairs).toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.net_repairs")}
|
||||
value={totals.totals.net_repairs.toFormat()}
|
||||
value={Dinero(job.job_totals.totals.net_repairs).toFormat()}
|
||||
/>
|
||||
</div>
|
||||
<JobCalculateTotals job={job} />
|
||||
</div>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
@@ -1,322 +1,322 @@
|
||||
import Dinero from "dinero.js";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
// import Dinero from "dinero.js";
|
||||
// import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
|
||||
export function CalculateJob(job, shoprates) {
|
||||
logImEXEvent("job_calculate_total");
|
||||
// export function CalculateJob(job, shoprates) {
|
||||
// logImEXEvent("job_calculate_total");
|
||||
|
||||
let ret = {
|
||||
parts: CalculatePartsTotals(job.joblines),
|
||||
rates: CalculateRatesTotals(job, shoprates),
|
||||
custPayable: CalculateCustPayable(job),
|
||||
};
|
||||
ret.totals = CalculateTaxesTotals(job, ret);
|
||||
console.log("CalculateJob -> Final", ret);
|
||||
return ret;
|
||||
}
|
||||
// let ret = {
|
||||
// parts: CalculatePartsTotals(job.joblines),
|
||||
// rates: CalculateRatesTotals(job, shoprates),
|
||||
// custPayable: CalculateCustPayable(job),
|
||||
// };
|
||||
// ret.totals = CalculateTaxesTotals(job, ret);
|
||||
// console.log("CalculateJob -> Final", ret);
|
||||
// return ret;
|
||||
// }
|
||||
|
||||
function CalculateTaxesTotals(job, otherTotals) {
|
||||
const subtotal = otherTotals.parts.parts.subtotal
|
||||
.add(otherTotals.parts.sublets.subtotal)
|
||||
.add(otherTotals.rates.subtotal)
|
||||
.add(Dinero({ amount: (job.towing_payable || 0) * 100 }))
|
||||
.add(Dinero({ amount: (job.storage_payable || 0) * 100 }));
|
||||
//TODO Levies should be included??
|
||||
// function CalculateTaxesTotals(job, otherTotals) {
|
||||
// const subtotal = otherTotals.parts.parts.subtotal
|
||||
// .add(otherTotals.parts.sublets.subtotal)
|
||||
// .add(otherTotals.rates.subtotal)
|
||||
// .add(Dinero({ amount: (job.towing_payable || 0) * 100 }))
|
||||
// .add(Dinero({ amount: (job.storage_payable || 0) * 100 }));
|
||||
// //TODO Levies should be included??
|
||||
|
||||
const statePartsTax = job.joblines.reduce((acc, val) => {
|
||||
if (!!!val.tax_part) return acc;
|
||||
if (!!job.parts_tax_rates[val.part_type]) {
|
||||
return acc.add(
|
||||
Dinero({ amount: Math.round(val.act_price * 100) })
|
||||
.multiply(val.part_qty)
|
||||
.percentage(
|
||||
(job.parts_tax_rates[val.part_type].prt_tax_rt || 0) * 100
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return acc;
|
||||
}
|
||||
}, Dinero({ amount: 0 }));
|
||||
let ret = {
|
||||
subtotal: subtotal,
|
||||
federal_tax: subtotal.percentage((job.federal_tax_rate || 0) * 100),
|
||||
statePartsTax,
|
||||
state_tax: statePartsTax
|
||||
.add(
|
||||
otherTotals.rates.rates_subtotal.percentage((job.tax_lbr_rt || 0) * 100)
|
||||
)
|
||||
.add(
|
||||
Dinero({
|
||||
amount: Math.round((job.towing_payable || 0) * 100),
|
||||
}).percentage((job.tax_tow_rt || 0) * 100)
|
||||
)
|
||||
.add(
|
||||
Dinero({
|
||||
amount: Math.round((job.storage_payable || 0) * 100),
|
||||
}).percentage((job.tax_str_rt || 0) * 100)
|
||||
)
|
||||
.add(
|
||||
otherTotals.rates.mapa.total
|
||||
.add(otherTotals.rates.mash.total)
|
||||
.percentage((job.tax_paint_mat_rt || 0) * 100)
|
||||
),
|
||||
local_tax: subtotal.percentage((job.local_tax_rate || 0) * 100),
|
||||
};
|
||||
ret.total_repairs = ret.subtotal
|
||||
.add(ret.federal_tax)
|
||||
.add(ret.state_tax)
|
||||
.add(ret.local_tax);
|
||||
ret.net_repairs = ret.total_repairs.subtract(otherTotals.custPayable.total);
|
||||
// const statePartsTax = job.joblines.reduce((acc, val) => {
|
||||
// if (!!!val.tax_part) return acc;
|
||||
// if (!!job.parts_tax_rates[val.part_type]) {
|
||||
// return acc.add(
|
||||
// Dinero({ amount: Math.round(val.act_price * 100) })
|
||||
// .multiply(val.part_qty)
|
||||
// .percentage(
|
||||
// (job.parts_tax_rates[val.part_type].prt_tax_rt || 0) * 100
|
||||
// )
|
||||
// );
|
||||
// } else {
|
||||
// return acc;
|
||||
// }
|
||||
// }, Dinero({ amount: 0 }));
|
||||
// let ret = {
|
||||
// subtotal: subtotal,
|
||||
// federal_tax: subtotal.percentage((job.federal_tax_rate || 0) * 100),
|
||||
// statePartsTax,
|
||||
// state_tax: statePartsTax
|
||||
// .add(
|
||||
// otherTotals.rates.rates_subtotal.percentage((job.tax_lbr_rt || 0) * 100)
|
||||
// )
|
||||
// .add(
|
||||
// Dinero({
|
||||
// amount: Math.round((job.towing_payable || 0) * 100),
|
||||
// }).percentage((job.tax_tow_rt || 0) * 100)
|
||||
// )
|
||||
// .add(
|
||||
// Dinero({
|
||||
// amount: Math.round((job.storage_payable || 0) * 100),
|
||||
// }).percentage((job.tax_str_rt || 0) * 100)
|
||||
// )
|
||||
// .add(
|
||||
// otherTotals.rates.mapa.total
|
||||
// .add(otherTotals.rates.mash.total)
|
||||
// .percentage((job.tax_paint_mat_rt || 0) * 100)
|
||||
// ),
|
||||
// local_tax: subtotal.percentage((job.local_tax_rate || 0) * 100),
|
||||
// };
|
||||
// ret.total_repairs = ret.subtotal
|
||||
// .add(ret.federal_tax)
|
||||
// .add(ret.state_tax)
|
||||
// .add(ret.local_tax);
|
||||
// ret.net_repairs = ret.total_repairs.subtract(otherTotals.custPayable.total);
|
||||
|
||||
return ret;
|
||||
}
|
||||
// return ret;
|
||||
// }
|
||||
|
||||
//Rates are multipled by 10 to reduce the errors of rounding.
|
||||
//Adjusted for when adding to total by dividing by 10.
|
||||
function CalculateRatesTotals(ratesList, shoprates) {
|
||||
const jobLines = ratesList.joblines;
|
||||
// //Rates are multipled by 10 to reduce the errors of rounding.
|
||||
// //Adjusted for when adding to total by dividing by 10.
|
||||
// function CalculateRatesTotals(ratesList, shoprates) {
|
||||
// const jobLines = ratesList.joblines;
|
||||
|
||||
let ret = {
|
||||
la1: {
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LA1")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
rate: ratesList.rate_la1 || 0,
|
||||
},
|
||||
la2: {
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LA2")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
rate: ratesList.rate_la2 || 0,
|
||||
},
|
||||
la3: {
|
||||
rate: ratesList.rate_la3 || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LA3")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
la4: {
|
||||
rate: ratesList.rate_la4 || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LA4")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
laa: {
|
||||
rate: ratesList.rate_laa || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAA")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
lab: {
|
||||
rate: ratesList.rate_lab || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAB")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
lad: {
|
||||
rate: ratesList.rate_lad || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAD")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
lae: {
|
||||
rate: ratesList.rate_lae || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAE")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
laf: {
|
||||
rate: ratesList.rate_laf || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAF")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
lag: {
|
||||
rate: ratesList.rate_lag || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAG")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
lam: {
|
||||
rate: ratesList.rate_lam || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAM")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
lar: {
|
||||
rate: ratesList.rate_lar || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAR")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
las: {
|
||||
rate: ratesList.rate_las || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAS")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
lau: {
|
||||
rate: ratesList.rate_lau || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAU")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
atp: {
|
||||
rate: shoprates.rate_atp || 0,
|
||||
hours:
|
||||
jobLines.filter((item) => item.line_desc.includes("ATS Amount"))
|
||||
.length > 0
|
||||
? jobLines
|
||||
.filter(
|
||||
(item) =>
|
||||
item.mod_lbr_ty !== "LA1" &&
|
||||
item.mod_lbr_ty !== "LA2" &&
|
||||
item.mod_lbr_ty !== "LA3" &&
|
||||
item.mod_lbr_ty !== "LA4" &&
|
||||
item.mod_lbr_ty !== "LAU" &&
|
||||
item.mod_lbr_ty !== "LAG" &&
|
||||
item.mod_lbr_ty !== "LAS" &&
|
||||
item.mod_lbr_ty !== "LAA"
|
||||
)
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0)
|
||||
: 0,
|
||||
},
|
||||
mapa: {
|
||||
rate: ratesList.rate_mapa || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty === "LAR")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
mash: {
|
||||
rate: ratesList.rate_mash || 0,
|
||||
hours: jobLines
|
||||
.filter((item) => item.mod_lbr_ty !== "LAR")
|
||||
.reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
},
|
||||
};
|
||||
// let ret = {
|
||||
// la1: {
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LA1")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// rate: ratesList.rate_la1 || 0,
|
||||
// },
|
||||
// la2: {
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LA2")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// rate: ratesList.rate_la2 || 0,
|
||||
// },
|
||||
// la3: {
|
||||
// rate: ratesList.rate_la3 || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LA3")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// la4: {
|
||||
// rate: ratesList.rate_la4 || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LA4")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// laa: {
|
||||
// rate: ratesList.rate_laa || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAA")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// lab: {
|
||||
// rate: ratesList.rate_lab || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAB")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// lad: {
|
||||
// rate: ratesList.rate_lad || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAD")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// lae: {
|
||||
// rate: ratesList.rate_lae || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAE")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// laf: {
|
||||
// rate: ratesList.rate_laf || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAF")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// lag: {
|
||||
// rate: ratesList.rate_lag || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAG")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// lam: {
|
||||
// rate: ratesList.rate_lam || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAM")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// lar: {
|
||||
// rate: ratesList.rate_lar || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAR")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// las: {
|
||||
// rate: ratesList.rate_las || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAS")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// lau: {
|
||||
// rate: ratesList.rate_lau || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAU")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// atp: {
|
||||
// rate: shoprates.rate_atp || 0,
|
||||
// hours:
|
||||
// jobLines.filter((item) => item.line_desc.includes("ATS Amount"))
|
||||
// .length > 0
|
||||
// ? jobLines
|
||||
// .filter(
|
||||
// (item) =>
|
||||
// item.mod_lbr_ty !== "LA1" &&
|
||||
// item.mod_lbr_ty !== "LA2" &&
|
||||
// item.mod_lbr_ty !== "LA3" &&
|
||||
// item.mod_lbr_ty !== "LA4" &&
|
||||
// item.mod_lbr_ty !== "LAU" &&
|
||||
// item.mod_lbr_ty !== "LAG" &&
|
||||
// item.mod_lbr_ty !== "LAS" &&
|
||||
// item.mod_lbr_ty !== "LAA"
|
||||
// )
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0)
|
||||
// : 0,
|
||||
// },
|
||||
// mapa: {
|
||||
// rate: ratesList.rate_mapa || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty === "LAR")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// mash: {
|
||||
// rate: ratesList.rate_mash || 0,
|
||||
// hours: jobLines
|
||||
// .filter((item) => item.mod_lbr_ty !== "LAR")
|
||||
// .reduce((acc, value) => acc + value.mod_lb_hrs * 10, 0),
|
||||
// },
|
||||
// };
|
||||
|
||||
let subtotal = Dinero({ amount: 0 });
|
||||
let rates_subtotal = Dinero({ amount: 0 });
|
||||
for (const property in ret) {
|
||||
ret[property].total = Dinero({ amount: ret[property].rate * 100 })
|
||||
.multiply(ret[property].hours)
|
||||
.divide(10);
|
||||
subtotal = subtotal.add(ret[property].total);
|
||||
if (
|
||||
property !== "mapa" &&
|
||||
property !== "mash"
|
||||
//&& property !== "rate_atp"
|
||||
)
|
||||
rates_subtotal = rates_subtotal.add(ret[property].total);
|
||||
}
|
||||
ret.subtotal = subtotal;
|
||||
ret.rates_subtotal = rates_subtotal;
|
||||
// let subtotal = Dinero({ amount: 0 });
|
||||
// let rates_subtotal = Dinero({ amount: 0 });
|
||||
// for (const property in ret) {
|
||||
// ret[property].total = Dinero({ amount: ret[property].rate * 100 })
|
||||
// .multiply(ret[property].hours)
|
||||
// .divide(10);
|
||||
// subtotal = subtotal.add(ret[property].total);
|
||||
// if (
|
||||
// property !== "mapa" &&
|
||||
// property !== "mash"
|
||||
// //&& property !== "rate_atp"
|
||||
// )
|
||||
// rates_subtotal = rates_subtotal.add(ret[property].total);
|
||||
// }
|
||||
// ret.subtotal = subtotal;
|
||||
// ret.rates_subtotal = rates_subtotal;
|
||||
|
||||
return ret;
|
||||
}
|
||||
// return ret;
|
||||
// }
|
||||
|
||||
function CalculatePartsTotals(jobLines) {
|
||||
const ret = jobLines.reduce(
|
||||
(acc, value) => {
|
||||
switch (value.part_type) {
|
||||
case "PAS":
|
||||
case "PASL":
|
||||
return {
|
||||
...acc,
|
||||
sublets: {
|
||||
...acc.sublets,
|
||||
subtotal: acc.sublets.subtotal.add(
|
||||
Dinero({ amount: Math.round(value.act_price * 100) })
|
||||
),
|
||||
//TODO Add Adjustments in
|
||||
},
|
||||
};
|
||||
// case "PAA":
|
||||
// case "PAC":
|
||||
// case "PAG":
|
||||
// case "PAL":
|
||||
// case "PAM":
|
||||
// case "PAN":
|
||||
// case "PAO":
|
||||
// case "PAP":
|
||||
// case "PAR":
|
||||
default:
|
||||
if (value.part_type === null) return acc;
|
||||
return {
|
||||
...acc,
|
||||
parts: {
|
||||
...acc.parts,
|
||||
list: {
|
||||
...acc.parts.list,
|
||||
[value.part_type]:
|
||||
acc.parts.list[value.part_type] &&
|
||||
acc.parts.list[value.part_type].total
|
||||
? {
|
||||
total: acc.parts.list[value.part_type].total.add(
|
||||
Dinero({
|
||||
amount: Math.round((value.act_price || 0) * 100),
|
||||
}).multiply(value.part_qty || 1)
|
||||
),
|
||||
}
|
||||
: {
|
||||
total: Dinero({
|
||||
amount: Math.round((value.act_price || 0) * 100),
|
||||
}).multiply(value.part_qty || 1),
|
||||
},
|
||||
},
|
||||
subtotal: acc.parts.subtotal.add(
|
||||
Dinero({ amount: Math.round(value.act_price * 100) }).multiply(
|
||||
value.part_qty
|
||||
)
|
||||
),
|
||||
//TODO Add Adjustments in
|
||||
},
|
||||
};
|
||||
// default:
|
||||
// return acc;
|
||||
}
|
||||
},
|
||||
{
|
||||
parts: {
|
||||
list: {},
|
||||
subtotal: Dinero({ amount: 0 }),
|
||||
adjustments: Dinero({ amount: 0 }),
|
||||
total: Dinero({ amount: 0 }),
|
||||
},
|
||||
sublets: {
|
||||
subtotal: Dinero({ amount: 0 }),
|
||||
adjustments: Dinero({ amount: 0 }),
|
||||
total: Dinero({ amount: 0 }),
|
||||
},
|
||||
}
|
||||
);
|
||||
// function CalculatePartsTotals(jobLines) {
|
||||
// const ret = jobLines.reduce(
|
||||
// (acc, value) => {
|
||||
// switch (value.part_type) {
|
||||
// case "PAS":
|
||||
// case "PASL":
|
||||
// return {
|
||||
// ...acc,
|
||||
// sublets: {
|
||||
// ...acc.sublets,
|
||||
// subtotal: acc.sublets.subtotal.add(
|
||||
// Dinero({ amount: Math.round(value.act_price * 100) })
|
||||
// ),
|
||||
// //TODO Add Adjustments in
|
||||
// },
|
||||
// };
|
||||
// // case "PAA":
|
||||
// // case "PAC":
|
||||
// // case "PAG":
|
||||
// // case "PAL":
|
||||
// // case "PAM":
|
||||
// // case "PAN":
|
||||
// // case "PAO":
|
||||
// // case "PAP":
|
||||
// // case "PAR":
|
||||
// default:
|
||||
// if (value.part_type === null) return acc;
|
||||
// return {
|
||||
// ...acc,
|
||||
// parts: {
|
||||
// ...acc.parts,
|
||||
// list: {
|
||||
// ...acc.parts.list,
|
||||
// [value.part_type]:
|
||||
// acc.parts.list[value.part_type] &&
|
||||
// acc.parts.list[value.part_type].total
|
||||
// ? {
|
||||
// total: acc.parts.list[value.part_type].total.add(
|
||||
// Dinero({
|
||||
// amount: Math.round((value.act_price || 0) * 100),
|
||||
// }).multiply(value.part_qty || 1)
|
||||
// ),
|
||||
// }
|
||||
// : {
|
||||
// total: Dinero({
|
||||
// amount: Math.round((value.act_price || 0) * 100),
|
||||
// }).multiply(value.part_qty || 1),
|
||||
// },
|
||||
// },
|
||||
// subtotal: acc.parts.subtotal.add(
|
||||
// Dinero({ amount: Math.round(value.act_price * 100) }).multiply(
|
||||
// value.part_qty
|
||||
// )
|
||||
// ),
|
||||
// //TODO Add Adjustments in
|
||||
// },
|
||||
// };
|
||||
// // default:
|
||||
// // return acc;
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// parts: {
|
||||
// list: {},
|
||||
// subtotal: Dinero({ amount: 0 }),
|
||||
// adjustments: Dinero({ amount: 0 }),
|
||||
// total: Dinero({ amount: 0 }),
|
||||
// },
|
||||
// sublets: {
|
||||
// subtotal: Dinero({ amount: 0 }),
|
||||
// adjustments: Dinero({ amount: 0 }),
|
||||
// total: Dinero({ amount: 0 }),
|
||||
// },
|
||||
// }
|
||||
// );
|
||||
|
||||
return {
|
||||
parts: {
|
||||
...ret.parts,
|
||||
total: ret.parts.subtotal, //+ ret.parts.adjustments
|
||||
},
|
||||
sublets: {
|
||||
...ret.sublets,
|
||||
total: ret.sublets.subtotal, // + ret.sublets.adjustments,
|
||||
},
|
||||
};
|
||||
}
|
||||
// return {
|
||||
// parts: {
|
||||
// ...ret.parts,
|
||||
// total: ret.parts.subtotal, //+ ret.parts.adjustments
|
||||
// },
|
||||
// sublets: {
|
||||
// ...ret.sublets,
|
||||
// total: ret.sublets.subtotal, // + ret.sublets.adjustments,
|
||||
// },
|
||||
// };
|
||||
// }
|
||||
|
||||
function CalculateCustPayable(job) {
|
||||
let ret = {
|
||||
deductible: Dinero({ amount: (job.ded_amt || 0) * 100 }) || 0,
|
||||
federal_tax: Dinero({ amount: (job.federal_tax_payable || 0) * 100 }), //TODO Should this be renamed to make it more clear this is customer GST?
|
||||
other_customer_amount: Dinero({
|
||||
amount: (job.other_amount_payable || 0) * 100,
|
||||
}),
|
||||
dep_taxes: Dinero({ amount: job.depreciation_taxes || 0 }),
|
||||
};
|
||||
// function CalculateCustPayable(job) {
|
||||
// let ret = {
|
||||
// deductible: Dinero({ amount: (job.ded_amt || 0) * 100 }) || 0,
|
||||
// federal_tax: Dinero({ amount: (job.federal_tax_payable || 0) * 100 }), //TODO Should this be renamed to make it more clear this is customer GST?
|
||||
// other_customer_amount: Dinero({
|
||||
// amount: (job.other_amount_payable || 0) * 100,
|
||||
// }),
|
||||
// dep_taxes: Dinero({ amount: job.depreciation_taxes || 0 }),
|
||||
// };
|
||||
|
||||
ret.total = ret.deductible
|
||||
.add(ret.federal_tax)
|
||||
.add(ret.federal_tax)
|
||||
.add(ret.other_customer_amount)
|
||||
.add(ret.dep_taxes);
|
||||
// ret.total = ret.deductible
|
||||
// .add(ret.federal_tax)
|
||||
// .add(ret.federal_tax)
|
||||
// .add(ret.other_customer_amount)
|
||||
// .add(ret.dep_taxes);
|
||||
|
||||
return ret;
|
||||
}
|
||||
// return ret;
|
||||
// }
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import { useMutation, useQuery } from "@apollo/react-hooks";
|
||||
import { notification } from "antd";
|
||||
import Axios from "axios";
|
||||
import Dinero from "dinero.js";
|
||||
import React, { useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { useHistory } from "react-router-dom";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { CalculateJob } from "../../components/job-totals-table/job-totals.utility";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
import {
|
||||
DELETE_ALL_AVAILABLE_NEW_JOBS,
|
||||
QUERY_AVAILABLE_NEW_JOBS,
|
||||
@@ -15,7 +17,6 @@ import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import AlertComponent from "../alert/alert.component";
|
||||
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||
import JobsAvailableComponent from "./jobs-available-new.component";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
bodyshop: selectBodyshop,
|
||||
@@ -40,7 +41,7 @@ export function JobsAvailableContainer({
|
||||
const [insertNewJob] = useMutation(INSERT_NEW_JOB);
|
||||
const [loadEstData, estData] = estDataLazyLoad;
|
||||
|
||||
const onModalOk = () => {
|
||||
const onModalOk = async () => {
|
||||
logImEXEvent("job_import_new");
|
||||
|
||||
setModalVisible(false);
|
||||
@@ -59,19 +60,21 @@ export function JobsAvailableContainer({
|
||||
message: t("jobs.errors.creating", { error: "No job data present." }),
|
||||
});
|
||||
} else {
|
||||
const newTotals = CalculateJob(
|
||||
{
|
||||
...estData.data.available_jobs_by_pk.est_data,
|
||||
joblines: estData.data.available_jobs_by_pk.est_data.joblines.data,
|
||||
},
|
||||
bodyshop.shoprates
|
||||
);
|
||||
const newTotals = (
|
||||
await Axios.post("/job/totals", {
|
||||
job: {
|
||||
...estData.data.available_jobs_by_pk.est_data,
|
||||
joblines: estData.data.available_jobs_by_pk.est_data.joblines.data,
|
||||
},
|
||||
shoprates: bodyshop.shoprates,
|
||||
})
|
||||
).data;
|
||||
|
||||
const newJob = {
|
||||
...estData.data.available_jobs_by_pk.est_data,
|
||||
clm_total: newTotals.totals.total_repairs.toFormat("0.00"),
|
||||
owner_owing: newTotals.custPayable.total.toFormat("0.00"),
|
||||
job_totals: JSON.stringify(newTotals),
|
||||
clm_total: Dinero(newTotals.totals.total_repairs).toFormat("0.00"),
|
||||
owner_owing: Dinero(newTotals.custPayable.total).toFormat("0.00"),
|
||||
job_totals: newTotals,
|
||||
};
|
||||
|
||||
insertNewJob({
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import { useApolloClient, useMutation, useQuery } from "@apollo/react-hooks";
|
||||
import { notification } from "antd";
|
||||
import Axios from "axios";
|
||||
import Dinero from "dinero.js";
|
||||
import gql from "graphql-tag";
|
||||
import React, { useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { useHistory } from "react-router-dom";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { CalculateJob } from "../../components/job-totals-table/job-totals.utility";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
import {
|
||||
DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS,
|
||||
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
|
||||
@@ -18,7 +20,6 @@ import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||
import JobsAvailableSupplementComponent from "./jobs-available-supplement.component";
|
||||
import { GetSupplementDelta } from "./jobs-available-supplement.estlines.util";
|
||||
import HeaderFields from "./jobs-available-supplement.headerfields";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
bodyshop: selectBodyshop,
|
||||
@@ -74,13 +75,15 @@ export function JobsAvailableSupplementContainer({
|
||||
HeaderFields.forEach((item) => delete supp[item]);
|
||||
}
|
||||
|
||||
const newTotals = CalculateJob(
|
||||
{
|
||||
...estData.data.available_jobs_by_pk.est_data,
|
||||
joblines: estData.data.available_jobs_by_pk.est_data.joblines.data,
|
||||
},
|
||||
bodyshop.shoprates
|
||||
);
|
||||
const newTotals = (
|
||||
await Axios.post("/job/totals", {
|
||||
job: {
|
||||
...estData.data.available_jobs_by_pk.est_data,
|
||||
joblines: estData.data.available_jobs_by_pk.est_data.joblines.data,
|
||||
},
|
||||
shoprates: bodyshop.shoprates,
|
||||
})
|
||||
).data;
|
||||
|
||||
let suppDelta = await GetSupplementDelta(
|
||||
client,
|
||||
@@ -99,9 +102,9 @@ export function JobsAvailableSupplementContainer({
|
||||
jobId: selectedJob,
|
||||
job: {
|
||||
...supp,
|
||||
clm_total: newTotals.totals.total_repairs.toFormat("0.00"),
|
||||
owner_owing: newTotals.custPayable.total.toFormat("0.00"),
|
||||
job_totals: JSON.stringify(newTotals),
|
||||
clm_total: Dinero(newTotals.totals.total_repairs).toFormat("0.00"),
|
||||
owner_owing: Dinero(newTotals.custPayable.total).toFormat("0.00"),
|
||||
job_totals: newTotals,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
@@ -16,7 +16,7 @@ export function JobsCloseSaveButton({
|
||||
bodyshop,
|
||||
suspenseAmount,
|
||||
jobId,
|
||||
jobTotals,
|
||||
|
||||
labMatAllocations,
|
||||
partsAllocations,
|
||||
setInvoicedState,
|
||||
@@ -60,9 +60,10 @@ export function JobsCloseSaveButton({
|
||||
return (
|
||||
<Button
|
||||
onClick={handleSave}
|
||||
type='primary'
|
||||
type="primary"
|
||||
disabled={suspenseAmount > 0 || disabled}
|
||||
loading={loading}>
|
||||
loading={loading}
|
||||
>
|
||||
{t("general.actions.save")}
|
||||
</Button>
|
||||
);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { Descriptions, Statistic } from "antd";
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import Dinero from "dinero.js";
|
||||
|
||||
export default function JobsCloseTotals({
|
||||
jobTotals,
|
||||
labMatTotal,
|
||||
@@ -17,47 +19,57 @@ export default function JobsCloseTotals({
|
||||
>
|
||||
<Descriptions.Item label={t("jobs.labels.partstotal")}>
|
||||
<Statistic
|
||||
value={jobTotals.parts.parts.total.toFormat()}
|
||||
suffix={`(${jobTotals.parts.parts.subtotal.toFormat()} ± ${jobTotals.parts.parts.adjustments.toFormat()})`}
|
||||
value={Dinero(jobTotals.parts.parts.total).toFormat()}
|
||||
suffix={`(${Dinero(
|
||||
jobTotals.parts.parts.subtotal
|
||||
).toFormat()} ± ${Dinero(
|
||||
jobTotals.parts.parts.adjustments
|
||||
).toFormat()})`}
|
||||
/>
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={t("jobs.labels.subletstotal")}>
|
||||
<Statistic
|
||||
value={jobTotals.parts.sublets.total.toFormat()}
|
||||
suffix={`(${jobTotals.parts.sublets.subtotal.toFormat()} ± ${jobTotals.parts.sublets.adjustments.toFormat()})`}
|
||||
value={Dinero(jobTotals.parts.sublets.total).toFormat()}
|
||||
suffix={`(${Dinero(
|
||||
jobTotals.parts.sublets.subtotal
|
||||
).toFormat()} ± ${Dinero(
|
||||
jobTotals.parts.sublets.adjustments
|
||||
).toFormat()})`}
|
||||
/>
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={t("jobs.labels.subtotal")}>
|
||||
<Statistic value={jobTotals.totals.subtotal.toFormat()} />
|
||||
<Statistic value={Dinero(jobTotals.totals.subtotal).toFormat()} />
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={t("jobs.labels.federal_tax_amt")}>
|
||||
<Statistic value={jobTotals.totals.federal_tax.toFormat()} />
|
||||
<Statistic value={Dinero(jobTotals.totals.federal_tax).toFormat()} />
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={t("jobs.labels.state_tax_amt")}>
|
||||
<Statistic value={jobTotals.totals.state_tax.toFormat()} />
|
||||
<Statistic value={Dinero(jobTotals.totals.state_tax).toFormat()} />
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={t("jobs.labels.local_tax_amt")}>
|
||||
<Statistic value={jobTotals.totals.local_tax.toFormat()} />
|
||||
<Statistic value={Dinero(jobTotals.totals.local_tax).toFormat()} />
|
||||
</Descriptions.Item>
|
||||
</Descriptions>
|
||||
<Statistic
|
||||
title={t("jobs.labels.total_repairs")}
|
||||
value={jobTotals.totals.total_repairs.toFormat()}
|
||||
value={Dinero(jobTotals.totals.total_repairs).toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.net_repairs")}
|
||||
value={jobTotals.totals.net_repairs.toFormat()}
|
||||
value={Dinero(jobTotals.totals.net_repairs).toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.suspense")}
|
||||
valueStyle={{
|
||||
color:
|
||||
jobTotals.totals.subtotal.subtract(labMatTotal).subtract(partsTotal)
|
||||
Dinero(jobTotals.totals.subtotal)
|
||||
.subtract(labMatTotal)
|
||||
.subtract(partsTotal)
|
||||
.getAmount() === 0
|
||||
? "green"
|
||||
: "red",
|
||||
}}
|
||||
value={jobTotals.totals.subtotal
|
||||
value={Dinero(jobTotals.totals.subtotal)
|
||||
.subtract(labMatTotal)
|
||||
.subtract(partsTotal)
|
||||
.toFormat()}
|
||||
|
||||
@@ -109,9 +109,8 @@ export function JobsCloseComponent({ job, bodyshop, jobTotals }) {
|
||||
setInvoicedState={setInvoiced}
|
||||
partsAllocations={partsAllocations}
|
||||
labMatAllocations={labmatAllocations}
|
||||
jobTotals={jobTotals}
|
||||
disabled={!!job.date_exported}
|
||||
suspenseAmount={jobTotals.totals.subtotal
|
||||
suspenseAmount={Dinero(jobTotals.totals.subtotal)
|
||||
.subtract(labmatAllocatedTotal)
|
||||
.subtract(partsAllocatedTotal)
|
||||
.getAmount()}
|
||||
|
||||
@@ -5,7 +5,6 @@ import { connect } from "react-redux";
|
||||
import { useParams } from "react-router-dom";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import AlertComponent from "../../components/alert/alert.component";
|
||||
import { CalculateJob } from "../../components/job-totals-table/job-totals.utility";
|
||||
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component";
|
||||
import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component";
|
||||
import { QUERY_JOB_CLOSE_DETAILS } from "../../graphql/jobs.queries";
|
||||
@@ -53,13 +52,12 @@ export function JobsCloseContainer({ setBreadcrumbs, bodyshop }) {
|
||||
if (loading) return <LoadingSpinner />;
|
||||
if (error) return <AlertComponent message={error.message} type="error" />;
|
||||
|
||||
const jobTotals = CalculateJob(data.jobs_by_pk, bodyshop.shoprates);
|
||||
return (
|
||||
<RbacWrapper action="jobs:close">
|
||||
<div>
|
||||
<JobsCloseComponent
|
||||
job={data ? data.jobs_by_pk : {}}
|
||||
jobTotals={jobTotals}
|
||||
jobTotals={data.jobs_by_pk.job_totals}
|
||||
/>
|
||||
</div>
|
||||
</RbacWrapper>
|
||||
|
||||
@@ -661,6 +661,7 @@
|
||||
"mark": "Mark",
|
||||
"postInvoices": "Post Invoices",
|
||||
"printCenter": "Print Center",
|
||||
"recalculate": "Recalculate",
|
||||
"reconcile": "Reconcile",
|
||||
"schedule": "Schedule",
|
||||
"sendcsi": "Send CSI"
|
||||
|
||||
@@ -661,6 +661,7 @@
|
||||
"mark": "",
|
||||
"postInvoices": "Contabilizar facturas",
|
||||
"printCenter": "Centro de impresión",
|
||||
"recalculate": "",
|
||||
"reconcile": "",
|
||||
"schedule": "Programar",
|
||||
"sendcsi": ""
|
||||
|
||||
@@ -661,6 +661,7 @@
|
||||
"mark": "",
|
||||
"postInvoices": "Poster des factures",
|
||||
"printCenter": "Centre d'impression",
|
||||
"recalculate": "",
|
||||
"reconcile": "",
|
||||
"schedule": "Programme",
|
||||
"sendcsi": ""
|
||||
|
||||
277
client/yarn.lock
277
client/yarn.lock
@@ -9,6 +9,13 @@
|
||||
dependencies:
|
||||
tinycolor2 "^1.4.1"
|
||||
|
||||
"@ant-design/colors@^4.0.5":
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-4.0.5.tgz#d7d100d7545cca8f624954604a6892fc48ba5aae"
|
||||
integrity sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==
|
||||
dependencies:
|
||||
tinycolor2 "^1.4.1"
|
||||
|
||||
"@ant-design/css-animation@^1.7.2":
|
||||
version "1.7.2"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/css-animation/-/css-animation-1.7.2.tgz#4ee5d2ec0fb7cc0a78b44e1c82628bd4621ac7e3"
|
||||
@@ -31,6 +38,18 @@
|
||||
insert-css "^2.0.0"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
"@ant-design/icons@^4.2.2":
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.2.2.tgz#6533c5a02aec49238ec4748074845ad7d85a4f5e"
|
||||
integrity sha512-DrVV+wcupnHS7PehJ6KiTcJtAR5c25UMgjGECCc6pUT9rsvw0AuYG+a4HDjfxEQuDqKTHwW+oX/nIvCymyLE8Q==
|
||||
dependencies:
|
||||
"@ant-design/colors" "^3.1.0"
|
||||
"@ant-design/icons-svg" "^4.0.0"
|
||||
"@babel/runtime" "^7.10.4"
|
||||
classnames "^2.2.6"
|
||||
insert-css "^2.0.0"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
"@ant-design/react-slick@~0.27.0":
|
||||
version "0.27.0"
|
||||
resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-0.27.0.tgz#c5d4bfd879885b74024ffbce42cccb5f7bff41e9"
|
||||
@@ -1355,10 +1374,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-1.12.0.tgz#511e572e946b07f5a603c90e078f0cd714923fac"
|
||||
integrity sha512-OqNxVb63wPZdUc7YnpacAW1WNIMSKERSewCRi+unCQ0YI0KNfrDSypyGCyel+S3GdOtKMk9KnvDknaGbnaFX4g==
|
||||
|
||||
"@firebase/firestore@1.16.4":
|
||||
version "1.16.4"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-1.16.4.tgz#29cb121f5686cab6e310bf16a1094f06f3678385"
|
||||
integrity sha512-Ur+I8a8RkkbbJRsebkYAUwKFkbh9FemDxTFD/2Vp01pAPM8S3MoIcVegAfTvnPlG/ObBq5O7wI4CRA6b/G/Iyg==
|
||||
"@firebase/firestore@1.16.5":
|
||||
version "1.16.5"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-1.16.5.tgz#b80b63f18bd70cc101f66c5e0a79dce93f036384"
|
||||
integrity sha512-GjCL4Ngy46qSdXAg9obXBuIKG2m/7a21dQktqRPaPH9xpHnymq8LxUK7sdUfyY8FBIQp6Si6O61e9fko4FjSMw==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.18"
|
||||
"@firebase/firestore-types" "1.12.0"
|
||||
@@ -1429,10 +1448,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.13.tgz#58ce5453f57e34b18186f74ef11550dfc558ede6"
|
||||
integrity sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==
|
||||
|
||||
"@firebase/performance@0.3.11":
|
||||
version "0.3.11"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.3.11.tgz#833c8abe5f5554f25545c8d28b487d8ac3ff3f95"
|
||||
integrity sha512-L00vBUa2zzoSSOq3StTN43fPxtJ+myF+t+2kP5bQGHN5WOmf22lIsuEjAy1FAscDjVjhL1k5rKMY332ZwEfblg==
|
||||
"@firebase/performance@0.4.0":
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.4.0.tgz#7f5bb47ef085cd83bf331b19d3213e11fbe88941"
|
||||
integrity sha512-LZG89G2wAjTRsIcuewIx152+DyRzQf8UtPCAjifkFiMcAY4GmZZKeIbIC3b4oQDwTgH5i0IKKd4EOv7dLD97gw==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.18"
|
||||
"@firebase/installations" "0.4.16"
|
||||
@@ -1934,10 +1953,10 @@
|
||||
"@svgr/plugin-svgo" "^4.3.1"
|
||||
loader-utils "^1.2.3"
|
||||
|
||||
"@tanem/react-nprogress@^3.0.39":
|
||||
version "3.0.39"
|
||||
resolved "https://registry.yarnpkg.com/@tanem/react-nprogress/-/react-nprogress-3.0.39.tgz#0ef9af7acb2cf6f701fd0436771c5aa2a0eec2a4"
|
||||
integrity sha512-XCvqjlydWzjJ88QC5pKEcKKSMofTncULUBv0kEhjuyO4HVcJLKDzKg3DPhN+624M3eATkHK1YW9viqDkzU1ewA==
|
||||
"@tanem/react-nprogress@^3.0.40":
|
||||
version "3.0.40"
|
||||
resolved "https://registry.yarnpkg.com/@tanem/react-nprogress/-/react-nprogress-3.0.40.tgz#dc1ce391aa1ba00bd8f069e4ad9777886356919c"
|
||||
integrity sha512-ktwQPIJJr6ooe9lWhA/0RtKkYmBUHMGpzxvJ7Oy0hW3Joi4y+xHSUK/01uUi0+f5koNBrzlkVLAYTUqwmFunTQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
hoist-non-react-statics "^3.3.2"
|
||||
@@ -2526,11 +2545,12 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
"@types/color-name" "^1.1.1"
|
||||
color-convert "^2.0.1"
|
||||
|
||||
antd@^4.5.4:
|
||||
version "4.5.4"
|
||||
resolved "https://registry.yarnpkg.com/antd/-/antd-4.5.4.tgz#1eaebcba7a0d9a2e69ad3365366026546fbf7b0f"
|
||||
integrity sha512-ToBwPaEfRXpDwkFZwEeQc8TynqVLMRX/P4V2IA2cfS4H+w4HXi89kQik4/Gx48UphHmt6fcfwtfm8QZIn3nerA==
|
||||
antd@^4.6.1:
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/antd/-/antd-4.6.1.tgz#d204215d3d00a3ac51a2e93ec2ee1a49adbdb705"
|
||||
integrity sha512-RsqbFvUNSZ5K114492BNo4p+4MpCUpzIsZLu0XFlufYLyIE3pyw184OZjPnJ7b4qlMEvlIoE14N8qCb4BnZF0w==
|
||||
dependencies:
|
||||
"@ant-design/colors" "^4.0.5"
|
||||
"@ant-design/css-animation" "^1.7.2"
|
||||
"@ant-design/icons" "^4.2.1"
|
||||
"@ant-design/react-slick" "~0.27.0"
|
||||
@@ -2538,7 +2558,7 @@ antd@^4.5.4:
|
||||
array-tree-filter "^2.1.0"
|
||||
classnames "^2.2.6"
|
||||
copy-to-clipboard "^3.2.0"
|
||||
lodash "^4.17.13"
|
||||
lodash "^4.17.20"
|
||||
moment "^2.25.3"
|
||||
omit.js "^2.0.2"
|
||||
raf "^3.4.1"
|
||||
@@ -2549,23 +2569,24 @@ antd@^4.5.4:
|
||||
rc-dialog "~8.1.0"
|
||||
rc-drawer "~4.1.0"
|
||||
rc-dropdown "~3.1.2"
|
||||
rc-field-form "~1.8.0"
|
||||
rc-field-form "~1.10.0"
|
||||
rc-image "~3.0.2"
|
||||
rc-input-number "~6.0.0"
|
||||
rc-mentions "~1.4.0"
|
||||
rc-menu "~8.5.2"
|
||||
rc-motion "^1.0.0"
|
||||
rc-notification "~4.4.0"
|
||||
rc-pagination "~2.4.5"
|
||||
rc-picker "~1.15.1"
|
||||
rc-pagination "~3.0.3"
|
||||
rc-picker "~2.0.6"
|
||||
rc-progress "~3.0.0"
|
||||
rc-rate "~2.8.2"
|
||||
rc-resize-observer "^0.2.3"
|
||||
rc-select "~11.0.12"
|
||||
rc-select "~11.1.0"
|
||||
rc-slider "~9.3.0"
|
||||
rc-steps "~4.1.0"
|
||||
rc-switch "~3.2.0"
|
||||
rc-table "~7.8.0"
|
||||
rc-tabs "~11.5.0"
|
||||
rc-table "~7.9.2"
|
||||
rc-tabs "~11.6.0"
|
||||
rc-textarea "~0.3.0"
|
||||
rc-tooltip "~4.2.0"
|
||||
rc-tree "~3.9.0"
|
||||
@@ -2981,12 +3002,12 @@ aws4@^1.8.0:
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2"
|
||||
integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==
|
||||
|
||||
axios@^0.19.2:
|
||||
version "0.19.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
|
||||
integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
|
||||
axios@^0.20.0:
|
||||
version "0.20.0"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd"
|
||||
integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==
|
||||
dependencies:
|
||||
follow-redirects "1.5.10"
|
||||
follow-redirects "^1.10.0"
|
||||
|
||||
axobject-query@^2.0.2:
|
||||
version "2.2.0"
|
||||
@@ -3660,14 +3681,6 @@ chalk@^1.1.1, chalk@^1.1.3:
|
||||
strip-ansi "^3.0.0"
|
||||
supports-color "^2.0.0"
|
||||
|
||||
chalk@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
|
||||
integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||
@@ -4628,7 +4641,7 @@ debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@3.1.0, debug@=3.1.0:
|
||||
debug@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||
@@ -5019,10 +5032,10 @@ ee-first@1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
ejs@^3.0.2:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.3.tgz#514d967a8894084d18d3d47bd169a1c0560f093d"
|
||||
integrity sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==
|
||||
ejs@^3.1.5:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b"
|
||||
integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==
|
||||
dependencies:
|
||||
jake "^10.6.1"
|
||||
|
||||
@@ -5906,21 +5919,21 @@ fingerprintjs2@^2.1.2:
|
||||
resolved "https://registry.yarnpkg.com/fingerprintjs2/-/fingerprintjs2-2.1.2.tgz#d4812e627356f04b279c63b995b72591b2ab5ed5"
|
||||
integrity sha512-ZPsLgjziFRbUb5tXWpEMtWp4XFnzSah8SiNfl3aoURDZ+2zi2tuIOYUULqDBV+Cb6paN+raWT+Q2qpOaCbX/Yw==
|
||||
|
||||
firebase@^7.18.0:
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.18.0.tgz#00e3967f5bc608f3e12c1a5f0192f559de87943e"
|
||||
integrity sha512-RGq0rWX25EDsM21TjRe1FbnygJwHXL7yN4P0Zh2Z7dWrBcfJ8tQpDxgwMDtiJTuo9UYExK3py4wjgpGJBau6wg==
|
||||
firebase@^7.19.0:
|
||||
version "7.19.0"
|
||||
resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.19.0.tgz#cfa64ebc56f3ef095df31d20f1de4dc5fa80f793"
|
||||
integrity sha512-gS0nFagMfDLEucgcMD/tCfpLH+crnTurpyMsh6JEvith7GA8cRA4S3T3300xPL6dSZliI7EiGsCNBXBil6sAUw==
|
||||
dependencies:
|
||||
"@firebase/analytics" "0.4.2"
|
||||
"@firebase/app" "0.6.10"
|
||||
"@firebase/app-types" "0.6.1"
|
||||
"@firebase/auth" "0.14.9"
|
||||
"@firebase/database" "0.6.11"
|
||||
"@firebase/firestore" "1.16.4"
|
||||
"@firebase/firestore" "1.16.5"
|
||||
"@firebase/functions" "0.4.50"
|
||||
"@firebase/installations" "0.4.16"
|
||||
"@firebase/messaging" "0.7.0"
|
||||
"@firebase/performance" "0.3.11"
|
||||
"@firebase/performance" "0.4.0"
|
||||
"@firebase/polyfill" "0.3.36"
|
||||
"@firebase/remote-config" "0.1.27"
|
||||
"@firebase/storage" "0.3.42"
|
||||
@@ -5958,18 +5971,16 @@ flush-write-stream@^1.0.0:
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.3.6"
|
||||
|
||||
follow-redirects@1.5.10:
|
||||
version "1.5.10"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
|
||||
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
|
||||
dependencies:
|
||||
debug "=3.1.0"
|
||||
|
||||
follow-redirects@^1.0.0:
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6"
|
||||
integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==
|
||||
|
||||
follow-redirects@^1.10.0:
|
||||
version "1.13.0"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
|
||||
integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
|
||||
|
||||
for-in@^0.1.3:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
|
||||
@@ -8335,6 +8346,11 @@ lodash.uniq@^4.5.0:
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
||||
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
|
||||
|
||||
lodash@^4.17.20:
|
||||
version "4.17.20"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
||||
|
||||
loglevel@^1.6.8:
|
||||
version "1.6.8"
|
||||
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
|
||||
@@ -9210,7 +9226,7 @@ onetime@^5.1.0:
|
||||
dependencies:
|
||||
mimic-fn "^2.1.0"
|
||||
|
||||
open@^7.0.2, open@^7.0.3:
|
||||
open@^7.0.2:
|
||||
version "7.0.4"
|
||||
resolved "https://registry.yarnpkg.com/open/-/open-7.0.4.tgz#c28a9d315e5c98340bf979fdcb2e58664aa10d83"
|
||||
integrity sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==
|
||||
@@ -9218,6 +9234,14 @@ open@^7.0.2, open@^7.0.3:
|
||||
is-docker "^2.0.0"
|
||||
is-wsl "^2.1.1"
|
||||
|
||||
open@^7.1.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/open/-/open-7.2.0.tgz#212959bd7b0ce2e8e3676adc76e3cf2f0a2498b4"
|
||||
integrity sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==
|
||||
dependencies:
|
||||
is-docker "^2.0.0"
|
||||
is-wsl "^2.1.1"
|
||||
|
||||
opn@^5.5.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
|
||||
@@ -10753,6 +10777,14 @@ rc-collapse@~2.0.0:
|
||||
react-is "^16.7.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-dialog@^8.1.0:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-8.1.1.tgz#ce54bd78e940c030b69d3acfc87874536966a27b"
|
||||
integrity sha512-ToyHiMlV94z8LfnmeKoVvu04Pd9+HdwwSHhY2a8IWeYGA5Cjk1WyIZvS+njCsm8rSMM4NqPqFkMZA0N/Iw0NrQ==
|
||||
dependencies:
|
||||
rc-animate "3.x"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
rc-dialog@~8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-8.1.0.tgz#393910963bb05ac19d6d136620bd09622f1d677a"
|
||||
@@ -10779,15 +10811,26 @@ rc-dropdown@^3.1.0, rc-dropdown@~3.1.2:
|
||||
classnames "^2.2.6"
|
||||
rc-trigger "^4.0.0"
|
||||
|
||||
rc-field-form@~1.8.0:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.8.0.tgz#c51312321409727e5a333873311f9c1f5e13e8c2"
|
||||
integrity sha512-WQyC3yBEKIWehNzkRMTBK/Lzdjronov9GsB9C9bgVcfpDqsIQSSBgGFAJMmWUAGs2IrCbgh9RBY0Ste4foHzvg==
|
||||
rc-field-form@~1.10.0:
|
||||
version "1.10.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.10.1.tgz#f6eb76b5f24b58938ebadfc03cdd814c24de7db3"
|
||||
integrity sha512-aosTtNTqLYX2jsG5GyCv7axe+b57XH73T7TmmrX/cmhemhtFjvNE6RkRkmtP9VOJnZg5YGC5HfK172cnJ1Ij7Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.8.4"
|
||||
async-validator "^3.0.3"
|
||||
rc-util "^5.0.0"
|
||||
|
||||
rc-image@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-3.0.2.tgz#5f57cc08a0cfe41a6a56c6c81a094f1f5c5272dc"
|
||||
integrity sha512-kzUQw0EuxjTatIY6ZJXLtwtm9jDPUK6RnQ8HBxWPCZl1trgEbddU9TwxLfyNs030qztD1j/2juRCYKsEiSgAKQ==
|
||||
dependencies:
|
||||
"@ant-design/icons" "^4.2.2"
|
||||
"@babel/runtime" "^7.11.2"
|
||||
classnames "^2.2.6"
|
||||
rc-dialog "^8.1.0"
|
||||
rc-util "^5.0.6"
|
||||
|
||||
rc-input-number@~6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-6.0.0.tgz#0c0af57c8183f3ca6b87f7edf6fed3bd5a3ba16f"
|
||||
@@ -10859,18 +10902,18 @@ rc-notification@~4.4.0:
|
||||
rc-animate "3.x"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
rc-pagination@~2.4.5:
|
||||
version "2.4.6"
|
||||
resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-2.4.6.tgz#cc030c9693c730b43592bdb6974fb32c1502a500"
|
||||
integrity sha512-1ykd3Jti+JuOFdzEFXGfVpkuH+hKxLYz3FKV6BSwnnWXLr9Y8bbm7YiTSwBmdDcOg6tinH8b4IYaKzxBWRC6EA==
|
||||
rc-pagination@~3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-3.0.3.tgz#48ce55822e153ed9f9b8961fcb3bb8ecab8df37c"
|
||||
integrity sha512-xm6LsiSOAWlxferiL5e0jcun1B9vbvYzcIkqpYZR7YvC5ZrcU9KKihb+DZe3DY+oUc49xhX2qGS4D66ITHqekQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
|
||||
rc-picker@~1.15.1:
|
||||
version "1.15.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-1.15.1.tgz#b0d647f3827468f844bc95c9255436ea787d26ce"
|
||||
integrity sha512-YW6I91R1rMDTKpWY2yYjUk3mX4ttk7l8dx5fuojGBj86TGPj0R5vh+wFoRNzOeA4qAHcRzGWGPP60HFnoxL1TA==
|
||||
rc-picker@~2.0.6:
|
||||
version "2.0.7"
|
||||
resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-2.0.7.tgz#cb8a6179a3bfcd925ebfa8a178ca5d526fdfa445"
|
||||
integrity sha512-0G8vSPRe4EGUx5TpKBL/4evB6N1qx6J8y2rXDqQPHetUbrLEhRSzWLIJ4RZpBNSqa0iOwLJ8RIW+a/1q8Wcopg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.1"
|
||||
@@ -10879,7 +10922,6 @@ rc-picker@~1.15.1:
|
||||
moment "^2.24.0"
|
||||
rc-trigger "^4.0.0"
|
||||
rc-util "^5.0.1"
|
||||
react "^16.0.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-progress@~3.0.0:
|
||||
@@ -10921,17 +10963,17 @@ rc-select@^11.1.1:
|
||||
rc-virtual-list "^1.1.2"
|
||||
warning "^4.0.3"
|
||||
|
||||
rc-select@~11.0.12:
|
||||
version "11.0.13"
|
||||
resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-11.0.13.tgz#fe5718af819d3e0bc12a55334bc1717257ef2dac"
|
||||
integrity sha512-4/GDmBkGnDhYre3Dvq5UkIRXQJW8hbGdpdH8SjquSbCktAVitYV+opd/lKI28qMcBxCgjOHgYXwZ18TF+kP2VQ==
|
||||
rc-select@~11.1.0:
|
||||
version "11.1.6"
|
||||
resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-11.1.6.tgz#39bb7c685dc61f65d5d73554df58979587c45b16"
|
||||
integrity sha512-X5kCwUGIe3uF5las4bFiXzD3F/hxs5Nz+wpf3xG6esg352ThP5kBROmMOeb91Yo2nOPZyiH6jnLsZLecnyWbZQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
rc-motion "^1.0.1"
|
||||
rc-trigger "^4.3.0"
|
||||
rc-util "^5.0.1"
|
||||
rc-virtual-list "^1.1.2"
|
||||
rc-virtual-list "^3.0.3"
|
||||
warning "^4.0.3"
|
||||
|
||||
rc-slider@~9.3.0:
|
||||
@@ -10963,22 +11005,22 @@ rc-switch@~3.2.0:
|
||||
classnames "^2.2.1"
|
||||
rc-util "^5.0.1"
|
||||
|
||||
rc-table@~7.8.0:
|
||||
version "7.8.4"
|
||||
resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.8.4.tgz#493e6e8ccd9f078a073f0f7cf46bbb02c55f74d7"
|
||||
integrity sha512-+8JPFD4oGy/4/VdXsPE/12oEkopiZoIi4cS6DJGzjf2CjhrM7KevUOjrs0MhFlXZp/Pnb8qSKoVdVHN1JYtL7Q==
|
||||
rc-table@~7.9.2:
|
||||
version "7.9.4"
|
||||
resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.9.4.tgz#d9fd41578b1d422c8f98b772bf3f0dfcb93c5b83"
|
||||
integrity sha512-af3Figjca+K3ZEzIHHc0m7jgg0Z2vdValPU2i6XEMpfrjBJIgDqkQy6qmClqQ54F0CEXaw9y2j16CI8y3jK7MQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "^2.2.5"
|
||||
raf "^3.4.1"
|
||||
rc-resize-observer "^0.2.0"
|
||||
rc-util "^5.0.0"
|
||||
rc-util "^5.0.4"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-tabs@~11.5.0:
|
||||
version "11.5.4"
|
||||
resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-11.5.4.tgz#1fc3469605fc28d47fb64c582ec83f97113dbd5a"
|
||||
integrity sha512-J7duEePQbF9G1VESfEDH05GYIa/5uS/tmMoTy4IXfohql/b/2mjR3YzKahxi0x/wQJovgBRrdfNQA5Ph99lwIw==
|
||||
rc-tabs@~11.6.0:
|
||||
version "11.6.1"
|
||||
resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-11.6.1.tgz#a31a277b12f807cc7bdc31476c0d21124ce93e14"
|
||||
integrity sha512-fJZUOmwBo2E4WTbucCSZO/N1ZK+d9K/QchgDeycTIqxl5D/xtX0Dw/vC2DFi140OFjAy2JL7H0EmsSeOFfCgzw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.10.1"
|
||||
classnames "2.x"
|
||||
@@ -11078,18 +11120,18 @@ rc-util@^5.0.0, rc-util@^5.0.1:
|
||||
react-is "^16.12.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-util@^5.0.5, rc-util@^5.0.6:
|
||||
version "5.0.6"
|
||||
resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.0.6.tgz#2b828bc87a818a66384b813f76a561ad4609e9b0"
|
||||
integrity sha512-uLGxF9WjbpJSjd6iDnIjl8ZeMUglpcuh1DwO26aaXh++yAmlB6eIAJMUwwJCuqJvo4quCvsDPg1VkqHILc4U0A==
|
||||
rc-util@^5.0.4, rc-util@^5.0.7:
|
||||
version "5.0.7"
|
||||
resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.0.7.tgz#125c3a2fd917803afbb685f9eadc789b085dc813"
|
||||
integrity sha512-nr98b5aMqqvIqxm16nF+zC3K3f81r+HsflT5E9Encr5itRwV7Vo/5GjJMNds/WiFV33rilq7vzb3xeAbCycmwg==
|
||||
dependencies:
|
||||
react-is "^16.12.0"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
rc-util@^5.0.7:
|
||||
version "5.0.7"
|
||||
resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.0.7.tgz#125c3a2fd917803afbb685f9eadc789b085dc813"
|
||||
integrity sha512-nr98b5aMqqvIqxm16nF+zC3K3f81r+HsflT5E9Encr5itRwV7Vo/5GjJMNds/WiFV33rilq7vzb3xeAbCycmwg==
|
||||
rc-util@^5.0.5, rc-util@^5.0.6:
|
||||
version "5.0.6"
|
||||
resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.0.6.tgz#2b828bc87a818a66384b813f76a561ad4609e9b0"
|
||||
integrity sha512-uLGxF9WjbpJSjd6iDnIjl8ZeMUglpcuh1DwO26aaXh++yAmlB6eIAJMUwwJCuqJvo4quCvsDPg1VkqHILc4U0A==
|
||||
dependencies:
|
||||
react-is "^16.12.0"
|
||||
shallowequal "^1.1.0"
|
||||
@@ -11112,6 +11154,15 @@ rc-virtual-list@^2.1.1:
|
||||
rc-resize-observer "^0.2.3"
|
||||
rc-util "^5.0.7"
|
||||
|
||||
rc-virtual-list@^3.0.3:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.0.4.tgz#d2d517b2c913f09ad51a6a572e496ffad887bbd2"
|
||||
integrity sha512-rWNQTMLUlFKeqYZK/Zy5aXY00KKjc0YzzmY6l68t8g6f1ivalozCvvJcKhQ9Azt5HmHdiyvUODCVk1/ZQrL5KA==
|
||||
dependencies:
|
||||
classnames "^2.2.6"
|
||||
rc-resize-observer "^0.2.3"
|
||||
rc-util "^5.0.7"
|
||||
|
||||
react-apollo@^3.1.5:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-3.1.5.tgz#36692d393c47e7ccc37f0a885c7cc5a8b4961c91"
|
||||
@@ -11156,10 +11207,10 @@ react-beautiful-dnd@^13.0.0:
|
||||
redux "^4.0.4"
|
||||
use-memo-one "^1.1.1"
|
||||
|
||||
react-big-calendar@^0.26.0:
|
||||
version "0.26.0"
|
||||
resolved "https://registry.yarnpkg.com/react-big-calendar/-/react-big-calendar-0.26.0.tgz#a8b4d7262e5d7890c10c53ba23db8631a02ef788"
|
||||
integrity sha512-TSyP+B+ZJhaj+em2brQzRCYip4Slx+7SM2Vf9SfmnMO1eWZr9DahEyy4LL+TOoF50BZXyzU5EaPqaxbuZ23xqw==
|
||||
react-big-calendar@^0.26.1:
|
||||
version "0.26.1"
|
||||
resolved "https://registry.yarnpkg.com/react-big-calendar/-/react-big-calendar-0.26.1.tgz#48e26eeeee049227436bb23457025705f070105b"
|
||||
integrity sha512-8OuWNUauoCEibrXcQpjP7tMo887yRujij1a5lgaYNbdJQzlmb1QTWl/+N0xgPfeLW/Nwiqnw3lYRgFoQiFjpSw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.1.5"
|
||||
clsx "^1.0.4"
|
||||
@@ -11262,10 +11313,10 @@ react-grid-layout@^1.0.0:
|
||||
react-draggable "^4.0.0"
|
||||
react-resizable "^1.10.0"
|
||||
|
||||
react-i18next@^11.7.0:
|
||||
version "11.7.0"
|
||||
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.7.0.tgz#f27c4c237a274e007a48ac1210db83e33719908b"
|
||||
integrity sha512-8tvVkpuxQlubcszZON+jmoCgiA9gCZ74OAYli9KChPhETtq8pJsANBTe9KRLRLmX3ubumgvidURWr0VvKz1tww==
|
||||
react-i18next@^11.7.1:
|
||||
version "11.7.1"
|
||||
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.7.1.tgz#80c993bf7c4f07937ce0e5ff4e2d7d97bfe3f42f"
|
||||
integrity sha512-K7qWaQ03Nc25BqSqdKz1iGU5inwNQnDVcen/tpiILEXyd0w/z+untrsuUy5Y3PqAkwJ7m1FACwBttSSitxDKQA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.3.1"
|
||||
html-parse-stringify2 "2.0.1"
|
||||
@@ -11277,10 +11328,10 @@ react-icons@^3.11.0:
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
|
||||
react-image-file-resizer@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/react-image-file-resizer/-/react-image-file-resizer-0.3.1.tgz#4ea645f7702a2d9b475e67b4b82d735207ccba0b"
|
||||
integrity sha512-hP6qXLyOFhPwaz+tkufsDiaHgnl5NlBVl208xlW6nlQBylzkmMCwtNCOZYgEie0sUSUYKVaTrQsbfhXxV20fbQ==
|
||||
react-image-file-resizer@^0.3.6:
|
||||
version "0.3.6"
|
||||
resolved "https://registry.yarnpkg.com/react-image-file-resizer/-/react-image-file-resizer-0.3.6.tgz#9c879971da6cdef143fb3808f641061f54a974a1"
|
||||
integrity sha512-/lu4KDwau9EHY5rj5NCNypIse19OeEm51dEruS0FWwSr42JKAGzIrxd4+HXJsoONf/xffShMqnRBU+bO0WFHfw==
|
||||
|
||||
react-images@^0.5.16:
|
||||
version "0.5.19"
|
||||
@@ -11578,7 +11629,7 @@ react-virtualized@^9.22.2:
|
||||
prop-types "^15.7.2"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
"react@>= 16.3", react@^16.0.0, react@^16.13.1:
|
||||
"react@>= 16.3", react@^16.13.1:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
|
||||
integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
|
||||
@@ -12623,23 +12674,23 @@ source-list-map@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
|
||||
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
|
||||
|
||||
source-map-explorer@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/source-map-explorer/-/source-map-explorer-2.4.2.tgz#fb23f86c3112eacde5683f24efaf4ddc9f677985"
|
||||
integrity sha512-3ECQLffCFV8QgrTqcmddLkWL4/aQs6ljYfgWCLselo5QtizOfOeUCKnS4rFn7MIrdeZLM6TZrseOtsrWZhWKoQ==
|
||||
source-map-explorer@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/source-map-explorer/-/source-map-explorer-2.5.0.tgz#42e12c76743e8a0ca0579d472ea5ba623e0d0498"
|
||||
integrity sha512-kWhlt0celEwwuULIY+sRoZKibc/8/Ec4ckcKThDMQW3hT7KxReYW1XktwFJIbZ2VF9Yf/hA74bcoIZOSXXQIgQ==
|
||||
dependencies:
|
||||
btoa "^1.2.1"
|
||||
chalk "^3.0.0"
|
||||
chalk "^4.1.0"
|
||||
convert-source-map "^1.7.0"
|
||||
ejs "^3.0.2"
|
||||
ejs "^3.1.5"
|
||||
escape-html "^1.0.3"
|
||||
glob "^7.1.6"
|
||||
gzip-size "^5.1.1"
|
||||
lodash "^4.17.15"
|
||||
open "^7.0.3"
|
||||
lodash "^4.17.20"
|
||||
open "^7.1.0"
|
||||
source-map "^0.7.3"
|
||||
temp "^0.9.1"
|
||||
yargs "^15.3.1"
|
||||
yargs "^15.4.1"
|
||||
|
||||
source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
|
||||
version "0.5.3"
|
||||
@@ -14405,7 +14456,7 @@ yargs@^13.3.0, yargs@^13.3.2:
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^13.1.2"
|
||||
|
||||
yargs@^15.3.1:
|
||||
yargs@^15.4.1:
|
||||
version "15.4.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
|
||||
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
|
||||
|
||||
@@ -26,15 +26,16 @@
|
||||
"dotenv": "8.2.0",
|
||||
"express": "^4.16.4",
|
||||
"express-sslify": "^1.2.0",
|
||||
"firebase-admin": "^9.1.0",
|
||||
"graphql-request": "^2.0.0",
|
||||
"firebase-admin": "^9.1.1",
|
||||
"graphql": "^15.3.0",
|
||||
"graphql-request": "^3.0.0",
|
||||
"handlebars": "^4.7.6",
|
||||
"lodash": "^4.17.20",
|
||||
"moment": "^2.27.0",
|
||||
"node-fetch": "^2.6.0",
|
||||
"node-mailjet": "^3.3.1",
|
||||
"phone": "^2.4.15",
|
||||
"stripe": "^8.88.0",
|
||||
"stripe": "^8.89.0",
|
||||
"twilio": "^3.49.0",
|
||||
"xmlbuilder": "^15.1.1"
|
||||
},
|
||||
@@ -42,6 +43,6 @@
|
||||
"concurrently": "^5.3.0",
|
||||
"eslint": "^6.6.0",
|
||||
"eslint-plugin-promise": "^4.2.1",
|
||||
"source-map-explorer": "^2.4.2"
|
||||
"source-map-explorer": "^2.5.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ const Dinero = require("dinero.js");
|
||||
|
||||
exports.default = async function (req, res) {
|
||||
const { job, shoprates } = req.body;
|
||||
console.log(`Calculating Job Totals for ${job.id} - ${job.ro_number}`);
|
||||
try {
|
||||
let ret = {
|
||||
parts: CalculatePartsTotals(job.joblines),
|
||||
|
||||
118
yarn.lock
118
yarn.lock
@@ -410,6 +410,11 @@ astral-regex@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
|
||||
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
||||
|
||||
async@0.9.x:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
||||
integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
@@ -515,14 +520,6 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2:
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
|
||||
integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||
@@ -742,6 +739,13 @@ cors@2.8.5:
|
||||
object-assign "^4"
|
||||
vary "^1"
|
||||
|
||||
cross-fetch@^3.0.4:
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c"
|
||||
integrity sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew==
|
||||
dependencies:
|
||||
node-fetch "2.6.0"
|
||||
|
||||
cross-spawn@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
@@ -908,10 +912,12 @@ ee-first@1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
ejs@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.0.2.tgz#745b01cdcfe38c1c6a2da3bbb2d9957060a31226"
|
||||
integrity sha512-IncmUpn1yN84hy2shb0POJ80FWrfGNY0cxO9f4v+/sG7qcBvAtVWUA1IdzY/8EYUmOVhoKJVdJjNd3AZcnxOjA==
|
||||
ejs@^3.1.5:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b"
|
||||
integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==
|
||||
dependencies:
|
||||
jake "^10.6.1"
|
||||
|
||||
emoji-regex@^7.0.1:
|
||||
version "7.0.3"
|
||||
@@ -1213,6 +1219,13 @@ file-uri-to-path@1:
|
||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
|
||||
|
||||
filelist@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb"
|
||||
integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==
|
||||
dependencies:
|
||||
minimatch "^3.0.4"
|
||||
|
||||
finalhandler@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
|
||||
@@ -1241,10 +1254,10 @@ find-up@^4.1.0:
|
||||
locate-path "^5.0.0"
|
||||
path-exists "^4.0.0"
|
||||
|
||||
firebase-admin@^9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.1.0.tgz#c8b7f8da32cc52d5f15b0be47fd88979c5e86618"
|
||||
integrity sha512-tGGREJpoRM/mbV/5bs/q9SQRZkVhxMMq1HIJEzSEh3mtz5hC9VtaCkuLt6chuAsqHMBoc1pvnrGTOC5nOme9VQ==
|
||||
firebase-admin@^9.1.1:
|
||||
version "9.1.1"
|
||||
resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.1.1.tgz#153aff515140a41d92ebc51231c12c7b2f4c3e69"
|
||||
integrity sha512-HkzY9yN/kOe1EQgjheURAQ4pFBerI54TBL0+nj1fwzKnAnGCpcI73Bbwx99Pk3u2x4rj6bDcsZfz9bA8y7DWtQ==
|
||||
dependencies:
|
||||
"@firebase/database" "^0.6.10"
|
||||
"@firebase/database-types" "^0.5.2"
|
||||
@@ -1441,10 +1454,17 @@ graceful-fs@^4.1.2:
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
||||
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
||||
|
||||
graphql-request@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-2.0.0.tgz#8dd12cf1eb2ce0c80f4114fd851741e091134862"
|
||||
integrity sha512-Ww3Ax+G3l2d+mPT8w7HC9LfrKjutnCKtnDq7ZZp2ghVk5IQDjwAk3/arRF1ix17Ky15rm0hrSKVKxRhIVlSuoQ==
|
||||
graphql-request@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-3.0.0.tgz#942d81bbd621cc2223d35fbf2b42edf8be822b83"
|
||||
integrity sha512-zW8AuLnKMYOnpVKdANU9FzLDoj4u4AoU6KZ79e+BcJaNiuw/vgCJ0p7ppDMSDrW77a12Moa7J7Mg4w0f9Kd/Kg==
|
||||
dependencies:
|
||||
cross-fetch "^3.0.4"
|
||||
|
||||
graphql@^15.3.0:
|
||||
version "15.3.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.3.0.tgz#3ad2b0caab0d110e3be4a5a9b2aa281e362b5278"
|
||||
integrity sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==
|
||||
|
||||
gtoken@^5.0.0:
|
||||
version "5.0.3"
|
||||
@@ -1702,6 +1722,16 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
jake@^10.6.1:
|
||||
version "10.8.2"
|
||||
resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
|
||||
integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==
|
||||
dependencies:
|
||||
async "0.9.x"
|
||||
chalk "^2.4.2"
|
||||
filelist "^1.0.1"
|
||||
minimatch "^3.0.4"
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
@@ -2037,7 +2067,7 @@ nice-try@^1.0.4:
|
||||
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
|
||||
|
||||
node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0:
|
||||
node-fetch@2.6.0, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
|
||||
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
|
||||
@@ -2099,10 +2129,10 @@ onetime@^5.1.0:
|
||||
dependencies:
|
||||
mimic-fn "^2.1.0"
|
||||
|
||||
open@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48"
|
||||
integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==
|
||||
open@^7.1.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/open/-/open-7.2.0.tgz#212959bd7b0ce2e8e3676adc76e3cf2f0a2498b4"
|
||||
integrity sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==
|
||||
dependencies:
|
||||
is-docker "^2.0.0"
|
||||
is-wsl "^2.1.1"
|
||||
@@ -2669,23 +2699,23 @@ socks@^1.1.10:
|
||||
ip "^1.1.4"
|
||||
smart-buffer "^1.0.13"
|
||||
|
||||
source-map-explorer@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/source-map-explorer/-/source-map-explorer-2.4.2.tgz#fb23f86c3112eacde5683f24efaf4ddc9f677985"
|
||||
integrity sha512-3ECQLffCFV8QgrTqcmddLkWL4/aQs6ljYfgWCLselo5QtizOfOeUCKnS4rFn7MIrdeZLM6TZrseOtsrWZhWKoQ==
|
||||
source-map-explorer@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/source-map-explorer/-/source-map-explorer-2.5.0.tgz#42e12c76743e8a0ca0579d472ea5ba623e0d0498"
|
||||
integrity sha512-kWhlt0celEwwuULIY+sRoZKibc/8/Ec4ckcKThDMQW3hT7KxReYW1XktwFJIbZ2VF9Yf/hA74bcoIZOSXXQIgQ==
|
||||
dependencies:
|
||||
btoa "^1.2.1"
|
||||
chalk "^3.0.0"
|
||||
chalk "^4.1.0"
|
||||
convert-source-map "^1.7.0"
|
||||
ejs "^3.0.2"
|
||||
ejs "^3.1.5"
|
||||
escape-html "^1.0.3"
|
||||
glob "^7.1.6"
|
||||
gzip-size "^5.1.1"
|
||||
lodash "^4.17.15"
|
||||
open "^7.0.3"
|
||||
lodash "^4.17.20"
|
||||
open "^7.1.0"
|
||||
source-map "^0.7.3"
|
||||
temp "^0.9.1"
|
||||
yargs "^15.3.1"
|
||||
yargs "^15.4.1"
|
||||
|
||||
source-map@^0.6.1, source-map@~0.6.1:
|
||||
version "0.6.1"
|
||||
@@ -2811,10 +2841,10 @@ strip-json-comments@^3.0.1:
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||
|
||||
stripe@^8.88.0:
|
||||
version "8.88.0"
|
||||
resolved "https://registry.yarnpkg.com/stripe/-/stripe-8.88.0.tgz#ba7e9eec21bbf5459491366081d04a811b55f0de"
|
||||
integrity sha512-aeixfX6Gem5UiRdoH9wphQ344abxgAQrLg2sAY/0IddZ5mprZKS568Pb3WX0qy2E5OJGute+jEAn2Za7DKLQtw==
|
||||
stripe@^8.89.0:
|
||||
version "8.89.0"
|
||||
resolved "https://registry.yarnpkg.com/stripe/-/stripe-8.89.0.tgz#fcd48ba7e298d547c89b686dea155f0507c25e67"
|
||||
integrity sha512-XiAuNAyv2ORCWZrIaG22frr7rXP1J5+XsHA4QUBwB0fePB5kxV0O6FFMrZ8nipYZ43pnez5EIJ/Oxb1jLq6w6g==
|
||||
dependencies:
|
||||
"@types/node" ">=8.1.0"
|
||||
qs "^6.6.0"
|
||||
@@ -3216,7 +3246,7 @@ yargs-parser@^13.1.1:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^18.1.1:
|
||||
yargs-parser@^18.1.2:
|
||||
version "18.1.3"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
|
||||
integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
|
||||
@@ -3240,10 +3270,10 @@ yargs@^13.3.0:
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^13.1.1"
|
||||
|
||||
yargs@^15.3.1:
|
||||
version "15.3.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
|
||||
integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
|
||||
yargs@^15.4.1:
|
||||
version "15.4.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
|
||||
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
|
||||
dependencies:
|
||||
cliui "^6.0.0"
|
||||
decamelize "^1.2.0"
|
||||
@@ -3255,4 +3285,4 @@ yargs@^15.3.1:
|
||||
string-width "^4.2.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^18.1.1"
|
||||
yargs-parser "^18.1.2"
|
||||
|
||||
Reference in New Issue
Block a user