mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +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