Merge release & add time ticket calculations.

This commit is contained in:
Patrick Fic
2021-09-13 14:47:09 -07:00
13 changed files with 7789 additions and 7604 deletions

View File

@@ -1,4 +1,4 @@
<babeledit_project be_version="2.7.1" version="1.2"> <babeledit_project version="1.2" be_version="2.7.1">
<!-- <!--
BabelEdit project file BabelEdit project file
@@ -3683,6 +3683,69 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>itc_federal</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>itc_local</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>itc_state</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> <concept_node>
<name>mappingname</name> <name>mappingname</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -5819,27 +5882,6 @@
<folder_node> <folder_node>
<name>responsibilitycenters</name> <name>responsibilitycenters</name>
<children> <children>
<concept_node>
<name>LA4</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> <concept_node>
<name>ap</name> <name>ap</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -5987,6 +6029,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>la4</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> <concept_node>
<name>lab</name> <name>lab</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -17284,6 +17347,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>getmakes</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> <concept_node>
<name>post</name> <name>post</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>

View File

@@ -120,7 +120,9 @@ export function DmsAllocationsSummary({ socket, bodyshop, jobId, title }) {
{totals.totalSale.toFormat()} {totals.totalSale.toFormat()}
</Table.Summary.Cell> </Table.Summary.Cell>
<Table.Summary.Cell> <Table.Summary.Cell>
{totals.totalCost.toFormat()} {
// totals.totalCost.toFormat()
}
</Table.Summary.Cell> </Table.Summary.Cell>
<Table.Summary.Cell></Table.Summary.Cell> <Table.Summary.Cell></Table.Summary.Cell>
<Table.Summary.Cell></Table.Summary.Cell> <Table.Summary.Cell></Table.Summary.Cell>

View File

@@ -13,6 +13,7 @@ import { useTranslation } from "react-i18next";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectJobReadOnly } from "../../redux/application/application.selectors";
import { selectBodyshop } from "../../redux/user/user.selectors";
import CABCpvrtCalculator from "../ca-bc-pvrt-calculator/ca-bc-pvrt-calculator.component"; import CABCpvrtCalculator from "../ca-bc-pvrt-calculator/ca-bc-pvrt-calculator.component";
import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component";
import JobsDetailRatesChangeButton from "../jobs-detail-rates-change-button/jobs-detail-rates-change-button.component"; import JobsDetailRatesChangeButton from "../jobs-detail-rates-change-button/jobs-detail-rates-change-button.component";
@@ -22,9 +23,10 @@ import JobsDetailRatesParts from "./jobs-detail-rates.parts.component";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
jobRO: selectJobReadOnly, jobRO: selectJobReadOnly,
bodyshop: selectBodyshop,
}); });
export function JobsDetailRates({ jobRO, form, job }) { export function JobsDetailRates({ jobRO, form, job, bodyshop }) {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<div> <div>
@@ -77,7 +79,7 @@ export function JobsDetailRates({ jobRO, form, job }) {
label={t("jobs.fields.adjustment_bottom_line")} label={t("jobs.fields.adjustment_bottom_line")}
name="adjustment_bottom_line" name="adjustment_bottom_line"
> >
<CurrencyInput disabled={jobRO} /> <CurrencyInput disabled={jobRO || bodyshop.cdk_dealerid} />
</Form.Item> </Form.Item>
<Space align="end"> <Space align="end">
<Form.Item label={t("jobs.fields.ca_bc_pvrt")} name="ca_bc_pvrt"> <Form.Item label={t("jobs.fields.ca_bc_pvrt")} name="ca_bc_pvrt">

View File

@@ -121,6 +121,27 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
> >
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item
label={t("bodyshop.fields.dms.itc_federal")}
valuePropName="checked"
name={["cdk_configuration", "itc_federal"]}
>
<Switch />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.dms.itc_state")}
valuePropName="checked"
name={["cdk_configuration", "itc_state"]}
>
<Switch />
</Form.Item>
<Form.Item
label={t("bodyshop.fields.dms.itc_local")}
valuePropName="checked"
name={["cdk_configuration", "itc_local"]}
>
<Switch />
</Form.Item>
</LayoutFormRow> </LayoutFormRow>
<LayoutFormRow header={t("bodyshop.labels.dms.cdk.payers")}> <LayoutFormRow header={t("bodyshop.labels.dms.cdk.payers")}>
<Form.List name={["cdk_configuration", "payers"]}> <Form.List name={["cdk_configuration", "payers"]}>
@@ -471,6 +492,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
{fields.map((field, index) => ( {fields.map((field, index) => (
<Form.Item key={field.key}> <Form.Item key={field.key}>
<div> <div>
<LayoutFormRow>
<Form.Item <Form.Item
label={t("bodyshop.fields.dms.mappingname")} label={t("bodyshop.fields.dms.mappingname")}
key={`${index}name`} key={`${index}name`}
@@ -484,7 +506,12 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
> >
<Input /> <Input />
</Form.Item> </Form.Item>
<DeleteFilled
onClick={() => {
remove(field.name);
}}
/>
</LayoutFormRow>
<LayoutFormRow <LayoutFormRow
header={t("bodyshop.labels.defaultcostsmapping")} header={t("bodyshop.labels.defaultcostsmapping")}
> >
@@ -1627,12 +1654,6 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
</Select> </Select>
</Form.Item> </Form.Item>
</LayoutFormRow> </LayoutFormRow>
<DeleteFilled
onClick={() => {
remove(field.name);
}}
/>
</div> </div>
</Form.Item> </Form.Item>
))} ))}
@@ -2717,7 +2738,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
</Form.Item> </Form.Item>
{bodyshop.cdk_dealerid && ( {bodyshop.cdk_dealerid && (
<Form.Item <Form.Item
label={t("bodyshop.fields.responsibilitycenter_dms_acctnumber")} label={t("bodyshop.fields.dms.dms_acctnumber")}
rules={[ rules={[
{ {
required: true, required: true,
@@ -2815,7 +2836,7 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
</Form.Item> </Form.Item>
{bodyshop.cdk_dealerid && ( {bodyshop.cdk_dealerid && (
<Form.Item <Form.Item
label={t("bodyshop.fields.responsibilitycenter_dms_acctnumber")} label={t("bodyshop.fields.dms.dms_acctnumber")}
rules={[ rules={[
{ {
required: true, required: true,
@@ -2911,21 +2932,9 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
> >
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item
label={t("bodyshop.fields.responsibilitycenter_rate")}
rules={[
{
required: true,
//message: t("general.validation.required"),
},
]}
name={["md_responsibility_centers", "taxes", "local", "rate"]}
>
<InputNumber precision={2} />
</Form.Item>
{bodyshop.cdk_dealerid && ( {bodyshop.cdk_dealerid && (
<Form.Item <Form.Item
label={t("bodyshop.fields.responsibilitycenter_dms_acctnumber")} label={t("bodyshop.fields.dms.dms_acctnumber")}
rules={[ rules={[
{ {
required: true, required: true,
@@ -2942,6 +2951,18 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
<Input /> <Input />
</Form.Item> </Form.Item>
)} )}
<Form.Item
label={t("bodyshop.fields.responsibilitycenter_rate")}
rules={[
{
required: true,
//message: t("general.validation.required"),
},
]}
name={["md_responsibility_centers", "taxes", "local", "rate"]}
>
<InputNumber precision={2} />
</Form.Item>
</LayoutFormRow> </LayoutFormRow>
<LayoutFormRow header={<div>AR</div>}> <LayoutFormRow header={<div>AR</div>}>
{/* <Form.Item {/* <Form.Item

View File

@@ -108,6 +108,8 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) {
}); });
history.push("/manage/accounting/receivables"); history.push("/manage/accounting/receivables");
}); });
if (socket.disconnected) socket.connect();
return () => { return () => {
socket.removeAllListeners(); socket.removeAllListeners();
socket.disconnect(); socket.disconnect();

View File

@@ -218,7 +218,7 @@ export function JobsCloseComponent({ job, bodyshop, jobRO }) {
}, },
]} ]}
> >
<InputNumber disabled={jobRO} /> <InputNumber precision={0} disabled={jobRO} />
</Form.Item> </Form.Item>
)} )}
{bodyshop.cdk_dealerid && ( {bodyshop.cdk_dealerid && (
@@ -244,7 +244,7 @@ export function JobsCloseComponent({ job, bodyshop, jobRO }) {
}), }),
]} ]}
> >
<InputNumber disabled={jobRO} /> <InputNumber precision={0} disabled={jobRO} />
</Form.Item> </Form.Item>
)} )}
</LayoutFormRow> </LayoutFormRow>

View File

@@ -237,6 +237,9 @@
"dms_acctnumber": "DMS Account #", "dms_acctnumber": "DMS Account #",
"dms_wip_acctnumber": "DMS W.I.P. Account #", "dms_wip_acctnumber": "DMS W.I.P. Account #",
"generic_customer_number": "Generic Customer Number", "generic_customer_number": "Generic Customer Number",
"itc_federal": "Federal Tax is ITC?",
"itc_local": "Local Tax is ITC?",
"itc_state": "State Tax is ITC?",
"mappingname": "DMS Mapping Name", "mappingname": "DMS Mapping Name",
"srcco": "Source Company #/Dealer #" "srcco": "Source Company #/Dealer #"
}, },
@@ -381,7 +384,6 @@
"responsibilitycenter_accountnumber": "Account Number", "responsibilitycenter_accountnumber": "Account Number",
"responsibilitycenter_rate": "Rate", "responsibilitycenter_rate": "Rate",
"responsibilitycenters": { "responsibilitycenters": {
"LA4": "LA4",
"ap": "Accounts Payable", "ap": "Accounts Payable",
"ar": "Accounts Receivable", "ar": "Accounts Receivable",
"ats": "ATS", "ats": "ATS",
@@ -389,6 +391,7 @@
"la1": "LA1", "la1": "LA1",
"la2": "LA2", "la2": "LA2",
"la3": "LA3", "la3": "LA3",
"la4": "LA4",
"lab": "Body", "lab": "Body",
"lad": "Diagnostic", "lad": "Diagnostic",
"lae": "Electrical", "lae": "Electrical",
@@ -1082,6 +1085,7 @@
"addpayer": "Add Payer", "addpayer": "Add Payer",
"createnewcustomer": "Create New Customer", "createnewcustomer": "Create New Customer",
"findmakemodelcode": "Find Make/Model Code", "findmakemodelcode": "Find Make/Model Code",
"getmakes": "",
"post": "Post", "post": "Post",
"refetchmakesmodels": "Refetch Make and Model Codes", "refetchmakesmodels": "Refetch Make and Model Codes",
"usegeneric": "Use Generic Customer", "usegeneric": "Use Generic Customer",

View File

@@ -237,6 +237,9 @@
"dms_acctnumber": "", "dms_acctnumber": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"generic_customer_number": "", "generic_customer_number": "",
"itc_federal": "",
"itc_local": "",
"itc_state": "",
"mappingname": "", "mappingname": "",
"srcco": "" "srcco": ""
}, },
@@ -381,7 +384,6 @@
"responsibilitycenter_accountnumber": "", "responsibilitycenter_accountnumber": "",
"responsibilitycenter_rate": "", "responsibilitycenter_rate": "",
"responsibilitycenters": { "responsibilitycenters": {
"LA4": "",
"ap": "", "ap": "",
"ar": "", "ar": "",
"ats": "", "ats": "",
@@ -389,6 +391,7 @@
"la1": "", "la1": "",
"la2": "", "la2": "",
"la3": "", "la3": "",
"la4": "",
"lab": "", "lab": "",
"lad": "", "lad": "",
"lae": "", "lae": "",
@@ -1082,6 +1085,7 @@
"addpayer": "", "addpayer": "",
"createnewcustomer": "", "createnewcustomer": "",
"findmakemodelcode": "", "findmakemodelcode": "",
"getmakes": "",
"post": "", "post": "",
"refetchmakesmodels": "", "refetchmakesmodels": "",
"usegeneric": "", "usegeneric": "",

View File

@@ -237,6 +237,9 @@
"dms_acctnumber": "", "dms_acctnumber": "",
"dms_wip_acctnumber": "", "dms_wip_acctnumber": "",
"generic_customer_number": "", "generic_customer_number": "",
"itc_federal": "",
"itc_local": "",
"itc_state": "",
"mappingname": "", "mappingname": "",
"srcco": "" "srcco": ""
}, },
@@ -381,7 +384,6 @@
"responsibilitycenter_accountnumber": "", "responsibilitycenter_accountnumber": "",
"responsibilitycenter_rate": "", "responsibilitycenter_rate": "",
"responsibilitycenters": { "responsibilitycenters": {
"LA4": "",
"ap": "", "ap": "",
"ar": "", "ar": "",
"ats": "", "ats": "",
@@ -389,6 +391,7 @@
"la1": "", "la1": "",
"la2": "", "la2": "",
"la3": "", "la3": "",
"la4": "",
"lab": "", "lab": "",
"lad": "", "lad": "",
"lae": "", "lae": "",
@@ -1082,6 +1085,7 @@
"addpayer": "", "addpayer": "",
"createnewcustomer": "", "createnewcustomer": "",
"findmakemodelcode": "", "findmakemodelcode": "",
"getmakes": "",
"post": "", "post": "",
"refetchmakesmodels": "", "refetchmakesmodels": "",
"usegeneric": "", "usegeneric": "",

View File

@@ -79,40 +79,78 @@ exports.default = async function (socket, jobid) {
bill_val.billlines.map((line_val) => { bill_val.billlines.map((line_val) => {
if (!bill_acc[line_val.cost_center]) if (!bill_acc[line_val.cost_center])
bill_acc[line_val.cost_center] = Dinero(); bill_acc[line_val.cost_center] = Dinero();
const lineDinero = Dinero({
let lineDinero = Dinero({
amount: Math.round((line_val.actual_cost || 0) * 100), amount: Math.round((line_val.actual_cost || 0) * 100),
}) })
.multiply(line_val.quantity) .multiply(line_val.quantity)
.multiply(bill_val.is_credit_memo ? -1 : 1); .multiply(bill_val.is_credit_memo ? -1 : 1);
bill_acc[line_val.cost_center] =
bill_acc[line_val.cost_center].add(lineDinero);
//Add appropriate tax amounts. //Add appropriate tax amounts.
const { const {
applicable_taxes: { local, state, federal }, applicable_taxes: { local, state, federal },
} = line_val; } = line_val;
if (local) { if (local) {
if (bodyshop.cdk_configuration.itc_local)
taxAllocations.local.cost = taxAllocations.local.cost.add( taxAllocations.local.cost = taxAllocations.local.cost.add(
lineDinero.percentage(bill_val.local_tax_rate || 0) lineDinero.percentage(bill_val.local_tax_rate || 0)
); );
lineDinero = lineDinero.add(
lineDinero.percentage(bill_val.local_tax_rate || 0)
);
} }
if (state) { if (state) {
if (bodyshop.cdk_configuration.itc_state)
taxAllocations.state.cost = taxAllocations.state.cost.add( taxAllocations.state.cost = taxAllocations.state.cost.add(
lineDinero.percentage(bill_val.state_tax_rate || 0) lineDinero.percentage(bill_val.state_tax_rate || 0)
); );
lineDinero = lineDinero.add(
lineDinero.percentage(bill_val.state_tax_rate || 0)
);
} }
if (federal) { if (federal) {
//If it's an ITC, add it as a negative cost, otherwise add it to the item cost.
if (bodyshop.cdk_configuration.itc_federal)
taxAllocations.federal.cost = taxAllocations.federal.cost.add( taxAllocations.federal.cost = taxAllocations.federal.cost.add(
lineDinero.percentage(bill_val.federal_tax_rate || 0) lineDinero.percentage(bill_val.federal_tax_rate || 0)
); );
lineDinero = lineDinero.add(
lineDinero.percentage(bill_val.federal_tax_rate || 0)
);
// bill_acc[line_val.cost_center] = bill_acc[line_val.cost_center].add(
// lineDinero.percentage(bill_val.federal_tax_rate || 0)
// );
} }
bill_acc[line_val.cost_center] =
bill_acc[line_val.cost_center].add(lineDinero);
return null; return null;
}); });
return bill_acc; return bill_acc;
}, {}); }, {});
job.timetickets.forEach((ticket) => {
//Get the total amount of the ticket.
let TicketTotal = Dinero({
amount: Math.round(
ticket.rate *
(ticket.employee && ticket.employee.flat_rate
? ticket.productivehrs || 0
: ticket.actualhrs || 0) *
100
),
});
//Add it to the right cost center.
if (!costCenterHash[ticket.cost_center])
costCenterHash[ticket.cost_center] = Dinero();
costCenterHash[ticket.cost_center] =
costCenterHash[ticket.cost_center].add(TicketTotal);
});
const jobAllocations = _.union( const jobAllocations = _.union(
Object.keys(profitCenterHash), Object.keys(profitCenterHash),
Object.keys(costCenterHash) Object.keys(costCenterHash)

View File

@@ -976,7 +976,7 @@ async function GenerateTransWips(socket) {
const allocations = await CalcualteAllocations(socket, socket.JobData.id); const allocations = await CalcualteAllocations(socket, socket.JobData.id);
const wips = []; const wips = [];
allocations.forEach((alloc) => { allocations.forEach((alloc) => {
//Add the sale item //Add the sale item from each allocation.
if (alloc.sale.getAmount() > 0 && !alloc.tax) { if (alloc.sale.getAmount() > 0 && !alloc.tax) {
const item = { const item = {
acct: alloc.profitCenter.dms_acctnumber, acct: alloc.profitCenter.dms_acctnumber,
@@ -993,6 +993,7 @@ async function GenerateTransWips(socket) {
wips.push(item); wips.push(item);
} }
//Add the cost Item.
if (alloc.cost.getAmount() > 0 && !alloc.tax) { if (alloc.cost.getAmount() > 0 && !alloc.tax) {
const item = { const item = {
acct: alloc.costCenter.dms_acctnumber, acct: alloc.costCenter.dms_acctnumber,
@@ -1025,20 +1026,24 @@ async function GenerateTransWips(socket) {
} }
if (alloc.tax) { if (alloc.tax) {
const item = { // if (alloc.cost.getAmount() > 0) {
acct: alloc.costCenter.dms_acctnumber, // const item = {
cntl: socket.JobData.ro_number, // acct: alloc.costCenter.dms_acctnumber,
cntl2: null, // cntl: socket.JobData.ro_number,
credtMemoNo: null, // cntl2: null,
postAmt: alloc.cost.getAmount(), // credtMemoNo: null,
postDesc: null, // postAmt: alloc.cost.getAmount(),
prod: null, // postDesc: null,
statCnt: 1, // prod: null,
transID: socket.DMSTransHeader.transID, // statCnt: 1,
trgtCoID: socket.JobData.bodyshop.cdk_configuration.srcco, // transID: socket.DMSTransHeader.transID,
}; // trgtCoID: socket.JobData.bodyshop.cdk_configuration.srcco,
// };
wips.push(item); // wips.push(item);
// }
if (alloc.sale.getAmount() > 0) {
const item2 = { const item2 = {
acct: alloc.profitCenter.dms_acctnumber, acct: alloc.profitCenter.dms_acctnumber,
cntl: socket.JobData.ro_number, cntl: socket.JobData.ro_number,
@@ -1053,6 +1058,7 @@ async function GenerateTransWips(socket) {
}; };
wips.push(item2); wips.push(item2);
} }
}
}); });
socket.txEnvelope.payers.forEach((payer) => { socket.txEnvelope.payers.forEach((payer) => {
@@ -1076,7 +1082,11 @@ async function GenerateTransWips(socket) {
console.log( console.log(
"WIPS TOTAL", "WIPS TOTAL",
wips.reduce((acc, val) => acc + val.postAmt, 0) wips.reduce((acc, val) => {
console.log(val);
console.log(acc + val.postAmt);
return acc + val.postAmt;
}, 0)
); );
return wips; return wips;

View File

@@ -954,12 +954,12 @@ affected_rows
`; `;
exports.GET_CDK_ALLOCATIONS = ` exports.GET_CDK_ALLOCATIONS = `query QUERY_JOB_CLOSE_DETAILS($id: uuid!) {
query QUERY_JOB_CLOSE_DETAILS($id: uuid!) {
jobs_by_pk(id: $id) { jobs_by_pk(id: $id) {
bodyshop { bodyshop {
id id
md_responsibility_centers md_responsibility_centers
cdk_configuration
} }
ro_number ro_number
invoice_allocation invoice_allocation
@@ -1016,7 +1016,17 @@ exports.GET_CDK_ALLOCATIONS = `
actual_delivery actual_delivery
scheduled_in scheduled_in
actual_in actual_in
bills { timetickets {
id
actualhrs
cost_center
productivehrs
rate
employee {
flat_rate
}
}
bills(where: {isinhouse: {_eq: false}}) {
id id
federal_tax_rate federal_tax_rate
local_tax_rate local_tax_rate

View File

@@ -50,7 +50,11 @@ io.on("connection", (socket) => {
socket.on("set-log-level", (level) => { socket.on("set-log-level", (level) => {
socket.log_level = level; socket.log_level = level;
createLogEvent(socket, "DEBUG", `Updated log level to ${level}`); socket.emit("log-event", {
timestamp: new Date(),
level: "INFO",
message: `Updated log level to ${level}`,
});
}); });
socket.on("cdk-export-job", (jobid) => { socket.on("cdk-export-job", (jobid) => {