BOD-21 Added some custom components to render CT, BP, PP to production. Schema changes for view to include body and refinish hrs.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
<babeledit_project be_version="2.6.1" version="1.2">
|
<babeledit_project version="1.2" be_version="2.6.1">
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
BabelEdit project file
|
BabelEdit project file
|
||||||
@@ -8184,6 +8184,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>bodyhours</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>
|
||||||
<folder_node>
|
<folder_node>
|
||||||
<name>cards</name>
|
<name>cards</name>
|
||||||
<children>
|
<children>
|
||||||
@@ -8850,6 +8871,27 @@
|
|||||||
</concept_node>
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>refinishhours</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>vehicle_info</name>
|
<name>vehicle_info</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -9437,6 +9479,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>productionlist</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>schedule</name>
|
<name>schedule</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -11011,6 +11074,90 @@
|
|||||||
<folder_node>
|
<folder_node>
|
||||||
<name>actions</name>
|
<name>actions</name>
|
||||||
<children>
|
<children>
|
||||||
|
<concept_node>
|
||||||
|
<name>bodypriority-clear</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>bodypriority-set</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>paintpriority-clear</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>paintpriority-set</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>saveconfig</name>
|
<name>saveconfig</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -11058,6 +11205,90 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>alertoff</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>alerton</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>bodypriority</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>cycletime</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>note</name>
|
<name>note</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
@@ -11079,6 +11310,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>paintpriority</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
</children>
|
</children>
|
||||||
</folder_node>
|
</folder_node>
|
||||||
</children>
|
</children>
|
||||||
|
|||||||
@@ -42,29 +42,28 @@ function Header({
|
|||||||
//TODO Add
|
//TODO Add
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Row type="flex" justify="space-around" align="middle">
|
<Row type='flex' justify='space-around' align='middle'>
|
||||||
{logo ? (
|
{logo ? (
|
||||||
<Col span={3}>
|
<Col span={3}>
|
||||||
<img alt="Shop Logo" src={logo} style={{ height: "40px" }} />
|
<img alt='Shop Logo' src={logo} style={{ height: "40px" }} />
|
||||||
</Col>
|
</Col>
|
||||||
) : null}
|
) : null}
|
||||||
<Col span={21}>
|
<Col span={21}>
|
||||||
{landingHeader ? (
|
{landingHeader ? (
|
||||||
<Menu
|
<Menu
|
||||||
theme="dark"
|
theme='dark'
|
||||||
className="header"
|
className='header'
|
||||||
selectedKeys={selectedNavItem}
|
selectedKeys={selectedNavItem}
|
||||||
mode="horizontal"
|
mode='horizontal'
|
||||||
onClick={handleMenuClick}
|
onClick={handleMenuClick}>
|
||||||
>
|
|
||||||
<ManageSignInButton />
|
<ManageSignInButton />
|
||||||
|
|
||||||
<Menu.SubMenu
|
<Menu.SubMenu
|
||||||
title={
|
title={
|
||||||
<div>
|
<div>
|
||||||
<Avatar
|
<Avatar
|
||||||
size="medium"
|
size='medium'
|
||||||
alt="Avatar"
|
alt='Avatar'
|
||||||
src={
|
src={
|
||||||
currentUser.photoURL ? currentUser.photoURL : UserImage
|
currentUser.photoURL ? currentUser.photoURL : UserImage
|
||||||
}
|
}
|
||||||
@@ -72,13 +71,12 @@ function Header({
|
|||||||
/>
|
/>
|
||||||
{currentUser.displayName || t("general.labels.unknown")}
|
{currentUser.displayName || t("general.labels.unknown")}
|
||||||
</div>
|
</div>
|
||||||
}
|
}>
|
||||||
>
|
|
||||||
<Menu.Item onClick={() => signOutStart()}>
|
<Menu.Item onClick={() => signOutStart()}>
|
||||||
{t("user.actions.signout")}
|
{t("user.actions.signout")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item>
|
<Menu.Item>
|
||||||
<Link to="/manage/profile">
|
<Link to='/manage/profile'>
|
||||||
{t("menus.currentuser.profile")}
|
{t("menus.currentuser.profile")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
@@ -88,15 +86,14 @@ function Header({
|
|||||||
<GlobalOutlined />
|
<GlobalOutlined />
|
||||||
<span>{t("menus.currentuser.languageselector")}</span>
|
<span>{t("menus.currentuser.languageselector")}</span>
|
||||||
</span>
|
</span>
|
||||||
}
|
}>
|
||||||
>
|
<Menu.Item actiontype='lang-select' key='en-US'>
|
||||||
<Menu.Item actiontype="lang-select" key="en-US">
|
|
||||||
{t("general.languages.english")}
|
{t("general.languages.english")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item actiontype="lang-select" key="fr-CA">
|
<Menu.Item actiontype='lang-select' key='fr-CA'>
|
||||||
{t("general.languages.french")}
|
{t("general.languages.french")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item actiontype="lang-select" key="es-MX">
|
<Menu.Item actiontype='lang-select' key='es-MX'>
|
||||||
{t("general.languages.spanish")}
|
{t("general.languages.spanish")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
</Menu.SubMenu>
|
</Menu.SubMenu>
|
||||||
@@ -104,14 +101,13 @@ function Header({
|
|||||||
</Menu>
|
</Menu>
|
||||||
) : (
|
) : (
|
||||||
<Menu
|
<Menu
|
||||||
theme="dark"
|
theme='dark'
|
||||||
className="header"
|
className='header'
|
||||||
selectedKeys={selectedNavItem}
|
selectedKeys={selectedNavItem}
|
||||||
mode="horizontal"
|
mode='horizontal'
|
||||||
onClick={handleMenuClick}
|
onClick={handleMenuClick}>
|
||||||
>
|
<Menu.Item key='home'>
|
||||||
<Menu.Item key="home">
|
<Link to='/manage'>
|
||||||
<Link to="/manage">
|
|
||||||
<HomeFilled />
|
<HomeFilled />
|
||||||
{t("menus.header.home")}
|
{t("menus.header.home")}
|
||||||
</Link>
|
</Link>
|
||||||
@@ -122,32 +118,37 @@ function Header({
|
|||||||
<Icon component={FaCarCrash} />
|
<Icon component={FaCarCrash} />
|
||||||
<span>{t("menus.header.jobs")}</span>
|
<span>{t("menus.header.jobs")}</span>
|
||||||
</span>
|
</span>
|
||||||
}
|
}>
|
||||||
>
|
<Menu.Item key='schedule'>
|
||||||
<Menu.Item key="schedule">
|
<Link to='/manage/schedule'>
|
||||||
<Link to="/manage/schedule">
|
|
||||||
<Icon component={FaCalendarAlt} />
|
<Icon component={FaCalendarAlt} />
|
||||||
{t("menus.header.schedule")}
|
{t("menus.header.schedule")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="activejobs">
|
<Menu.Item key='production'>
|
||||||
<Link to="/manage/jobs">{t("menus.header.activejobs")}</Link>
|
<Link to='/manage/production/list'>
|
||||||
|
<Icon component={FaCalendarAlt} />
|
||||||
|
{t("menus.header.productionlist")}
|
||||||
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="availablejobs">
|
<Menu.Item key='activejobs'>
|
||||||
<Link to="/manage/available">
|
<Link to='/manage/jobs'>{t("menus.header.activejobs")}</Link>
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item key='availablejobs'>
|
||||||
|
<Link to='/manage/available'>
|
||||||
{t("menus.header.availablejobs")}
|
{t("menus.header.availablejobs")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
</Menu.SubMenu>
|
</Menu.SubMenu>
|
||||||
<Menu.SubMenu title={t("menus.header.customers")}>
|
<Menu.SubMenu title={t("menus.header.customers")}>
|
||||||
<Menu.Item key="owners">
|
<Menu.Item key='owners'>
|
||||||
<Link to="/manage/owners">
|
<Link to='/manage/owners'>
|
||||||
<TeamOutlined />
|
<TeamOutlined />
|
||||||
{t("menus.header.owners")}
|
{t("menus.header.owners")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="vehicles">
|
<Menu.Item key='vehicles'>
|
||||||
<Link to="/manage/vehicles">
|
<Link to='/manage/vehicles'>
|
||||||
<CarFilled />
|
<CarFilled />
|
||||||
{t("menus.header.vehicles")}
|
{t("menus.header.vehicles")}
|
||||||
</Link>
|
</Link>
|
||||||
@@ -160,22 +161,21 @@ function Header({
|
|||||||
<CarFilled />
|
<CarFilled />
|
||||||
<span>{t("menus.header.courtesycars")}</span>
|
<span>{t("menus.header.courtesycars")}</span>
|
||||||
</span>
|
</span>
|
||||||
}
|
}>
|
||||||
>
|
<Menu.Item key='courtesycarsall'>
|
||||||
<Menu.Item key="courtesycarsall">
|
<Link to='/manage/courtesycars'>
|
||||||
<Link to="/manage/courtesycars">
|
|
||||||
<CarFilled />
|
<CarFilled />
|
||||||
{t("menus.header.courtesycars-all")}
|
{t("menus.header.courtesycars-all")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="contracts">
|
<Menu.Item key='contracts'>
|
||||||
<Link to="/manage/courtesycars/contracts">
|
<Link to='/manage/courtesycars/contracts'>
|
||||||
<FileFilled />
|
<FileFilled />
|
||||||
{t("menus.header.courtesycars-contracts")}
|
{t("menus.header.courtesycars-contracts")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="newcontract">
|
<Menu.Item key='newcontract'>
|
||||||
<Link to="/manage/courtesycars/contracts/new">
|
<Link to='/manage/courtesycars/contracts/new'>
|
||||||
<FileAddFilled />
|
<FileAddFilled />
|
||||||
{t("menus.header.courtesycars-newcontract")}
|
{t("menus.header.courtesycars-newcontract")}
|
||||||
</Link>
|
</Link>
|
||||||
@@ -188,41 +188,38 @@ function Header({
|
|||||||
<DollarCircleFilled />
|
<DollarCircleFilled />
|
||||||
<span>{t("menus.header.accounting")}</span>
|
<span>{t("menus.header.accounting")}</span>
|
||||||
</span>
|
</span>
|
||||||
}
|
}>
|
||||||
>
|
|
||||||
<Menu.Item
|
<Menu.Item
|
||||||
key="enterinvoices"
|
key='enterinvoices'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setInvoiceEnterContext({
|
setInvoiceEnterContext({
|
||||||
actions: {},
|
actions: {},
|
||||||
context: {},
|
context: {},
|
||||||
});
|
});
|
||||||
}}
|
}}>
|
||||||
>
|
|
||||||
{t("menus.header.enterinvoices")}
|
{t("menus.header.enterinvoices")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="invoices">
|
<Menu.Item key='invoices'>
|
||||||
<Link to="/manage/invoices">{t("menus.header.invoices")}</Link>
|
<Link to='/manage/invoices'>{t("menus.header.invoices")}</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item
|
<Menu.Item
|
||||||
key="entertimetickets"
|
key='entertimetickets'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setTimeTicketContext({
|
setTimeTicketContext({
|
||||||
actions: {},
|
actions: {},
|
||||||
context: {},
|
context: {},
|
||||||
});
|
});
|
||||||
}}
|
}}>
|
||||||
>
|
|
||||||
{t("menus.header.entertimeticket")}
|
{t("menus.header.entertimeticket")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
</Menu.SubMenu>
|
</Menu.SubMenu>
|
||||||
|
|
||||||
<Menu.SubMenu title={t("menus.header.shop")}>
|
<Menu.SubMenu title={t("menus.header.shop")}>
|
||||||
<Menu.Item key="shop">
|
<Menu.Item key='shop'>
|
||||||
<Link to="/manage/shop">{t("menus.header.shop_config")}</Link>
|
<Link to='/manage/shop'>{t("menus.header.shop_config")}</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item key="shop-vendors">
|
<Menu.Item key='shop-vendors'>
|
||||||
<Link to="/manage/shop/vendors">
|
<Link to='/manage/shop/vendors'>
|
||||||
{t("menus.header.shop_vendors")}
|
{t("menus.header.shop_vendors")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
@@ -232,8 +229,8 @@ function Header({
|
|||||||
title={
|
title={
|
||||||
<div>
|
<div>
|
||||||
<Avatar
|
<Avatar
|
||||||
size="medium"
|
size='medium'
|
||||||
alt="Avatar"
|
alt='Avatar'
|
||||||
src={
|
src={
|
||||||
currentUser.photoURL ? currentUser.photoURL : UserImage
|
currentUser.photoURL ? currentUser.photoURL : UserImage
|
||||||
}
|
}
|
||||||
@@ -241,13 +238,12 @@ function Header({
|
|||||||
/>
|
/>
|
||||||
{currentUser.displayName || t("general.labels.unknown")}
|
{currentUser.displayName || t("general.labels.unknown")}
|
||||||
</div>
|
</div>
|
||||||
}
|
}>
|
||||||
>
|
|
||||||
<Menu.Item onClick={() => signOutStart()}>
|
<Menu.Item onClick={() => signOutStart()}>
|
||||||
{t("user.actions.signout")}
|
{t("user.actions.signout")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item>
|
<Menu.Item>
|
||||||
<Link to="/manage/profile">
|
<Link to='/manage/profile'>
|
||||||
{t("menus.currentuser.profile")}
|
{t("menus.currentuser.profile")}
|
||||||
</Link>
|
</Link>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
@@ -257,15 +253,14 @@ function Header({
|
|||||||
<GlobalOutlined />
|
<GlobalOutlined />
|
||||||
<span>{t("menus.currentuser.languageselector")}</span>
|
<span>{t("menus.currentuser.languageselector")}</span>
|
||||||
</span>
|
</span>
|
||||||
}
|
}>
|
||||||
>
|
<Menu.Item actiontype='lang-select' key='en-US'>
|
||||||
<Menu.Item actiontype="lang-select" key="en-US">
|
|
||||||
{t("general.languages.english")}
|
{t("general.languages.english")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item actiontype="lang-select" key="fr-CA">
|
<Menu.Item actiontype='lang-select' key='fr-CA'>
|
||||||
{t("general.languages.french")}
|
{t("general.languages.french")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item actiontype="lang-select" key="es-MX">
|
<Menu.Item actiontype='lang-select' key='es-MX'>
|
||||||
{t("general.languages.spanish")}
|
{t("general.languages.spanish")}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
</Menu.SubMenu>
|
</Menu.SubMenu>
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
import { ExclamationCircleFilled } from "@ant-design/icons";
|
||||||
|
import { Dropdown, Menu } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { useMutation } from "@apollo/react-hooks";
|
||||||
|
import { UPDATE_JOB } from "../../graphql/jobs.queries";
|
||||||
|
|
||||||
|
export default function ProductionListColumnAlert({ record }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const [updateAlert] = useMutation(UPDATE_JOB);
|
||||||
|
|
||||||
|
const handleAlertToggle = () => {
|
||||||
|
updateAlert({
|
||||||
|
variables: {
|
||||||
|
jobId: record.id,
|
||||||
|
job: {
|
||||||
|
production_vars: {
|
||||||
|
...record.production_vars,
|
||||||
|
alert: !record.production_vars.alert,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).then(() => {
|
||||||
|
if (record.refetch) record.refetch();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dropdown
|
||||||
|
overlay={
|
||||||
|
<Menu>
|
||||||
|
<Menu.Item key='toggleAlert' onClick={handleAlertToggle}>
|
||||||
|
{record.production_vars && record.production_vars.alert
|
||||||
|
? t("production.labels.alertoff")
|
||||||
|
: t("production.labels.alerton")}
|
||||||
|
</Menu.Item>
|
||||||
|
</Menu>
|
||||||
|
}
|
||||||
|
trigger={["contextMenu"]}>
|
||||||
|
<div style={{ width: "100%", height: "19px" }}>
|
||||||
|
{record.production_vars && record.production_vars.alert ? (
|
||||||
|
<ExclamationCircleFilled className='production-alert' />
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</Dropdown>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
import { useMutation } from "@apollo/react-hooks";
|
||||||
|
import { Dropdown, Menu } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { UPDATE_JOB } from "../../graphql/jobs.queries";
|
||||||
|
|
||||||
|
export default function ProductionListColumnBodyPriority({ record }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const [updateAlert] = useMutation(UPDATE_JOB);
|
||||||
|
|
||||||
|
const handleSetBodyPriority = (e) => {
|
||||||
|
const { key } = e;
|
||||||
|
updateAlert({
|
||||||
|
variables: {
|
||||||
|
jobId: record.id,
|
||||||
|
job: {
|
||||||
|
production_vars: {
|
||||||
|
...record.production_vars,
|
||||||
|
bodypriority: key === "clearBodyPriority" ? null : key,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).then(() => {
|
||||||
|
if (record.refetch) record.refetch();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dropdown
|
||||||
|
overlay={
|
||||||
|
<Menu onClick={handleSetBodyPriority}>
|
||||||
|
<Menu.Item key='clearBodyPriority'>
|
||||||
|
{t("production.actions.bodypriority-clear")}
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.SubMenu
|
||||||
|
key='set'
|
||||||
|
title={t("production.actions.bodypriority-set")}>
|
||||||
|
{new Array(9).fill().map((value, index) => (
|
||||||
|
<Menu.Item key={index + 1}>{index + 1}</Menu.Item>
|
||||||
|
))}
|
||||||
|
</Menu.SubMenu>
|
||||||
|
</Menu>
|
||||||
|
}
|
||||||
|
trigger={["contextMenu"]}>
|
||||||
|
<div style={{ width: "100%", height: "19px" }}>
|
||||||
|
{record.production_vars && record.production_vars.bodypriority}
|
||||||
|
</div>
|
||||||
|
</Dropdown>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -5,8 +5,9 @@ import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
|||||||
import { DateFormatter } from "../../utils/DateFormatter";
|
import { DateFormatter } from "../../utils/DateFormatter";
|
||||||
import PhoneFormatter from "../../utils/PhoneFormatter";
|
import PhoneFormatter from "../../utils/PhoneFormatter";
|
||||||
import { alphaSort } from "../../utils/sorters";
|
import { alphaSort } from "../../utils/sorters";
|
||||||
import { ExclamationCircleFilled } from "@ant-design/icons";
|
import ProductionListColumnAlert from "./production-list-columns.alert.component";
|
||||||
import { Menu, Dropdown } from "antd";
|
import ProductionListColumnBodyPriority from "./production-list-columns.bodypriority.component";
|
||||||
|
import ProductionListColumnPaintPriority from "./production-list-columns.paintpriority.component";
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
@@ -133,32 +134,25 @@ export default [
|
|||||||
dataIndex: "status",
|
dataIndex: "status",
|
||||||
key: "status",
|
key: "status",
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
|
sorter: (a, b) => alphaSort(a.status, b.status),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: i18n.t("jobs.labels.bodyhours"),
|
||||||
|
dataIndex: "labhrs",
|
||||||
|
key: "labhrs",
|
||||||
|
sorter: (a, b) => a.labhrs - b.labhrs,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: i18n.t("jobs.labels.refinishhours"),
|
||||||
|
dataIndex: "larhrs",
|
||||||
|
key: "larhrs",
|
||||||
|
sorter: (a, b) => a.larhrs - b.larhrs,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: i18n.t("production.labels.alert"),
|
title: i18n.t("production.labels.alert"),
|
||||||
dataIndex: "alert",
|
dataIndex: "alert",
|
||||||
key: "alert",
|
key: "alert",
|
||||||
render: (text, record) => (
|
render: (text, record) => <ProductionListColumnAlert record={record} />,
|
||||||
<Dropdown
|
|
||||||
overlay={
|
|
||||||
<Menu>
|
|
||||||
<Menu.Item key="1">1st menu item {text}</Menu.Item>
|
|
||||||
<Menu.Item key="2">2nd menu item</Menu.Item>
|
|
||||||
<Menu.Item key="3">3rd menu item</Menu.Item>
|
|
||||||
</Menu>
|
|
||||||
}
|
|
||||||
trigger={["contextMenu"]}
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
onClick={() => console.log("Hi")}
|
|
||||||
style={{ width: "100%", height: "19px" }}
|
|
||||||
>
|
|
||||||
{record.production_vars && record.production_vars.alert ? (
|
|
||||||
<ExclamationCircleFilled className="production-alert" />
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</Dropdown>
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: i18n.t("production.labels.note"),
|
title: i18n.t("production.labels.note"),
|
||||||
@@ -175,11 +169,34 @@ export default [
|
|||||||
dataIndex: "ct",
|
dataIndex: "ct",
|
||||||
key: "ct",
|
key: "ct",
|
||||||
render: (text, record) => {
|
render: (text, record) => {
|
||||||
return (
|
let ct = 0;
|
||||||
<span>
|
if (!!record.actual_in) {
|
||||||
{(record.production_vars && record.production_vars.note) || ""}
|
const totalHrs = record.larhrs + record.labhrs;
|
||||||
</span>
|
const Difference_In_Time = new Date() - new Date(record.actual_in);
|
||||||
);
|
const Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24);
|
||||||
|
ct = (totalHrs / Difference_In_Days).toFixed(2);
|
||||||
|
}
|
||||||
|
return <span>{ct || 0}</span>;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: i18n.t("production.labels.bodypriority"),
|
||||||
|
dataIndex: "bodypriority",
|
||||||
|
key: "bodypriority",
|
||||||
|
sorter: (a, b) =>
|
||||||
|
a.production_vars.bodypriority - b.production_vars.bodypriority,
|
||||||
|
render: (text, record) => (
|
||||||
|
<ProductionListColumnBodyPriority record={record} />
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: i18n.t("production.labels.paintpriority"),
|
||||||
|
dataIndex: "paintpriority",
|
||||||
|
key: "paintpriority",
|
||||||
|
sorter: (a, b) =>
|
||||||
|
a.production_vars.paintpriority - b.production_vars.paintpriority,
|
||||||
|
render: (text, record) => (
|
||||||
|
<ProductionListColumnPaintPriority record={record} />
|
||||||
|
),
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
import { useMutation } from "@apollo/react-hooks";
|
||||||
|
import { Dropdown, Menu } from "antd";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { UPDATE_JOB } from "../../graphql/jobs.queries";
|
||||||
|
|
||||||
|
export default function ProductionListColumnPaintPriority({ record }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const [updateAlert] = useMutation(UPDATE_JOB);
|
||||||
|
|
||||||
|
const handleSetPaintPriority = (e) => {
|
||||||
|
const { key } = e;
|
||||||
|
updateAlert({
|
||||||
|
variables: {
|
||||||
|
jobId: record.id,
|
||||||
|
job: {
|
||||||
|
production_vars: {
|
||||||
|
...record.production_vars,
|
||||||
|
paintpriority: key === "clearPaintPriority" ? null : key,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).then(() => {
|
||||||
|
if (record.refetch) record.refetch();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dropdown
|
||||||
|
overlay={
|
||||||
|
<Menu onClick={handleSetPaintPriority}>
|
||||||
|
<Menu.Item key='clearPaintPriority'>
|
||||||
|
{t("production.actions.paintpriority-clear")}
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.SubMenu
|
||||||
|
key='set'
|
||||||
|
title={t("production.actions.paintpriority-set")}>
|
||||||
|
{new Array(9).fill().map((value, index) => (
|
||||||
|
<Menu.Item key={index + 1}>{index + 1}</Menu.Item>
|
||||||
|
))}
|
||||||
|
</Menu.SubMenu>
|
||||||
|
</Menu>
|
||||||
|
}
|
||||||
|
trigger={["contextMenu"]}>
|
||||||
|
<div style={{ width: "100%", height: "19px" }}>
|
||||||
|
{record.production_vars && record.production_vars.paintpriority}
|
||||||
|
</div>
|
||||||
|
</Dropdown>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -45,9 +45,10 @@ export function ProductionListTable({
|
|||||||
if (!!!columns) return <div>No columns found.</div>;
|
if (!!!columns) return <div>No columns found.</div>;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactDragListView.DragColumn onDragEnd={onDragEnd} nodeSelector="th">
|
<ReactDragListView.DragColumn onDragEnd={onDragEnd} nodeSelector='th'>
|
||||||
<Table
|
<Table
|
||||||
size="small"
|
size='small'
|
||||||
|
pagination={false}
|
||||||
title={() => (
|
title={() => (
|
||||||
<div>
|
<div>
|
||||||
<ProductionListSaveConfigButton
|
<ProductionListSaveConfigButton
|
||||||
@@ -67,11 +68,12 @@ export function ProductionListTable({
|
|||||||
state.sortedInfo.columnKey === c.key && state.sortedInfo.order,
|
state.sortedInfo.columnKey === c.key && state.sortedInfo.order,
|
||||||
};
|
};
|
||||||
})}
|
})}
|
||||||
rowKey="id"
|
rowKey='id'
|
||||||
loading={loading}
|
loading={loading}
|
||||||
dataSource={data}
|
dataSource={data}
|
||||||
onChange={handleTableChange}
|
onChange={handleTableChange}
|
||||||
rowClassName={(record, index) => (index % 2 === 0 ? "red" : "blue")} //TODO What could be good usage here?
|
rowClassName={(record, index) => (index % 2 === 0 ? "red" : "blue")} //TODO What could be good usage here?
|
||||||
|
onRow={(record, index) => (record.refetch = refetch)}
|
||||||
/>
|
/>
|
||||||
</ReactDragListView.DragColumn>
|
</ReactDragListView.DragColumn>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export default function ProductionListTableContainer({ columnState }) {
|
|||||||
<div>
|
<div>
|
||||||
<ProductionListTable
|
<ProductionListTable
|
||||||
loading={loading}
|
loading={loading}
|
||||||
data={data ? data.jobs : []}
|
data={data ? data.productionview : []}
|
||||||
refetch={refetch}
|
refetch={refetch}
|
||||||
columnState={columnState}
|
columnState={columnState}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
.production-alert {
|
.production-alert {
|
||||||
animation: alertBlinker 2s linear infinite;
|
animation: alertBlinker 1s linear infinite;
|
||||||
}
|
}
|
||||||
@keyframes alertBlinker {
|
@keyframes alertBlinker {
|
||||||
50% {
|
50% {
|
||||||
color: red;
|
color: red;
|
||||||
|
opacity: 100;
|
||||||
//opacity: 0;
|
//opacity: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ export const QUERY_ALL_ACTIVE_JOBS = gql`
|
|||||||
|
|
||||||
export const QUERY_JOBS_IN_PRODUCTION = gql`
|
export const QUERY_JOBS_IN_PRODUCTION = gql`
|
||||||
query QUERY_JOBS_IN_PRODUCTION {
|
query QUERY_JOBS_IN_PRODUCTION {
|
||||||
jobs {
|
productionview {
|
||||||
id
|
id
|
||||||
status
|
status
|
||||||
ro_number
|
ro_number
|
||||||
@@ -72,8 +72,9 @@ export const QUERY_JOBS_IN_PRODUCTION = gql`
|
|||||||
clm_total
|
clm_total
|
||||||
ownr_ph1
|
ownr_ph1
|
||||||
special_coverage_policy
|
special_coverage_policy
|
||||||
status
|
|
||||||
production_vars
|
production_vars
|
||||||
|
labhrs
|
||||||
|
larhrs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -528,6 +528,7 @@
|
|||||||
"audit": "Audit Trail",
|
"audit": "Audit Trail",
|
||||||
"availablenew": "Available New Jobs",
|
"availablenew": "Available New Jobs",
|
||||||
"availablesupplements": "Available Supplements",
|
"availablesupplements": "Available Supplements",
|
||||||
|
"bodyhours": "Body Hrs",
|
||||||
"cards": {
|
"cards": {
|
||||||
"appraiser": "Appraiser",
|
"appraiser": "Appraiser",
|
||||||
"customer": "Customer Information",
|
"customer": "Customer Information",
|
||||||
@@ -565,6 +566,7 @@
|
|||||||
"ratetotals": {
|
"ratetotals": {
|
||||||
"lab": "Body Total"
|
"lab": "Body Total"
|
||||||
},
|
},
|
||||||
|
"refinishhours": "Refinish Hrs",
|
||||||
"vehicle_info": "Vehicle"
|
"vehicle_info": "Vehicle"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
@@ -600,6 +602,7 @@
|
|||||||
"invoices": "Invoices",
|
"invoices": "Invoices",
|
||||||
"jobs": "Jobs",
|
"jobs": "Jobs",
|
||||||
"owners": "Owners",
|
"owners": "Owners",
|
||||||
|
"productionlist": "Production - List",
|
||||||
"schedule": "Schedule",
|
"schedule": "Schedule",
|
||||||
"shop": "My Shop",
|
"shop": "My Shop",
|
||||||
"shop_config": "Configuration",
|
"shop_config": "Configuration",
|
||||||
@@ -719,11 +722,20 @@
|
|||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"bodypriority-clear": "Clear Body Priority",
|
||||||
|
"bodypriority-set": "Set Body Priority",
|
||||||
|
"paintpriority-clear": "Clear Paint Priority",
|
||||||
|
"paintpriority-set": "Set Paint Priority",
|
||||||
"saveconfig": "Save Configuration"
|
"saveconfig": "Save Configuration"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"alert": "Alert",
|
"alert": "Alert",
|
||||||
"note": "Production Note"
|
"alertoff": "Remove alert from job",
|
||||||
|
"alerton": "Add alert to job",
|
||||||
|
"bodypriority": "B/P",
|
||||||
|
"cycletime": "C/T",
|
||||||
|
"note": "Production Note",
|
||||||
|
"paintpriority": "P/P"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
|||||||
@@ -528,6 +528,7 @@
|
|||||||
"audit": "",
|
"audit": "",
|
||||||
"availablenew": "",
|
"availablenew": "",
|
||||||
"availablesupplements": "",
|
"availablesupplements": "",
|
||||||
|
"bodyhours": "",
|
||||||
"cards": {
|
"cards": {
|
||||||
"appraiser": "Tasador",
|
"appraiser": "Tasador",
|
||||||
"customer": "Información al cliente",
|
"customer": "Información al cliente",
|
||||||
@@ -565,6 +566,7 @@
|
|||||||
"ratetotals": {
|
"ratetotals": {
|
||||||
"lab": ""
|
"lab": ""
|
||||||
},
|
},
|
||||||
|
"refinishhours": "",
|
||||||
"vehicle_info": "Vehículo"
|
"vehicle_info": "Vehículo"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
@@ -600,6 +602,7 @@
|
|||||||
"invoices": "",
|
"invoices": "",
|
||||||
"jobs": "Trabajos",
|
"jobs": "Trabajos",
|
||||||
"owners": "propietarios",
|
"owners": "propietarios",
|
||||||
|
"productionlist": "",
|
||||||
"schedule": "Programar",
|
"schedule": "Programar",
|
||||||
"shop": "Mi tienda",
|
"shop": "Mi tienda",
|
||||||
"shop_config": "Configuración",
|
"shop_config": "Configuración",
|
||||||
@@ -719,11 +722,20 @@
|
|||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"bodypriority-clear": "",
|
||||||
|
"bodypriority-set": "",
|
||||||
|
"paintpriority-clear": "",
|
||||||
|
"paintpriority-set": "",
|
||||||
"saveconfig": ""
|
"saveconfig": ""
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"alert": "",
|
"alert": "",
|
||||||
"note": ""
|
"alertoff": "",
|
||||||
|
"alerton": "",
|
||||||
|
"bodypriority": "",
|
||||||
|
"cycletime": "",
|
||||||
|
"note": "",
|
||||||
|
"paintpriority": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
|||||||
@@ -528,6 +528,7 @@
|
|||||||
"audit": "",
|
"audit": "",
|
||||||
"availablenew": "",
|
"availablenew": "",
|
||||||
"availablesupplements": "",
|
"availablesupplements": "",
|
||||||
|
"bodyhours": "",
|
||||||
"cards": {
|
"cards": {
|
||||||
"appraiser": "Expert",
|
"appraiser": "Expert",
|
||||||
"customer": "Informations client",
|
"customer": "Informations client",
|
||||||
@@ -565,6 +566,7 @@
|
|||||||
"ratetotals": {
|
"ratetotals": {
|
||||||
"lab": ""
|
"lab": ""
|
||||||
},
|
},
|
||||||
|
"refinishhours": "",
|
||||||
"vehicle_info": "Véhicule"
|
"vehicle_info": "Véhicule"
|
||||||
},
|
},
|
||||||
"successes": {
|
"successes": {
|
||||||
@@ -600,6 +602,7 @@
|
|||||||
"invoices": "",
|
"invoices": "",
|
||||||
"jobs": "Emplois",
|
"jobs": "Emplois",
|
||||||
"owners": "Propriétaires",
|
"owners": "Propriétaires",
|
||||||
|
"productionlist": "",
|
||||||
"schedule": "Programme",
|
"schedule": "Programme",
|
||||||
"shop": "Mon magasin",
|
"shop": "Mon magasin",
|
||||||
"shop_config": "Configuration",
|
"shop_config": "Configuration",
|
||||||
@@ -719,11 +722,20 @@
|
|||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"bodypriority-clear": "",
|
||||||
|
"bodypriority-set": "",
|
||||||
|
"paintpriority-clear": "",
|
||||||
|
"paintpriority-set": "",
|
||||||
"saveconfig": ""
|
"saveconfig": ""
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"alert": "",
|
"alert": "",
|
||||||
"note": ""
|
"alertoff": "",
|
||||||
|
"alerton": "",
|
||||||
|
"bodypriority": "",
|
||||||
|
"cycletime": "",
|
||||||
|
"note": "",
|
||||||
|
"paintpriority": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
23
hasura/migrations/1587574775829_run_sql_migration/up.yaml
Normal file
23
hasura/migrations/1587574775829_run_sql_migration/up.yaml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
- args:
|
||||||
|
cascade: true
|
||||||
|
read_only: false
|
||||||
|
sql: "create view productionview as \r\nselect j.id ,\r\n
|
||||||
|
\ j.status ,\r\n j.ro_number ,\r\n j.est_number
|
||||||
|
\ ,\r\n j.ownr_fn ,\r\n j.ownr_ln ,\r\n
|
||||||
|
\ j.v_model_yr ,\r\n j.v_model_desc ,\r\n j.clm_no
|
||||||
|
\ ,\r\n j.v_make_desc ,\r\n j.v_color
|
||||||
|
\ ,\r\n j.plate_no ,\r\n j.actual_in
|
||||||
|
\ ,\r\n j.scheduled_completion ,\r\n j.scheduled_delivery
|
||||||
|
\ ,\r\n j.ins_co_nm ,\r\n j.clm_total ,\r\n
|
||||||
|
\ j.ownr_ph1 ,\r\n j.special_coverage_policy ,\r\n j.production_vars
|
||||||
|
\ ,\r\n lab.labhrs, lar.larhrs\r\n from public.jobs j\r\n left
|
||||||
|
join \r\n (select l.jobid, sum(l.mod_lb_hrs ) labhrs from public.joblines
|
||||||
|
l where mod_lbr_ty = 'LAB' group by l.jobid ) lab on lab.jobid = j.id \r\n
|
||||||
|
\ left join (select l2.jobid, sum(l2.mod_lb_hrs ) larhrs from public.joblines
|
||||||
|
l2 where mod_lbr_ty = 'LAR' group by l2.jobid ) lar on lar.jobid = j.id\r\n
|
||||||
|
\ where j.inproduction =true;"
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
type: add_existing_table_or_view
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
relationship: bodyshop
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
type: drop_relationship
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
- args:
|
||||||
|
name: bodyshop
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
using:
|
||||||
|
manual_configuration:
|
||||||
|
column_mapping:
|
||||||
|
id: id
|
||||||
|
remote_table:
|
||||||
|
name: jobs
|
||||||
|
schema: public
|
||||||
|
type: create_object_relationship
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
16
hasura/migrations/1587575091197_run_sql_migration/up.yaml
Normal file
16
hasura/migrations/1587575091197_run_sql_migration/up.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
- args:
|
||||||
|
cascade: true
|
||||||
|
read_only: false
|
||||||
|
sql: "CREATE OR REPLACE VIEW \"public\".\"productionview\" AS \n SELECT j.id,\n
|
||||||
|
\ j.status,\n j.ro_number,\n j.est_number,\n j.ownr_fn,\n j.ownr_ln,\n
|
||||||
|
\ j.v_model_yr,\n j.v_model_desc,\n j.clm_no,\n j.v_make_desc,\n
|
||||||
|
\ j.v_color,\n j.plate_no,\n j.actual_in,\n j.scheduled_completion,\n
|
||||||
|
\ j.scheduled_delivery,\n j.ins_co_nm,\n j.clm_total,\n j.ownr_ph1,\n
|
||||||
|
\ j.special_coverage_policy,\n j.production_vars,\n lab.labhrs,\n lar.larhrs,\n
|
||||||
|
\ j.shopid\n FROM ((jobs j\n LEFT JOIN ( SELECT l.jobid,\n sum(l.mod_lb_hrs)
|
||||||
|
AS labhrs\n FROM joblines l\n WHERE (l.mod_lbr_ty = 'LAB'::text)\n
|
||||||
|
\ GROUP BY l.jobid) lab ON ((lab.jobid = j.id)))\n LEFT JOIN ( SELECT
|
||||||
|
l2.jobid,\n sum(l2.mod_lb_hrs) AS larhrs\n FROM joblines
|
||||||
|
l2\n WHERE (l2.mod_lbr_ty = 'LAR'::text)\n GROUP BY l2.jobid)
|
||||||
|
lar ON ((lar.jobid = j.id)))\n WHERE (j.inproduction = true);"
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
- args:
|
||||||
|
name: bodyshop
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
using:
|
||||||
|
foreign_key_constraint_on: id
|
||||||
|
type: create_object_relationship
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
relationship: bodyshop
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
type: drop_relationship
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
relationship: bodyshop
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
type: drop_relationship
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
- args:
|
||||||
|
name: bodyshop
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
using:
|
||||||
|
manual_configuration:
|
||||||
|
column_mapping:
|
||||||
|
shopid: id
|
||||||
|
remote_table:
|
||||||
|
name: bodyshops
|
||||||
|
schema: public
|
||||||
|
type: create_object_relationship
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- id
|
||||||
|
- status
|
||||||
|
- ro_number
|
||||||
|
- est_number
|
||||||
|
- ownr_fn
|
||||||
|
- ownr_ln
|
||||||
|
- v_model_yr
|
||||||
|
- v_model_desc
|
||||||
|
- clm_no
|
||||||
|
- v_make_desc
|
||||||
|
- v_color
|
||||||
|
- plate_no
|
||||||
|
- actual_in
|
||||||
|
- scheduled_completion
|
||||||
|
- scheduled_delivery
|
||||||
|
- ins_co_nm
|
||||||
|
- clm_total
|
||||||
|
- ownr_ph1
|
||||||
|
- special_coverage_policy
|
||||||
|
- production_vars
|
||||||
|
- labhrs
|
||||||
|
- larhrs
|
||||||
|
- shopid
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
limit: null
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: productionview
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
Reference in New Issue
Block a user