334 lines
7.3 KiB
JavaScript
334 lines
7.3 KiB
JavaScript
// GraphQL Queries and Mutations
|
|
const GET_BODYSHOP_STATUS = `
|
|
query GetBodyshopStatus($id: uuid!) {
|
|
bodyshops_by_pk(id: $id) {
|
|
md_ro_statuses
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_VEHICLE_BY_SHOP_VIN = `
|
|
query GetVehicleByShopVin($shopid: uuid!, $v_vin: String!) {
|
|
vehicles(where: { shopid: { _eq: $shopid }, v_vin: { _eq: $v_vin } }, limit: 1) {
|
|
id
|
|
}
|
|
}
|
|
`;
|
|
|
|
const INSERT_OWNER = `
|
|
mutation InsertOwner($owner: owners_insert_input!) {
|
|
insert_owners_one(object: $owner) {
|
|
id
|
|
}
|
|
}
|
|
`;
|
|
|
|
const INSERT_JOB_WITH_LINES = `
|
|
mutation InsertJob($job: jobs_insert_input!) {
|
|
insert_jobs_one(object: $job) {
|
|
id
|
|
joblines { id unq_seq }
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_JOB_BY_CLAIM = `
|
|
query GetJobByClaim($shopid: uuid!, $clm_no: String!) {
|
|
jobs(
|
|
where: { shopid: { _eq: $shopid }, clm_no: { _eq: $clm_no } }
|
|
order_by: { created_at: desc }
|
|
limit: 1
|
|
) {
|
|
id
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_JOB_BY_ID = `
|
|
query GetJobByID($shopid: uuid!, $jobid: uuid!) {
|
|
jobs(
|
|
where: { shopid: { _eq: $shopid }, id: { _eq: $jobid } }
|
|
order_by: { created_at: desc }
|
|
limit: 1
|
|
) {
|
|
id
|
|
}
|
|
}
|
|
`;
|
|
|
|
const UPDATE_JOB_BY_ID = `
|
|
mutation UpdateJobById($id: uuid!, $job: jobs_set_input!) {
|
|
update_jobs_by_pk(pk_columns: { id: $id }, _set: $job) {
|
|
id
|
|
}
|
|
}
|
|
`;
|
|
|
|
// Soft delete joblines by marking removed=true instead of hard-deleting
|
|
const SOFT_DELETE_JOBLINES_BY_IDS = `
|
|
mutation SoftDeleteJoblinesByIds($jobid: uuid!, $unqSeqs: [Int!]!) {
|
|
update_joblines(
|
|
where: { jobid: { _eq: $jobid }, unq_seq: { _in: $unqSeqs } },
|
|
_set: { removed: true }
|
|
) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const INSERT_JOBLINES = `
|
|
mutation InsertJoblines($joblines: [joblines_insert_input!]!) {
|
|
insert_joblines(objects: $joblines) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const CHECK_EXTERNAL_SHOP_ID = `
|
|
query CHECK_KEY($key: String!) {
|
|
bodyshops(where: { external_shop_id: { _eq: $key } }) {
|
|
external_shop_id
|
|
}
|
|
}
|
|
`;
|
|
|
|
const CREATE_SHOP = `
|
|
mutation CREATE_SHOP($bs: bodyshops_insert_input!) {
|
|
insert_bodyshops_one(object: $bs) { id }
|
|
}
|
|
`;
|
|
|
|
const DELETE_VENDORS_BY_SHOP = `
|
|
mutation DELETE_VENDORS($shopId: uuid!) {
|
|
delete_vendors(where: { bodyshopid: { _eq: $shopId } }) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const DELETE_SHOP = `
|
|
mutation DELETE_SHOP($id: uuid!) {
|
|
delete_bodyshops_by_pk(id: $id) { id }
|
|
}
|
|
`;
|
|
|
|
const CREATE_USER = `
|
|
mutation CREATE_USER($u: users_insert_input!) {
|
|
insert_users_one(object: $u) {
|
|
id: authid
|
|
email
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_BODYSHOP = `
|
|
query GetBodyshop($id: uuid!) {
|
|
bodyshops_by_pk(id: $id) {
|
|
external_shop_id
|
|
shopname
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_ASSOCIATED_USERS = `
|
|
query GetAssociatedUsers($shopId: uuid!) {
|
|
associations(where: {shopid: {_eq: $shopId}}) {
|
|
user {
|
|
authid
|
|
email
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
|
|
const DELETE_ASSOCIATIONS_BY_SHOP = `
|
|
mutation DeleteAssociationsByShop($shopId: uuid!) {
|
|
delete_associations(where: {shopid: {_eq: $shopId}}) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_USER_ASSOCIATIONS_COUNT = `
|
|
query GetUserAssociationsCount($userEmail: String!) {
|
|
associations_aggregate(where: {useremail: {_eq: $userEmail}}) {
|
|
aggregate {
|
|
count
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
|
|
const DELETE_USER = `
|
|
mutation DeleteUser($email: String!) {
|
|
delete_users(where: {email: {_eq: $email}}) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_VENDORS = `
|
|
query GetVendors($shopId: uuid!) {
|
|
vendors(where: {bodyshopid: {_eq: $shopId}}) {
|
|
name
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_JOBS_BY_SHOP = `
|
|
query GetJobsByShop($shopId: uuid!) {
|
|
jobs(where: {shopid: {_eq: $shopId}}) {
|
|
id
|
|
}
|
|
}
|
|
`;
|
|
|
|
const DELETE_JOBLINES_BY_JOB_IDS = `
|
|
mutation DeleteJoblinesByJobIds($jobIds: [uuid!]!) {
|
|
delete_joblines(where: {jobid: {_in: $jobIds}}) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const DELETE_JOBS_BY_IDS = `
|
|
mutation DeleteJobsByIds($jobIds: [uuid!]!) {
|
|
delete_jobs(where: {id: {_in: $jobIds}}) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const DELETE_AUDIT_TRAIL_BY_SHOP = `
|
|
mutation DeleteAuditTrailByShop($shopId: uuid!) {
|
|
delete_audit_trail(where: {bodyshopid: {_eq: $shopId}}) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const GET_JOBLINES_NOTES_BY_JOBID_UNQSEQ = `
|
|
query GetJoblinesNotesByJobIdUnqSeq($jobid: uuid!, $unqSeqs: [Int!]!) {
|
|
joblines(where: { jobid: { _eq: $jobid }, unq_seq: { _in: $unqSeqs }, removed: { _neq: true } }) {
|
|
unq_seq
|
|
notes
|
|
}
|
|
}
|
|
`;
|
|
|
|
// Clear task links to parts orders for all jobs in a shop to avoid FK violations when deleting parts orders
|
|
const CLEAR_TASKS_PARTSORDER_LINKS_BY_JOBIDS = `
|
|
mutation ClearTasksPartsOrderLinks($jobIds: [uuid!]!) {
|
|
update_tasks(
|
|
where: { parts_order: { jobid: { _in: $jobIds } } },
|
|
_set: { partsorderid: null }
|
|
) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
// Delete parts order lines where the parent order belongs to any of the provided job IDs
|
|
const DELETE_PARTS_ORDER_LINES_BY_JOB_IDS = `
|
|
mutation DeletePartsOrderLinesByJobIds($jobIds: [uuid!]!) {
|
|
delete_parts_order_lines(where: { parts_order: { jobid: { _in: $jobIds } } }) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
// Delete parts orders for the given job IDs
|
|
const DELETE_PARTS_ORDERS_BY_JOB_IDS = `
|
|
mutation DeletePartsOrdersByJobIds($jobIds: [uuid!]!) {
|
|
delete_parts_orders(where: { jobid: { _in: $jobIds } }) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
const UPSERT_JOBLINES = `
|
|
mutation UpsertJoblines($joblines: [joblines_insert_input!]!) {
|
|
insert_joblines(
|
|
objects: $joblines,
|
|
on_conflict: {
|
|
constraint: joblines_jobid_unq_seq_key,
|
|
update_columns: [
|
|
status,
|
|
line_desc,
|
|
notes,
|
|
manual_line,
|
|
part_qty,
|
|
oem_partno,
|
|
alt_partno,
|
|
part_type,
|
|
act_price,
|
|
db_price,
|
|
tax_part,
|
|
mod_lbr_ty,
|
|
mod_lb_hrs,
|
|
op_code_desc,
|
|
lbr_amt,
|
|
lbr_typ_j,
|
|
lbr_hrs_j,
|
|
lbr_op_j,
|
|
paint_stg,
|
|
paint_tone
|
|
]
|
|
}
|
|
) {
|
|
affected_rows
|
|
}
|
|
}
|
|
`;
|
|
|
|
// Get jobline IDs for the incoming unq_seq values (only non-removed)
|
|
const GET_JOBLINE_IDS_BY_JOBID_UNQSEQ = `
|
|
query GetJoblineIdsByJobIdUnqSeq($jobid: uuid!, $unqSeqs: [Int!]!) {
|
|
joblines(where: { jobid: { _eq: $jobid }, unq_seq: { _in: $unqSeqs }, removed: { _neq: true } }) {
|
|
id
|
|
unq_seq
|
|
}
|
|
}
|
|
`;
|
|
|
|
// Update a single jobline by primary key
|
|
const UPDATE_JOBLINE_BY_PK = `
|
|
mutation UpdateJoblineByPk($id: uuid!, $jl: joblines_set_input!) {
|
|
update_joblines_by_pk(pk_columns: { id: $id }, _set: $jl) { id }
|
|
}
|
|
`;
|
|
|
|
module.exports = {
|
|
GET_BODYSHOP_STATUS,
|
|
GET_VEHICLE_BY_SHOP_VIN,
|
|
INSERT_OWNER,
|
|
INSERT_JOB_WITH_LINES,
|
|
GET_JOB_BY_CLAIM,
|
|
UPDATE_JOB_BY_ID,
|
|
SOFT_DELETE_JOBLINES_BY_IDS,
|
|
INSERT_JOBLINES,
|
|
CHECK_EXTERNAL_SHOP_ID,
|
|
CREATE_SHOP,
|
|
DELETE_VENDORS_BY_SHOP,
|
|
DELETE_SHOP,
|
|
CREATE_USER,
|
|
GET_BODYSHOP,
|
|
GET_ASSOCIATED_USERS,
|
|
DELETE_ASSOCIATIONS_BY_SHOP,
|
|
GET_USER_ASSOCIATIONS_COUNT,
|
|
DELETE_USER,
|
|
GET_VENDORS,
|
|
GET_JOBS_BY_SHOP,
|
|
DELETE_JOBLINES_BY_JOB_IDS,
|
|
DELETE_JOBS_BY_IDS,
|
|
DELETE_AUDIT_TRAIL_BY_SHOP,
|
|
GET_JOBLINES_NOTES_BY_JOBID_UNQSEQ,
|
|
GET_JOB_BY_ID,
|
|
CLEAR_TASKS_PARTSORDER_LINKS_BY_JOBIDS,
|
|
DELETE_PARTS_ORDER_LINES_BY_JOB_IDS,
|
|
DELETE_PARTS_ORDERS_BY_JOB_IDS,
|
|
UPSERT_JOBLINES,
|
|
GET_JOBLINE_IDS_BY_JOBID_UNQSEQ,
|
|
UPDATE_JOBLINE_BY_PK
|
|
};
|