mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-17 12:35:46 +00:00
[PUI] Sales order shipments (#8250)
* Refactor AttachmentPanel into common component * Remove unused imports * Add very basic implementation for SalesOrderShipmentDetail page * Refactor NotesPanel into common component * Fetch customer data * Add some placeholder actions * Updates for shipment detail page * Adjust SalesOrderShipment API * Add badges * Implement API filter for SalesOrderAllocation * Display allocation table on shipment page * Add placeholder action to edit allocations * Improvements for SalesOrderAllocationTable * Improve API db fetch efficiency * Edit / delete pending allocations * Fix for legacy CUI tables * API tweaks * Revert custom attachment code for SalesOrderShipment * Implement "complete shipment" form * Allocate stock item(s) to sales order * Fixes for TableField rendering * Reset sourceLocation when form opens * Updated playwrigh tests * Tweak branch (will be reverted) * Revert github workflow
This commit is contained in:
@ -41,6 +41,92 @@ test('Sales Orders', async ({ page }) => {
|
||||
await page.getByRole('button', { name: 'Issue Order' }).waitFor();
|
||||
});
|
||||
|
||||
test('Sales Orders - Shipments', async ({ page }) => {
|
||||
await doQuickLogin(page);
|
||||
|
||||
await page.goto(`${baseUrl}/home`);
|
||||
await page.getByRole('tab', { name: 'Sales' }).click();
|
||||
await page.getByRole('tab', { name: 'Sales Orders' }).click();
|
||||
|
||||
// Click through to a particular sales order
|
||||
await page.getByRole('tab', { name: 'Sales Orders' }).waitFor();
|
||||
await page.getByRole('cell', { name: 'SO0006' }).first().click();
|
||||
await page.getByRole('tab', { name: 'Shipments' }).click();
|
||||
|
||||
// Create a new shipment
|
||||
await page.getByLabel('action-button-add-shipment').click();
|
||||
await page.getByLabel('text-field-tracking_number').fill('1234567890');
|
||||
await page.getByLabel('text-field-invoice_number').fill('9876543210');
|
||||
await page.getByRole('button', { name: 'Submit' }).click();
|
||||
|
||||
// Expected field error
|
||||
await page
|
||||
.getByText('The fields order, reference must make a unique set')
|
||||
.first()
|
||||
.waitFor();
|
||||
await page.getByRole('button', { name: 'Cancel' }).click();
|
||||
|
||||
// Edit one of the existing shipments
|
||||
await page.getByLabel('row-action-menu-0').click();
|
||||
await page.getByRole('menuitem', { name: 'Edit' }).click();
|
||||
|
||||
// Ensure the form has loaded
|
||||
await page.waitForTimeout(500);
|
||||
|
||||
let tracking_number = await page
|
||||
.getByLabel('text-field-tracking_number')
|
||||
.inputValue();
|
||||
|
||||
if (!tracking_number) {
|
||||
tracking_number = '1234567890';
|
||||
} else if (tracking_number.endsWith('x')) {
|
||||
// Remove the 'x' from the end of the tracking number
|
||||
tracking_number = tracking_number.substring(0, tracking_number.length - 1);
|
||||
} else {
|
||||
// Add an 'x' to the end of the tracking number
|
||||
tracking_number += 'x';
|
||||
}
|
||||
|
||||
// Change the tracking number
|
||||
await page.getByLabel('text-field-tracking_number').fill(tracking_number);
|
||||
await page.waitForTimeout(250);
|
||||
await page.getByRole('button', { name: 'Submit' }).click();
|
||||
|
||||
// Click through to a particular shipment
|
||||
await page.getByLabel('row-action-menu-0').click();
|
||||
await page.getByRole('menuitem', { name: 'View Shipment' }).click();
|
||||
|
||||
// Click through the various tabs
|
||||
await page.getByRole('tab', { name: 'Attachments' }).click();
|
||||
await page.getByRole('tab', { name: 'Notes' }).click();
|
||||
await page.getByRole('tab', { name: 'Assigned Items' }).click();
|
||||
|
||||
// Ensure assigned items table loads correctly
|
||||
await page.getByRole('cell', { name: 'BATCH-001' }).first().waitFor();
|
||||
|
||||
await page.getByRole('tab', { name: 'Shipment Details' }).click();
|
||||
|
||||
// The "new" tracking number should be visible
|
||||
await page.getByText(tracking_number).waitFor();
|
||||
|
||||
// Link back to sales order
|
||||
await page.getByRole('link', { name: 'SO0006' }).click();
|
||||
|
||||
// Let's try to allocate some stock
|
||||
await page.getByRole('tab', { name: 'Line Items' }).click();
|
||||
await page.getByLabel('row-action-menu-1').click();
|
||||
await page.getByRole('menuitem', { name: 'Allocate stock' }).click();
|
||||
await page
|
||||
.getByText('Select the source location for the stock allocation')
|
||||
.waitFor();
|
||||
await page.getByLabel('number-field-quantity').fill('123');
|
||||
await page.getByLabel('related-field-stock_item').click();
|
||||
await page.getByText('Quantity: 42').click();
|
||||
await page.getByRole('button', { name: 'Submit' }).click();
|
||||
await page.getByText('This field is required.').waitFor();
|
||||
await page.getByRole('button', { name: 'Cancel' }).click();
|
||||
});
|
||||
|
||||
test('Purchase Orders', async ({ page }) => {
|
||||
await doQuickLogin(page);
|
||||
|
||||
|
Reference in New Issue
Block a user