@@ -40,7 +40,7 @@ export default function DashboardMonthlyEmployeeEfficiency({
|
|||||||
(dayAcc, dayVal) => {
|
(dayAcc, dayVal) => {
|
||||||
return {
|
return {
|
||||||
actual: dayAcc.actual + dayVal.actualhrs,
|
actual: dayAcc.actual + dayVal.actualhrs,
|
||||||
productive: dayAcc.actual + dayVal.productivehrs,
|
productive: dayAcc.productive + dayVal.productivehrs,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
{ actual: 0, productive: 0 }
|
{ actual: 0, productive: 0 }
|
||||||
@@ -50,7 +50,7 @@ export default function DashboardMonthlyEmployeeEfficiency({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const dailyEfficiency =
|
const dailyEfficiency =
|
||||||
((dailyHrs.productive - dailyHrs.actual) / dailyHrs.productive + 1) * 100;
|
((dailyHrs.productive - dailyHrs.actual) / dailyHrs.actual + 1) * 100;
|
||||||
|
|
||||||
const theValue = {
|
const theValue = {
|
||||||
date: moment(val).format("DD"),
|
date: moment(val).format("DD"),
|
||||||
@@ -69,7 +69,7 @@ export default function DashboardMonthlyEmployeeEfficiency({
|
|||||||
};
|
};
|
||||||
theValue.accEfficiency = (
|
theValue.accEfficiency = (
|
||||||
((theValue.accProductive - theValue.accActual) /
|
((theValue.accProductive - theValue.accActual) /
|
||||||
(theValue.accProductive || 1) +
|
(theValue.accActual || 1) +
|
||||||
1) *
|
1) *
|
||||||
100
|
100
|
||||||
).toFixed(1);
|
).toFixed(1);
|
||||||
|
|||||||
@@ -31,16 +31,51 @@ export default function DashboardProjectedMonthlySales({ data, ...cardProps }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const DashboardProjectedMonthlySalesGql = `
|
export const DashboardProjectedMonthlySalesGql = `
|
||||||
projected_monthly_sales: jobs(where: {_or: [{_and: [{date_invoiced: {_gte: "${moment()
|
projected_monthly_sales: jobs(where: {
|
||||||
|
voided: {_eq: false},
|
||||||
|
_or: [
|
||||||
|
{_and: [
|
||||||
|
{date_invoiced:{_is_null: false }},
|
||||||
|
{date_invoiced: {_gte: "${moment()
|
||||||
|
.startOf("month")
|
||||||
|
.startOf("day")
|
||||||
|
.toISOString()}"}}, {date_invoiced: {_lte: "${moment()
|
||||||
|
.endOf("month")
|
||||||
|
.endOf("day")
|
||||||
|
.toISOString()}"}}]},
|
||||||
|
{
|
||||||
|
|
||||||
|
_and:[
|
||||||
|
{date_invoiced:{_is_null: true }},
|
||||||
|
{actual_completion: {_gte: "${moment()
|
||||||
|
.startOf("month")
|
||||||
|
.startOf("day")
|
||||||
|
.toISOString()}"}}, {actual_completion: {_lte: "${moment()
|
||||||
|
.endOf("month")
|
||||||
|
.endOf("day")
|
||||||
|
.toISOString()}"}}
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{_and: [
|
||||||
|
{date_invoiced: {_is_null: true}},
|
||||||
|
{actual_completion: {_is_null: true}}
|
||||||
|
{scheduled_completion: {_gte: "${moment()
|
||||||
.startOf("month")
|
.startOf("month")
|
||||||
.format("YYYY-MM-DD")}"}}, {date_invoiced: {_lte: "${moment()
|
.startOf("day")
|
||||||
|
.toISOString()}"}}, {scheduled_completion: {_lte: "${moment()
|
||||||
.endOf("month")
|
.endOf("month")
|
||||||
.format("YYYY-MM-DD")}"}}]}, {_and: [{scheduled_completion: {_gte: "${moment()
|
.endOf("day")
|
||||||
.startOf("month")
|
.toISOString()}"}}
|
||||||
.format("YYYY-MM-DD")}"}}, {scheduled_completion: {_lte: "${moment()
|
|
||||||
.endOf("month")
|
|
||||||
.format("YYYY-MM-DD")}"}}]}]}) {
|
]}
|
||||||
|
|
||||||
|
]}) {
|
||||||
id
|
id
|
||||||
|
ro_number
|
||||||
|
voided
|
||||||
date_invoiced
|
date_invoiced
|
||||||
job_totals
|
job_totals
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -280,12 +280,13 @@ const createDashboardQuery = (state) => {
|
|||||||
return gql`
|
return gql`
|
||||||
query QUERY_DASHBOARD_DETAILS {
|
query QUERY_DASHBOARD_DETAILS {
|
||||||
${componentBasedAdditions || ""}
|
${componentBasedAdditions || ""}
|
||||||
monthly_sales: jobs(where: {_and: [{date_invoiced: {_gte: "${moment()
|
monthly_sales: jobs(where: {_and: [
|
||||||
.startOf("month")
|
{ voided: {_eq: false}},
|
||||||
.format("YYYY-MM-DD")}"}}, {date_invoiced: {_lte: "${moment()
|
{date_invoiced: {_gte: "${moment()
|
||||||
.endOf("month")
|
.startOf("month").startOf('day').toISOString()}"}}, {date_invoiced: {_lte: "${moment()
|
||||||
.format("YYYY-MM-DD")}"}}]}) {
|
.endOf("month").endOf('day').toISOString()}"}}]}) {
|
||||||
id
|
id
|
||||||
|
ro_number
|
||||||
date_invoiced
|
date_invoiced
|
||||||
job_totals
|
job_totals
|
||||||
rate_la1
|
rate_la1
|
||||||
@@ -333,14 +334,14 @@ const createDashboardQuery = (state) => {
|
|||||||
part_qty
|
part_qty
|
||||||
part_type
|
part_type
|
||||||
}
|
}
|
||||||
labhrs: joblines_aggregate(where: { mod_lbr_ty: { _neq: "LAR" } }) {
|
labhrs: joblines_aggregate(where: { mod_lbr_ty: { _neq: "LAR" }, removed: { _eq: false } }) {
|
||||||
aggregate {
|
aggregate {
|
||||||
sum {
|
sum {
|
||||||
mod_lb_hrs
|
mod_lb_hrs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
larhrs: joblines_aggregate(where: { mod_lbr_ty: { _eq: "LAR" } }) {
|
larhrs: joblines_aggregate(where: { mod_lbr_ty: { _eq: "LAR" }, removed: { _eq: false } }) {
|
||||||
aggregate {
|
aggregate {
|
||||||
sum {
|
sum {
|
||||||
mod_lb_hrs
|
mod_lb_hrs
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ export function PartnerPingComponent({ bodyshop, setPartnerVersion }) {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Create an scoped async function in the hook
|
// Create an scoped async function in the hook
|
||||||
async function checkPartnerStatus() {
|
async function checkPartnerStatus() {
|
||||||
|
if (!bodyshop) return;
|
||||||
try {
|
try {
|
||||||
//if (process.env.NODE_ENV === "development") return;
|
//if (process.env.NODE_ENV === "development") return;
|
||||||
const PartnerResponse = await axios.post("http://localhost:1337/ping/");
|
const PartnerResponse = await axios.post("http://localhost:1337/ping/");
|
||||||
const { appver, qbpath } = PartnerResponse.data;
|
const { appver, qbpath } = PartnerResponse.data;
|
||||||
if (!bodyshop) return;
|
|
||||||
setPartnerVersion(appver);
|
setPartnerVersion(appver);
|
||||||
console.log({ appver, qbpath });
|
console.log({ appver, qbpath });
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -2230,7 +2230,7 @@
|
|||||||
"gsr_by_csr": "Gross Sales by CSR",
|
"gsr_by_csr": "Gross Sales by CSR",
|
||||||
"gsr_by_delivery_date": "Gross Sales by Delivery Date",
|
"gsr_by_delivery_date": "Gross Sales by Delivery Date",
|
||||||
"gsr_by_estimator": "Gross Sales by Estimator",
|
"gsr_by_estimator": "Gross Sales by Estimator",
|
||||||
"gsr_by_exported_date": "Gross Sales by Export Date",
|
"gsr_by_exported_date": "Exported Gross Sales",
|
||||||
"gsr_by_ins_co": "Gross Sales by Insurance Company",
|
"gsr_by_ins_co": "Gross Sales by Insurance Company",
|
||||||
"gsr_by_make": "Gross Sales by Vehicle Make",
|
"gsr_by_make": "Gross Sales by Vehicle Make",
|
||||||
"gsr_by_referral": "Gross Sales by Referral Source",
|
"gsr_by_referral": "Gross Sales by Referral Source",
|
||||||
|
|||||||
@@ -667,7 +667,7 @@ const formatGpPercent = (gppercent) => {
|
|||||||
//Verify that this stays in line with jobs-close-auto-allocate logic from the application.
|
//Verify that this stays in line with jobs-close-auto-allocate logic from the application.
|
||||||
const getAdditionalCostCenter = (jl, profitCenters) => {
|
const getAdditionalCostCenter = (jl, profitCenters) => {
|
||||||
if (!jl.part_type && !jl.mod_lbr_ty) {
|
if (!jl.part_type && !jl.mod_lbr_ty) {
|
||||||
const lineDesc = jl.line_desc.toLowerCase();
|
const lineDesc = jl.line_desc ? jl.line_desc.toLowerCase() : "";
|
||||||
|
|
||||||
if (lineDesc.includes("shop mat")) {
|
if (lineDesc.includes("shop mat")) {
|
||||||
return profitCenters["MASH"];
|
return profitCenters["MASH"];
|
||||||
|
|||||||
Reference in New Issue
Block a user