diff --git a/client/cypress/e2e/parts-ordering/parts-ordering.cy.js b/client/cypress/e2e/parts-ordering/parts-ordering.cy.js index 74efcd382..8dbc72d57 100644 --- a/client/cypress/e2e/parts-ordering/parts-ordering.cy.js +++ b/client/cypress/e2e/parts-ordering/parts-ordering.cy.js @@ -12,12 +12,6 @@ describe( cy.visit("/manage/jobs"); - cy.intercept("POST", Cypress.env("graphql_dev_endpoint"), (req) => { - if (req.body.operationName === "QUERY_BODYSHOP") { - req.alias = "bodyshop"; - } - }); - cy.get('[data-cy="active-jobs-table"]') .find(".ant-table-tbody") .find("> tr:not(.ant-table-measure-row)") diff --git a/client/cypress/e2e/posting-bills/posting-bills.cy.js b/client/cypress/e2e/posting-bills/posting-bills.cy.js index bae034d08..3a4221432 100644 --- a/client/cypress/e2e/posting-bills/posting-bills.cy.js +++ b/client/cypress/e2e/posting-bills/posting-bills.cy.js @@ -1,4 +1,7 @@ -import uniqueId from "lodash/uniqueId"; +import job from "../../fixtures/jobs/job-3.json"; +import moment from "moment"; + +const uuid = () => Cypress._.random(0, 1e6); describe( "Billing job parts orders", @@ -6,34 +9,33 @@ describe( defaultCommandTimeout: 5000, }, () => { + const today = moment(new Date()).format("YYYY-MM-DD"); + beforeEach(() => { - cy.visit("/manage"); + cy.viewport(1280, 720); + cy.visit("/manage/jobs"); - cy.get("body").then(($body) => { - if ($body.text().includes("Login")) { - // Log in - cy.get('[data-cy="username"]').type("john@imex.dev"); - cy.get('[data-cy="password"]').type("john123"); - cy.get('[data-cy="sign-in-button"]').click(); + cy.intercept("POST", Cypress.env("graphql_dev_endpoint"), (req) => { + if (req.body.operationName === "SEARCH_VENDOR_AUTOCOMPLETE") { + req.alias = "vendors"; } - - cy.get(".ant-table-tbody") - .should("be.visible") - .find("tr") - .should("not.have.class", "ant-table-placeholder"); - - cy.get(".ant-table-row") - .not(':contains("Open")') - .first() - .find("a") - .first() - .click(); - - cy.url().should("include", "/manage/jobs"); - - // Go to repair data tab - cy.get('[data-cy="tab-partssublet"]').should("be.visible").click(); }); + + cy.get('[data-cy="active-jobs-table"]') + .find(".ant-table-tbody") + .find("> tr:not(.ant-table-measure-row)") + .as("active-jobs-table") + .should("not.have.class", "ant-table-placeholder"); + + cy.get("@active-jobs-table") + .contains(job.clm_no) + .first() + .parent() + .find('[data-cy="active-job-link"]') + .click(); + + // Go to repair data tab + cy.get('[data-cy="tab-partssublet"]').should("be.visible").click(); }); it("receives a part bill", () => { @@ -52,29 +54,28 @@ describe( // fill out form // data-cy="bill-form-invoice" - cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD246-00-")); + cy.get('[data-cy="bill-form-invoice"]').type(uuid()); cy.get("#bill-form-date").click(); - cy.get('[title="2023-07-06"]').should("be.visible").click(); + cy.get(`[title="${today}"]`).should("be.visible").click({ force: true }); - // get table cy.get('[data-cy="bill-line-table"]').each(($row) => { // get retail amount cy.wrap($row) .find('[data-cy="bill-line-actual-price"]') - .invoke("val") - .then((p) => { - const vendorPercentOff = 0.2; - - // get cost - vendor's percent off - const cost = p - p * vendorPercentOff; - cy.get('[data-cy="bill-form-bill-total"]').type(p); - - cy.wrap($row).find('[data-cy="bill-line-actual-cost"]').type(cost); - }); + .click({ force: true, multiple: true }); + cy.wrap($row) + .find('[data-cy="bill-line-actual-cost"]') + .click({ multiple: true }); }); - // Click save + cy.get('[data-cy="bill-line-actual-cost"]').then((cells) => { + const totals = cells.toArray().map((el) => Number(el.value)); + const sum = Cypress._.sum(totals); + + cy.get('[data-cy="bill-form-bill-total"]').type(sum); + }); + // // Click save cy.get('[data-cy="bill-form-save-button"]').click(); cy.get(".ant-notification-notice-message").contains( @@ -94,28 +95,30 @@ describe( // Select Line cy.antdSelect("bill-line", "-- Not On Estimate --"); // Fill the Form - cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD246-01-")); + cy.get('[data-cy="bill-form-invoice"]').type(uuid()); cy.get("#bill-form-date").click(); - cy.get('[title="2023-07-06"]').should("be.visible").click(); + cy.get(`[title="${today}"]`).should("be.visible").click({ force: true }); - // get table cy.get('[data-cy="bill-line-table"]').each(($row) => { // get retail amount cy.wrap($row) .find('[data-cy="bill-line-actual-price"]') - .invoke("val") - .then((p) => { - const vendorPercentOff = 0.2; - - // get cost - vendor's percent off - const cost = p - p * vendorPercentOff; - cy.get('[data-cy="bill-form-bill-total"]').type(p); - - cy.wrap($row).find('[data-cy="bill-line-actual-cost"]').type(cost); - }); + .click({ force: true, multiple: true }); + cy.wrap($row) + .find('[data-cy="bill-line-actual-cost"]') + .click({ multiple: true }); }); + cy.get('[data-cy="bill-line-actual-cost"]').then((cells) => { + const totals = cells.toArray().map((el) => Number(el.value)); + const sum = Cypress._.sum(totals); + + cy.get('[data-cy="bill-form-bill-total"]').type(sum); + }); + + cy.antdSelect("bill-cost-center"); + // Click save cy.get('[data-cy="bill-form-save-button"]').click(); @@ -136,28 +139,30 @@ describe( // Select Line cy.antdSelect("bill-line", "-- Not On Estimate --"); // Fill the Form - cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD246-02-")); + cy.get('[data-cy="bill-form-invoice"]').type(uuid()); cy.get("#bill-form-date").click(); - cy.get('[title="2023-07-06"]').should("be.visible").click(); + cy.get(`[title="${today}"]`).should("be.visible").click({ force: true }); - // get table cy.get('[data-cy="bill-line-table"]').each(($row) => { // get retail amount cy.wrap($row) .find('[data-cy="bill-line-actual-price"]') - .invoke("val") - .then((p) => { - const vendorPercentOff = 0.2; - - // get cost - vendor's percent off - const cost = p - p * vendorPercentOff; - cy.get('[data-cy="bill-form-bill-total"]').type(p); - - cy.wrap($row).find('[data-cy="bill-line-actual-cost"]').type(cost); - }); + .click({ force: true, multiple: true }); + cy.wrap($row) + .find('[data-cy="bill-line-actual-cost"]') + .click({ multiple: true }); }); + cy.get('[data-cy="bill-line-actual-cost"]').then((cells) => { + const totals = cells.toArray().map((el) => Number(el.value)); + const sum = Cypress._.sum(totals); + + cy.get('[data-cy="bill-form-bill-total"]').type(sum); + }); + + cy.antdSelect("bill-cost-center"); + // Click save cy.get('[data-cy="bill-form-savenew-button"]') .should("not.be.disabled") @@ -241,202 +246,202 @@ describe( } ); -describe( - "Validating and calculating bills", - { - defaultCommandTimeout: 5000, - }, - () => { - beforeEach(() => { - cy.visit("/manage"); +// describe( +// "Validating and calculating bills", +// { +// defaultCommandTimeout: 5000, +// }, +// () => { +// beforeEach(() => { +// cy.visit("/manage"); - cy.get("body").then(($body) => { - if ($body.text().includes("Login")) { - // Log in - cy.get('[data-cy="username"]').type("john@imex.dev"); - cy.get('[data-cy="password"]').type("john123"); - cy.get('[data-cy="sign-in-button"]').click(); - } +// cy.get("body").then(($body) => { +// if ($body.text().includes("Login")) { +// // Log in +// cy.get('[data-cy="username"]').type("john@imex.dev"); +// cy.get('[data-cy="password"]').type("john123"); +// cy.get('[data-cy="sign-in-button"]').click(); +// } - cy.get(".ant-table-tbody") - .should("be.visible") - .find("tr") - .should("not.have.class", "ant-table-placeholder"); +// cy.get(".ant-table-tbody") +// .should("be.visible") +// .find("tr") +// .should("not.have.class", "ant-table-placeholder"); - cy.get(".ant-table-row").contains("QBD261").click(); +// cy.get(".ant-table-row").contains("QBD261").click(); - cy.url().should("include", "/manage/jobs"); +// cy.url().should("include", "/manage/jobs"); - // Go to repair data tab - cy.get('[data-cy="tab-partssublet"]').should("be.visible").click(); - }); - }); +// // Go to repair data tab +// cy.get('[data-cy="tab-partssublet"]').should("be.visible").click(); +// }); +// }); - it("validates auto reconciliation through posting bill", () => { - // Find the first row in the parts order - cy.get('[data-cy="part-orders-table"]') - .find(".ant-table-tbody") - .find("> tr:not(.ant-table-measure-row)") - .as("orders-table") - .should("not.have.class", "ant-table-placeholder"); +// it("validates auto reconciliation through posting bill", () => { +// // Find the first row in the parts order +// cy.get('[data-cy="part-orders-table"]') +// .find(".ant-table-tbody") +// .find("> tr:not(.ant-table-measure-row)") +// .as("orders-table") +// .should("not.have.class", "ant-table-placeholder"); - cy.get("@orders-table") - .first() - .should("be.visible") - .find('[data-cy="receive-bill-button"]') - .click(); +// cy.get("@orders-table") +// .first() +// .should("be.visible") +// .find('[data-cy="receive-bill-button"]') +// .click(); - // fill out form - cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-0")); +// // fill out form +// cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-0")); - cy.get("#bill-form-date").click(); - cy.get('[title="2023-07-06"]').should("be.visible").click(); +// cy.get("#bill-form-date").click(); +// cy.get('[title="2023-07-06"]').should("be.visible").click(); - cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); - cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); +// cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); +// cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); - cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); +// cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); - // Click save - cy.get('[data-cy="bill-form-save-button"]').click(); +// // Click save +// cy.get('[data-cy="bill-form-save-button"]').click(); - cy.get("#retailtotal").should("have.text", "$83.87"); +// cy.get("#retailtotal").should("have.text", "$83.87"); - cy.get(".discrepancy").each(($statistic) => { - cy.wrap($statistic).should("have.text", "$0.00"); - }); - }); +// cy.get(".discrepancy").each(($statistic) => { +// cy.wrap($statistic).should("have.text", "$0.00"); +// }); +// }); - it("returning item and validating statistics", () => { - cy.get('[data-cy="bills-table"]') - .find(".ant-table-tbody") - .find("> tr:not(.ant-table-measure-row)") - .as("bills-table") - .should("not.have.class", "ant-table-placeholder"); +// it("returning item and validating statistics", () => { +// cy.get('[data-cy="bills-table"]') +// .find(".ant-table-tbody") +// .find("> tr:not(.ant-table-measure-row)") +// .as("bills-table") +// .should("not.have.class", "ant-table-placeholder"); - cy.get("@bills-table") - .first() - .should("not.be.disabled") - .find('[data-cy="return-items-button"]') - .click(); +// cy.get("@bills-table") +// .first() +// .should("not.be.disabled") +// .find('[data-cy="return-items-button"]') +// .click(); - cy.get('[data-cy="billline-checkbox"]').check(); - cy.get('[data-cy="billline-return-items-ok-button"]').click(); +// cy.get('[data-cy="billline-checkbox"]').check(); +// cy.get('[data-cy="billline-return-items-ok-button"]').click(); - cy.get("#order-quantity").type("1", { force: true, multiple: true }); - cy.get('[data-cy="part-order-select-none"]').click({ - multiple: true, - force: true, - }); - cy.get('[data-cy="order-part-submit"]').click({ - multiple: true, - force: true, - }); +// cy.get("#order-quantity").type("1", { force: true, multiple: true }); +// cy.get('[data-cy="part-order-select-none"]').click({ +// multiple: true, +// force: true, +// }); +// cy.get('[data-cy="order-part-submit"]').click({ +// multiple: true, +// force: true, +// }); - cy.get("#totalReturns").should("have.text", "$83.87"); - cy.get("#calculatedcreditsnotreceived").should("have.text", "$83.87"); - cy.get("#creditsnotreceived").should("have.text", "$83.87"); - }); +// cy.get("#totalReturns").should("have.text", "$83.87"); +// cy.get("#calculatedcreditsnotreceived").should("have.text", "$83.87"); +// cy.get("#creditsnotreceived").should("have.text", "$83.87"); +// }); - it("receives credit memo without return part", () => { - // Find the first row in the parts order - cy.get('[data-cy="part-orders-table"]') - .find(".ant-table-tbody") - .find("> tr:not(.ant-table-measure-row)") - .as("orders-table") - .should("not.have.class", "ant-table-placeholder"); +// it("receives credit memo without return part", () => { +// // Find the first row in the parts order +// cy.get('[data-cy="part-orders-table"]') +// .find(".ant-table-tbody") +// .find("> tr:not(.ant-table-measure-row)") +// .as("orders-table") +// .should("not.have.class", "ant-table-placeholder"); - cy.get("@orders-table") - .find('[data-cy="part-order-return-checkbox"]') - .filter(":checked") - .first() - .parent() - .parent() - .parent() - .parent() - .find('[data-cy="receive-bill-button"]') - .click(); +// cy.get("@orders-table") +// .find('[data-cy="part-order-return-checkbox"]') +// .filter(":checked") +// .first() +// .parent() +// .parent() +// .parent() +// .parent() +// .find('[data-cy="receive-bill-button"]') +// .click(); - // fill out form - cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-01-")); +// // fill out form +// cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-01-")); - cy.get("#bill-form-date").click(); - cy.get('[title="2023-07-06"]').should("be.visible").click(); +// cy.get("#bill-form-date").click(); +// cy.get('[title="2023-07-06"]').should("be.visible").click(); - cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); - cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); +// cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); +// cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); - cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); +// cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); - // Click save - cy.get('[data-cy="bill-form-save-button"]').click(); +// // Click save +// cy.get('[data-cy="bill-form-save-button"]').click(); - cy.get("#totalReturns").should("have.text", "$83.87"); - cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); - cy.get("#creditsnotreceived").should("have.text", "$83.87"); - }); +// cy.get("#totalReturns").should("have.text", "$83.87"); +// cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); +// cy.get("#creditsnotreceived").should("have.text", "$83.87"); +// }); - it("receives credit memo with return part", () => { - // Find the first row in the parts order - cy.get('[data-cy="part-orders-table"]') - .find(".ant-table-tbody") - .find("> tr:not(.ant-table-measure-row)") - .as("orders-table") - .should("not.have.class", "ant-table-placeholder"); +// it("receives credit memo with return part", () => { +// // Find the first row in the parts order +// cy.get('[data-cy="part-orders-table"]') +// .find(".ant-table-tbody") +// .find("> tr:not(.ant-table-measure-row)") +// .as("orders-table") +// .should("not.have.class", "ant-table-placeholder"); - cy.get("@orders-table") - .find('[data-cy="part-order-return-checkbox"]') - .filter(":checked") - .first() - .parent() - .parent() - .parent() - .parent() - .find('[data-cy="receive-bill-button"]') - .click(); +// cy.get("@orders-table") +// .find('[data-cy="part-order-return-checkbox"]') +// .filter(":checked") +// .first() +// .parent() +// .parent() +// .parent() +// .parent() +// .find('[data-cy="receive-bill-button"]') +// .click(); - // fill out form - cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-02-")); +// // fill out form +// cy.get('[data-cy="bill-form-invoice"]').type(uniqueId("1QBD261-02-")); - cy.get("#bill-form-date").click(); - cy.get('[title="2023-07-06"]').should("be.visible").click(); +// cy.get("#bill-form-date").click(); +// cy.get('[title="2023-07-06"]').should("be.visible").click(); - cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); - cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); +// cy.get('[data-cy="bill-form-bill-total"]').type("70.46"); +// cy.get('[data-cy="bill-line-actual-cost"]').type("67.10"); - cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); +// cy.get("#bill-form-discrepancy").should("have.text", "$0.00"); - cy.get('[data-cy="mark-as-received-checkbox"]').check(); +// cy.get('[data-cy="mark-as-received-checkbox"]').check(); - // Click save - cy.get('[data-cy="bill-form-save-button"]').click(); +// // Click save +// cy.get('[data-cy="bill-form-save-button"]').click(); - cy.get("#totalReturns").should("have.text", "$83.87"); - cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); - cy.get("#creditsnotreceived").should("have.text", "$0.00"); - }); +// cy.get("#totalReturns").should("have.text", "$83.87"); +// cy.get("#calculatedcreditsnotreceived").should("have.text", "$0.00"); +// cy.get("#creditsnotreceived").should("have.text", "$0.00"); +// }); - it("views the row expander if it has the order and bill", () => { - cy.get('[data-cy="tab-repairdata"]').should("be.visible").click(); +// it("views the row expander if it has the order and bill", () => { +// cy.get('[data-cy="tab-repairdata"]').should("be.visible").click(); - cy.get('[data-cy="filter-parts-button"]') - .should("not.be.disabled") - .click(); +// cy.get('[data-cy="filter-parts-button"]') +// .should("not.be.disabled") +// .click(); - cy.get('[data-cy="repair-data-table"]') - .find(".ant-table-tbody") - .find("> tr:not(.ant-table-measure-row)") - .first() - .next() - .find("td") - .first() - .click(); +// cy.get('[data-cy="repair-data-table"]') +// .find(".ant-table-tbody") +// .find("> tr:not(.ant-table-measure-row)") +// .first() +// .next() +// .find("td") +// .first() +// .click(); - cy.get('[data-cy="parts-bills-order"]') - .should("be.visible") - .find("li") - .first() - .should("not.have.text", "This part has not yet been ordered."); - }); - } -); +// cy.get('[data-cy="parts-bills-order"]') +// .should("be.visible") +// .find("li") +// .first() +// .should("not.have.text", "This part has not yet been ordered."); +// }); +// } +// ); diff --git a/client/cypress/fixtures/jobs/job.json b/client/job.json similarity index 100% rename from client/cypress/fixtures/jobs/job.json rename to client/job.json diff --git a/client/src/components/bill-form/bill-form.lines.component.jsx b/client/src/components/bill-form/bill-form.lines.component.jsx index dc13625db..890dd1bef 100644 --- a/client/src/components/bill-form/bill-form.lines.component.jsx +++ b/client/src/components/bill-form/bill-form.lines.component.jsx @@ -317,7 +317,12 @@ export function BillEnterModalLinesComponent({ }; }, formInput: (record, index) => ( - {bodyshop.cdk_dealerid || bodyshop.pbs_serialnumber ? CiecaSelect(true, false) : responsibilityCenters.costs.map((item) => (