2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-07-05 05:00:58 +00:00

Order start dates (#8966)

* Add 'start_date' field to orders

- PurchaseOrder
- SalesOrder
- ReturnOrder

* Add serializer field

* Add API filters

* Add table columns

* Add fields to forms

* Table filters

* Add validation check

* Refactor BuildOrderTable

* Update detail page

* Bump API version

* Allow sorting by start_date

* Fix for purchase order field

* Update detail pages

* Update playwright tests

* Updated playwright tests

* Documentation updates

* Updated playwright tests
This commit is contained in:
Oliver
2025-01-29 22:45:39 +11:00
committed by GitHub
parent 0c56a3132b
commit eee4916350
24 changed files with 317 additions and 45 deletions

View File

@ -3,11 +3,12 @@ import { baseUrl } from '../defaults.ts';
import {
clearTableFilters,
clickButtonIfVisible,
openFilterDrawer
openFilterDrawer,
setTableChoiceFilter
} from '../helpers.ts';
import { doQuickLogin } from '../login.ts';
test('Purchase Orders', async ({ page }) => {
test('Purchase Orders - List', async ({ page }) => {
await doQuickLogin(page);
await page.getByRole('tab', { name: 'Purchasing' }).click();
@ -22,10 +23,17 @@ test('Purchase Orders', async ({ page }) => {
await page.getByText('Pending').first().waitFor();
await page.getByText('On Hold').first().waitFor();
// Click through to a particular purchase order
await page.getByRole('cell', { name: 'PO0013' }).click();
// Filter by 'has start date'
await setTableChoiceFilter(page, 'Has Start Date', 'Yes');
await page.getByRole('cell', { name: 'Scheduled purchase order' }).waitFor();
// Click through to a particular purchase order
await page.getByRole('cell', { name: 'PO0015' }).click();
await page.getByRole('button', { name: 'Issue Order' }).waitFor();
// Expected values
await page.getByText('2025-06-12').waitFor(); // Start Date
await page.getByText('2025-07-17').waitFor(); // Target Date
});
test('Purchase Orders - Barcodes', async ({ page }) => {
@ -70,7 +78,7 @@ test('Purchase Orders - Barcodes', async ({ page }) => {
await page.getByRole('button', { name: 'Issue Order' }).waitFor();
// Ensure we can scan back to this page, with the associated barcode
await page.goto(`${baseUrl}/`);
await page.getByRole('tab', { name: 'Sales' }).click();
await page.waitForTimeout(250);
await page.getByRole('button', { name: 'Open Barcode Scanner' }).click();
await page.getByPlaceholder('Enter barcode data').fill('1234567890');

View File

@ -33,6 +33,7 @@ test('Tables - Filters', async ({ page }) => {
await setTableChoiceFilter(page, 'Responsible', 'readers');
await setTableChoiceFilter(page, 'Assigned to me', 'No');
await setTableChoiceFilter(page, 'Project Code', 'PRO-ZEN');
await setTableChoiceFilter(page, 'Has Start Date', 'Yes');
await clearTableFilters(page);
});
@ -49,4 +50,17 @@ test('Tables - Columns', async ({ page }) => {
// De-select some items
await page.getByRole('menuitem', { name: 'Description' }).click();
await page.getByRole('menuitem', { name: 'Stocktake' }).click();
await page.keyboard.press('Escape');
await page.goto(`${baseUrl}/sales/index/salesorders`);
// Open column selector
await page.getByLabel('table-select-columns').click();
await page.getByRole('menuitem', { name: 'Start Date' }).click();
await page.getByRole('menuitem', { name: 'Target Date' }).click();
await page.getByRole('menuitem', { name: 'Reference', exact: true }).click();
await page.getByRole('menuitem', { name: 'Project Code' }).click();
await page.waitForTimeout(1000);
});