diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step1/StartTests.cs b/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step1/StartTests.cs
new file mode 100644
index 00000000..92ec0a36
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step1/StartTests.cs
@@ -0,0 +1,36 @@
+using System;
+using AIAssistedDiagnostics.ModernUI.Tests.Tests;
+using Core.Login;
+using Core.TestExecution;
+
+namespace GeneratedWrappers.SOLUTIONNAME
+{
+ internal class StartTests
+ {
+ public void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ using (TestExecution.CreateTestStepGroup("RS301000 smoke test"))
+ {
+ Console.WriteLine("Starting RS301000 smoke test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.RepairWorkOrdersScreen_CanOpenPreparedWorkOrder();
+ }
+
+
+ // TODO: Run the test that verifies that the labor quantity is restored after setting it below the configured value.
+ ///////////// The added code
+ using (TestExecution.CreateTestStepGroup("RS301000 labor quantity validation test"))
+ {
+ Console.WriteLine("Starting RS301000 labor quantity validation test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity();
+
+ }
+ //////////// The end of the added code
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step2/StartTests.cs b/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step2/StartTests.cs
new file mode 100644
index 00000000..a3964ecd
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step2/StartTests.cs
@@ -0,0 +1,37 @@
+using System;
+using AIAssistedDiagnostics.ModernUI.Tests.Tests;
+using Core.Login;
+using Core.TestExecution;
+
+namespace GeneratedWrappers.SOLUTIONNAME
+{
+ internal class StartTests
+ {
+ public void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ using (TestExecution.CreateTestStepGroup("RS301000 smoke test"))
+ {
+ Console.WriteLine("Starting RS301000 smoke test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.RepairWorkOrdersScreen_CanOpenPreparedWorkOrder();
+ }
+
+
+ // Run the test that verifies that the labor quantity is restored after setting it below the configured value.
+ ///////////// The modified code
+ // using (TestExecution.CreateTestStepGroup("RS301000 labor quantity validation test"))
+ // {
+ // Console.WriteLine("Starting RS301000 labor quantity validation test...");
+
+ // var rs301000Tests = new RS301000_LaborQuantityTests();
+
+ // rs301000Tests.LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity();
+
+ // }
+ //////////// The end of the modified code
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step3/StartTests.cs b/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step3/StartTests.cs
new file mode 100644
index 00000000..8fe74f53
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step3/StartTests.cs
@@ -0,0 +1,36 @@
+using System;
+using AIAssistedDiagnostics.ModernUI.Tests.Tests;
+using Core.Login;
+using Core.TestExecution;
+
+namespace GeneratedWrappers.SOLUTIONNAME
+{
+ internal class StartTests
+ {
+ public void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ using (TestExecution.CreateTestStepGroup("RS301000 smoke test"))
+ {
+ Console.WriteLine("Starting RS301000 smoke test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.RepairWorkOrdersScreen_CanOpenPreparedWorkOrder();
+ }
+
+
+ // Run the test that verifies that the labor quantity is restored after setting it below the configured value.
+ ///////////// The modified code
+ using (TestExecution.CreateTestStepGroup("RS301000 labor quantity validation test"))
+ {
+ Console.WriteLine("Starting RS301000 labor quantity validation test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity();
+
+ }
+ //////////// The end of the modified code
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes
new file mode 100644
index 00000000..1ff0c423
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore
new file mode 100644
index 00000000..9491a2fd
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore
@@ -0,0 +1,363 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Oo]ut/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln
new file mode 100644
index 00000000..c36b9864
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 18
+VisualStudioVersion = 18.7.11911.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AIAssistedDiagnostics.ModernUI.Tests", "AIAssistedDiagnostics.ModernUI.Tests\AIAssistedDiagnostics.ModernUI.Tests.csproj", "{CDC1F631-6007-B431-EBBE-D016839CC2BC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {D28A3C68-0E5B-45FF-A2C6-F9A8CF28E848}
+ EndGlobalSection
+EndGlobal
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj
new file mode 100644
index 00000000..f0649f44
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj
@@ -0,0 +1,71 @@
+
+
+
+ Exe
+ net48
+ 9.0
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Settings.settings
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs
new file mode 100644
index 00000000..f46c5746
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs
@@ -0,0 +1,13 @@
+namespace AIAssistedDiagnostics.ModernUI.Tests.Helpers
+{
+ public static class TestData
+ {
+ public const string PreparedWorkOrderNbr = "000001";
+
+ public const decimal ConfiguredLaborQuantity = 1m;
+
+ public const decimal BelowConfiguredLaborQuantity = 0m;
+
+ public const decimal ExpectedRestoredLaborQuantity = 1m;
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs
new file mode 100644
index 00000000..d676271c
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests
+{
+ public class Program
+ {
+ public static int Main(string[] args) => Execution.Launcher.Main(args);
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..b20a50c9
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.7.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings
new file mode 100644
index 00000000..049245f4
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json
new file mode 100644
index 00000000..f1ea355c
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json
@@ -0,0 +1,9 @@
+{
+ "profiles": {
+ "AIAssistedDiagnostics.ModernUI.Tests": {
+ "commandName": "Project",
+ "commandLineArgs": ".\\Test.exe /config \"C:\\AcumaticaTestSDK\\TestSDK_2026R1_26_100_0175\\config.xml\"",
+ "nativeDebugging": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md
new file mode 100644
index 00000000..3757695e
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md
@@ -0,0 +1,605 @@
+# AI-Assisted Testing and Diagnostics with the Test SDK for the Modern UI (Test SDK Project Setup)
+
+This document explains how to prepare and run the Test SDK project for the Modern UI used in Lessons/Activities 2.1–2.3 of the **AI-Assisted Testing & Diagnostics with the Test SDK for the Modern UI** training/help guide.
+
+The project demonstrates automated browser-level validation for the **Repair Work Orders (RS301000)** form.
+The test opens work order `000001`, changes the labor quantity from `1` to `0`, triggers validation by saving and refreshing the Labor grid, and verifies that the quantity is restored to `1`.
+
+## Audience
+
+This setup is intended for facilitators who need to run this Test SDK project locally.
+
+
+## What This Project Contains
+
+The solution includes the prepared Test SDK project:
+
+```text
+AIAssistedDiagnostics.ModernUI.Tests.sln
+AIAssistedDiagnostics.ModernUI.Tests\
+```
+
+The project includes:
+
+```text
+Wrappers\Generated\RS\RS301000.cs
+Wrappers\Generated\RS301000_response.json
+Wrappers\Custom\RepairWorkOrdersScreen.cs
+Helpers\TestData.cs
+Tests\StartTests.cs
+Tests\RS301000_LaborQuantityTests.cs
+artifacts\passing\
+artifacts\failures\
+```
+
+The key generated wrapper members used by the tests added in `RS301000_LaborQuantityTests.cs` are:
+
+```csharp
+WorkOrders_fsColumnAOrder.OrderNbr
+Labor_gridLabor
+Labor_gridLabor.Row.Quantity
+Save()
+Labor_gridLabor.Refresh()
+```
+
+The custom helper class is:
+
+```csharp
+RepairWorkOrdersScreen
+```
+
+The helper wraps the generated wrapper members so the test code can use learner-friendly methods such as:
+
+```csharp
+Open()
+OpenWorkOrder(string workOrderNbr)
+GetFirstLaborQuantity()
+SetFirstLaborQuantity(decimal quantity)
+TriggerValidation()
+```
+
+## What This Project Does Not Include
+
+The repository does **not** include:
+
+- Acumatica ERP installer
+- Test SDK ZIP file
+- Real `config.xml` with credentials
+
+## How to Build and Run the Project Locally
+
+To build and run the project locally, install the following:
+
+1. **Visual Studio 2022 or later**
+
+ Recommended workload:
+
+ ```text
+ .NET desktop development
+ ```
+
+ Make sure the project can target:
+
+ ```text
+ .NET Framework 4.8
+ ```
+
+2. **GitHub Copilot for Visual Studio**
+
+ Copilot is used in the learning activities related to this project to inspect wrapper code, generate UI test code (the `LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity()` method), and classify failures.
+
+3. **Acumatica ERP 2026 R1**
+
+ For this project, the expected build is:
+
+ ```text
+ Acumatica ERP 2026 R1 build 26.100.0175 (https://acumatica-builds.s3.amazonaws.com/index.html?prefix=builds/26.1/26.100.0175/AcumaticaERP/)
+ ```
+
+4. **Matching Acumatica Test SDK**
+
+ Use the Test SDK package that matches the Acumatica ERP build:
+
+ ```text
+ TestSDK_26_100_0175_183.zip (https://acumatica-builds.s3.amazonaws.com/index.html?prefix=builds/26.1/26.100.0175/TestSDK/)
+ ```
+
+ Extract it locally. A recommended path is:
+
+ ```text
+ C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\
+ ```
+
+5. **Local Acumatica site**
+
+ The examples below assume a local site named:
+
+ ```text
+ SmartFix_T280
+ ```
+
+ Example URL:
+
+ ```text
+ http://localhost/SmartFix_T280
+ ```
+
+## Required Acumatica Site State
+
+Before running the Test SDK project, the target Acumatica site must be prepared. You must deploy an instance for the **T280 Testing Business Logic with the Acumatica Unit Test Framework** training course by using the **Acumatica ERP Installer** downloaded in Step 3 above.
+
+### Required customization
+
+The `PhoneRepairShop` customization must be published to the deployed Acumatica ERP instance. This customization is automatically included in the **T280 Testing Business Logic with the Acumatica Unit Test Framework** training course instance.
+
+This Test SDK project expects the published customization project to have the following behavior:
+
+```text
+On the **Repair Work Orders (RS301000)**, when a labor quantity lower than the configured value is entered,
+the system restores the quantity to the configured value.
+```
+
+### Required screen
+
+The user configured in `config.xml` of the extracted Test SDK pacakge must be able to open the following screen in the **Modern UI**:
+
+```text
+RS301000 - Repair Work Orders
+```
+
+### Required test data
+
+The site must contain the following prepared work order:
+
+| Item | Value |
+|---|---|
+| Screen | `RS301000` |
+| Work order number | `000001` |
+| Configured labor quantity | `1` |
+| Test input quantity | `0` |
+| Expected restored quantity | `1` |
+
+Before running the automated tests, manually verify this behavior in Acumatica:
+
+1. Sign in to the target site.
+2. Open **Repair Work Orders (RS301000)**.
+3. Open work order `000001`.
+4. Confirm that the target labor line has quantity `1`.
+5. Change the labor quantity to `0`.
+6. Save the record and refresh the Labor grid.
+7. Confirm that the quantity is restored to `1`.
+
+If this manual check does not pass, fix the Acumatica site or customization before running the Test SDK project.
+
+## Recommended Local Folder Structure
+
+Use a stable local folder structure. For example:
+
+```text
+C:\AIAssistedTesting\ModernUITestSDK\ - For the Test SDK project downloaded from GitHub (see Step 1 below)
+C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\ - For the extracted Test SDK ZIP file (see Item 4 above)
+C:\AcuTestInstances\SmartFix_T280\ - For the deployed Acumatica site
+C:\share\logs\ - For the Test SDK log files
+```
+
+The exact paths can differ, but the project, Test SDK configuration, and launch profile must point to the same locations.
+
+## Step 1: Clone or Download the Repository
+
+Clone or download the 2026R2 branch of the Help-and-Training-Examples repository from this link: https://github.com/Acumatica/Help-and-Training-Examples.
+Copy the `ModernUI\TestSDK\AIAssistedTesting\FinalProject\AIAssistedDiagnostics.ModernUI.Tests` solution folder from the repository to a local folder.
+
+Example:
+
+```text
+C:\AIAssistedTesting\ModernUITestSDK\
+```
+
+Open the solution:
+
+```text
+AIAssistedDiagnostics.ModernUI.Tests.sln
+```
+
+## Step 2: Add the Test SDK Packages as a NuGet Source
+
+The project depends on packages from the matching Test SDK.
+
+In Visual Studio:
+
+1. Open **Tools > NuGet Package Manager > Package Manager Settings**.
+2. Select **NuGet Package Manager > Package Sources**.
+3. Add a new source.
+
+Example:
+
+```text
+Name: Acumatica TestSDK 2026R1 26.100.0175
+Source: C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\packages
+```
+
+4. Save the package source.
+5. Restore NuGet packages for the solution.
+
+If the project cannot restore packages, verify that the Test SDK path and package source are correct.
+
+## Step 3: Configure the Test SDK `config.xml`
+
+Use the `config.xml` file from the extracted Test SDK folder.
+
+Example location:
+
+```text
+C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\config.xml
+```
+
+Update it for your local site. The exact XML structure depends on your Test SDK package, so use the existing file as the starting point.
+
+Verify these values:
+
+| Setting | Example |
+|---|---|
+| Site URL | `http://localhost/SmartFix_T280` |
+| Tenant | `Company` |
+| Username | `admin` or a dedicated Test SDK user |
+| Password | Local test password |
+| Browser path | Test SDK Chrome path |
+| Log path | `C:\share\logs` |
+| Download path | `C:\share\download` |
+| Physical site path, if required | `C:\SmartFix_T280` |
+
+
+## Step 4: Configure `launchSettings.json`
+
+Open the project launch settings file:
+
+```text
+AIAssistedDiagnostics.ModernUI.Tests\Properties\launchSettings.json
+```
+
+Make sure the launch profile points to the Test SDK `config.xml`.
+
+Example:
+
+```json
+{
+ "profiles": {
+ "AIAssistedDiagnostics.ModernUI.Tests": {
+ "commandName": "Project",
+ "commandLineArgs": "C:\\AcumaticaTestSDK\\TestSDK_2026R1_26_100_0175\\config.xml"
+ }
+ }
+}
+```
+
+Use your actual Test SDK path.
+
+
+## Step 5: Confirm the Project Builds
+
+In Visual Studio:
+
+1. Restore NuGet packages.
+2. Build the solution.
+3. Confirm that `AIAssistedDiagnostics.ModernUI.Tests` builds successfully.
+
+The project should target:
+
+```text
+.NET Framework 4.8
+```
+
+If you see errors related to nullable reference types, confirm the project uses a C# language version that supports nullable reference syntax.
+
+Recommended project settings:
+
+```xml
+9.0
+enable
+```
+
+## Step 6: Verify `Test.cs`
+
+The `Test.cs` file should simply sign in to the deployed instance and run `StartTests`.
+The wrapper for the RS301000 screen has already been generated.
+
+Recommended structure:
+
+```csharp
+using Core.Login;
+using Core.TestExecution;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests
+{
+ public class Test : Check
+ {
+ public override void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ StartTests startTests = new StartTests();
+ startTests.Execute();
+ }
+ }
+}
+```
+
+## Step 7: Verify `StartTests.cs`
+
+Open:
+
+```text
+Tests\StartTests.cs
+```
+
+This file should execute only the `RS301000` tests.
+
+Recommended structure:
+
+```csharp
+using AIAssistedDiagnostics.ModernUI.Tests.Tests;
+using Core.TestExecution;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests
+{
+ internal class StartTests
+ {
+ public void Execute()
+ {
+ using (TestExecution.CreateTestStepGroup("RS301000 smoke test"))
+ {
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+
+ rs301000Tests.RepairWorkOrdersScreen_CanOpenPreparedWorkOrder();
+ }
+
+ using (TestExecution.CreateTestStepGroup("RS301000 labor quantity validation test"))
+ {
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+
+ rs301000Tests.LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity();
+ }
+ }
+ }
+}
+```
+
+## Step 8: Verify `TestData.cs`
+
+Open:
+
+```text
+Helpers\TestData.cs
+```
+
+Confirm that it contains:
+
+```csharp
+namespace AIAssistedDiagnostics.ModernUI.Tests.Helpers
+{
+ public static class TestData
+ {
+ public const string PreparedWorkOrderNbr = "000001";
+
+ public const decimal ConfiguredLaborQuantity = 1m;
+
+ public const decimal BelowConfiguredLaborQuantity = 0m;
+
+ public const decimal ExpectedRestoredLaborQuantity = 1m;
+ }
+}
+```
+
+## Step 9: Verify the Test Class Requirement
+
+Open:
+
+```text
+Tests\RS301000_LaborQuantityTests.cs
+```
+
+The test class must inherit from `Core.Wrapper`.
+
+Recommended declaration:
+
+```csharp
+using Core;
+
+public sealed class RS301000_LaborQuantityTests : Wrapper
+```
+
+If the test class does not inherit from `Wrapper`, the generated `RS301000` wrapper may fail during initialization with an `InvalidCastException`.
+
+## Step 10: Run the Smoke Test
+
+The smoke test confirms that the project can sign in, open `RS301000`, open work order `000001`, and read the configured labor quantity.
+
+Smoke test:
+
+```csharp
+RepairWorkOrdersScreen_CanOpenPreparedWorkOrder()
+```
+
+To run only the smoke test:
+
+1. Open `StartTests.cs`.
+2. Keep the validation test commented out.
+3. Run the project from Visual Studio.
+
+Example:
+
+```csharp
+rs301000Tests.RepairWorkOrdersScreen_CanOpenPreparedWorkOrder();
+
+// rs301000Tests.LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity();
+```
+
+Expected behavior:
+
+```text
+Log in to Acumatica
+Open RS301000
+Type Order Nbr. = 000001
+Read the labor quantity
+Confirm that the quantity is 1
+```
+
+Expected result:
+
+```text
+Exit code: 0
+```
+
+## Step 11: Run the Validation Test
+
+After the smoke test passes, enable the validation test.
+
+Validation test:
+
+```csharp
+LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity()
+```
+
+Expected behavior:
+
+```text
+Log in to Acumatica
+Open RS301000
+Type Order Nbr. = 000001
+Type Quantity = 0
+Click Save
+Click Refresh
+Read the labor quantity
+Confirm that the quantity is restored to 1
+```
+
+Expected result:
+
+```text
+Exit code: 0
+```
+
+## Expected Passing Output
+
+A passing run should match the sanitized artifact:
+
+```text
+artifacts\passing\modern-ui-testsdk-passing-output.txt
+```
+
+Expected summary:
+
+```text
+Test: LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity
+Result: Passed
+
+Screen:
+RS301000 Repair Work Orders
+
+Prepared record:
+000001
+
+Scenario:
+The test opened Repair Work Orders, opened work order 000001, changed the labor quantity from 1 to 0, triggered validation by saving and refreshing the Labor grid, and verified that the labor quantity was restored to 1.
+
+Observed operations:
+- Open screen: RS301000
+- Type into input: Order Nbr., value: 000001
+- Type into input: Quantity, value: 0
+- Click toolbar button: Save
+- Click toolbar button: Refresh
+
+Expected final quantity:
+1
+
+Observed final quantity:
+1
+
+Warning assertion:
+Not asserted through wrapper. The runnable Test SDK assertion validates the restored quantity.
+
+Exit code:
+0
+```
+
+## Prepared Failure Artifacts
+
+The project includes sanitized failure artifacts.
+
+Expected files:
+
+```text
+artifacts\failures\wrapper-member-not-found-output.txt
+artifacts\failures\validation-not-triggered-output.txt
+artifacts\failures\test-data-not-found-output.txt
+artifacts\failures\timing-wait-timeout-output.txt
+artifacts\failures\environment-config-error-output.txt
+```
+
+These files are used to practice failure classification with Copilot.
+
+
+## Troubleshooting
+
+### Login fails
+
+Check:
+
+- Site URL in `config.xml`
+- Tenant name
+- Username
+- Password
+- User access rights
+- Whether the site is running
+
+### RS301000 does not open
+
+Check:
+
+- The user can open `RS301000` manually.
+- The user sees `RS301000` in the Modern UI.
+- The generated wrapper file exists:
+
+ ```text
+ Wrappers\Generated\RS\RS301000.cs
+ ```
+
+- `RepairWorkOrdersScreen.Open()` calls the correct screen-opening method.
+
+### Work order `000001` cannot be found
+
+Check:
+
+- Work order `000001` exists in the target tenant.
+- The Test SDK user can open it manually.
+- `TestData.PreparedWorkOrderNbr` is set to `000001`.
+- The site was not reset or reconfigured before the test.
+
+### Validation test fails with `Expected: 1 / Actual: 0`
+
+Likely cause:
+
+```text
+Validation was not triggered by the test.
+```
+
+Check:
+
+- `TriggerValidation()` calls `Save()`.
+- `TriggerValidation()` calls `Labor_gridLabor.Refresh()`.
+- The UI has enough time to save and refresh.
+- The customization contains the fixed business logic.
+
+### Warning text is not asserted
+
+This is expected.
+
+The generated wrapper exposes:
+
+```csharp
+Labor_gridLabor.Row.Quantity
+```
+
+but warning inspection has not been confirmed through the wrapper/control API.
+
+The runnable validation test asserts the restored quantity, not the warning text.
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs
new file mode 100644
index 00000000..2b844a18
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs
@@ -0,0 +1,18 @@
+using AIAssistedDiagnostics.ModernUI.Tests.Tests;
+using ClassGenerator;
+using Core.Login;
+using Core.TestExecution;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests
+{
+ public class Test : Check
+ {
+ public override void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ StartTests startTests = new StartTests();
+ startTests.Execute();
+ }
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs
new file mode 100644
index 00000000..19446983
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs
@@ -0,0 +1,64 @@
+using System;
+using Core;
+using AIAssistedDiagnostics.ModernUI.Tests.Helpers;
+using AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Custom;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Tests
+{
+ public sealed class RS301000_LaborQuantityTests : Wrapper
+ {
+ public void RepairWorkOrdersScreen_CanOpenPreparedWorkOrder()
+ {
+ // Arrange
+ var screen = new RepairWorkOrdersScreen();
+
+ // Act
+ screen.Open();
+ screen.OpenWorkOrder(TestData.PreparedWorkOrderNbr);
+
+ decimal actualQuantity = screen.GetFirstLaborQuantity();
+
+ // Assert
+ AssertDecimalEqual(
+ TestData.ConfiguredLaborQuantity,
+ actualQuantity,
+ "The prepared repair work order should open with the expected configured labor quantity.");
+ }
+
+ public void LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity()
+ {
+ // Arrange
+ var screen = new RepairWorkOrdersScreen();
+
+ screen.Open();
+ screen.OpenWorkOrder(TestData.PreparedWorkOrderNbr);
+
+ // Act
+ screen.SetFirstLaborQuantity(TestData.BelowConfiguredLaborQuantity);
+ screen.TriggerValidation();
+
+ decimal actualQuantity = screen.GetFirstLaborQuantity();
+
+ // Assert
+ AssertDecimalEqual(
+ TestData.ExpectedRestoredLaborQuantity,
+ actualQuantity,
+ "After entering a below-configured labor quantity, the UI should restore the configured quantity.");
+ }
+
+
+ private static void AssertDecimalEqual(
+ decimal expected,
+ decimal actual,
+ string message)
+ {
+ if (expected != actual)
+ {
+ throw new InvalidOperationException(
+ $"{message}{Environment.NewLine}" +
+ $"Expected: {expected}{Environment.NewLine}" +
+ $"Actual: {actual}");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs
new file mode 100644
index 00000000..2b2b0f90
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs
@@ -0,0 +1,31 @@
+using System;
+using Core.Login;
+using Core.TestExecution;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Tests
+{
+ internal class StartTests
+ {
+ public void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ using (TestExecution.CreateTestStepGroup("RS301000 smoke test"))
+ {
+ Console.WriteLine("Starting RS301000 smoke test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.RepairWorkOrdersScreen_CanOpenPreparedWorkOrder();
+ }
+
+ using (TestExecution.CreateTestStepGroup("RS301000 labor quantity validation test"))
+ {
+ Console.WriteLine("Starting RS301000 labor quantity validation test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity();
+
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs
new file mode 100644
index 00000000..2aec25dd
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Globalization;
+using System.Threading;
+using GeneratedWrappers.AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Generated;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Custom
+{
+ ///
+ /// Friendly helper over the generated Modern UI wrapper for RS301000.
+ /// This class inherits from the generated RS301000 wrapper because the generated
+ /// work order containers and labor grid are protected members.
+ ///
+ public sealed class RepairWorkOrdersScreen : RS301000
+ {
+ public void Open()
+ {
+ OpenScreen();
+
+ // Temporary wait for diagnostics. If this solves the next issue,
+ // replace it later with the project’s normal Test SDK wait pattern.
+ Thread.Sleep(3000);
+ }
+
+ public void OpenWorkOrder(string workOrderNbr)
+ {
+ if (string.IsNullOrWhiteSpace(workOrderNbr))
+ {
+ throw new ArgumentException(
+ "The work order number must be provided.",
+ nameof(workOrderNbr));
+ }
+
+ WorkOrders_fsColumnAOrder.OrderNbr.Type(workOrderNbr);
+
+ // Temporary wait to allow the selector/screen data to load.
+ Thread.Sleep(2000);
+ }
+
+ public decimal GetFirstLaborQuantity()
+ {
+ string value = Labor_gridLabor.Row.Quantity.GetValue();
+ Console.WriteLine($"Raw labor quantity value: '{value}'");
+
+ if (decimal.TryParse(
+ value,
+ NumberStyles.Any,
+ CultureInfo.InvariantCulture,
+ out decimal parsed))
+ {
+ return parsed;
+ }
+
+ throw new FormatException(
+ $"The labor quantity value '{value}' could not be converted to decimal.");
+ }
+
+ public void SetFirstLaborQuantity(decimal quantity)
+ {
+ Labor_gridLabor.Row.Quantity.Type(
+ quantity.ToString(CultureInfo.InvariantCulture));
+ }
+
+ public void TriggerValidation()
+ {
+ Save();
+
+ Thread.Sleep(2000);
+
+ Labor_gridLabor.Refresh();
+
+ Thread.Sleep(2000);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs
new file mode 100644
index 00000000..122f99f3
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs
@@ -0,0 +1,1502 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using Controls.Button;
+using Controls.CheckBox;
+using Controls.Container;
+using Controls.Container.Extentions;
+using Controls.Editors.DateSelector;
+using Controls.Editors.DropDown;
+using Controls.Editors.Selector;
+using Controls.FileColumnButton;
+using Controls.Grid;
+using Controls.Grid.Filter;
+using Controls.Grid.Upload;
+using Controls.Input;
+using Controls.Input.PXNumberEdit;
+using Controls.Label;
+using Controls.NoteColumnButton;
+using Controls.ToolBarButton;
+using Core;
+using System;
+
+
+namespace GeneratedWrappers.AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Generated
+{
+
+
+ public class RS301000 : Wrapper
+ {
+
+ public PxToolBar ToolBar { get; }
+ protected c_workorders_fscolumnaorder WorkOrders_fsColumnAOrder { get; } = new c_workorders_fscolumnaorder("fsColumnA-Order", "fsColumnA-Order");
+ protected c_workorders_fscolumnborder WorkOrders_fsColumnBOrder { get; } = new c_workorders_fscolumnborder("fsColumnB-Order", "fsColumnB-Order");
+ protected c_workorders_fscolumncorder WorkOrders_fsColumnCOrder { get; } = new c_workorders_fscolumncorder("fsColumnC-Order", "fsColumnC-Order");
+ protected c_repairitems_gridrepairitems RepairItems_gridRepairItems { get; } = new c_repairitems_gridrepairitems("grid-RepairItems", "grid-RepairItems;tabbar_tab-RepairItems_tabbar");
+ protected c_labor_gridlabor Labor_gridLabor { get; } = new c_labor_gridlabor("grid-Labor", "grid-Labor;tabbar_tab-Labor_tabbar");
+ protected c_filterpreview_formpreview FilterPreview_FormPreview { get; } = new c_filterpreview_formpreview("FilterPreview", "FilterPreview");
+ protected c_filterworkingproject_formselectproject FilterWorkingProject_FormSelectProject { get; } = new c_filterworkingproject_formselectproject("FilterWorkingProject", "FilterWorkingProject");
+ protected c_filterworkingproject_formnewproject FilterWorkingProject_FormNewProject { get; } = new c_filterworkingproject_formnewproject("DlgNewProject", "DlgNewProject");
+ protected c_elementproperties ElementProperties { get; } = new c_elementproperties("ViewElemInfo", "ViewElemInfo");
+ protected c_workflowview_workflowfictivediagram WorkflowView_WorkflowFictiveDiagram { get; } = new c_workflowview_workflowfictivediagram("WorkflowView", "WorkflowView");
+ protected c_pnllinkshow PnlLinkShow { get; } = new c_pnllinkshow("pnlLinkShow", "pnlLinkShow");
+ protected c_profilerinfoview_formprofiler ProfilerInfoView_formProfiler { get; } = new c_profilerinfoview_formprofiler("pnlProfiler", "pnlProfiler");
+ protected c_parameters_gridwizard Parameters_gridWizard { get; } = new c_parameters_gridwizard("shareColumnsDlg", "shareColumnsDlg");
+ protected c_userlist_usergrid UserList_userGrid { get; } = new c_userlist_usergrid("UserList_grid", "UserList_grid");
+ protected c_gridlist_gridgrid GridList_gridGrid { get; } = new c_gridlist_gridgrid("GridList_grid", "GridList_grid");
+ protected c_aboutacumatica AboutAcumatica { get; } = new c_aboutacumatica("pnlAbout", "pnlAbout");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("grid-RepairItems_fb", "QuickSearch", "grid-RepairItems;tabbar_tab-RepairItems_tabbar", null);
+ public Controls.Container.Extentions.Note NotePanel { get; private set; } = new Controls.Container.Extentions.Note("pnlNoteShow");
+ public Controls.Container.Extentions.ActivityPanel ActivityPanel { get; private set; } = new Controls.Container.Extentions.ActivityPanel("pnlActivitiesShow");
+ public Controls.Container.Extentions.SmartPanel_AttachFile FilesUploadDialog { get; private set; } = new Controls.Container.Extentions.SmartPanel_AttachFile("pnlFilesDialog");
+
+ public RS301000()
+ {
+ ScreenId = "RS301000";
+ ToolBar = new PxToolBar(null);
+ Initialize();
+ }
+
+ public virtual void SystemGear()
+ {
+ ToolBar.SystemGear.Click();
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void CancelClose()
+ {
+ ToolBar.CancelClose.Click();
+ }
+
+ public virtual void SaveClose()
+ {
+ ToolBar.SaveClose.Click();
+ }
+
+ public virtual void Save()
+ {
+ ToolBar.Save.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ ToolBar.Cancel.Click();
+ }
+
+ public virtual void Insert()
+ {
+ ToolBar.Insert.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void CopyPaste()
+ {
+ ToolBar.CopyPaste.Click();
+ }
+
+ public virtual void First()
+ {
+ ToolBar.First.Click();
+ }
+
+ public virtual void Previous()
+ {
+ ToolBar.Previous.Click();
+ }
+
+ public virtual void Next()
+ {
+ ToolBar.Next.Click();
+ }
+
+ public virtual void Last()
+ {
+ ToolBar.Last.Click();
+ }
+
+ public virtual void Archive()
+ {
+ ToolBar.Archive.Click();
+ }
+
+ public virtual void Extract()
+ {
+ ToolBar.Extract.Click();
+ }
+
+ public virtual void Note()
+ {
+ ToolBar.Note.Click();
+ }
+
+ public virtual void FilesMenuShow()
+ {
+ ToolBar.FilesMenuShow.Click();
+ }
+
+ public virtual void CopyDocument()
+ {
+ ToolBar.CopyDocument.Click();
+ }
+
+ public virtual void PasteDocument()
+ {
+ ToolBar.PasteDocument.Click();
+ }
+
+ public virtual void SaveTemplate()
+ {
+ ToolBar.SaveTemplate.Click();
+ }
+
+ public virtual void ActionConfigureScreen()
+ {
+ ToolBar.ActionConfigureScreen.Click();
+ }
+
+ public virtual void ActionSelectWorkingProject()
+ {
+ ToolBar.ActionSelectWorkingProject.Click();
+ }
+
+ public virtual void MenuEditProj()
+ {
+ ToolBar.MenuEditProj.Click();
+ }
+
+ public virtual void ManageCustomizations()
+ {
+ ToolBar.ManageCustomizations.Click();
+ }
+
+ public virtual void InspectElementCtrlAltClick()
+ {
+ ToolBar.InspectElementCtrlAltClick.Click();
+ }
+
+ public virtual void GetLink()
+ {
+ ToolBar.GetLink.Click();
+ }
+
+ public virtual void WebService()
+ {
+ ToolBar.WebService.Click();
+ }
+
+ public virtual void DACSchemaBrowser()
+ {
+ ToolBar.DACSchemaBrowser.Click();
+ }
+
+ public virtual void SwitchUIScreenMode()
+ {
+ ToolBar.SwitchUIScreenMode.Click();
+ }
+
+ public virtual void Audithistory()
+ {
+ ToolBar.Audithistory.Click();
+ }
+
+ public virtual void AccessRights()
+ {
+ ToolBar.AccessRights.Click();
+ }
+
+ public virtual void Profiler()
+ {
+ ToolBar.Profiler.Click();
+ }
+
+ public virtual void ShareColumnConfiguration()
+ {
+ ToolBar.ShareColumnConfiguration.Click();
+ }
+
+ public virtual void Trace()
+ {
+ ToolBar.Trace.Click();
+ }
+
+ public virtual void About()
+ {
+ ToolBar.About.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton SystemGear { get; private set; }
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton CancelClose { get; private set; }
+ public ToolBarButton SaveClose { get; private set; }
+ public ToolBarButton Save { get; private set; }
+ public ToolBarButton Cancel { get; private set; }
+ public ToolBarButton Insert { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton CopyPaste { get; private set; }
+ public ToolBarButton First { get; private set; }
+ public ToolBarButton Previous { get; private set; }
+ public ToolBarButton Next { get; private set; }
+ public ToolBarButton Last { get; private set; }
+ public ToolBarButton Archive { get; private set; }
+ public ToolBarButton Extract { get; private set; }
+ public ToolBarButton Note { get; private set; }
+ public ToolBarButton FilesMenuShow { get; private set; }
+ public ToolBarButton CopyDocument { get; private set; }
+ public ToolBarButton PasteDocument { get; private set; }
+ public ToolBarButton SaveTemplate { get; private set; }
+ public ToolBarButton ActionConfigureScreen { get; private set; }
+ public ToolBarButton ActionSelectWorkingProject { get; private set; }
+ public ToolBarButton MenuEditProj { get; private set; }
+ public ToolBarButton ManageCustomizations { get; private set; }
+ public ToolBarButton InspectElementCtrlAltClick { get; private set; }
+ public ToolBarButton GetLink { get; private set; }
+ public ToolBarButton WebService { get; private set; }
+ public ToolBarButton DACSchemaBrowser { get; private set; }
+ public ToolBarButton SwitchUIScreenMode { get; private set; }
+ public ToolBarButton Audithistory { get; private set; }
+ public ToolBarButton AccessRights { get; private set; }
+ public ToolBarButton Profiler { get; private set; }
+ public ToolBarButton ShareColumnConfiguration { get; private set; }
+ public ToolBarButton Trace { get; private set; }
+ public ToolBarButton About { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ SystemGear = new ToolBarButton("customizationMenu_menu", "System Gear", tabId, null);
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ CancelClose = new ToolBarButton("MainToolbarts_CancelCloseToList", "Close", tabId, null);
+ SaveClose = new ToolBarButton("MainToolbarts_SaveCloseToList", "Save & Close", tabId, null);
+ Save = new ToolBarButton("MainToolbarts_Save", "Save", tabId, null);
+ Cancel = new ToolBarButton("MainToolbarts_Cancel", "Cancel", tabId, null);
+ Cancel.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Insert = new ToolBarButton("MainToolbarts_Insert", "Insert", tabId, null);
+ Delete = new ToolBarButton("MainToolbarts_Delete", "Delete", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ CopyPaste = new ToolBarButton("MainToolbarts_CopyPaste", "CopyPaste", tabId, null);
+ First = new ToolBarButton("MainToolbarts_First", "First", tabId, null);
+ Previous = new ToolBarButton("MainToolbarts_Previous", "Prev", tabId, null);
+ Next = new ToolBarButton("MainToolbarts_Next", "Next", tabId, null);
+ Last = new ToolBarButton("MainToolbarts_Last", "Last", tabId, null);
+ Archive = new ToolBarButton("MainToolbarts_Archive", "Archive", tabId, null);
+ Extract = new ToolBarButton("MainToolbarts_Extract", "Extract", tabId, null);
+ Note = new ToolBarButton("SystemMenu_NoteShow", "Note", tabId, null);
+ FilesMenuShow = new ToolBarButton("SystemMenu_FilesShow", "FilesMenuShow", tabId, null);
+ CopyDocument = new ToolBarButton("css=#MainToolbarts_CopyPaste\\@CopyDocument,#MainToolbarts_CopyPaste\\@CopyDocument" +
+ "_item", "Copy", tabId, CopyPaste);
+ PasteDocument = new ToolBarButton("css=#MainToolbarts_CopyPaste\\@PasteDocument,#MainToolbarts_CopyPaste\\@PasteDocume" +
+ "nt_item", "Paste", tabId, CopyPaste);
+ SaveTemplate = new ToolBarButton("css=#MainToolbarts_CopyPaste\\@SaveTemplate,#MainToolbarts_CopyPaste\\@SaveTemplate" +
+ "_item", "Save as Template...", tabId, CopyPaste);
+ ActionConfigureScreen = new ToolBarButton("css=#screenConfiguration,#screenConfiguration_item", "UI Configuration", tabId, SystemGear);
+ ActionSelectWorkingProject = new ToolBarButton("css=#selectProject,#selectProject_item", "Select Project...", tabId, SystemGear);
+ MenuEditProj = new ToolBarButton("css=#editProject,#editProject_item", "Edit Project...", tabId, SystemGear);
+ ManageCustomizations = new ToolBarButton("css=#manageCustomizations,#manageCustomizations_item", "Manage Customizations...", tabId, SystemGear);
+ InspectElementCtrlAltClick = new ToolBarButton("css=#inspectElement,#inspectElement_item", "Inspect Element (Ctrl+Alt+Click)", tabId, SystemGear);
+ GetLink = new ToolBarButton("css=#link,#link_item", "Get Link", tabId, SystemGear);
+ WebService = new ToolBarButton("css=#webServices,#webServices_item", "Web Service", tabId, SystemGear);
+ DACSchemaBrowser = new ToolBarButton("css=#DACBrowser,#DACBrowser_item", "DAC Schema Browser", tabId, SystemGear);
+ SwitchUIScreenMode = new ToolBarButton("css=#miSwitchUIScreenMode,#miSwitchUIScreenMode_item", "Switch to Classic UI", tabId, SystemGear);
+ Audithistory = new ToolBarButton("css=#audit,#audit_item", "Audit history...", tabId, SystemGear);
+ AccessRights = new ToolBarButton("css=#accessRights,#accessRights_item", "Access Rights...", tabId, SystemGear);
+ Profiler = new ToolBarButton("css=#profiler,#profiler_item", "Profiler", tabId, SystemGear);
+ ShareColumnConfiguration = new ToolBarButton("css=#sharingColumns,#sharingColumns_item", "Share Column Configuration", tabId, SystemGear);
+ Trace = new ToolBarButton("css=#trace,#trace_item", "Trace...", tabId, SystemGear);
+ About = new ToolBarButton("css=#about,#about_item", "About...", tabId, SystemGear);
+ }
+ }
+
+ public class c_workorders_fscolumnaorder : Container
+ {
+
+ public Selector OrderNbr { get; private set; }
+ public Label OrderNbrLabel { get; private set; }
+ public DropDown Status { get; private set; }
+ public Label StatusLabel { get; private set; }
+ public DateSelector DateCreated { get; private set; }
+ public Label DateCreatedLabel { get; private set; }
+ public DateSelector DateCompleted { get; private set; }
+ public Label DateCompletedLabel { get; private set; }
+ public DropDown Priority { get; private set; }
+ public Label PriorityLabel { get; private set; }
+ public Input Assignee_description { get; private set; }
+ public Label Assignee_descriptionLabel { get; private set; }
+ public Input NoteText { get; private set; }
+ public Label NoteTextLabel { get; private set; }
+
+ public c_workorders_fscolumnaorder(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ OrderNbr = new Selector("edWorkOrders-OrderNbr", "Order Nbr.", tabId, null);
+ OrderNbrLabel = new Label(OrderNbr);
+ Status = new DropDown("edWorkOrders-Status", "Status", tabId, null);
+ StatusLabel = new Label(Status);
+ DateCreated = new DateSelector("edWorkOrders-DateCreated", "Date Created", tabId, null);
+ DateCreatedLabel = new Label(DateCreated);
+ DateCompleted = new DateSelector("edWorkOrders-DateCompleted", "Date Completed", tabId, null);
+ DateCompletedLabel = new Label(DateCompleted);
+ Priority = new DropDown("edWorkOrders-Priority", "Priority", tabId, null);
+ PriorityLabel = new Label(Priority);
+ Assignee_description = new Input("edWorkOrders-Assignee_description", "Contact", tabId, null);
+ Assignee_descriptionLabel = new Label(Assignee_description);
+ NoteText = new Input("edWorkOrders-NoteText", "Note Text", tabId, null);
+ NoteTextLabel = new Label(NoteText);
+ }
+ }
+
+ public class c_workorders_fscolumnborder : Container
+ {
+
+ public Selector CustomerID { get; private set; }
+ public Label CustomerIDLabel { get; private set; }
+ public Selector ServiceID { get; private set; }
+ public Label ServiceIDLabel { get; private set; }
+ public Selector DeviceID { get; private set; }
+ public Label DeviceIDLabel { get; private set; }
+ public Selector Assignee { get; private set; }
+ public Label AssigneeLabel { get; private set; }
+ public Input Description { get; private set; }
+ public Label DescriptionLabel { get; private set; }
+
+ public c_workorders_fscolumnborder(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ CustomerID = new Selector("edWorkOrders-CustomerID", "Customer ID", tabId, null);
+ CustomerIDLabel = new Label(CustomerID);
+ ServiceID = new Selector("edWorkOrders-ServiceID", "Service", tabId, null);
+ ServiceIDLabel = new Label(ServiceID);
+ DeviceID = new Selector("edWorkOrders-DeviceID", "Device", tabId, null);
+ DeviceIDLabel = new Label(DeviceID);
+ Assignee = new Selector("edWorkOrders-Assignee", "Assignee", tabId, null);
+ AssigneeLabel = new Label(Assignee);
+ Description = new Input("edWorkOrders-Description", "Description", tabId, null);
+ DescriptionLabel = new Label(Description);
+ }
+ }
+
+ public class c_workorders_fscolumncorder : Container
+ {
+
+ public PXNumberEdit OrderTotal { get; private set; }
+ public Label OrderTotalLabel { get; private set; }
+ public Input InvoiceNbr { get; private set; }
+ public Label InvoiceNbrLabel { get; private set; }
+
+ public c_workorders_fscolumncorder(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ OrderTotal = new PXNumberEdit("edWorkOrders-OrderTotal", "Order Total", tabId, null);
+ OrderTotalLabel = new Label(OrderTotal);
+ InvoiceNbr = new Input("edWorkOrders-InvoiceNbr", "Invoice Nbr.", tabId, null);
+ InvoiceNbrLabel = new Label(InvoiceNbr);
+ }
+ }
+
+ public class c_repairitems_gridrepairitems : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Container.Extentions.Note NotePanel { get; private set; } = new Controls.Container.Extentions.Note("pnlNoteShow");
+ public Controls.Container.Extentions.SmartPanel_AttachFile FilesUploadDialog { get; private set; } = new Controls.Container.Extentions.SmartPanel_AttachFile("pnlFilesDialog");
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("grid-RepairItems_fb", "QuickSearch", "grid-RepairItems;tabbar_tab-RepairItems_tabbar", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_repairitems_gridrepairitems(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("grid-RepairItems", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("grid-RepairItems_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("grid-RepairItems_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("grid-RepairItems_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("grid-RepairItems_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("grid-RepairItems_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("grid-RepairItems_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("grid-RepairItems_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("grid-RepairItems_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("grid-RepairItems_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("grid-RepairItems_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("grid-RepairItems_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public FileColumnButton Files { get; private set; }
+ public NoteColumnButton Notes { get; private set; }
+ public DropDown RepairItemType { get; private set; }
+ public Selector InventoryID { get; private set; }
+ public Input InventoryID_description { get; private set; }
+ public PXNumberEdit BasePrice { get; private set; }
+ public Input OrderNbr { get; private set; }
+ public PXNumberEdit LineNbr { get; private set; }
+
+ public c_grid_row(c_repairitems_gridrepairitems grid) :
+ base(grid)
+ {
+ Files = new FileColumnButton("grid-RepairItems_Files_cell", "Files", grid.TabId, "Files");
+ Notes = new NoteColumnButton("grid-RepairItems_Notes_cell", "Notes", grid.TabId, "Notes");
+ RepairItemType = new DropDown("grid-RepairItems_RepairItemType_editor", "Repair Item Type", grid.TabId, "RepairItemType");
+ InventoryID = new Selector("grid-RepairItems_InventoryID_editor", "Inventory ID", grid.TabId, "InventoryID");
+ InventoryID_description = new Input("grid-RepairItems_InventoryID_description_editor", "Description", grid.TabId, "InventoryID_description");
+ BasePrice = new PXNumberEdit("grid-RepairItems_BasePrice_editor", "Price", grid.TabId, "BasePrice");
+ OrderNbr = new Input("grid-RepairItems_OrderNbr_editor", "OrderNbr", grid.TabId, "OrderNbr");
+ LineNbr = new PXNumberEdit("grid-RepairItems_LineNbr_editor", "Line Nbr.", grid.TabId, "LineNbr");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public GridColumnHeader Files { get; private set; }
+ public GridColumnHeader Notes { get; private set; }
+ public DropDownColumnFilter RepairItemType { get; private set; }
+ public SelectorColumnFilter InventoryID { get; private set; }
+ public InputColumnFilter InventoryID_description { get; private set; }
+ public PXNumberEditColumnFilter BasePrice { get; private set; }
+ public InputColumnFilter OrderNbr { get; private set; }
+ public PXNumberEditColumnFilter LineNbr { get; private set; }
+
+ public c_grid_header(c_repairitems_gridrepairitems grid) :
+ base(grid)
+ {
+ Files = new GridColumnHeader(grid.Row.Files);
+ Notes = new GridColumnHeader(grid.Row.Notes);
+ RepairItemType = new DropDownColumnFilter(grid.Row.RepairItemType);
+ InventoryID = new SelectorColumnFilter(grid.Row.InventoryID);
+ InventoryID_description = new InputColumnFilter(grid.Row.InventoryID_description);
+ BasePrice = new PXNumberEditColumnFilter(grid.Row.BasePrice);
+ OrderNbr = new InputColumnFilter(grid.Row.OrderNbr);
+ LineNbr = new PXNumberEditColumnFilter(grid.Row.LineNbr);
+ }
+ }
+ }
+
+ public class c_labor_gridlabor : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Container.Extentions.Note NotePanel { get; private set; } = new Controls.Container.Extentions.Note("pnlNoteShow");
+ public Controls.Container.Extentions.SmartPanel_AttachFile FilesUploadDialog { get; private set; } = new Controls.Container.Extentions.SmartPanel_AttachFile("pnlFilesDialog");
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("grid-Labor_fb", "QuickSearch", "grid-Labor;tabbar_tab-Labor_tabbar", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_labor_gridlabor(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("grid-Labor", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("grid-Labor_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("grid-Labor_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("grid-Labor_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("grid-Labor_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("grid-Labor_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("grid-Labor_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("grid-Labor_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("grid-Labor_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("grid-Labor_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("grid-Labor_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("grid-Labor_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public FileColumnButton Files { get; private set; }
+ public NoteColumnButton Notes { get; private set; }
+ public Selector InventoryID { get; private set; }
+ public Input InventoryID_description { get; private set; }
+ public PXNumberEdit DefaultPrice { get; private set; }
+ public PXNumberEdit Quantity { get; private set; }
+ public PXNumberEdit ExtPrice { get; private set; }
+ public Input OrderNbr { get; private set; }
+
+ public c_grid_row(c_labor_gridlabor grid) :
+ base(grid)
+ {
+ Files = new FileColumnButton("grid-Labor_Files_cell", "Files", grid.TabId, "Files");
+ Notes = new NoteColumnButton("grid-Labor_Notes_cell", "Notes", grid.TabId, "Notes");
+ InventoryID = new Selector("grid-Labor_InventoryID_editor", "Inventory ID", grid.TabId, "InventoryID");
+ InventoryID_description = new Input("grid-Labor_InventoryID_description_editor", "Description", grid.TabId, "InventoryID_description");
+ DefaultPrice = new PXNumberEdit("grid-Labor_DefaultPrice_editor", "Default Price", grid.TabId, "DefaultPrice");
+ Quantity = new PXNumberEdit("grid-Labor_Quantity_editor", "Quantity", grid.TabId, "Quantity");
+ ExtPrice = new PXNumberEdit("grid-Labor_ExtPrice_editor", "Ext. Price", grid.TabId, "ExtPrice");
+ OrderNbr = new Input("grid-Labor_OrderNbr_editor", "OrderNbr", grid.TabId, "OrderNbr");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public GridColumnHeader Files { get; private set; }
+ public GridColumnHeader Notes { get; private set; }
+ public SelectorColumnFilter InventoryID { get; private set; }
+ public InputColumnFilter InventoryID_description { get; private set; }
+ public PXNumberEditColumnFilter DefaultPrice { get; private set; }
+ public PXNumberEditColumnFilter Quantity { get; private set; }
+ public PXNumberEditColumnFilter ExtPrice { get; private set; }
+ public InputColumnFilter OrderNbr { get; private set; }
+
+ public c_grid_header(c_labor_gridlabor grid) :
+ base(grid)
+ {
+ Files = new GridColumnHeader(grid.Row.Files);
+ Notes = new GridColumnHeader(grid.Row.Notes);
+ InventoryID = new SelectorColumnFilter(grid.Row.InventoryID);
+ InventoryID_description = new InputColumnFilter(grid.Row.InventoryID_description);
+ DefaultPrice = new PXNumberEditColumnFilter(grid.Row.DefaultPrice);
+ Quantity = new PXNumberEditColumnFilter(grid.Row.Quantity);
+ ExtPrice = new PXNumberEditColumnFilter(grid.Row.ExtPrice);
+ OrderNbr = new InputColumnFilter(grid.Row.OrderNbr);
+ }
+ }
+ }
+
+ public class c_filterpreview_formpreview : Container
+ {
+
+ public PxButtonCollection Buttons { get; }
+
+ public c_filterpreview_formpreview(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Ok()
+ {
+ Buttons.Ok.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Ok { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Ok = new Button("btnConfirmTransition", "OK", tabId);
+ Cancel = new Button("btnCancelTransition", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_filterworkingproject_formselectproject : Container
+ {
+
+ public Selector Name { get; private set; }
+ public Label NameLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_filterworkingproject_formselectproject(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Name = new Selector("edFilterWorkingProject-Name", "Project Name", tabId, null);
+ NameLabel = new Label(Name);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Ok()
+ {
+ Buttons.Ok.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public virtual void New()
+ {
+ Buttons.New.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Ok { get; private set; }
+ public Button Cancel { get; private set; }
+ public Button New { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Ok = new Button("SelectProjectOk", "Ok", tabId);
+ Cancel = new Button("SelectProjectCancel", "Cancel", tabId);
+ New = new Button("BtnNewProject", "New...", tabId);
+ }
+ }
+ }
+
+ public class c_filterworkingproject_formnewproject : Container
+ {
+
+ public Input NewProject { get; private set; }
+ public Label NewProjectLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_filterworkingproject_formnewproject(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ NewProject = new Input("edFilterWorkingProject-NewProject", "New Project", tabId, null);
+ NewProjectLabel = new Label(NewProject);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void ActionCreateNewProject()
+ {
+ Buttons.ActionCreateNewProject.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button ActionCreateNewProject { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ ActionCreateNewProject = new Button("btnActionCreateNewProject", "Create New Project", tabId);
+ Cancel = new Button("btnCancel", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_elementproperties : Container
+ {
+
+ public Input AspxControl { get; private set; }
+ public Label AspxControlLabel { get; private set; }
+ public Input CacheType { get; private set; }
+ public Label CacheTypeLabel { get; private set; }
+ public Input FieldName { get; private set; }
+ public Label FieldNameLabel { get; private set; }
+ public Input ViewName { get; private set; }
+ public Label ViewNameLabel { get; private set; }
+ public Input GraphName { get; private set; }
+ public Label GraphNameLabel { get; private set; }
+ public Input ActionName { get; private set; }
+ public Label ActionNameLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_elementproperties(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ AspxControl = new Input("edViewElemInfo-AspxControl", "Control Type", tabId, null);
+ AspxControlLabel = new Label(AspxControl);
+ CacheType = new Input("edViewElemInfo-CacheType", "Data Class", tabId, null);
+ CacheTypeLabel = new Label(CacheType);
+ FieldName = new Input("edViewElemInfo-FieldName", "Data Field", tabId, null);
+ FieldNameLabel = new Label(FieldName);
+ ViewName = new Input("edViewElemInfo-ViewName", "View Name", tabId, null);
+ ViewNameLabel = new Label(ViewName);
+ GraphName = new Input("edViewElemInfo-GraphName", "Business Logic", tabId, null);
+ GraphNameLabel = new Label(GraphName);
+ ActionName = new Input("edViewElemInfo-ActionName", "Action Name", tabId, null);
+ ActionNameLabel = new Label(ActionName);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void MenuLayoutEditor()
+ {
+ Buttons.MenuLayoutEditor.Click();
+ }
+
+ public virtual void Actions()
+ {
+ Buttons.Actions.Click();
+ }
+
+ public virtual void MenuGraphEditor()
+ {
+ Buttons.MenuGraphEditor.Click();
+ }
+
+ public virtual void MenuDacEditor()
+ {
+ Buttons.MenuDacEditor.Click();
+ }
+
+ public virtual void MenuGraphSrc()
+ {
+ Buttons.MenuGraphSrc.Click();
+ }
+
+ public virtual void MenuDacSrc()
+ {
+ Buttons.MenuDacSrc.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button MenuLayoutEditor { get; private set; }
+ public Button Actions { get; private set; }
+ public Button MenuGraphEditor { get; private set; }
+ public Button MenuDacEditor { get; private set; }
+ public Button MenuGraphSrc { get; private set; }
+ public Button MenuDacSrc { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ MenuLayoutEditor = new Button("btnCustomize", "Customize", tabId);
+ Actions = new Button("actionsMenu", "Actions", tabId);
+ MenuGraphEditor = new Button("custBL", "Customize Business Logic", tabId);
+ MenuDacEditor = new Button("custDF", "Customize Data Fields", tabId);
+ MenuGraphSrc = new Button("viewBLSource", "View Business Logic Source", tabId);
+ MenuDacSrc = new Button("viewDACSource", "View Data Class Source", tabId);
+ Cancel = new Button("btnCancel", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_workflowview_workflowfictivediagram : Container
+ {
+
+ public Input LayoutClient { get; private set; }
+ public Label LayoutClientLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_workflowview_workflowfictivediagram(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ LayoutClient = new Input("edWorkflow-LayoutClient", "Layout", tabId, null);
+ LayoutClientLabel = new Label(LayoutClient);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Customize()
+ {
+ Buttons.Customize.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Customize { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Customize = new Button("btnRedirectToCustomization", "Customize Workflow", tabId);
+ }
+ }
+ }
+
+ public class c_pnllinkshow : Container
+ {
+
+ public Input Internal { get; private set; }
+ public Label InternalLabel { get; private set; }
+ public Input External { get; private set; }
+ public Label ExternalLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_pnllinkshow(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Internal = new Input("internalLink", "Internal Link", tabId, null);
+ InternalLabel = new Label(Internal);
+ External = new Input("externalLink", "External Link", tabId, null);
+ ExternalLabel = new Label(External);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Send()
+ {
+ Buttons.Send.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Send { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Send = new Button("link_send_btn", "Send", tabId);
+ Cancel = new Button("link_cancel_btn", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_profilerinfoview_formprofiler : Container
+ {
+
+ public Input StartText { get; private set; }
+ public Label StartTextLabel { get; private set; }
+ public Input Started { get; private set; }
+ public Label StartedLabel { get; private set; }
+ public Input RequestsLogged { get; private set; }
+ public Label RequestsLoggedLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_profilerinfoview_formprofiler(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ StartText = new Input("profilerStartText", "Start Text", tabId, null);
+ StartTextLabel = new Label(StartText);
+ Started = new Input("profilerStarted", "Profiler started", tabId, null);
+ StartedLabel = new Label(Started);
+ RequestsLogged = new Input("profilerRequestsLogged", "Profiler Requests Logged", tabId, null);
+ RequestsLoggedLabel = new Label(RequestsLogged);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void BtnStartProfiler()
+ {
+ Buttons.BtnStartProfiler.Click();
+ }
+
+ public virtual void BtnStopProfiler()
+ {
+ Buttons.BtnStopProfiler.Click();
+ }
+
+ public virtual void BtnMainProfiler()
+ {
+ Buttons.BtnMainProfiler.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button BtnStartProfiler { get; private set; }
+ public Button BtnStopProfiler { get; private set; }
+ public Button BtnMainProfiler { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ BtnStartProfiler = new Button("profiler_start_btn", "Start", tabId);
+ BtnStopProfiler = new Button("profiler_stop_btn", "Stop", tabId);
+ BtnMainProfiler = new Button("profiler_open_btn", "Open request", tabId);
+ }
+ }
+ }
+
+ public class c_parameters_gridwizard : Container
+ {
+
+ public CheckBox IsDefault { get; private set; }
+ public Label IsDefaultLabel { get; private set; }
+ public CheckBox Override { get; private set; }
+ public Label OverrideLabel { get; private set; }
+ public Input RoleName { get; private set; }
+ public Label RoleNameLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_parameters_gridwizard(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ IsDefault = new CheckBox("edParameters-IsDefault", "Set as the Default", tabId, null);
+ IsDefaultLabel = new Label(IsDefault);
+ Override = new CheckBox("edParameters-Override", "Override Users\' Personal Configurations", tabId, null);
+ OverrideLabel = new Label(Override);
+ RoleName = new Input("edParameters-RoleName", "User Role", tabId, null);
+ RoleNameLabel = new Label(RoleName);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public virtual void Prev()
+ {
+ Buttons.Prev.Click();
+ }
+
+ public virtual void Next()
+ {
+ Buttons.Next.Click();
+ }
+
+ public virtual void Finish()
+ {
+ Buttons.Finish.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Cancel { get; private set; }
+ public Button Prev { get; private set; }
+ public Button Next { get; private set; }
+ public Button Finish { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Cancel = new Button("share_columns_wz_cancel_btn", "Cancel", tabId);
+ Prev = new Button("share_columns_wz_prev_btn", "Prev", tabId);
+ Next = new Button("share_columns_wz_next_btn", "Next", tabId);
+ Finish = new Button("share_columns_wz_save_btn", "Finish", tabId);
+ }
+ }
+ }
+
+ public class c_userlist_usergrid : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("UserList_grid_fb", "QuickSearch", "UserList_grid", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_userlist_usergrid(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("UserList_grid", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("UserList_grid_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("UserList_grid_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("UserList_grid_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("UserList_grid_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("UserList_grid_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("UserList_grid_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("UserList_grid_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("UserList_grid_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("UserList_grid_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("UserList_grid_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("UserList_grid_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public CheckBox Included { get; private set; }
+ public Input Username { get; private set; }
+ public Input DisplayName { get; private set; }
+ public Input Email { get; private set; }
+ public Input Guest { get; private set; }
+ public Input State { get; private set; }
+
+ public c_grid_row(c_userlist_usergrid grid) :
+ base(grid)
+ {
+ Included = new CheckBox("colIncluded", "Included", grid.TabId, "Included");
+ Username = new Input("colUsername", "Login", grid.TabId, "Username");
+ DisplayName = new Input("colDisplayName", "Display Name", grid.TabId, "DisplayName");
+ Email = new Input("colEmail", "Email", grid.TabId, "Email");
+ Guest = new Input("colGuest", "Guest Account", grid.TabId, "Guest");
+ State = new Input("colState", "Status", grid.TabId, "State");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public CheckBoxColumnFilter Included { get; private set; }
+ public InputColumnFilter Username { get; private set; }
+ public InputColumnFilter DisplayName { get; private set; }
+ public InputColumnFilter Email { get; private set; }
+ public InputColumnFilter Guest { get; private set; }
+ public InputColumnFilter State { get; private set; }
+
+ public c_grid_header(c_userlist_usergrid grid) :
+ base(grid)
+ {
+ Included = new CheckBoxColumnFilter(grid.Row.Included);
+ Username = new InputColumnFilter(grid.Row.Username);
+ DisplayName = new InputColumnFilter(grid.Row.DisplayName);
+ Email = new InputColumnFilter(grid.Row.Email);
+ Guest = new InputColumnFilter(grid.Row.Guest);
+ State = new InputColumnFilter(grid.Row.State);
+ }
+ }
+ }
+
+ public class c_gridlist_gridgrid : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("GridList_grid_fb", "QuickSearch", "GridList_grid", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_gridlist_gridgrid(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("GridList_grid", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("GridList_grid_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("GridList_grid_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("GridList_grid_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("GridList_grid_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("GridList_grid_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("GridList_grid_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("GridList_grid_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("GridList_grid_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("GridList_grid_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("GridList_grid_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("GridList_grid_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public CheckBox Selected { get; private set; }
+ public Input Id { get; private set; }
+ public Input View { get; private set; }
+
+ public c_grid_row(c_gridlist_gridgrid grid) :
+ base(grid)
+ {
+ Selected = new CheckBox("colSelected", "Included", grid.TabId, "Selected");
+ Id = new Input("colId", "Grid ID", grid.TabId, "Id");
+ View = new Input("colView", "Table ID", grid.TabId, "View");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public CheckBoxColumnFilter Selected { get; private set; }
+ public InputColumnFilter Id { get; private set; }
+ public InputColumnFilter View { get; private set; }
+
+ public c_grid_header(c_gridlist_gridgrid grid) :
+ base(grid)
+ {
+ Selected = new CheckBoxColumnFilter(grid.Row.Selected);
+ Id = new InputColumnFilter(grid.Row.Id);
+ View = new InputColumnFilter(grid.Row.View);
+ }
+ }
+ }
+
+ public class c_aboutacumatica : Container
+ {
+
+ public PxButtonCollection Buttons { get; }
+
+ public c_aboutacumatica(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Ok()
+ {
+ Buttons.Ok.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Ok { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Ok = new Button("null_btn", "OK", tabId);
+ }
+ }
+ }
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json
new file mode 100644
index 00000000..11fb10ad
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json
@@ -0,0 +1 @@
+{"containers":[{"graphView":"WorkOrders","id":"fsColumnA-Order","name":"WorkOrders_fsColumnA-Order","controlType":"QP-FIELDSET","fields":[{"id":"edWorkOrders-OrderNbr","fieldName":"OrderNbr","viewName":"WorkOrders","displayName":"Order Nbr.","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Status","fieldName":"Status","viewName":"WorkOrders","displayName":"Status","controlType":"qp-drop-down","dataType":"String","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":true},{"id":"edWorkOrders-DateCreated","fieldName":"DateCreated","viewName":"WorkOrders","displayName":"Date Created","controlType":"qp-datetime-edit","dataType":"DateTime","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-DateCompleted","fieldName":"DateCompleted","viewName":"WorkOrders","displayName":"Date Completed","controlType":"qp-datetime-edit","dataType":"DateTime","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Priority","fieldName":"Priority","viewName":"WorkOrders","displayName":"Priority","controlType":"qp-drop-down","dataType":"String","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":true},{"id":"edWorkOrders-Assignee_description","fieldName":"Assignee_description","viewName":"WorkOrders","displayName":"Contact","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-NoteText","fieldName":"NoteText","viewName":"WorkOrders","displayName":"Note Text","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false}],"actions":[],"isCollection":false},{"graphView":"WorkOrders","id":"fsColumnB-Order","name":"WorkOrders_fsColumnB-Order","controlType":"QP-FIELDSET","fields":[{"id":"edWorkOrders-CustomerID","fieldName":"CustomerID","viewName":"WorkOrders","displayName":"Customer ID","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-ServiceID","fieldName":"ServiceID","viewName":"WorkOrders","displayName":"Service","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-DeviceID","fieldName":"DeviceID","viewName":"WorkOrders","displayName":"Device","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Assignee","fieldName":"Assignee","viewName":"WorkOrders","displayName":"Assignee","controlType":"qp-selector","dataType":"Int32","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Description","fieldName":"Description","viewName":"WorkOrders","displayName":"Description","controlType":"qp-text-editor","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false}],"actions":[],"isCollection":false},{"graphView":"WorkOrders","id":"fsColumnC-Order","name":"WorkOrders_fsColumnC-Order","controlType":"QP-FIELDSET","fields":[{"id":"edWorkOrders-OrderTotal","fieldName":"OrderTotal","viewName":"WorkOrders","displayName":"Order Total","controlType":"qp-number-editor","dataType":"Decimal","containerPath":["fsColumnC-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-InvoiceNbr","fieldName":"InvoiceNbr","viewName":"WorkOrders","displayName":"Invoice Nbr.","controlType":"qp-text-editor","dataType":"String","containerPath":["fsColumnC-Order"],"supportLocalizationPanel":false,"hasOptions":false}],"actions":[],"isCollection":false},{"graphView":"RepairItems","id":"grid-RepairItems","name":"RepairItems_grid-RepairItems","controlType":"QP-GRID","mergeToolbarWithMainToolbar":false,"containerPath":["tabbar","tabbar_tab-RepairItems_tabbar"],"fields":[{"id":"grid-RepairItems_Files_cell","fieldName":"Files","viewName":"RepairItems","controlType":"FileColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_Notes_cell","fieldName":"Notes","viewName":"RepairItems","controlType":"NoteColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_RepairItemType_editor","fieldName":"RepairItemType","viewName":"RepairItems","displayName":"Repair Item Type","controlType":"qp-drop-down","dataType":"String","supportLocalizationPanel":false,"hasOptions":true},{"id":"grid-RepairItems_InventoryID_editor","fieldName":"InventoryID","viewName":"RepairItems","displayName":"Inventory ID","controlType":"qp-selector","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_InventoryID_description_editor","fieldName":"InventoryID_description","viewName":"RepairItems","displayName":"Description","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_BasePrice_editor","fieldName":"BasePrice","viewName":"RepairItems","displayName":"Price","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_OrderNbr_editor","fieldName":"OrderNbr","viewName":"RepairItems","displayName":"OrderNbr","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_LineNbr_editor","fieldName":"LineNbr","viewName":"RepairItems","displayName":"Line Nbr.","controlType":"qp-number-editor","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false}],"actions":[{"id":"grid-RepairItems_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":true},{"graphView":"Labor","id":"grid-Labor","name":"Labor_grid-Labor","controlType":"QP-GRID","mergeToolbarWithMainToolbar":false,"containerPath":["tabbar","tabbar_tab-Labor_tabbar"],"fields":[{"id":"grid-Labor_Files_cell","fieldName":"Files","viewName":"Labor","controlType":"FileColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_Notes_cell","fieldName":"Notes","viewName":"Labor","controlType":"NoteColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_InventoryID_editor","fieldName":"InventoryID","viewName":"Labor","displayName":"Inventory ID","controlType":"qp-selector","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_InventoryID_description_editor","fieldName":"InventoryID_description","viewName":"Labor","displayName":"Description","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_DefaultPrice_editor","fieldName":"DefaultPrice","viewName":"Labor","displayName":"Default Price","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_Quantity_editor","fieldName":"Quantity","viewName":"Labor","displayName":"Quantity","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_ExtPrice_editor","fieldName":"ExtPrice","viewName":"Labor","displayName":"Ext. Price","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_OrderNbr_editor","fieldName":"OrderNbr","viewName":"Labor","displayName":"OrderNbr","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false}],"actions":[{"id":"grid-Labor_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":true},{"id":"FilterPreview","name":"FilterPreview_FormPreview","controlType":"QP-PANEL","fields":[],"actions":[{"id":"btnConfirmTransition","actionName":"","displayName":"OK","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"btnCancelTransition","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"FilterWorkingProject","id":"FilterWorkingProject","name":"FilterWorkingProject_FormSelectProject","controlType":"QP-PANEL","fields":[{"id":"edFilterWorkingProject-Name","fieldName":"Name","displayName":"Project Name","controlType":"qp-selector","supportLocalizationPanel":false}],"actions":[{"id":"SelectProjectOk","actionName":"Ok","displayName":"Ok","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"SelectProjectCancel","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"BtnNewProject","actionName":"","displayName":"New...","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"FilterWorkingProject","id":"DlgNewProject","name":"FilterWorkingProject_FormNewProject","controlType":"QP-PANEL","fields":[{"id":"edFilterWorkingProject-NewProject","fieldName":"NewProject","displayName":"New Project","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"btnActionCreateNewProject","actionName":"ActionCreateNewProject","displayName":"Create New Project","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"btnCancel","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"ViewElemInfo","id":"ViewElemInfo","name":"ElementProperties","controlType":"QP-PANEL","fields":[{"id":"edViewElemInfo-AspxControl","fieldName":"AspxControl","displayName":"Control Type","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-CacheType","fieldName":"CacheType","displayName":"Data Class","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-FieldName","fieldName":"FieldName","displayName":"Data Field","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-ViewName","fieldName":"ViewName","displayName":"View Name","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-GraphName","fieldName":"GraphName","displayName":"Business Logic","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-ActionName","fieldName":"ActionName","displayName":"Action Name","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"btnCustomize","actionName":"MenuLayoutEditor","displayName":"Customize","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"actionsMenu","actionName":"","displayName":"Actions","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"custBL","actionName":"MenuGraphEditor","displayName":"Customize Business Logic","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"custDF","actionName":"MenuDacEditor","displayName":"Customize Data Fields","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"viewBLSource","actionName":"MenuGraphSrc","displayName":"View Business Logic Source","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"viewDACSource","actionName":"MenuDacSrc","displayName":"View Data Class Source","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"btnCancel","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"Workflow","id":"WorkflowView","name":"WorkflowView_WorkflowFictiveDiagram","controlType":"QP-PANEL","fields":[{"id":"edWorkflow-LayoutClient","fieldName":"LayoutClient","displayName":"Layout","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"btnRedirectToCustomization","actionName":"Customize","displayName":"Customize Workflow","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"id":"pnlLinkShow","controlType":"QP-PANEL","fields":[{"id":"internalLink","fieldName":"internal","displayName":"Internal Link","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"externalLink","fieldName":"external","displayName":"External Link","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"link_send_btn","actionName":"","displayName":"Send","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"link_cancel_btn","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"id":"pnlProfiler","name":"ProfilerInfoView_formProfiler","controlType":"QP-PANEL","fields":[{"id":"profilerStartText","fieldName":"startText","displayName":"Start Text","controlType":"qp-text-editor","wgName":"StartText","supportLocalizationPanel":false},{"id":"profilerStarted","fieldName":"started","displayName":"Profiler started","controlType":"qp-text-editor","wgName":"Started","supportLocalizationPanel":false},{"id":"profilerRequestsLogged","fieldName":"requestsLogged","displayName":"Profiler Requests Logged","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"profiler_start_btn","actionName":"","displayName":"Start","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"wgName":"BtnStartProfiler","nonScreenAction":false},{"id":"profiler_stop_btn","actionName":"","controlType":"QP-BUTTON","dialogResult":"Stop","mergeWithScreenActions":false,"isSystemControlAction":false,"wgName":"BtnStopProfiler","nonScreenAction":false},{"id":"profiler_open_btn","actionName":"","controlType":"QP-BUTTON","dialogResult":"Open request","mergeWithScreenActions":false,"isSystemControlAction":false,"wgName":"BtnMainProfiler","nonScreenAction":false}],"isCollection":false},{"graphView":"Parameters","id":"shareColumnsDlg","name":"Parameters_gridWizard","controlType":"QP-PANEL","fields":[{"id":"edParameters-IsDefault","fieldName":"IsDefault","displayName":"Set as the Default","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"edParameters-Override","fieldName":"Override","displayName":"Override Users' Personal Configurations","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"edParameters-RoleName","fieldName":"RoleName","displayName":"User Role","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"share_columns_wz_cancel_btn","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"share_columns_wz_prev_btn","actionName":"","displayName":"Prev","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"share_columns_wz_next_btn","actionName":"","displayName":"Next","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"share_columns_wz_save_btn","actionName":"","displayName":"Finish","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"UserList","id":"UserList_grid","name":"UserList_userGrid","controlType":"QP-GRID","fields":[{"id":"colIncluded","fieldName":"Included","displayName":"Included","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"colUsername","fieldName":"Username","displayName":"Login","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colDisplayName","fieldName":"DisplayName","displayName":"Display Name","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colEmail","fieldName":"Email","displayName":"Email","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colGuest","fieldName":"Guest","displayName":"Guest Account","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colState","fieldName":"State","displayName":"Status","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"UserList_grid_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":false},{"graphView":"GridList","id":"GridList_grid","name":"GridList_gridGrid","controlType":"QP-GRID","fields":[{"id":"colSelected","fieldName":"Selected","displayName":"Included","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"colId","fieldName":"Id","displayName":"Grid ID","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colView","fieldName":"View","displayName":"Table ID","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"GridList_grid_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":false},{"id":"pnlAbout","name":"AboutAcumatica","controlType":"QP-PANEL","fields":[],"actions":[{"id":"null_btn","actionName":"","displayName":"OK","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false}],"fields":[],"actions":[{"id":"screenConfiguration","actionName":"ActionConfigureScreen","displayName":"UI Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"selectProject","actionName":"ActionSelectWorkingProject","displayName":"Select Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"editProject","actionName":"menuEditProj","displayName":"Edit Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"manageCustomizations","displayName":"Manage Customizations...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"inspectElement","actionName":"","displayName":"Inspect Element (Ctrl+Alt+Click)","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"link","displayName":"Get Link","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"webServices","displayName":"Web Service","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"DACBrowser","displayName":"DAC Schema Browser","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"miSwitchUIScreenMode","actionName":"SwitchUIScreenMode","displayName":"Switch to Classic UI","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"audit","displayName":"Audit history...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"accessRights","displayName":"Access Rights...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"profiler","displayName":"Profiler","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"sharingColumns","displayName":"Share Column Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"trace","displayName":"Trace...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"about","displayName":"About...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true}],"allActions":[{"id":"MainToolbarts_CancelCloseToList","actionName":"CancelCloseToList","displayName":"Close","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_SaveCloseToList","actionName":"SaveCloseToList","displayName":"Save & Close","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Save","actionName":"Save","displayName":"Save","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Cancel","actionName":"Cancel","displayName":"Cancel","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Insert","actionName":"Insert","displayName":"Insert","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Delete","actionName":"Delete","displayName":"Delete","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Archive","actionName":"Archive","displayName":"Archive","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":false},{"id":"MainToolbarts_Extract","actionName":"Extract","displayName":"Extract","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":false},{"id":"MainToolbarts_CopyPaste","actionName":"CopyPaste","displayName":"","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_First","actionName":"First","displayName":"First","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Previous","actionName":"Previous","displayName":"Prev","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Next","actionName":"Next","displayName":"Next","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Last","actionName":"Last","displayName":"Last","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"SystemMenu_NoteShow","actionName":"Note","displayName":"Note","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false},{"id":"SystemMenu_FilesShow","actionName":"FilesMenuShow","displayName":"FilesMenuShow","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false},{"id":"MainToolbarts_CopyPaste@CopyDocument","actionName":"CopyPaste@CopyDocument","displayName":"Copy","mergeWithScreenActions":true,"parentActionName":"MainToolbarts_CopyPaste","isSystemControlAction":false,"nonScreenAction":false},{"id":"MainToolbarts_CopyPaste@PasteDocument","actionName":"CopyPaste@PasteDocument","displayName":"Paste","mergeWithScreenActions":true,"parentActionName":"MainToolbarts_CopyPaste","isSystemControlAction":false,"nonScreenAction":false},{"id":"MainToolbarts_CopyPaste@SaveTemplate","actionName":"CopyPaste@SaveTemplate","displayName":"Save as Template...","mergeWithScreenActions":true,"parentActionName":"MainToolbarts_CopyPaste","isSystemControlAction":false,"nonScreenAction":false},{"id":"screenConfiguration","actionName":"ActionConfigureScreen","displayName":"UI Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"selectProject","actionName":"ActionSelectWorkingProject","displayName":"Select Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"editProject","actionName":"menuEditProj","displayName":"Edit Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"manageCustomizations","displayName":"Manage Customizations...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"inspectElement","actionName":"","displayName":"Inspect Element (Ctrl+Alt+Click)","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"link","displayName":"Get Link","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"webServices","displayName":"Web Service","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"DACBrowser","displayName":"DAC Schema Browser","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"miSwitchUIScreenMode","actionName":"SwitchUIScreenMode","displayName":"Switch to Classic UI","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"audit","displayName":"Audit history...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"accessRights","displayName":"Access Rights...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"profiler","displayName":"Profiler","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"sharingColumns","displayName":"Share Column Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"trace","displayName":"Trace...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"about","displayName":"About...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true}],"toolBar":{"items":{"MainToolbarts_CancelCloseToList":{"type":"menu-button","index":-101,"config":{"text":"Close","commandName":"CancelCloseToList","isSystem":true,"imageKey":"CancelClose","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":27,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","closePopup":true,"toolTip":"Discard Changes and Close","showInToolbar":true}},"MainToolbarts_SaveCloseToList":{"type":"menu-button","index":-81,"config":{"text":"Save & Close","commandName":"SaveCloseToList","isSystem":true,"imageKey":"SaveClose","imageSet":"main","checkDirty":true,"shortcutChar":83,"shortcutCtrl":true,"shortcutShift":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","closePopup":true,"toolTip":"Save the current record and close the screen (Ctrl+Shift+S).","showInToolbar":true}},"MainToolbarts_Save":{"type":"menu-button","index":-80,"config":{"text":"Save","commandName":"Save","isSystem":true,"imageKey":"Save","imageSet":"main","checkDirty":true,"shortcutChar":83,"shortcutCtrl":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Save (Ctrl+S).","showInToolbar":true}},"MainToolbarts_Cancel":{"type":"menu-button","index":-70,"config":{"text":"Cancel","commandName":"Cancel","isSystem":true,"imageKey":"Cancel","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":27,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Cancel (Esc)","showInToolbar":true}},"MainToolbarts_Insert":{"type":"menu-button","index":-60,"config":{"text":"Insert","commandName":"Insert","isSystem":true,"imageKey":"AddNew","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":45,"shortcutCtrl":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"self","toolTip":"Add New Record (Ctrl+Ins)","showInToolbar":true}},"MainToolbarts_Delete":{"type":"menu-button","index":5,"config":{"text":"Delete","commandName":"Delete","isSystem":true,"imageKey":"Remove","imageSet":"main","message":"The current Repair Work Order record will be deleted.","shortcutChar":46,"shortcutCtrl":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","closePopup":true,"toolTip":"Delete (Ctrl+Del).","showInToolbar":true}},"MainToolbarts_Archive":{"type":"menu-button","index":6,"config":{"text":"Archive","commandName":"Archive","isSystem":true,"imageKey":"Archive","imageSet":"svg:main","message":"The current record will be archived.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Archive","disabled":true}},"MainToolbarts_Extract":{"type":"menu-button","index":7,"config":{"text":"Extract","commandName":"Extract","isSystem":true,"imageKey":"Extract","imageSet":"svg:main","message":"The current record will be extracted from the archive.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Extract","disabled":true}},"MainToolbarts_CopyPaste":{"type":"menu-options","index":8,"config":{"isSystem":true,"imageKey":"Copy","imageSet":"main","checkDirty":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Clipboard","showInToolbar":true}},"MainToolbarts_First":{"type":"menu-button","index":9,"config":{"text":"First","commandName":"First","isSystem":true,"imageKey":"PageFirst","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"self","isNavigation":true,"toolTip":"Go to First Record","showInToolbar":true}},"MainToolbarts_Previous":{"type":"menu-button","index":10,"config":{"text":"Prev","commandName":"Previous","isSystem":true,"imageKey":"PagePrev","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":33,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","isNavigation":true,"toolTip":"Go to Previous Record (PgUp)","showInToolbar":true}},"MainToolbarts_Next":{"type":"menu-button","index":11,"config":{"text":"Next","commandName":"Next","isSystem":true,"imageKey":"PageNext","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":34,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","isNavigation":true,"toolTip":"Go to Next Record (PgDn)","showInToolbar":true}},"MainToolbarts_Last":{"type":"menu-button","index":12,"config":{"text":"Last","commandName":"Last","isSystem":true,"imageKey":"PageLast","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"self","isNavigation":true,"toolTip":"Go to Last Record","showInToolbar":true}},"MainToolbarts_CopyPaste@CopyDocument":{"type":"menu-button","index":13,"config":{"text":"Copy","commandName":"CopyPaste@CopyDocument","imageKey":"Copy","imageSet":"main","postDataControls":false,"optimizePostData":false,"popupCheckSave":false,"dynamicText":false,"allowHide":false}},"MainToolbarts_CopyPaste@PasteDocument":{"type":"menu-button","index":14,"config":{"text":"Paste","commandName":"CopyPaste@PasteDocument","imageKey":"Paste","imageSet":"main","postDataControls":false,"optimizePostData":false,"popupCheckSave":false,"dynamicText":false,"allowHide":false,"disabled":true}},"MainToolbarts_CopyPaste@SaveTemplate":{"type":"menu-button","index":15,"config":{"text":"Save as Template...","commandName":"CopyPaste@SaveTemplate","imageKey":"Save","imageSet":"main","postDataControls":false,"optimizePostData":false,"popupCheckSave":false,"dynamicText":false,"allowHide":false}}},"categories":[{"id":"MainToolbarts_CopyPaste","name":"CopyPaste","text":"CopyPaste","actions":["MainToolbarts_CopyPaste@CopyDocument","MainToolbarts_CopyPaste@PasteDocument","MainToolbarts_CopyPaste@SaveTemplate"],"isSystem":true}]},"wrapperType":"screen"}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.1_Step5/Prompt_Inspect_RS301000_wrapper.txt b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.1_Step5/Prompt_Inspect_RS301000_wrapper.txt
new file mode 100644
index 00000000..d37291ea
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.1_Step5/Prompt_Inspect_RS301000_wrapper.txt
@@ -0,0 +1,21 @@
+Inspect the generated Modern UI Test SDK wrapper for RS301000.
+
+Do not modify files.
+
+Use these files as context:
+- Wrappers\Generated\RS\RS301000.cs
+- RepairWorkOrdersScreen.cs
+- TestData.cs
+
+Please identify:
+1. The generated screen class and namespace.
+2. The member used for the Order Nbr. field.
+3. The member used for the Labor grid.
+4. The member used for the Labor Quantity field.
+5. The methods used to save and refresh the screen or grid.
+6. The helper methods in RepairWorkOrdersScreen that wrap these generated members.
+7. Any wrapper members that are missing or not confirmed.
+8. Any member names that Copilot should not invent.
+
+Use exact member names from the generated wrapper.
+If a member does not clearly exist, say that it is missing instead of inventing one.
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step2/Prompt_Draft_UITest_for_labor_quantity_restoration_validation_.txt b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step2/Prompt_Draft_UITest_for_labor_quantity_restoration_validation_.txt
new file mode 100644
index 00000000..c2967557
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step2/Prompt_Draft_UITest_for_labor_quantity_restoration_validation_.txt
@@ -0,0 +1,40 @@
+Draft a UI test for the Repair Work Orders labor quantity
+validation scenario.
+
+Target screen:
+RS301000 Repair Work Orders
+
+Scenario:
+Open existing repair work order 000001 whose labor line has a configured/default quantity of 1.
+Change the labor quantity to 0.
+Trigger validation by using the project’s established save/update pattern.
+Verify that the UI restores the labor quantity to 1.
+If the wrapper exposes field warning information,
+also verify that the QuantityTooSmall warning is shown.
+
+Use the open files as context:
+- The generated RS301000 wrapper class.
+- The RepairWorkOrdersScreen helper class.
+- The TestData helper class.
+- The existing Test SDK test base class or sample test, if available.
+
+Requirements:
+1. Use generated wrapper members where available.
+2. Prefer the RepairWorkOrdersScreen helper methods where possible.
+3. Do not use direct DOM selectors unless the wrappers do not expose the needed element.
+4. Use deterministic test data from TestData.
+5. Open work order 000001.
+6. Change the labor quantity from 1 to 0.
+7. Trigger validation.
+8. Assert that the final labor quantity is 1.
+9. Assert the QuantityTooSmall warning only if the wrapper exposes a reliable way to inspect it.
+10. Use Arrange, Act, Assert comments.
+11. Avoid hardcoded credentials, tenant secrets, local paths, or environment-specific URLs.
+12. Add TODO comments where wrapper names or test data must be verified.
+13. Name the test method as LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity
+
+Constraints:
+- Do not invent wrapper members.
+- Do not rewrite existing helpers unless the helper has a clear TODO.
+- Do not modify configuration files.
+- Do not create broad setup logic that distracts from the test scenario.
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step5/Prompt_Explain_generated_test.txt b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step5/Prompt_Explain_generated_test.txt
new file mode 100644
index 00000000..26417c29
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step5/Prompt_Explain_generated_test.txt
@@ -0,0 +1,14 @@
+Explain the generated test.
+
+Do not modify files.
+
+Please cover:
+1. Which repair work order data the test depends on.
+2. How the test opens the screen.
+3. How it opens work order 000001.
+4. How it changes the labor quantity from 1 to 0.
+5. How it triggers validation.
+6. How it verifies that the quantity is restored to 1.
+7. Whether the test can verify the QuantityTooSmall warning.
+8. Which wrapper members or test data values still need SME verification.
+9. Which prepared Test SDK output or log artifact should be used if the live test cannot be run.
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.3_Step6/Prompt_Classify_test_failure.txt b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.3_Step6/Prompt_Classify_test_failure.txt
new file mode 100644
index 00000000..5d4fe1a6
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.3_Step6/Prompt_Classify_test_failure.txt
@@ -0,0 +1,39 @@
+Review this Test SDK test failure.
+
+Context:
+- The test uses generated Modern UI Test SDK wrappers.
+- The target screen is Repair Work Orders (RS301000).
+- The test is intended to validate the UI behavior for RSSVWorkOrderLabor.Quantity.
+- The related Unit Test Framework test now passes.
+- Expected UI behavior: after entering quantity 0 for a labor line whose
+ configured/default quantity is 1, validation restores the quantity to 1.
+ If supported by wrappers, the QuantityTooSmall warning should also be visible.
+
+Test goal:
+Verify that the UI workflow reflects the repaired labor quantity validation behavior.
+
+Relevant test code:
+[Reference the test method or paste the method if needed.]
+
+Relevant wrapper members:
+- WorkOrders_fsColumnAOrder.OrderNbr
+- Labor_gridLabor.Row.Quantity
+- Save()
+- Labor_gridLabor.Refresh()
+
+Failure output:
+[Paste the cleaned failure message, log excerpt, or screenshot description.]
+
+Please classify the likely cause:
+1. Wrapper/member mismatch
+2. Test data issue
+3. Timing/wait issue
+4. Validation not triggered by the test
+5. Application behavior issue
+6. Environment/configuration issue
+
+For each likely cause, suggest the next diagnostic step.
+
+Do not modify files.
+Do not assume the application is defective unless the evidence supports it.
+Do not invent wrapper members or unsupported APIs.
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes
new file mode 100644
index 00000000..1ff0c423
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore
new file mode 100644
index 00000000..9491a2fd
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore
@@ -0,0 +1,363 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Oo]ut/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln
new file mode 100644
index 00000000..c36b9864
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 18
+VisualStudioVersion = 18.7.11911.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AIAssistedDiagnostics.ModernUI.Tests", "AIAssistedDiagnostics.ModernUI.Tests\AIAssistedDiagnostics.ModernUI.Tests.csproj", "{CDC1F631-6007-B431-EBBE-D016839CC2BC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CDC1F631-6007-B431-EBBE-D016839CC2BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {D28A3C68-0E5B-45FF-A2C6-F9A8CF28E848}
+ EndGlobalSection
+EndGlobal
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj
new file mode 100644
index 00000000..f0649f44
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj
@@ -0,0 +1,71 @@
+
+
+
+ Exe
+ net48
+ 9.0
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Settings.settings
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs
new file mode 100644
index 00000000..f46c5746
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs
@@ -0,0 +1,13 @@
+namespace AIAssistedDiagnostics.ModernUI.Tests.Helpers
+{
+ public static class TestData
+ {
+ public const string PreparedWorkOrderNbr = "000001";
+
+ public const decimal ConfiguredLaborQuantity = 1m;
+
+ public const decimal BelowConfiguredLaborQuantity = 0m;
+
+ public const decimal ExpectedRestoredLaborQuantity = 1m;
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs
new file mode 100644
index 00000000..d676271c
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests
+{
+ public class Program
+ {
+ public static int Main(string[] args) => Execution.Launcher.Main(args);
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..b20a50c9
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.7.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings
new file mode 100644
index 00000000..049245f4
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json
new file mode 100644
index 00000000..f1ea355c
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json
@@ -0,0 +1,9 @@
+{
+ "profiles": {
+ "AIAssistedDiagnostics.ModernUI.Tests": {
+ "commandName": "Project",
+ "commandLineArgs": ".\\Test.exe /config \"C:\\AcumaticaTestSDK\\TestSDK_2026R1_26_100_0175\\config.xml\"",
+ "nativeDebugging": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md
new file mode 100644
index 00000000..e5cc62d3
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md
@@ -0,0 +1,299 @@
+# AI-Assisted Testing and Diagnostics with the Test SDK for the Modern UI (Test SDK Project Setup)
+
+This document explains how to prepare and run the Test SDK project for the Modern UI used in Lessons/Activities 2.1–2.3 of the **AI-Assisted Testing & Diagnostics with the Test SDK for the Modern UI** training/help guide.
+
+The project demonstrates automated browser-level validation for the **Repair Work Orders (RS301000)** form.
+The test opens work order `000001`, changes the labor quantity from `1` to `0`, triggers validation by saving and refreshing the Labor grid, and verifies that the quantity is restored to `1`.
+
+## Audience
+
+This setup is intended for learners who need to run this Test SDK project locally.
+
+
+## What This Project Contains
+
+The solution includes the prepared Test SDK project:
+
+```text
+AIAssistedDiagnostics.ModernUI.Tests.sln
+AIAssistedDiagnostics.ModernUI.Tests\
+```
+
+The project includes:
+
+```text
+Wrappers\Generated\RS\RS301000.cs
+Wrappers\Generated\RS301000_response.json
+Wrappers\Custom\RepairWorkOrdersScreen.cs
+Helpers\TestData.cs
+Tests\StartTests.cs
+Tests\RS301000_LaborQuantityTests.cs
+artifacts\passing\
+artifacts\failures\
+```
+
+The key generated wrapper members to be used by the test that you'll add in `RS301000_LaborQuantityTests.cs` are:
+
+```csharp
+WorkOrders_fsColumnAOrder.OrderNbr
+Labor_gridLabor
+Labor_gridLabor.Row.Quantity
+Save()
+Labor_gridLabor.Refresh()
+```
+
+The custom helper class is:
+
+```csharp
+RepairWorkOrdersScreen
+```
+
+The helper wraps the generated wrapper members so the test code can use learner-friendly methods such as:
+
+```csharp
+Open()
+OpenWorkOrder(string workOrderNbr)
+GetFirstLaborQuantity()
+SetFirstLaborQuantity(decimal quantity)
+TriggerValidation()
+```
+
+## What This Project Does Not Include
+
+The repository does **not** include:
+
+- Acumatica ERP installer
+- Test SDK ZIP file
+- Real `config.xml` with credentials
+
+## How to Build and Run the Project Locally
+
+To build and run the project locally, install the following:
+
+1. **Visual Studio 2022 or later**
+
+ Recommended workload:
+
+ ```text
+ .NET desktop development
+ ```
+
+ Make sure the project can target:
+
+ ```text
+ .NET Framework 4.8
+ ```
+
+2. **GitHub Copilot for Visual Studio**
+
+ Copilot is used in the learning activities related to this project to inspect wrapper code, generate UI test code (the `LaborQuantity_WhenBelowConfigured_RestoresConfiguredQuantity()` method), and classify failures.
+
+3. **Acumatica ERP 2026 R1**
+
+ For this project, the expected build is:
+
+ ```text
+ Acumatica ERP 2026 R1 build 26.100.0175 (https://acumatica-builds.s3.amazonaws.com/index.html?prefix=builds/26.1/26.100.0175/AcumaticaERP/)
+ ```
+
+4. **Matching Acumatica Test SDK**
+
+ Use the Test SDK package that matches the Acumatica ERP build:
+
+ ```text
+ TestSDK_26_100_0175_183.zip (https://acumatica-builds.s3.amazonaws.com/index.html?prefix=builds/26.1/26.100.0175/TestSDK/)
+ ```
+
+ Extract it locally. A recommended path is:
+
+ ```text
+ C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\
+ ```
+
+5. **Local Acumatica site**
+
+ The examples below assume a local site named:
+
+ ```text
+ SmartFix_T280
+ ```
+
+ Example URL:
+
+ ```text
+ http://localhost/SmartFix_T280
+ ```
+
+## Required Acumatica Site State
+
+Before running the Test SDK project, the target Acumatica site must be prepared. You must deploy an instance for the **T280 Testing Business Logic with the Acumatica Unit Test Framework** training course by using the **Acumatica ERP Installer** downloaded in Step 3 above.
+
+### Required customization
+
+The `PhoneRepairShop` customization must be published to the deployed Acumatica ERP instance. This customization is automatically included in the **T280 Testing Business Logic with the Acumatica Unit Test Framework** training course instance.
+
+This Test SDK project expects the published customization project to have the following behavior:
+
+```text
+On the **Repair Work Orders (RS301000)**, when a labor quantity lower than the configured value is entered,
+the system restores the quantity to the configured value.
+```
+
+### Required screen
+
+The user configured in `config.xml` of the extracted Test SDK pacakge must be able to open the following screen in the **Modern UI**:
+
+```text
+RS301000 - Repair Work Orders
+```
+
+### Required test data
+
+The site must contain the following prepared work order:
+
+| Item | Value |
+|---|---|
+| Screen | `RS301000` |
+| Work order number | `000001` |
+| Configured labor quantity | `1` |
+| Test input quantity | `0` |
+| Expected restored quantity | `1` |
+
+Before running the existing smoke test (see `RepairWorkOrdersScreen_CanOpenPreparedWorkOrder` method in `RS301000_LaborQuantityTests.cs`) and creating and running the automated UI test for the labor quantity restoration verification (see the TODOS in `RS301000_LaborQuantityTests.cs` and `StartTests.cs`), manually verify this behavior in Acumatica:
+
+1. Sign in to the target site.
+2. Open **Repair Work Orders (RS301000)**.
+3. Open work order `000001`.
+4. Confirm that the target labor line has quantity `1`.
+5. Change the labor quantity to `0`.
+6. Save the record and refresh the Labor grid.
+7. Confirm that the quantity is restored to `1`.
+
+If this manual check does not pass, fix the Acumatica site or customization before running the Test SDK project.
+
+## Recommended Local Folder Structure
+
+Use a stable local folder structure. For example:
+
+```text
+C:\AIAssistedTesting\ModernUITestSDK\ - For the Test SDK project downloaded from GitHub (see Step 1 below)
+C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\ - For the extracted Test SDK ZIP file (see Item 4 above)
+C:\AcuTestInstances\SmartFix_T280\ - For the deployed Acumatica site
+C:\share\logs\ - For the Test SDK log files
+```
+
+The exact paths can differ, but the project, Test SDK configuration, and launch profile must point to the same locations.
+
+## Step 1: Clone or Download the Repository
+
+Clone or download the 2026R2 branch of the Help-and-Training-Examples repository from this link: https://github.com/Acumatica/Help-and-Training-Examples.
+Copy the `ModernUI\AIAssistedTestingAndDiagnostics\StarterProject\AIAssistedDiagnostics.ModernUI.Tests` solution folder from the repository to a local folder.
+
+Example:
+
+```text
+C:\AIAssistedTesting\ModernUITestSDK\
+```
+
+Open the solution:
+
+```text
+AIAssistedDiagnostics.ModernUI.Tests.sln
+```
+
+## Step 2: Add the Test SDK Packages as a NuGet Source
+
+The project depends on packages from the matching Test SDK.
+
+In Visual Studio:
+
+1. Open **Tools > NuGet Package Manager > Package Manager Settings**.
+2. Select **NuGet Package Manager > Package Sources**.
+3. Add a new source.
+
+Example:
+
+```text
+Name: Acumatica TestSDK 2026R1 26.100.0175
+Source: C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\packages
+```
+
+4. Save the package source.
+5. Restore NuGet packages for the solution.
+
+If the project cannot restore packages, verify that the Test SDK path and package source are correct.
+
+## Step 3: Configure the Test SDK `config.xml`
+
+Use the `config.xml` file from the extracted Test SDK folder.
+
+Example location:
+
+```text
+C:\AcumaticaTestSDK\TestSDK_2026R1_26_100_0175\config.xml
+```
+
+Update it for your local site. The exact XML structure depends on your Test SDK package, so use the existing file as the starting point.
+
+Verify these values:
+
+| Setting | Example |
+|---|---|
+| Site URL | `http://localhost/SmartFix_T280` |
+| Tenant | `Company` |
+| Username | `admin` or a dedicated Test SDK user |
+| Password | Local test password |
+| Browser path | Test SDK Chrome path |
+| Log path | `C:\share\logs` |
+| Download path | `C:\share\download` |
+| Physical site path, if required | `C:\SmartFix_T280` |
+
+
+## Step 4: Configure `launchSettings.json`
+
+Open the project launch settings file:
+
+```text
+AIAssistedDiagnostics.ModernUI.Tests\Properties\launchSettings.json
+```
+
+Make sure the launch profile points to the Test SDK `config.xml`.
+
+Example:
+
+```json
+{
+ "profiles": {
+ "AIAssistedDiagnostics.ModernUI.Tests": {
+ "commandName": "Project",
+ "commandLineArgs": "C:\\AcumaticaTestSDK\\TestSDK_2026R1_26_100_0175\\config.xml"
+ }
+ }
+}
+```
+
+Use your actual Test SDK path.
+
+
+## Step 5: Confirm the Project Builds
+
+In Visual Studio:
+
+1. Restore NuGet packages.
+2. Build the solution.
+3. Confirm that `AIAssistedDiagnostics.ModernUI.Tests` builds successfully.
+
+The project should target:
+
+```text
+.NET Framework 4.8
+```
+
+If you see errors related to nullable reference types, confirm the project uses a C# language version that supports nullable reference syntax.
+
+Recommended project settings:
+
+```xml
+9.0
+enable
+```
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs
new file mode 100644
index 00000000..2b844a18
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs
@@ -0,0 +1,18 @@
+using AIAssistedDiagnostics.ModernUI.Tests.Tests;
+using ClassGenerator;
+using Core.Login;
+using Core.TestExecution;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests
+{
+ public class Test : Check
+ {
+ public override void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ StartTests startTests = new StartTests();
+ startTests.Execute();
+ }
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs
new file mode 100644
index 00000000..32e9ce27
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs
@@ -0,0 +1,44 @@
+using System;
+using Core;
+using AIAssistedDiagnostics.ModernUI.Tests.Helpers;
+using AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Custom;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Tests
+{
+ public sealed class RS301000_LaborQuantityTests : Wrapper
+ {
+ public void RepairWorkOrdersScreen_CanOpenPreparedWorkOrder()
+ {
+ // Arrange
+ var screen = new RepairWorkOrdersScreen();
+
+ // Act
+ screen.Open();
+ screen.OpenWorkOrder(TestData.PreparedWorkOrderNbr);
+
+ decimal actualQuantity = screen.GetFirstLaborQuantity();
+
+ // Assert
+ AssertDecimalEqual(
+ TestData.ConfiguredLaborQuantity,
+ actualQuantity,
+ "The prepared repair work order should open with the expected configured labor quantity.");
+ }
+
+ //TODO: Implement the test for verifying that labor quantity is restored after setting it below the configured value.
+
+ private static void AssertDecimalEqual(
+ decimal expected,
+ decimal actual,
+ string message)
+ {
+ if (expected != actual)
+ {
+ throw new InvalidOperationException(
+ $"{message}{Environment.NewLine}" +
+ $"Expected: {expected}{Environment.NewLine}" +
+ $"Actual: {actual}");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs
new file mode 100644
index 00000000..77060c5f
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs
@@ -0,0 +1,24 @@
+using System;
+using Core.Login;
+using Core.TestExecution;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Tests
+{
+ internal class StartTests
+ {
+ public void Execute()
+ {
+ PxLogin.LoginToDestinationSite();
+
+ using (TestExecution.CreateTestStepGroup("RS301000 smoke test"))
+ {
+ Console.WriteLine("Starting RS301000 smoke test...");
+
+ var rs301000Tests = new RS301000_LaborQuantityTests();
+ rs301000Tests.RepairWorkOrdersScreen_CanOpenPreparedWorkOrder();
+ }
+
+ // TODO: Run the test that verifies that the labor quantity is restored after setting it below the configured value.
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs
new file mode 100644
index 00000000..2aec25dd
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Globalization;
+using System.Threading;
+using GeneratedWrappers.AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Generated;
+
+namespace AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Custom
+{
+ ///
+ /// Friendly helper over the generated Modern UI wrapper for RS301000.
+ /// This class inherits from the generated RS301000 wrapper because the generated
+ /// work order containers and labor grid are protected members.
+ ///
+ public sealed class RepairWorkOrdersScreen : RS301000
+ {
+ public void Open()
+ {
+ OpenScreen();
+
+ // Temporary wait for diagnostics. If this solves the next issue,
+ // replace it later with the project’s normal Test SDK wait pattern.
+ Thread.Sleep(3000);
+ }
+
+ public void OpenWorkOrder(string workOrderNbr)
+ {
+ if (string.IsNullOrWhiteSpace(workOrderNbr))
+ {
+ throw new ArgumentException(
+ "The work order number must be provided.",
+ nameof(workOrderNbr));
+ }
+
+ WorkOrders_fsColumnAOrder.OrderNbr.Type(workOrderNbr);
+
+ // Temporary wait to allow the selector/screen data to load.
+ Thread.Sleep(2000);
+ }
+
+ public decimal GetFirstLaborQuantity()
+ {
+ string value = Labor_gridLabor.Row.Quantity.GetValue();
+ Console.WriteLine($"Raw labor quantity value: '{value}'");
+
+ if (decimal.TryParse(
+ value,
+ NumberStyles.Any,
+ CultureInfo.InvariantCulture,
+ out decimal parsed))
+ {
+ return parsed;
+ }
+
+ throw new FormatException(
+ $"The labor quantity value '{value}' could not be converted to decimal.");
+ }
+
+ public void SetFirstLaborQuantity(decimal quantity)
+ {
+ Labor_gridLabor.Row.Quantity.Type(
+ quantity.ToString(CultureInfo.InvariantCulture));
+ }
+
+ public void TriggerValidation()
+ {
+ Save();
+
+ Thread.Sleep(2000);
+
+ Labor_gridLabor.Refresh();
+
+ Thread.Sleep(2000);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs
new file mode 100644
index 00000000..122f99f3
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs
@@ -0,0 +1,1502 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using Controls.Button;
+using Controls.CheckBox;
+using Controls.Container;
+using Controls.Container.Extentions;
+using Controls.Editors.DateSelector;
+using Controls.Editors.DropDown;
+using Controls.Editors.Selector;
+using Controls.FileColumnButton;
+using Controls.Grid;
+using Controls.Grid.Filter;
+using Controls.Grid.Upload;
+using Controls.Input;
+using Controls.Input.PXNumberEdit;
+using Controls.Label;
+using Controls.NoteColumnButton;
+using Controls.ToolBarButton;
+using Core;
+using System;
+
+
+namespace GeneratedWrappers.AIAssistedDiagnostics.ModernUI.Tests.Wrappers.Generated
+{
+
+
+ public class RS301000 : Wrapper
+ {
+
+ public PxToolBar ToolBar { get; }
+ protected c_workorders_fscolumnaorder WorkOrders_fsColumnAOrder { get; } = new c_workorders_fscolumnaorder("fsColumnA-Order", "fsColumnA-Order");
+ protected c_workorders_fscolumnborder WorkOrders_fsColumnBOrder { get; } = new c_workorders_fscolumnborder("fsColumnB-Order", "fsColumnB-Order");
+ protected c_workorders_fscolumncorder WorkOrders_fsColumnCOrder { get; } = new c_workorders_fscolumncorder("fsColumnC-Order", "fsColumnC-Order");
+ protected c_repairitems_gridrepairitems RepairItems_gridRepairItems { get; } = new c_repairitems_gridrepairitems("grid-RepairItems", "grid-RepairItems;tabbar_tab-RepairItems_tabbar");
+ protected c_labor_gridlabor Labor_gridLabor { get; } = new c_labor_gridlabor("grid-Labor", "grid-Labor;tabbar_tab-Labor_tabbar");
+ protected c_filterpreview_formpreview FilterPreview_FormPreview { get; } = new c_filterpreview_formpreview("FilterPreview", "FilterPreview");
+ protected c_filterworkingproject_formselectproject FilterWorkingProject_FormSelectProject { get; } = new c_filterworkingproject_formselectproject("FilterWorkingProject", "FilterWorkingProject");
+ protected c_filterworkingproject_formnewproject FilterWorkingProject_FormNewProject { get; } = new c_filterworkingproject_formnewproject("DlgNewProject", "DlgNewProject");
+ protected c_elementproperties ElementProperties { get; } = new c_elementproperties("ViewElemInfo", "ViewElemInfo");
+ protected c_workflowview_workflowfictivediagram WorkflowView_WorkflowFictiveDiagram { get; } = new c_workflowview_workflowfictivediagram("WorkflowView", "WorkflowView");
+ protected c_pnllinkshow PnlLinkShow { get; } = new c_pnllinkshow("pnlLinkShow", "pnlLinkShow");
+ protected c_profilerinfoview_formprofiler ProfilerInfoView_formProfiler { get; } = new c_profilerinfoview_formprofiler("pnlProfiler", "pnlProfiler");
+ protected c_parameters_gridwizard Parameters_gridWizard { get; } = new c_parameters_gridwizard("shareColumnsDlg", "shareColumnsDlg");
+ protected c_userlist_usergrid UserList_userGrid { get; } = new c_userlist_usergrid("UserList_grid", "UserList_grid");
+ protected c_gridlist_gridgrid GridList_gridGrid { get; } = new c_gridlist_gridgrid("GridList_grid", "GridList_grid");
+ protected c_aboutacumatica AboutAcumatica { get; } = new c_aboutacumatica("pnlAbout", "pnlAbout");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("grid-RepairItems_fb", "QuickSearch", "grid-RepairItems;tabbar_tab-RepairItems_tabbar", null);
+ public Controls.Container.Extentions.Note NotePanel { get; private set; } = new Controls.Container.Extentions.Note("pnlNoteShow");
+ public Controls.Container.Extentions.ActivityPanel ActivityPanel { get; private set; } = new Controls.Container.Extentions.ActivityPanel("pnlActivitiesShow");
+ public Controls.Container.Extentions.SmartPanel_AttachFile FilesUploadDialog { get; private set; } = new Controls.Container.Extentions.SmartPanel_AttachFile("pnlFilesDialog");
+
+ public RS301000()
+ {
+ ScreenId = "RS301000";
+ ToolBar = new PxToolBar(null);
+ Initialize();
+ }
+
+ public virtual void SystemGear()
+ {
+ ToolBar.SystemGear.Click();
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void CancelClose()
+ {
+ ToolBar.CancelClose.Click();
+ }
+
+ public virtual void SaveClose()
+ {
+ ToolBar.SaveClose.Click();
+ }
+
+ public virtual void Save()
+ {
+ ToolBar.Save.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ ToolBar.Cancel.Click();
+ }
+
+ public virtual void Insert()
+ {
+ ToolBar.Insert.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void CopyPaste()
+ {
+ ToolBar.CopyPaste.Click();
+ }
+
+ public virtual void First()
+ {
+ ToolBar.First.Click();
+ }
+
+ public virtual void Previous()
+ {
+ ToolBar.Previous.Click();
+ }
+
+ public virtual void Next()
+ {
+ ToolBar.Next.Click();
+ }
+
+ public virtual void Last()
+ {
+ ToolBar.Last.Click();
+ }
+
+ public virtual void Archive()
+ {
+ ToolBar.Archive.Click();
+ }
+
+ public virtual void Extract()
+ {
+ ToolBar.Extract.Click();
+ }
+
+ public virtual void Note()
+ {
+ ToolBar.Note.Click();
+ }
+
+ public virtual void FilesMenuShow()
+ {
+ ToolBar.FilesMenuShow.Click();
+ }
+
+ public virtual void CopyDocument()
+ {
+ ToolBar.CopyDocument.Click();
+ }
+
+ public virtual void PasteDocument()
+ {
+ ToolBar.PasteDocument.Click();
+ }
+
+ public virtual void SaveTemplate()
+ {
+ ToolBar.SaveTemplate.Click();
+ }
+
+ public virtual void ActionConfigureScreen()
+ {
+ ToolBar.ActionConfigureScreen.Click();
+ }
+
+ public virtual void ActionSelectWorkingProject()
+ {
+ ToolBar.ActionSelectWorkingProject.Click();
+ }
+
+ public virtual void MenuEditProj()
+ {
+ ToolBar.MenuEditProj.Click();
+ }
+
+ public virtual void ManageCustomizations()
+ {
+ ToolBar.ManageCustomizations.Click();
+ }
+
+ public virtual void InspectElementCtrlAltClick()
+ {
+ ToolBar.InspectElementCtrlAltClick.Click();
+ }
+
+ public virtual void GetLink()
+ {
+ ToolBar.GetLink.Click();
+ }
+
+ public virtual void WebService()
+ {
+ ToolBar.WebService.Click();
+ }
+
+ public virtual void DACSchemaBrowser()
+ {
+ ToolBar.DACSchemaBrowser.Click();
+ }
+
+ public virtual void SwitchUIScreenMode()
+ {
+ ToolBar.SwitchUIScreenMode.Click();
+ }
+
+ public virtual void Audithistory()
+ {
+ ToolBar.Audithistory.Click();
+ }
+
+ public virtual void AccessRights()
+ {
+ ToolBar.AccessRights.Click();
+ }
+
+ public virtual void Profiler()
+ {
+ ToolBar.Profiler.Click();
+ }
+
+ public virtual void ShareColumnConfiguration()
+ {
+ ToolBar.ShareColumnConfiguration.Click();
+ }
+
+ public virtual void Trace()
+ {
+ ToolBar.Trace.Click();
+ }
+
+ public virtual void About()
+ {
+ ToolBar.About.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton SystemGear { get; private set; }
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton CancelClose { get; private set; }
+ public ToolBarButton SaveClose { get; private set; }
+ public ToolBarButton Save { get; private set; }
+ public ToolBarButton Cancel { get; private set; }
+ public ToolBarButton Insert { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton CopyPaste { get; private set; }
+ public ToolBarButton First { get; private set; }
+ public ToolBarButton Previous { get; private set; }
+ public ToolBarButton Next { get; private set; }
+ public ToolBarButton Last { get; private set; }
+ public ToolBarButton Archive { get; private set; }
+ public ToolBarButton Extract { get; private set; }
+ public ToolBarButton Note { get; private set; }
+ public ToolBarButton FilesMenuShow { get; private set; }
+ public ToolBarButton CopyDocument { get; private set; }
+ public ToolBarButton PasteDocument { get; private set; }
+ public ToolBarButton SaveTemplate { get; private set; }
+ public ToolBarButton ActionConfigureScreen { get; private set; }
+ public ToolBarButton ActionSelectWorkingProject { get; private set; }
+ public ToolBarButton MenuEditProj { get; private set; }
+ public ToolBarButton ManageCustomizations { get; private set; }
+ public ToolBarButton InspectElementCtrlAltClick { get; private set; }
+ public ToolBarButton GetLink { get; private set; }
+ public ToolBarButton WebService { get; private set; }
+ public ToolBarButton DACSchemaBrowser { get; private set; }
+ public ToolBarButton SwitchUIScreenMode { get; private set; }
+ public ToolBarButton Audithistory { get; private set; }
+ public ToolBarButton AccessRights { get; private set; }
+ public ToolBarButton Profiler { get; private set; }
+ public ToolBarButton ShareColumnConfiguration { get; private set; }
+ public ToolBarButton Trace { get; private set; }
+ public ToolBarButton About { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ SystemGear = new ToolBarButton("customizationMenu_menu", "System Gear", tabId, null);
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ CancelClose = new ToolBarButton("MainToolbarts_CancelCloseToList", "Close", tabId, null);
+ SaveClose = new ToolBarButton("MainToolbarts_SaveCloseToList", "Save & Close", tabId, null);
+ Save = new ToolBarButton("MainToolbarts_Save", "Save", tabId, null);
+ Cancel = new ToolBarButton("MainToolbarts_Cancel", "Cancel", tabId, null);
+ Cancel.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Insert = new ToolBarButton("MainToolbarts_Insert", "Insert", tabId, null);
+ Delete = new ToolBarButton("MainToolbarts_Delete", "Delete", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ CopyPaste = new ToolBarButton("MainToolbarts_CopyPaste", "CopyPaste", tabId, null);
+ First = new ToolBarButton("MainToolbarts_First", "First", tabId, null);
+ Previous = new ToolBarButton("MainToolbarts_Previous", "Prev", tabId, null);
+ Next = new ToolBarButton("MainToolbarts_Next", "Next", tabId, null);
+ Last = new ToolBarButton("MainToolbarts_Last", "Last", tabId, null);
+ Archive = new ToolBarButton("MainToolbarts_Archive", "Archive", tabId, null);
+ Extract = new ToolBarButton("MainToolbarts_Extract", "Extract", tabId, null);
+ Note = new ToolBarButton("SystemMenu_NoteShow", "Note", tabId, null);
+ FilesMenuShow = new ToolBarButton("SystemMenu_FilesShow", "FilesMenuShow", tabId, null);
+ CopyDocument = new ToolBarButton("css=#MainToolbarts_CopyPaste\\@CopyDocument,#MainToolbarts_CopyPaste\\@CopyDocument" +
+ "_item", "Copy", tabId, CopyPaste);
+ PasteDocument = new ToolBarButton("css=#MainToolbarts_CopyPaste\\@PasteDocument,#MainToolbarts_CopyPaste\\@PasteDocume" +
+ "nt_item", "Paste", tabId, CopyPaste);
+ SaveTemplate = new ToolBarButton("css=#MainToolbarts_CopyPaste\\@SaveTemplate,#MainToolbarts_CopyPaste\\@SaveTemplate" +
+ "_item", "Save as Template...", tabId, CopyPaste);
+ ActionConfigureScreen = new ToolBarButton("css=#screenConfiguration,#screenConfiguration_item", "UI Configuration", tabId, SystemGear);
+ ActionSelectWorkingProject = new ToolBarButton("css=#selectProject,#selectProject_item", "Select Project...", tabId, SystemGear);
+ MenuEditProj = new ToolBarButton("css=#editProject,#editProject_item", "Edit Project...", tabId, SystemGear);
+ ManageCustomizations = new ToolBarButton("css=#manageCustomizations,#manageCustomizations_item", "Manage Customizations...", tabId, SystemGear);
+ InspectElementCtrlAltClick = new ToolBarButton("css=#inspectElement,#inspectElement_item", "Inspect Element (Ctrl+Alt+Click)", tabId, SystemGear);
+ GetLink = new ToolBarButton("css=#link,#link_item", "Get Link", tabId, SystemGear);
+ WebService = new ToolBarButton("css=#webServices,#webServices_item", "Web Service", tabId, SystemGear);
+ DACSchemaBrowser = new ToolBarButton("css=#DACBrowser,#DACBrowser_item", "DAC Schema Browser", tabId, SystemGear);
+ SwitchUIScreenMode = new ToolBarButton("css=#miSwitchUIScreenMode,#miSwitchUIScreenMode_item", "Switch to Classic UI", tabId, SystemGear);
+ Audithistory = new ToolBarButton("css=#audit,#audit_item", "Audit history...", tabId, SystemGear);
+ AccessRights = new ToolBarButton("css=#accessRights,#accessRights_item", "Access Rights...", tabId, SystemGear);
+ Profiler = new ToolBarButton("css=#profiler,#profiler_item", "Profiler", tabId, SystemGear);
+ ShareColumnConfiguration = new ToolBarButton("css=#sharingColumns,#sharingColumns_item", "Share Column Configuration", tabId, SystemGear);
+ Trace = new ToolBarButton("css=#trace,#trace_item", "Trace...", tabId, SystemGear);
+ About = new ToolBarButton("css=#about,#about_item", "About...", tabId, SystemGear);
+ }
+ }
+
+ public class c_workorders_fscolumnaorder : Container
+ {
+
+ public Selector OrderNbr { get; private set; }
+ public Label OrderNbrLabel { get; private set; }
+ public DropDown Status { get; private set; }
+ public Label StatusLabel { get; private set; }
+ public DateSelector DateCreated { get; private set; }
+ public Label DateCreatedLabel { get; private set; }
+ public DateSelector DateCompleted { get; private set; }
+ public Label DateCompletedLabel { get; private set; }
+ public DropDown Priority { get; private set; }
+ public Label PriorityLabel { get; private set; }
+ public Input Assignee_description { get; private set; }
+ public Label Assignee_descriptionLabel { get; private set; }
+ public Input NoteText { get; private set; }
+ public Label NoteTextLabel { get; private set; }
+
+ public c_workorders_fscolumnaorder(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ OrderNbr = new Selector("edWorkOrders-OrderNbr", "Order Nbr.", tabId, null);
+ OrderNbrLabel = new Label(OrderNbr);
+ Status = new DropDown("edWorkOrders-Status", "Status", tabId, null);
+ StatusLabel = new Label(Status);
+ DateCreated = new DateSelector("edWorkOrders-DateCreated", "Date Created", tabId, null);
+ DateCreatedLabel = new Label(DateCreated);
+ DateCompleted = new DateSelector("edWorkOrders-DateCompleted", "Date Completed", tabId, null);
+ DateCompletedLabel = new Label(DateCompleted);
+ Priority = new DropDown("edWorkOrders-Priority", "Priority", tabId, null);
+ PriorityLabel = new Label(Priority);
+ Assignee_description = new Input("edWorkOrders-Assignee_description", "Contact", tabId, null);
+ Assignee_descriptionLabel = new Label(Assignee_description);
+ NoteText = new Input("edWorkOrders-NoteText", "Note Text", tabId, null);
+ NoteTextLabel = new Label(NoteText);
+ }
+ }
+
+ public class c_workorders_fscolumnborder : Container
+ {
+
+ public Selector CustomerID { get; private set; }
+ public Label CustomerIDLabel { get; private set; }
+ public Selector ServiceID { get; private set; }
+ public Label ServiceIDLabel { get; private set; }
+ public Selector DeviceID { get; private set; }
+ public Label DeviceIDLabel { get; private set; }
+ public Selector Assignee { get; private set; }
+ public Label AssigneeLabel { get; private set; }
+ public Input Description { get; private set; }
+ public Label DescriptionLabel { get; private set; }
+
+ public c_workorders_fscolumnborder(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ CustomerID = new Selector("edWorkOrders-CustomerID", "Customer ID", tabId, null);
+ CustomerIDLabel = new Label(CustomerID);
+ ServiceID = new Selector("edWorkOrders-ServiceID", "Service", tabId, null);
+ ServiceIDLabel = new Label(ServiceID);
+ DeviceID = new Selector("edWorkOrders-DeviceID", "Device", tabId, null);
+ DeviceIDLabel = new Label(DeviceID);
+ Assignee = new Selector("edWorkOrders-Assignee", "Assignee", tabId, null);
+ AssigneeLabel = new Label(Assignee);
+ Description = new Input("edWorkOrders-Description", "Description", tabId, null);
+ DescriptionLabel = new Label(Description);
+ }
+ }
+
+ public class c_workorders_fscolumncorder : Container
+ {
+
+ public PXNumberEdit OrderTotal { get; private set; }
+ public Label OrderTotalLabel { get; private set; }
+ public Input InvoiceNbr { get; private set; }
+ public Label InvoiceNbrLabel { get; private set; }
+
+ public c_workorders_fscolumncorder(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ OrderTotal = new PXNumberEdit("edWorkOrders-OrderTotal", "Order Total", tabId, null);
+ OrderTotalLabel = new Label(OrderTotal);
+ InvoiceNbr = new Input("edWorkOrders-InvoiceNbr", "Invoice Nbr.", tabId, null);
+ InvoiceNbrLabel = new Label(InvoiceNbr);
+ }
+ }
+
+ public class c_repairitems_gridrepairitems : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Container.Extentions.Note NotePanel { get; private set; } = new Controls.Container.Extentions.Note("pnlNoteShow");
+ public Controls.Container.Extentions.SmartPanel_AttachFile FilesUploadDialog { get; private set; } = new Controls.Container.Extentions.SmartPanel_AttachFile("pnlFilesDialog");
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("grid-RepairItems_fb", "QuickSearch", "grid-RepairItems;tabbar_tab-RepairItems_tabbar", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_repairitems_gridrepairitems(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("grid-RepairItems", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("grid-RepairItems_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("grid-RepairItems_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("grid-RepairItems_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("grid-RepairItems_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("grid-RepairItems_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("grid-RepairItems_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("grid-RepairItems_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("grid-RepairItems_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("grid-RepairItems_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("grid-RepairItems_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("grid-RepairItems_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public FileColumnButton Files { get; private set; }
+ public NoteColumnButton Notes { get; private set; }
+ public DropDown RepairItemType { get; private set; }
+ public Selector InventoryID { get; private set; }
+ public Input InventoryID_description { get; private set; }
+ public PXNumberEdit BasePrice { get; private set; }
+ public Input OrderNbr { get; private set; }
+ public PXNumberEdit LineNbr { get; private set; }
+
+ public c_grid_row(c_repairitems_gridrepairitems grid) :
+ base(grid)
+ {
+ Files = new FileColumnButton("grid-RepairItems_Files_cell", "Files", grid.TabId, "Files");
+ Notes = new NoteColumnButton("grid-RepairItems_Notes_cell", "Notes", grid.TabId, "Notes");
+ RepairItemType = new DropDown("grid-RepairItems_RepairItemType_editor", "Repair Item Type", grid.TabId, "RepairItemType");
+ InventoryID = new Selector("grid-RepairItems_InventoryID_editor", "Inventory ID", grid.TabId, "InventoryID");
+ InventoryID_description = new Input("grid-RepairItems_InventoryID_description_editor", "Description", grid.TabId, "InventoryID_description");
+ BasePrice = new PXNumberEdit("grid-RepairItems_BasePrice_editor", "Price", grid.TabId, "BasePrice");
+ OrderNbr = new Input("grid-RepairItems_OrderNbr_editor", "OrderNbr", grid.TabId, "OrderNbr");
+ LineNbr = new PXNumberEdit("grid-RepairItems_LineNbr_editor", "Line Nbr.", grid.TabId, "LineNbr");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public GridColumnHeader Files { get; private set; }
+ public GridColumnHeader Notes { get; private set; }
+ public DropDownColumnFilter RepairItemType { get; private set; }
+ public SelectorColumnFilter InventoryID { get; private set; }
+ public InputColumnFilter InventoryID_description { get; private set; }
+ public PXNumberEditColumnFilter BasePrice { get; private set; }
+ public InputColumnFilter OrderNbr { get; private set; }
+ public PXNumberEditColumnFilter LineNbr { get; private set; }
+
+ public c_grid_header(c_repairitems_gridrepairitems grid) :
+ base(grid)
+ {
+ Files = new GridColumnHeader(grid.Row.Files);
+ Notes = new GridColumnHeader(grid.Row.Notes);
+ RepairItemType = new DropDownColumnFilter(grid.Row.RepairItemType);
+ InventoryID = new SelectorColumnFilter(grid.Row.InventoryID);
+ InventoryID_description = new InputColumnFilter(grid.Row.InventoryID_description);
+ BasePrice = new PXNumberEditColumnFilter(grid.Row.BasePrice);
+ OrderNbr = new InputColumnFilter(grid.Row.OrderNbr);
+ LineNbr = new PXNumberEditColumnFilter(grid.Row.LineNbr);
+ }
+ }
+ }
+
+ public class c_labor_gridlabor : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Container.Extentions.Note NotePanel { get; private set; } = new Controls.Container.Extentions.Note("pnlNoteShow");
+ public Controls.Container.Extentions.SmartPanel_AttachFile FilesUploadDialog { get; private set; } = new Controls.Container.Extentions.SmartPanel_AttachFile("pnlFilesDialog");
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("grid-Labor_fb", "QuickSearch", "grid-Labor;tabbar_tab-Labor_tabbar", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_labor_gridlabor(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("grid-Labor", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("grid-Labor_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("grid-Labor_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("grid-Labor_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("grid-Labor_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("grid-Labor_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("grid-Labor_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("grid-Labor_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("grid-Labor_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("grid-Labor_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("grid-Labor_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("grid-Labor_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public FileColumnButton Files { get; private set; }
+ public NoteColumnButton Notes { get; private set; }
+ public Selector InventoryID { get; private set; }
+ public Input InventoryID_description { get; private set; }
+ public PXNumberEdit DefaultPrice { get; private set; }
+ public PXNumberEdit Quantity { get; private set; }
+ public PXNumberEdit ExtPrice { get; private set; }
+ public Input OrderNbr { get; private set; }
+
+ public c_grid_row(c_labor_gridlabor grid) :
+ base(grid)
+ {
+ Files = new FileColumnButton("grid-Labor_Files_cell", "Files", grid.TabId, "Files");
+ Notes = new NoteColumnButton("grid-Labor_Notes_cell", "Notes", grid.TabId, "Notes");
+ InventoryID = new Selector("grid-Labor_InventoryID_editor", "Inventory ID", grid.TabId, "InventoryID");
+ InventoryID_description = new Input("grid-Labor_InventoryID_description_editor", "Description", grid.TabId, "InventoryID_description");
+ DefaultPrice = new PXNumberEdit("grid-Labor_DefaultPrice_editor", "Default Price", grid.TabId, "DefaultPrice");
+ Quantity = new PXNumberEdit("grid-Labor_Quantity_editor", "Quantity", grid.TabId, "Quantity");
+ ExtPrice = new PXNumberEdit("grid-Labor_ExtPrice_editor", "Ext. Price", grid.TabId, "ExtPrice");
+ OrderNbr = new Input("grid-Labor_OrderNbr_editor", "OrderNbr", grid.TabId, "OrderNbr");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public GridColumnHeader Files { get; private set; }
+ public GridColumnHeader Notes { get; private set; }
+ public SelectorColumnFilter InventoryID { get; private set; }
+ public InputColumnFilter InventoryID_description { get; private set; }
+ public PXNumberEditColumnFilter DefaultPrice { get; private set; }
+ public PXNumberEditColumnFilter Quantity { get; private set; }
+ public PXNumberEditColumnFilter ExtPrice { get; private set; }
+ public InputColumnFilter OrderNbr { get; private set; }
+
+ public c_grid_header(c_labor_gridlabor grid) :
+ base(grid)
+ {
+ Files = new GridColumnHeader(grid.Row.Files);
+ Notes = new GridColumnHeader(grid.Row.Notes);
+ InventoryID = new SelectorColumnFilter(grid.Row.InventoryID);
+ InventoryID_description = new InputColumnFilter(grid.Row.InventoryID_description);
+ DefaultPrice = new PXNumberEditColumnFilter(grid.Row.DefaultPrice);
+ Quantity = new PXNumberEditColumnFilter(grid.Row.Quantity);
+ ExtPrice = new PXNumberEditColumnFilter(grid.Row.ExtPrice);
+ OrderNbr = new InputColumnFilter(grid.Row.OrderNbr);
+ }
+ }
+ }
+
+ public class c_filterpreview_formpreview : Container
+ {
+
+ public PxButtonCollection Buttons { get; }
+
+ public c_filterpreview_formpreview(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Ok()
+ {
+ Buttons.Ok.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Ok { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Ok = new Button("btnConfirmTransition", "OK", tabId);
+ Cancel = new Button("btnCancelTransition", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_filterworkingproject_formselectproject : Container
+ {
+
+ public Selector Name { get; private set; }
+ public Label NameLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_filterworkingproject_formselectproject(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Name = new Selector("edFilterWorkingProject-Name", "Project Name", tabId, null);
+ NameLabel = new Label(Name);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Ok()
+ {
+ Buttons.Ok.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public virtual void New()
+ {
+ Buttons.New.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Ok { get; private set; }
+ public Button Cancel { get; private set; }
+ public Button New { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Ok = new Button("SelectProjectOk", "Ok", tabId);
+ Cancel = new Button("SelectProjectCancel", "Cancel", tabId);
+ New = new Button("BtnNewProject", "New...", tabId);
+ }
+ }
+ }
+
+ public class c_filterworkingproject_formnewproject : Container
+ {
+
+ public Input NewProject { get; private set; }
+ public Label NewProjectLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_filterworkingproject_formnewproject(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ NewProject = new Input("edFilterWorkingProject-NewProject", "New Project", tabId, null);
+ NewProjectLabel = new Label(NewProject);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void ActionCreateNewProject()
+ {
+ Buttons.ActionCreateNewProject.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button ActionCreateNewProject { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ ActionCreateNewProject = new Button("btnActionCreateNewProject", "Create New Project", tabId);
+ Cancel = new Button("btnCancel", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_elementproperties : Container
+ {
+
+ public Input AspxControl { get; private set; }
+ public Label AspxControlLabel { get; private set; }
+ public Input CacheType { get; private set; }
+ public Label CacheTypeLabel { get; private set; }
+ public Input FieldName { get; private set; }
+ public Label FieldNameLabel { get; private set; }
+ public Input ViewName { get; private set; }
+ public Label ViewNameLabel { get; private set; }
+ public Input GraphName { get; private set; }
+ public Label GraphNameLabel { get; private set; }
+ public Input ActionName { get; private set; }
+ public Label ActionNameLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_elementproperties(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ AspxControl = new Input("edViewElemInfo-AspxControl", "Control Type", tabId, null);
+ AspxControlLabel = new Label(AspxControl);
+ CacheType = new Input("edViewElemInfo-CacheType", "Data Class", tabId, null);
+ CacheTypeLabel = new Label(CacheType);
+ FieldName = new Input("edViewElemInfo-FieldName", "Data Field", tabId, null);
+ FieldNameLabel = new Label(FieldName);
+ ViewName = new Input("edViewElemInfo-ViewName", "View Name", tabId, null);
+ ViewNameLabel = new Label(ViewName);
+ GraphName = new Input("edViewElemInfo-GraphName", "Business Logic", tabId, null);
+ GraphNameLabel = new Label(GraphName);
+ ActionName = new Input("edViewElemInfo-ActionName", "Action Name", tabId, null);
+ ActionNameLabel = new Label(ActionName);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void MenuLayoutEditor()
+ {
+ Buttons.MenuLayoutEditor.Click();
+ }
+
+ public virtual void Actions()
+ {
+ Buttons.Actions.Click();
+ }
+
+ public virtual void MenuGraphEditor()
+ {
+ Buttons.MenuGraphEditor.Click();
+ }
+
+ public virtual void MenuDacEditor()
+ {
+ Buttons.MenuDacEditor.Click();
+ }
+
+ public virtual void MenuGraphSrc()
+ {
+ Buttons.MenuGraphSrc.Click();
+ }
+
+ public virtual void MenuDacSrc()
+ {
+ Buttons.MenuDacSrc.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button MenuLayoutEditor { get; private set; }
+ public Button Actions { get; private set; }
+ public Button MenuGraphEditor { get; private set; }
+ public Button MenuDacEditor { get; private set; }
+ public Button MenuGraphSrc { get; private set; }
+ public Button MenuDacSrc { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ MenuLayoutEditor = new Button("btnCustomize", "Customize", tabId);
+ Actions = new Button("actionsMenu", "Actions", tabId);
+ MenuGraphEditor = new Button("custBL", "Customize Business Logic", tabId);
+ MenuDacEditor = new Button("custDF", "Customize Data Fields", tabId);
+ MenuGraphSrc = new Button("viewBLSource", "View Business Logic Source", tabId);
+ MenuDacSrc = new Button("viewDACSource", "View Data Class Source", tabId);
+ Cancel = new Button("btnCancel", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_workflowview_workflowfictivediagram : Container
+ {
+
+ public Input LayoutClient { get; private set; }
+ public Label LayoutClientLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_workflowview_workflowfictivediagram(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ LayoutClient = new Input("edWorkflow-LayoutClient", "Layout", tabId, null);
+ LayoutClientLabel = new Label(LayoutClient);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Customize()
+ {
+ Buttons.Customize.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Customize { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Customize = new Button("btnRedirectToCustomization", "Customize Workflow", tabId);
+ }
+ }
+ }
+
+ public class c_pnllinkshow : Container
+ {
+
+ public Input Internal { get; private set; }
+ public Label InternalLabel { get; private set; }
+ public Input External { get; private set; }
+ public Label ExternalLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_pnllinkshow(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Internal = new Input("internalLink", "Internal Link", tabId, null);
+ InternalLabel = new Label(Internal);
+ External = new Input("externalLink", "External Link", tabId, null);
+ ExternalLabel = new Label(External);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Send()
+ {
+ Buttons.Send.Click();
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Send { get; private set; }
+ public Button Cancel { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Send = new Button("link_send_btn", "Send", tabId);
+ Cancel = new Button("link_cancel_btn", "Cancel", tabId);
+ }
+ }
+ }
+
+ public class c_profilerinfoview_formprofiler : Container
+ {
+
+ public Input StartText { get; private set; }
+ public Label StartTextLabel { get; private set; }
+ public Input Started { get; private set; }
+ public Label StartedLabel { get; private set; }
+ public Input RequestsLogged { get; private set; }
+ public Label RequestsLoggedLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_profilerinfoview_formprofiler(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ StartText = new Input("profilerStartText", "Start Text", tabId, null);
+ StartTextLabel = new Label(StartText);
+ Started = new Input("profilerStarted", "Profiler started", tabId, null);
+ StartedLabel = new Label(Started);
+ RequestsLogged = new Input("profilerRequestsLogged", "Profiler Requests Logged", tabId, null);
+ RequestsLoggedLabel = new Label(RequestsLogged);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void BtnStartProfiler()
+ {
+ Buttons.BtnStartProfiler.Click();
+ }
+
+ public virtual void BtnStopProfiler()
+ {
+ Buttons.BtnStopProfiler.Click();
+ }
+
+ public virtual void BtnMainProfiler()
+ {
+ Buttons.BtnMainProfiler.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button BtnStartProfiler { get; private set; }
+ public Button BtnStopProfiler { get; private set; }
+ public Button BtnMainProfiler { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ BtnStartProfiler = new Button("profiler_start_btn", "Start", tabId);
+ BtnStopProfiler = new Button("profiler_stop_btn", "Stop", tabId);
+ BtnMainProfiler = new Button("profiler_open_btn", "Open request", tabId);
+ }
+ }
+ }
+
+ public class c_parameters_gridwizard : Container
+ {
+
+ public CheckBox IsDefault { get; private set; }
+ public Label IsDefaultLabel { get; private set; }
+ public CheckBox Override { get; private set; }
+ public Label OverrideLabel { get; private set; }
+ public Input RoleName { get; private set; }
+ public Label RoleNameLabel { get; private set; }
+ public PxButtonCollection Buttons { get; }
+
+ public c_parameters_gridwizard(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ IsDefault = new CheckBox("edParameters-IsDefault", "Set as the Default", tabId, null);
+ IsDefaultLabel = new Label(IsDefault);
+ Override = new CheckBox("edParameters-Override", "Override Users\' Personal Configurations", tabId, null);
+ OverrideLabel = new Label(Override);
+ RoleName = new Input("edParameters-RoleName", "User Role", tabId, null);
+ RoleNameLabel = new Label(RoleName);
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Cancel()
+ {
+ Buttons.Cancel.Click();
+ }
+
+ public virtual void Prev()
+ {
+ Buttons.Prev.Click();
+ }
+
+ public virtual void Next()
+ {
+ Buttons.Next.Click();
+ }
+
+ public virtual void Finish()
+ {
+ Buttons.Finish.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Cancel { get; private set; }
+ public Button Prev { get; private set; }
+ public Button Next { get; private set; }
+ public Button Finish { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Cancel = new Button("share_columns_wz_cancel_btn", "Cancel", tabId);
+ Prev = new Button("share_columns_wz_prev_btn", "Prev", tabId);
+ Next = new Button("share_columns_wz_next_btn", "Next", tabId);
+ Finish = new Button("share_columns_wz_save_btn", "Finish", tabId);
+ }
+ }
+ }
+
+ public class c_userlist_usergrid : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("UserList_grid_fb", "QuickSearch", "UserList_grid", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_userlist_usergrid(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("UserList_grid", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("UserList_grid_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("UserList_grid_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("UserList_grid_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("UserList_grid_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("UserList_grid_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("UserList_grid_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("UserList_grid_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("UserList_grid_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("UserList_grid_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("UserList_grid_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("UserList_grid_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public CheckBox Included { get; private set; }
+ public Input Username { get; private set; }
+ public Input DisplayName { get; private set; }
+ public Input Email { get; private set; }
+ public Input Guest { get; private set; }
+ public Input State { get; private set; }
+
+ public c_grid_row(c_userlist_usergrid grid) :
+ base(grid)
+ {
+ Included = new CheckBox("colIncluded", "Included", grid.TabId, "Included");
+ Username = new Input("colUsername", "Login", grid.TabId, "Username");
+ DisplayName = new Input("colDisplayName", "Display Name", grid.TabId, "DisplayName");
+ Email = new Input("colEmail", "Email", grid.TabId, "Email");
+ Guest = new Input("colGuest", "Guest Account", grid.TabId, "Guest");
+ State = new Input("colState", "Status", grid.TabId, "State");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public CheckBoxColumnFilter Included { get; private set; }
+ public InputColumnFilter Username { get; private set; }
+ public InputColumnFilter DisplayName { get; private set; }
+ public InputColumnFilter Email { get; private set; }
+ public InputColumnFilter Guest { get; private set; }
+ public InputColumnFilter State { get; private set; }
+
+ public c_grid_header(c_userlist_usergrid grid) :
+ base(grid)
+ {
+ Included = new CheckBoxColumnFilter(grid.Row.Included);
+ Username = new InputColumnFilter(grid.Row.Username);
+ DisplayName = new InputColumnFilter(grid.Row.DisplayName);
+ Email = new InputColumnFilter(grid.Row.Email);
+ Guest = new InputColumnFilter(grid.Row.Guest);
+ State = new InputColumnFilter(grid.Row.State);
+ }
+ }
+ }
+
+ public class c_gridlist_gridgrid : Grid
+ {
+
+ public PxToolBar ToolBar { get; }
+ public Controls.Uploader.c_screen_upload UploadForm { get; private set; } = new Controls.Uploader.c_screen_upload("import-dialog", "UploadForm");
+ public Controls.Editors.QuickSearch.QuickSearch QuickSearch { get; private set; } = new Controls.Editors.QuickSearch.QuickSearch("GridList_grid_fb", "QuickSearch", "GridList_grid", null);
+ public AdvancedFilter FilterForm { get; private set; }
+
+ public c_gridlist_gridgrid(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ ToolBar = new PxToolBar(tabId);
+ FilterForm = new AdvancedFilter("GridList_grid", tabId);
+ }
+
+ public virtual void LongRun()
+ {
+ ToolBar.LongRun.Click();
+ }
+
+ public virtual void LongRun_cancel()
+ {
+ ToolBar.LongRun_cancel.Click();
+ }
+
+ public virtual void Refresh()
+ {
+ ToolBar.Refresh.Click();
+ }
+
+ public virtual void New()
+ {
+ ToolBar.New.Click();
+ }
+
+ public virtual void Delete()
+ {
+ ToolBar.Delete.Click();
+ }
+
+ public virtual void Filter()
+ {
+ ToolBar.Filter.Click();
+ }
+
+ public virtual void Adjust()
+ {
+ ToolBar.Adjust.Click();
+ }
+
+ public virtual void Export()
+ {
+ ToolBar.Export.Click();
+ }
+
+ public virtual void Upload()
+ {
+ ToolBar.Upload.Click();
+ }
+
+ public virtual void PageFirst()
+ {
+ ToolBar.PageFirst.Click();
+ }
+
+ public virtual void PagePrev()
+ {
+ ToolBar.PagePrev.Click();
+ }
+
+ public virtual void PageNext()
+ {
+ ToolBar.PageNext.Click();
+ }
+
+ public virtual void PageLast()
+ {
+ ToolBar.PageLast.Click();
+ }
+
+ public class PxToolBar
+ {
+
+ public ToolBarButton LongRun { get; private set; }
+ public ToolBarButton LongRun_cancel { get; private set; }
+ public ToolBarButton Refresh { get; private set; }
+ public ToolBarButton New { get; private set; }
+ public ToolBarButton Delete { get; private set; }
+ public ToolBarButton Filter { get; private set; }
+ public ToolBarButton Adjust { get; private set; }
+ public ToolBarButton Export { get; private set; }
+ public ToolBarButton Upload { get; private set; }
+ public ToolBarButton PageFirst { get; private set; }
+ public ToolBarButton PagePrev { get; private set; }
+ public ToolBarButton PageNext { get; private set; }
+ public ToolBarButton PageLast { get; private set; }
+
+ public PxToolBar(string tabId)
+ {
+ LongRun = new ToolBarButton("css=qp-long-run", "LongRun panel", tabId, null);
+ LongRun_cancel = new ToolBarButton("css=qp-long-run .qp-lr-cancel", "LongRun Cancel", tabId, null);
+ Refresh = new ToolBarButton("GridList_grid_topBarrefresh", "Refresh", tabId, null);
+ New = new ToolBarButton("GridList_grid_topBarinsert", "Add Row", tabId, null);
+ Delete = new ToolBarButton("GridList_grid_topBardelete", "Delete Row", tabId, null);
+ Delete.ConfirmAction = Controls.Alert.Alert.AlertToException;
+ Filter = new ToolBarButton("GridList_grid_topBarfilter", "Filter Settings", tabId, null);
+ Adjust = new ToolBarButton("GridList_grid_topBaradjust", "Fit to Screen", tabId, null);
+ Export = new ToolBarButton("GridList_grid_topBarexportToExcel", "Export to Excel", tabId, null);
+ Upload = new ToolBarButton("GridList_grid_topBarimport", "Load Records from File", tabId, null);
+ PageFirst = new ToolBarButton("GridList_grid_pagerLfirst", "firstPage", tabId, null);
+ PagePrev = new ToolBarButton("GridList_grid_pagerLprev", "prevPage", tabId, null);
+ PageNext = new ToolBarButton("GridList_grid_pagerRnext", "nextPage", tabId, null);
+ PageLast = new ToolBarButton("GridList_grid_pagerRlast", "lastPage", tabId, null);
+ }
+ }
+
+ public class c_grid_row : GridRow
+ {
+
+ public CheckBox Selected { get; private set; }
+ public Input Id { get; private set; }
+ public Input View { get; private set; }
+
+ public c_grid_row(c_gridlist_gridgrid grid) :
+ base(grid)
+ {
+ Selected = new CheckBox("colSelected", "Included", grid.TabId, "Selected");
+ Id = new Input("colId", "Grid ID", grid.TabId, "Id");
+ View = new Input("colView", "Table ID", grid.TabId, "View");
+ }
+ }
+
+ public class c_grid_header : GridHeader
+ {
+
+ public CheckBoxColumnFilter Selected { get; private set; }
+ public InputColumnFilter Id { get; private set; }
+ public InputColumnFilter View { get; private set; }
+
+ public c_grid_header(c_gridlist_gridgrid grid) :
+ base(grid)
+ {
+ Selected = new CheckBoxColumnFilter(grid.Row.Selected);
+ Id = new InputColumnFilter(grid.Row.Id);
+ View = new InputColumnFilter(grid.Row.View);
+ }
+ }
+ }
+
+ public class c_aboutacumatica : Container
+ {
+
+ public PxButtonCollection Buttons { get; }
+
+ public c_aboutacumatica(string locator, string tabId) :
+ base(locator, locator, tabId)
+ {
+ Buttons = new PxButtonCollection(tabId);
+ }
+
+ public virtual void Ok()
+ {
+ Buttons.Ok.Click();
+ }
+
+ public class PxButtonCollection
+ {
+
+ public Button Ok { get; private set; }
+
+ public PxButtonCollection(string tabId)
+ {
+ Ok = new Button("null_btn", "OK", tabId);
+ }
+ }
+ }
+ }
+}
diff --git a/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json
new file mode 100644
index 00000000..11fb10ad
--- /dev/null
+++ b/ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json
@@ -0,0 +1 @@
+{"containers":[{"graphView":"WorkOrders","id":"fsColumnA-Order","name":"WorkOrders_fsColumnA-Order","controlType":"QP-FIELDSET","fields":[{"id":"edWorkOrders-OrderNbr","fieldName":"OrderNbr","viewName":"WorkOrders","displayName":"Order Nbr.","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Status","fieldName":"Status","viewName":"WorkOrders","displayName":"Status","controlType":"qp-drop-down","dataType":"String","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":true},{"id":"edWorkOrders-DateCreated","fieldName":"DateCreated","viewName":"WorkOrders","displayName":"Date Created","controlType":"qp-datetime-edit","dataType":"DateTime","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-DateCompleted","fieldName":"DateCompleted","viewName":"WorkOrders","displayName":"Date Completed","controlType":"qp-datetime-edit","dataType":"DateTime","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Priority","fieldName":"Priority","viewName":"WorkOrders","displayName":"Priority","controlType":"qp-drop-down","dataType":"String","containerPath":["fsColumnA-Order"],"supportLocalizationPanel":false,"hasOptions":true},{"id":"edWorkOrders-Assignee_description","fieldName":"Assignee_description","viewName":"WorkOrders","displayName":"Contact","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-NoteText","fieldName":"NoteText","viewName":"WorkOrders","displayName":"Note Text","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false}],"actions":[],"isCollection":false},{"graphView":"WorkOrders","id":"fsColumnB-Order","name":"WorkOrders_fsColumnB-Order","controlType":"QP-FIELDSET","fields":[{"id":"edWorkOrders-CustomerID","fieldName":"CustomerID","viewName":"WorkOrders","displayName":"Customer ID","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-ServiceID","fieldName":"ServiceID","viewName":"WorkOrders","displayName":"Service","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-DeviceID","fieldName":"DeviceID","viewName":"WorkOrders","displayName":"Device","controlType":"qp-selector","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Assignee","fieldName":"Assignee","viewName":"WorkOrders","displayName":"Assignee","controlType":"qp-selector","dataType":"Int32","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-Description","fieldName":"Description","viewName":"WorkOrders","displayName":"Description","controlType":"qp-text-editor","dataType":"String","containerPath":["fsColumnB-Order"],"supportLocalizationPanel":false,"hasOptions":false}],"actions":[],"isCollection":false},{"graphView":"WorkOrders","id":"fsColumnC-Order","name":"WorkOrders_fsColumnC-Order","controlType":"QP-FIELDSET","fields":[{"id":"edWorkOrders-OrderTotal","fieldName":"OrderTotal","viewName":"WorkOrders","displayName":"Order Total","controlType":"qp-number-editor","dataType":"Decimal","containerPath":["fsColumnC-Order"],"supportLocalizationPanel":false,"hasOptions":false},{"id":"edWorkOrders-InvoiceNbr","fieldName":"InvoiceNbr","viewName":"WorkOrders","displayName":"Invoice Nbr.","controlType":"qp-text-editor","dataType":"String","containerPath":["fsColumnC-Order"],"supportLocalizationPanel":false,"hasOptions":false}],"actions":[],"isCollection":false},{"graphView":"RepairItems","id":"grid-RepairItems","name":"RepairItems_grid-RepairItems","controlType":"QP-GRID","mergeToolbarWithMainToolbar":false,"containerPath":["tabbar","tabbar_tab-RepairItems_tabbar"],"fields":[{"id":"grid-RepairItems_Files_cell","fieldName":"Files","viewName":"RepairItems","controlType":"FileColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_Notes_cell","fieldName":"Notes","viewName":"RepairItems","controlType":"NoteColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_RepairItemType_editor","fieldName":"RepairItemType","viewName":"RepairItems","displayName":"Repair Item Type","controlType":"qp-drop-down","dataType":"String","supportLocalizationPanel":false,"hasOptions":true},{"id":"grid-RepairItems_InventoryID_editor","fieldName":"InventoryID","viewName":"RepairItems","displayName":"Inventory ID","controlType":"qp-selector","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_InventoryID_description_editor","fieldName":"InventoryID_description","viewName":"RepairItems","displayName":"Description","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_BasePrice_editor","fieldName":"BasePrice","viewName":"RepairItems","displayName":"Price","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_OrderNbr_editor","fieldName":"OrderNbr","viewName":"RepairItems","displayName":"OrderNbr","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-RepairItems_LineNbr_editor","fieldName":"LineNbr","viewName":"RepairItems","displayName":"Line Nbr.","controlType":"qp-number-editor","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false}],"actions":[{"id":"grid-RepairItems_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-RepairItems_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":true},{"graphView":"Labor","id":"grid-Labor","name":"Labor_grid-Labor","controlType":"QP-GRID","mergeToolbarWithMainToolbar":false,"containerPath":["tabbar","tabbar_tab-Labor_tabbar"],"fields":[{"id":"grid-Labor_Files_cell","fieldName":"Files","viewName":"Labor","controlType":"FileColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_Notes_cell","fieldName":"Notes","viewName":"Labor","controlType":"NoteColumnButton","dataType":"Int32","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_InventoryID_editor","fieldName":"InventoryID","viewName":"Labor","displayName":"Inventory ID","controlType":"qp-selector","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_InventoryID_description_editor","fieldName":"InventoryID_description","viewName":"Labor","displayName":"Description","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_DefaultPrice_editor","fieldName":"DefaultPrice","viewName":"Labor","displayName":"Default Price","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_Quantity_editor","fieldName":"Quantity","viewName":"Labor","displayName":"Quantity","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_ExtPrice_editor","fieldName":"ExtPrice","viewName":"Labor","displayName":"Ext. Price","controlType":"qp-number-editor","dataType":"Decimal","supportLocalizationPanel":false,"hasOptions":false},{"id":"grid-Labor_OrderNbr_editor","fieldName":"OrderNbr","viewName":"Labor","displayName":"OrderNbr","controlType":"qp-text-editor","dataType":"String","supportLocalizationPanel":false,"hasOptions":false}],"actions":[{"id":"grid-Labor_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"grid-Labor_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":true},{"id":"FilterPreview","name":"FilterPreview_FormPreview","controlType":"QP-PANEL","fields":[],"actions":[{"id":"btnConfirmTransition","actionName":"","displayName":"OK","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"btnCancelTransition","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"FilterWorkingProject","id":"FilterWorkingProject","name":"FilterWorkingProject_FormSelectProject","controlType":"QP-PANEL","fields":[{"id":"edFilterWorkingProject-Name","fieldName":"Name","displayName":"Project Name","controlType":"qp-selector","supportLocalizationPanel":false}],"actions":[{"id":"SelectProjectOk","actionName":"Ok","displayName":"Ok","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"SelectProjectCancel","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"BtnNewProject","actionName":"","displayName":"New...","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"FilterWorkingProject","id":"DlgNewProject","name":"FilterWorkingProject_FormNewProject","controlType":"QP-PANEL","fields":[{"id":"edFilterWorkingProject-NewProject","fieldName":"NewProject","displayName":"New Project","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"btnActionCreateNewProject","actionName":"ActionCreateNewProject","displayName":"Create New Project","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"btnCancel","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"ViewElemInfo","id":"ViewElemInfo","name":"ElementProperties","controlType":"QP-PANEL","fields":[{"id":"edViewElemInfo-AspxControl","fieldName":"AspxControl","displayName":"Control Type","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-CacheType","fieldName":"CacheType","displayName":"Data Class","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-FieldName","fieldName":"FieldName","displayName":"Data Field","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-ViewName","fieldName":"ViewName","displayName":"View Name","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-GraphName","fieldName":"GraphName","displayName":"Business Logic","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"edViewElemInfo-ActionName","fieldName":"ActionName","displayName":"Action Name","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"btnCustomize","actionName":"MenuLayoutEditor","displayName":"Customize","controlType":"QP-BUTTON","dialogResult":"OK","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"actionsMenu","actionName":"","displayName":"Actions","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"custBL","actionName":"MenuGraphEditor","displayName":"Customize Business Logic","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"custDF","actionName":"MenuDacEditor","displayName":"Customize Data Fields","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"viewBLSource","actionName":"MenuGraphSrc","displayName":"View Business Logic Source","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"viewDACSource","actionName":"MenuDacSrc","displayName":"View Data Class Source","controlType":"QP-BUTTON","mergeWithScreenActions":false,"parentActionName":"actionsMenu","isSystemControlAction":false,"nonScreenAction":false},{"id":"btnCancel","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"Workflow","id":"WorkflowView","name":"WorkflowView_WorkflowFictiveDiagram","controlType":"QP-PANEL","fields":[{"id":"edWorkflow-LayoutClient","fieldName":"LayoutClient","displayName":"Layout","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"btnRedirectToCustomization","actionName":"Customize","displayName":"Customize Workflow","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"id":"pnlLinkShow","controlType":"QP-PANEL","fields":[{"id":"internalLink","fieldName":"internal","displayName":"Internal Link","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"externalLink","fieldName":"external","displayName":"External Link","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"link_send_btn","actionName":"","displayName":"Send","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"link_cancel_btn","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","dialogResult":"Cancel","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"id":"pnlProfiler","name":"ProfilerInfoView_formProfiler","controlType":"QP-PANEL","fields":[{"id":"profilerStartText","fieldName":"startText","displayName":"Start Text","controlType":"qp-text-editor","wgName":"StartText","supportLocalizationPanel":false},{"id":"profilerStarted","fieldName":"started","displayName":"Profiler started","controlType":"qp-text-editor","wgName":"Started","supportLocalizationPanel":false},{"id":"profilerRequestsLogged","fieldName":"requestsLogged","displayName":"Profiler Requests Logged","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"profiler_start_btn","actionName":"","displayName":"Start","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"wgName":"BtnStartProfiler","nonScreenAction":false},{"id":"profiler_stop_btn","actionName":"","controlType":"QP-BUTTON","dialogResult":"Stop","mergeWithScreenActions":false,"isSystemControlAction":false,"wgName":"BtnStopProfiler","nonScreenAction":false},{"id":"profiler_open_btn","actionName":"","controlType":"QP-BUTTON","dialogResult":"Open request","mergeWithScreenActions":false,"isSystemControlAction":false,"wgName":"BtnMainProfiler","nonScreenAction":false}],"isCollection":false},{"graphView":"Parameters","id":"shareColumnsDlg","name":"Parameters_gridWizard","controlType":"QP-PANEL","fields":[{"id":"edParameters-IsDefault","fieldName":"IsDefault","displayName":"Set as the Default","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"edParameters-Override","fieldName":"Override","displayName":"Override Users' Personal Configurations","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"edParameters-RoleName","fieldName":"RoleName","displayName":"User Role","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"share_columns_wz_cancel_btn","actionName":"","displayName":"Cancel","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"share_columns_wz_prev_btn","actionName":"","displayName":"Prev","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"share_columns_wz_next_btn","actionName":"","displayName":"Next","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false},{"id":"share_columns_wz_save_btn","actionName":"","displayName":"Finish","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false},{"graphView":"UserList","id":"UserList_grid","name":"UserList_userGrid","controlType":"QP-GRID","fields":[{"id":"colIncluded","fieldName":"Included","displayName":"Included","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"colUsername","fieldName":"Username","displayName":"Login","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colDisplayName","fieldName":"DisplayName","displayName":"Display Name","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colEmail","fieldName":"Email","displayName":"Email","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colGuest","fieldName":"Guest","displayName":"Guest Account","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colState","fieldName":"State","displayName":"Status","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"UserList_grid_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"UserList_grid_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":false},{"graphView":"GridList","id":"GridList_grid","name":"GridList_gridGrid","controlType":"QP-GRID","fields":[{"id":"colSelected","fieldName":"Selected","displayName":"Included","controlType":"qp-check-box","supportLocalizationPanel":false},{"id":"colId","fieldName":"Id","displayName":"Grid ID","controlType":"qp-text-editor","supportLocalizationPanel":false},{"id":"colView","fieldName":"View","displayName":"Table ID","controlType":"qp-text-editor","supportLocalizationPanel":false}],"actions":[{"id":"GridList_grid_topBarrefresh","actionName":"refresh","displayName":"Refresh","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarinsert","actionName":"new","displayName":"Add Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBardelete","actionName":"delete","displayName":"Delete Row","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarfilter","actionName":"filter","displayName":"Filter Settings","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBaradjust","actionName":"adjust","displayName":"Fit to Screen","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarexportToExcel","actionName":"exportToExcel","displayName":"Export to Excel","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_topBarimport","actionName":"Upload","displayName":"Load Records from File","mergeWithScreenActions":true,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerLfirst","actionName":"PageFirst","displayName":"firstPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerLprev","actionName":"PagePrev","displayName":"prevPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerRnext","actionName":"PageNext","displayName":"nextPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false},{"id":"GridList_grid_pagerRlast","actionName":"PageLast","displayName":"lastPage","mergeWithScreenActions":false,"isSystemControlAction":true,"nonScreenAction":false}],"isCollection":false},{"id":"pnlAbout","name":"AboutAcumatica","controlType":"QP-PANEL","fields":[],"actions":[{"id":"null_btn","actionName":"","displayName":"OK","controlType":"QP-BUTTON","mergeWithScreenActions":false,"isSystemControlAction":false,"nonScreenAction":false}],"isCollection":false}],"fields":[],"actions":[{"id":"screenConfiguration","actionName":"ActionConfigureScreen","displayName":"UI Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"selectProject","actionName":"ActionSelectWorkingProject","displayName":"Select Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"editProject","actionName":"menuEditProj","displayName":"Edit Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"manageCustomizations","displayName":"Manage Customizations...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"inspectElement","actionName":"","displayName":"Inspect Element (Ctrl+Alt+Click)","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"link","displayName":"Get Link","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"webServices","displayName":"Web Service","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"DACBrowser","displayName":"DAC Schema Browser","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"miSwitchUIScreenMode","actionName":"SwitchUIScreenMode","displayName":"Switch to Classic UI","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"audit","displayName":"Audit history...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"accessRights","displayName":"Access Rights...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"profiler","displayName":"Profiler","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"sharingColumns","displayName":"Share Column Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"trace","displayName":"Trace...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"about","displayName":"About...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true}],"allActions":[{"id":"MainToolbarts_CancelCloseToList","actionName":"CancelCloseToList","displayName":"Close","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_SaveCloseToList","actionName":"SaveCloseToList","displayName":"Save & Close","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Save","actionName":"Save","displayName":"Save","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Cancel","actionName":"Cancel","displayName":"Cancel","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Insert","actionName":"Insert","displayName":"Insert","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Delete","actionName":"Delete","displayName":"Delete","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Archive","actionName":"Archive","displayName":"Archive","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":false},{"id":"MainToolbarts_Extract","actionName":"Extract","displayName":"Extract","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":false},{"id":"MainToolbarts_CopyPaste","actionName":"CopyPaste","displayName":"","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_First","actionName":"First","displayName":"First","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Previous","actionName":"Previous","displayName":"Prev","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Next","actionName":"Next","displayName":"Next","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"MainToolbarts_Last","actionName":"Last","displayName":"Last","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false,"visible":true},{"id":"SystemMenu_NoteShow","actionName":"Note","displayName":"Note","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false},{"id":"SystemMenu_FilesShow","actionName":"FilesMenuShow","displayName":"FilesMenuShow","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":false},{"id":"MainToolbarts_CopyPaste@CopyDocument","actionName":"CopyPaste@CopyDocument","displayName":"Copy","mergeWithScreenActions":true,"parentActionName":"MainToolbarts_CopyPaste","isSystemControlAction":false,"nonScreenAction":false},{"id":"MainToolbarts_CopyPaste@PasteDocument","actionName":"CopyPaste@PasteDocument","displayName":"Paste","mergeWithScreenActions":true,"parentActionName":"MainToolbarts_CopyPaste","isSystemControlAction":false,"nonScreenAction":false},{"id":"MainToolbarts_CopyPaste@SaveTemplate","actionName":"CopyPaste@SaveTemplate","displayName":"Save as Template...","mergeWithScreenActions":true,"parentActionName":"MainToolbarts_CopyPaste","isSystemControlAction":false,"nonScreenAction":false},{"id":"screenConfiguration","actionName":"ActionConfigureScreen","displayName":"UI Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"selectProject","actionName":"ActionSelectWorkingProject","displayName":"Select Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"editProject","actionName":"menuEditProj","displayName":"Edit Project...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"manageCustomizations","displayName":"Manage Customizations...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"inspectElement","actionName":"","displayName":"Inspect Element (Ctrl+Alt+Click)","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"link","displayName":"Get Link","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"webServices","displayName":"Web Service","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"DACBrowser","displayName":"DAC Schema Browser","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"miSwitchUIScreenMode","actionName":"SwitchUIScreenMode","displayName":"Switch to Classic UI","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"audit","displayName":"Audit history...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"accessRights","displayName":"Access Rights...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"profiler","displayName":"Profiler","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"sharingColumns","displayName":"Share Column Configuration","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"trace","displayName":"Trace...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true},{"id":"about","displayName":"About...","mergeWithScreenActions":true,"isSystemControlAction":false,"nonScreenAction":true}],"toolBar":{"items":{"MainToolbarts_CancelCloseToList":{"type":"menu-button","index":-101,"config":{"text":"Close","commandName":"CancelCloseToList","isSystem":true,"imageKey":"CancelClose","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":27,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","closePopup":true,"toolTip":"Discard Changes and Close","showInToolbar":true}},"MainToolbarts_SaveCloseToList":{"type":"menu-button","index":-81,"config":{"text":"Save & Close","commandName":"SaveCloseToList","isSystem":true,"imageKey":"SaveClose","imageSet":"main","checkDirty":true,"shortcutChar":83,"shortcutCtrl":true,"shortcutShift":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","closePopup":true,"toolTip":"Save the current record and close the screen (Ctrl+Shift+S).","showInToolbar":true}},"MainToolbarts_Save":{"type":"menu-button","index":-80,"config":{"text":"Save","commandName":"Save","isSystem":true,"imageKey":"Save","imageSet":"main","checkDirty":true,"shortcutChar":83,"shortcutCtrl":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Save (Ctrl+S).","showInToolbar":true}},"MainToolbarts_Cancel":{"type":"menu-button","index":-70,"config":{"text":"Cancel","commandName":"Cancel","isSystem":true,"imageKey":"Cancel","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":27,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Cancel (Esc)","showInToolbar":true}},"MainToolbarts_Insert":{"type":"menu-button","index":-60,"config":{"text":"Insert","commandName":"Insert","isSystem":true,"imageKey":"AddNew","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":45,"shortcutCtrl":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"self","toolTip":"Add New Record (Ctrl+Ins)","showInToolbar":true}},"MainToolbarts_Delete":{"type":"menu-button","index":5,"config":{"text":"Delete","commandName":"Delete","isSystem":true,"imageKey":"Remove","imageSet":"main","message":"The current Repair Work Order record will be deleted.","shortcutChar":46,"shortcutCtrl":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","closePopup":true,"toolTip":"Delete (Ctrl+Del).","showInToolbar":true}},"MainToolbarts_Archive":{"type":"menu-button","index":6,"config":{"text":"Archive","commandName":"Archive","isSystem":true,"imageKey":"Archive","imageSet":"svg:main","message":"The current record will be archived.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Archive","disabled":true}},"MainToolbarts_Extract":{"type":"menu-button","index":7,"config":{"text":"Extract","commandName":"Extract","isSystem":true,"imageKey":"Extract","imageSet":"svg:main","message":"The current record will be extracted from the archive.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Extract","disabled":true}},"MainToolbarts_CopyPaste":{"type":"menu-options","index":8,"config":{"isSystem":true,"imageKey":"Copy","imageSet":"main","checkDirty":true,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","toolTip":"Clipboard","showInToolbar":true}},"MainToolbarts_First":{"type":"menu-button","index":9,"config":{"text":"First","commandName":"First","isSystem":true,"imageKey":"PageFirst","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"self","isNavigation":true,"toolTip":"Go to First Record","showInToolbar":true}},"MainToolbarts_Previous":{"type":"menu-button","index":10,"config":{"text":"Prev","commandName":"Previous","isSystem":true,"imageKey":"PagePrev","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":33,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","isNavigation":true,"toolTip":"Go to Previous Record (PgUp)","showInToolbar":true}},"MainToolbarts_Next":{"type":"menu-button","index":11,"config":{"text":"Next","commandName":"Next","isSystem":true,"imageKey":"PageNext","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","shortcutChar":34,"blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"page","isNavigation":true,"toolTip":"Go to Next Record (PgDn)","showInToolbar":true}},"MainToolbarts_Last":{"type":"menu-button","index":12,"config":{"text":"Last","commandName":"Last","isSystem":true,"imageKey":"PageLast","imageSet":"main","checkDirty":true,"message":"Any unsaved changes will be discarded.","blockPage":true,"repaintControls":"all","commitChanges":true,"postData":"self","isNavigation":true,"toolTip":"Go to Last Record","showInToolbar":true}},"MainToolbarts_CopyPaste@CopyDocument":{"type":"menu-button","index":13,"config":{"text":"Copy","commandName":"CopyPaste@CopyDocument","imageKey":"Copy","imageSet":"main","postDataControls":false,"optimizePostData":false,"popupCheckSave":false,"dynamicText":false,"allowHide":false}},"MainToolbarts_CopyPaste@PasteDocument":{"type":"menu-button","index":14,"config":{"text":"Paste","commandName":"CopyPaste@PasteDocument","imageKey":"Paste","imageSet":"main","postDataControls":false,"optimizePostData":false,"popupCheckSave":false,"dynamicText":false,"allowHide":false,"disabled":true}},"MainToolbarts_CopyPaste@SaveTemplate":{"type":"menu-button","index":15,"config":{"text":"Save as Template...","commandName":"CopyPaste@SaveTemplate","imageKey":"Save","imageSet":"main","postDataControls":false,"optimizePostData":false,"popupCheckSave":false,"dynamicText":false,"allowHide":false}}},"categories":[{"id":"MainToolbarts_CopyPaste","name":"CopyPaste","text":"CopyPaste","actions":["MainToolbarts_CopyPaste@CopyDocument","MainToolbarts_CopyPaste@PasteDocument","MainToolbarts_CopyPaste@SaveTemplate"],"isSystem":true}]},"wrapperType":"screen"}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs
new file mode 100644
index 00000000..62f2e49e
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs
@@ -0,0 +1,46 @@
+using Xunit;
+using PX.Data;
+using PX.Tests.Unit;
+using PX.Objects.IN;
+using Autofac;
+using PX.Objects.CM.Extensions;
+using PhoneRepairShop;
+
+namespace PhoneRepairShop_Code.Tests
+{
+ public class InventoryItemMaintTests : TestBase
+ {
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public void RepairItemTypeEnabled_WhenRepairItemSelected
+ (bool enabled)
+ {
+ var graph = PXGraph.CreateInstance();
+
+ InventoryItem item =
+ (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(
+ new InventoryItem
+ {
+ InventoryCD = "Item1",
+ Descr = "Item 1"
+ });
+
+ InventoryItemExt itemExt = item.GetExtension();
+
+ itemExt.UsrRepairItem = enabled;
+ graph.Caches[typeof(InventoryItem)].Update(item);
+ PXFieldState fieldState =
+ ((PXFieldState)graph.Caches[typeof(InventoryItem)].GetStateExt<
+ InventoryItemExt.usrRepairItemType>(item));
+ Assert.True(enabled == fieldState.Enabled);
+ }
+
+ protected override void RegisterServices(ContainerBuilder builder)
+ {
+ base.RegisterServices(builder);
+ builder.RegisterType().
+ As();
+ }
+ }
+}
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj
new file mode 100644
index 00000000..51b1872f
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj
@@ -0,0 +1,61 @@
+
+
+
+
+ net48
+ PhoneRepairShop_Code.Tests
+ PhoneRepairShop_Code.Tests
+ false
+ bin\$(Configuration)
+ false
+ 26.100.0217
+ 26.100.0217
+ 9.0
+ enable
+ Copyright © 2005-2026 Acumatica, Inc. All rights reserved.
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+ ..\..\..\..\Bin\Autofac.dll
+
+
+ ..\..\..\..\Bin\PX.Common.dll
+
+
+ ..\..\..\..\Bin\PX.Common.Std.dll
+
+
+ ..\..\..\..\Bin\PX.CS.Contracts.dll
+
+
+ ..\..\..\..\Bin\PX.Data.dll
+
+
+ ..\..\..\..\Bin\PX.Data.BQL.Fluent.dll
+
+
+ ..\..\..\..\Bin\PX.Objects.dll
+
+
+ ..\..\..\..\Bin\PX.Web.Customization.dll
+
+
+ ..\..\..\..\Bin\PX.Tests.Unit.dll
+
+
+
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..746f44b0
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PhoneRepairShop_Code.Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Acumatica")]
+[assembly: AssemblyProduct("PhoneRepairShop_Code.Tests")]
+[assembly: AssemblyCopyright("Copyright © Acumatica 2026")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c92d9eb5-4240-42c1-a525-1aa990672947")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs
new file mode 100644
index 00000000..30ffe8d0
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs
@@ -0,0 +1,143 @@
+using Xunit;
+using PX.Data;
+using PX.Objects.IN;
+using PX.Tests.Unit;
+using PhoneRepairShop;
+
+namespace PhoneRepairShop_Code.Tests
+{
+ public class RSSVRepairPriceMaintTests : TestBase
+ {
+ [Fact]
+ public void TestServicesAndPricesForm()
+ {
+ var graph = PXGraph.CreateInstance();
+
+ graph.Caches[typeof(RSSVDevice)].Insert(new RSSVDevice
+ {
+ DeviceCD = "Device1"
+ });
+ graph.Caches[typeof(RSSVRepairService)].Insert(new
+ RSSVRepairService
+ {
+ ServiceCD = "Service1"
+ });
+
+ RSSVRepairPrice repairPrice =
+ (RSSVRepairPrice)graph.Caches[typeof(RSSVRepairPrice)].
+ Insert(new RSSVRepairPrice());
+
+ InventoryItem battery1 = (InventoryItem)graph.
+ Caches[typeof(InventoryItem)].Insert(new
+ InventoryItem
+ {
+ InventoryCD = "Battery1"
+ });
+ graph.Caches[typeof(InventoryItemCurySettings)].Insert(new
+ InventoryItemCurySettings
+ {
+ InventoryID = battery1.InventoryID,
+ CuryID = "USD"
+ });
+ InventoryItemExt batteryExt1 =
+ battery1.GetExtension();
+ batteryExt1.UsrRepairItem = true;
+ batteryExt1.UsrRepairItemType = RepairItemTypeConstants.Battery;
+ graph.Caches[typeof(InventoryItem)].Update(battery1);
+
+ InventoryItem battery2 =
+ (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new
+ InventoryItem
+ {
+ InventoryCD = "Battery2"
+ });
+ graph.Caches[typeof(InventoryItemCurySettings)].Insert(new
+ InventoryItemCurySettings
+ {
+ InventoryID = battery2.InventoryID,
+ CuryID = "USD"
+ });
+ InventoryItemExt batteryExt2 =
+ battery2.GetExtension();
+ batteryExt2.UsrRepairItem = true;
+ batteryExt2.UsrRepairItemType = RepairItemTypeConstants.Battery;
+ graph.Caches[typeof(InventoryItem)].Update(battery2);
+
+ InventoryItem backCover1 =
+ (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new
+ InventoryItem
+ {
+ InventoryCD = "BackCover1"
+ });
+ graph.Caches[typeof(InventoryItemCurySettings)].Insert(new
+ InventoryItemCurySettings
+ {
+ InventoryID = backCover1.InventoryID,
+ CuryID = "USD"
+ });
+ InventoryItemExt backCoverExt1 =
+ backCover1.GetExtension();
+ backCoverExt1.UsrRepairItem = true;
+ backCoverExt1.UsrRepairItemType = RepairItemTypeConstants.BackCover;
+ graph.Caches[typeof(InventoryItem)].Update(backCover1);
+
+ InventoryItem work1 = (InventoryItem)graph.
+ Caches[typeof(InventoryItem)].Insert(new InventoryItem
+ {
+ InventoryCD = "Work1",
+ StkItem = false
+ });
+
+ // Configure the back cover repair item
+ RSSVRepairItem repairItemBackCover1 =
+ (RSSVRepairItem)graph.Caches[typeof(RSSVRepairItem)].Insert(
+ new RSSVRepairItem
+ {
+ InventoryID = backCover1.InventoryID,
+ Required = true,
+ BasePrice = 10,
+ IsDefault = true
+ });
+
+ // Configure the first battery repair item
+ RSSVRepairItem repairItemBattery1 =
+ (RSSVRepairItem)graph.Caches[typeof(RSSVRepairItem)].Insert(
+ new RSSVRepairItem
+ {
+ InventoryID = battery1.InventoryID
+ });
+ repairItemBattery1.Required = true;
+ repairItemBattery1.BasePrice = 20;
+ repairItemBattery1.IsDefault = true;
+ graph.Caches[typeof(RSSVRepairItem)].Update(repairItemBattery1);
+
+ // Configure the second battery repair item
+ RSSVRepairItem repairItemBattery2 =
+ (RSSVRepairItem)graph.Caches[typeof(RSSVRepairItem)].Insert(
+ new RSSVRepairItem
+ { InventoryID = battery2.InventoryID });
+ repairItemBattery2.Required = false;
+ repairItemBattery2.BasePrice = 30;
+ repairItemBattery2.IsDefault = true;
+ graph.Caches[typeof(RSSVRepairItem)].Update(repairItemBattery2);
+
+ // 2nd battery is not required -> 1st battery is also not required
+ Assert.False(repairItemBattery1.Required);
+ // 2nd battery is used by default -> 1st battery is not used by default
+ Assert.False(repairItemBattery1.IsDefault);
+ // The back cover's Required and Default fields are not affected
+ Assert.True(repairItemBackCover1.Required);
+ Assert.True(repairItemBackCover1.IsDefault);
+
+ RSSVLabor labor = (RSSVLabor)graph.Caches[typeof(RSSVLabor)].
+ Insert(new RSSVLabor
+ {
+ InventoryID = work1.InventoryID,
+ DefaultPrice = 2,
+ Quantity = 3
+ });
+ Assert.Equal(6, labor.ExtPrice);
+ Assert.Equal(66, repairPrice.Price);
+ }
+ }
+}
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs
new file mode 100644
index 00000000..dadc2fe3
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs
@@ -0,0 +1,45 @@
+using Xunit;
+using PX.Data;
+using PX.Tests.Unit;
+using PhoneRepairShop;
+
+namespace PhoneRepairShop_Code.Tests
+{
+ public class RSSVRepairServiceMaintTests : TestBase
+ {
+ [Fact]
+ public void PreliminaryCheckAndWalkInServiceFlags_AreOpposite()
+ {
+ var graph = PXGraph.CreateInstance();
+
+ var repairService =
+ graph.Caches[typeof(RSSVRepairService)].
+ Insert(new RSSVRepairService
+ {
+ ServiceCD = "Service1",
+ Description = "Service 1",
+ WalkInService = true,
+ PreliminaryCheck = false
+ }) as RSSVRepairService;
+
+ if (repairService != null)
+ {
+ repairService.WalkInService = false;
+ graph.Caches[typeof(RSSVRepairService)].Update(repairService);
+ Assert.True(repairService.PreliminaryCheck);
+
+ repairService.WalkInService = true;
+ graph.Caches[typeof(RSSVRepairService)].Update(repairService);
+ Assert.False(repairService.PreliminaryCheck);
+
+ repairService.PreliminaryCheck = false;
+ graph.Caches[typeof(RSSVRepairService)].Update(repairService);
+ Assert.True(repairService.WalkInService);
+
+ repairService.PreliminaryCheck = true;
+ graph.Caches[typeof(RSSVRepairService)].Update(repairService);
+ Assert.False(repairService.WalkInService);
+ }
+ }
+ }
+}
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs
new file mode 100644
index 00000000..18209e28
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs
@@ -0,0 +1,167 @@
+using PhoneRepairShop;
+using PX.Data;
+using PX.Tests.Unit;
+using PX.Objects.IN;
+using System.Linq;
+using Xunit;
+
+namespace PhoneRepairShop_Code.Tests
+{
+ public class RSSVWorkOrderEntryTests : TestBase
+ {
+ [Fact]
+ public void TestRepairWorkOrdersForm()
+ {
+ Setup(new RSSVSetup());
+ var graph = PXGraph.CreateInstance();
+
+ RSSVDevice device = (RSSVDevice)graph.Caches[typeof(RSSVDevice)].
+ Insert(new RSSVDevice { DeviceCD = "Device1" });
+
+ RSSVRepairService repairService =
+ (RSSVRepairService)graph.Caches[typeof(RSSVRepairService)].
+ Insert(new RSSVRepairService
+ {
+ ServiceCD = "Service1"
+ });
+ RSSVRepairService repairService2 =
+ (RSSVRepairService)graph.Caches[typeof(RSSVRepairService)].
+ Insert(new RSSVRepairService
+ {
+ ServiceCD = "Service2"
+ });
+
+ graph.Caches[typeof(RSSVRepairPrice)].Insert(new RSSVRepairPrice
+ {
+ DeviceID = device.DeviceID,
+ ServiceID = repairService.ServiceID
+ });
+
+ InventoryItem battery1 =
+ (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new
+ InventoryItem
+ {
+ InventoryCD = "Battery1"
+ });
+ InventoryItemExt batteryExt1 =
+ battery1.GetExtension();
+ batteryExt1.UsrRepairItem = true;
+ batteryExt1.UsrRepairItemType = RepairItemTypeConstants.Battery;
+ graph.Caches[typeof(InventoryItem)].Update(battery1);
+
+ InventoryItem backCover1 =
+ (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new
+ InventoryItem
+ {
+ InventoryCD = "BackCover1"
+ });
+ InventoryItemExt backCoverExt1 =
+ backCover1.GetExtension();
+ backCoverExt1.UsrRepairItem = true;
+ backCoverExt1.UsrRepairItemType =
+ RepairItemTypeConstants.BackCover;
+ graph.Caches[typeof(InventoryItem)].Update(backCover1);
+
+ InventoryItem work1 =
+ (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new
+ InventoryItem
+ {
+ InventoryCD = "Work1",
+ StkItem = false
+ });
+
+ RSSVRepairItem repairItemBackCover1 =
+ (RSSVRepairItem)graph.Caches[typeof(RSSVRepairItem)].Insert(
+ new RSSVRepairItem
+ {
+ DeviceID = device.DeviceID,
+ ServiceID = repairService.ServiceID
+ });
+ repairItemBackCover1.InventoryID = backCover1.InventoryID;
+ repairItemBackCover1.Required = true;
+ repairItemBackCover1.BasePrice = 10;
+ repairItemBackCover1.IsDefault = true;
+ repairItemBackCover1.RepairItemType =
+ backCoverExt1.UsrRepairItemType;
+ graph.Caches[typeof(RSSVRepairItem)].Update(repairItemBackCover1);
+
+ RSSVRepairItem repairItemBattery1 =
+ (RSSVRepairItem)graph.Caches[typeof(RSSVRepairItem)].Insert(
+ new RSSVRepairItem
+ {
+ DeviceID = device.DeviceID,
+ ServiceID = repairService.ServiceID
+ });
+ repairItemBattery1.InventoryID = battery1.InventoryID;
+ repairItemBattery1.Required = true;
+ repairItemBattery1.BasePrice = 20;
+ repairItemBattery1.IsDefault = true;
+ repairItemBattery1.RepairItemType = batteryExt1.UsrRepairItemType;
+ graph.Caches[typeof(RSSVRepairItem)].Update(repairItemBattery1);
+
+ RSSVLabor labor = (RSSVLabor)graph.Caches[typeof(RSSVLabor)].
+ Insert(new RSSVLabor
+ {
+ InventoryID = work1.InventoryID,
+ DeviceID = device.DeviceID,
+ ServiceID = repairService.ServiceID
+ });
+ labor.DefaultPrice = 2;
+ labor.Quantity = 3;
+ graph.Caches[typeof(RSSVLabor)].Update(labor);
+
+ RSSVWorkOrder workOrder = (RSSVWorkOrder)graph.
+ Caches[typeof(RSSVWorkOrder)].Insert(new RSSVWorkOrder());
+ workOrder.DeviceID = device.DeviceID;
+ workOrder.ServiceID = repairService.ServiceID;
+ graph.Caches[typeof(RSSVWorkOrder)].Update(workOrder);
+
+ Assert.Equal(2, graph.RepairItems.Select().Count);
+ Assert.Single(graph.Labor.Select());
+
+ workOrder.ServiceID = repairService2.ServiceID;
+ graph.Caches[typeof(RSSVWorkOrder)].Update(workOrder);
+ Assert.Equal(2, graph.RepairItems.Select().Count);
+ Assert.Single(graph.Labor.Select());
+
+ workOrder.ServiceID = repairService.ServiceID;
+ graph.Caches[typeof(RSSVWorkOrder)].Update(workOrder);
+
+ RSSVWorkOrderLabor woLabor = graph.Labor.SelectSingle();
+ Assert.Equal(3, woLabor.Quantity);
+ woLabor.Quantity = -1;
+ graph.Caches[typeof(RSSVWorkOrderLabor)].Update(woLabor);
+ PXFieldState fieldState =
+ (PXFieldState)graph.Caches[typeof(RSSVWorkOrderLabor)].
+ GetStateExt(woLabor);
+ Assert.Equal(PhoneRepairShop.Messages.QuantityCannotBeNegative,
+ fieldState.Error);
+ Assert.Equal(PXErrorLevel.Error, fieldState.ErrorLevel);
+ graph.Labor.Cache.Clear();
+
+ woLabor.Quantity = 1;
+ graph.Caches[typeof(RSSVWorkOrderLabor)].Update(woLabor);
+ woLabor = (RSSVWorkOrderLabor)graph.
+ Caches[typeof(RSSVWorkOrderLabor)].Locate(woLabor);
+ fieldState = (PXFieldState)graph.
+ Caches[typeof(RSSVWorkOrderLabor)].
+ GetStateExt(woLabor);
+ Assert.Equal(PhoneRepairShop.Messages.QuantityTooSmall,
+ fieldState.Error);
+ Assert.Equal(PXErrorLevel.Warning, fieldState.ErrorLevel);
+ Assert.Equal(3, woLabor.Quantity);
+
+ repairService2.PreliminaryCheck = true;
+ graph.Caches[typeof(RSSVRepairService)].Update(repairService2);
+ workOrder.ServiceID = repairService2.ServiceID;
+ workOrder.Priority = WorkOrderPriorityConstants.Low;
+ graph.Caches[typeof(RSSVWorkOrder)].Update(workOrder);
+ workOrder = (RSSVWorkOrder)graph.Caches[typeof(RSSVWorkOrder)].
+ Locate(workOrder);
+ fieldState = (PXFieldState)graph.Caches[typeof(RSSVWorkOrder)].
+ GetStateExt(workOrder);
+ Assert.Equal(PhoneRepairShop.Messages.PriorityTooLow, fieldState.Error);
+ Assert.Equal(PXErrorLevel.Error, fieldState.ErrorLevel);
+ }
+ }
+}
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config
new file mode 100644
index 00000000..50370a18
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config
new file mode 100644
index 00000000..e14011d3
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs
new file mode 100644
index 00000000..d901e4ce
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs
@@ -0,0 +1,65 @@
+using PX.Common;
+using PX.Data.BQL;
+using PX.Data.EP;
+using PX.Data.ReferentialIntegrity.Attributes;
+using PX.Data;
+using PX.Objects.Common.Extensions;
+using PX.Objects.Common.GraphExtensions.Abstract;
+using PX.Objects.Common;
+using PX.Objects.CR;
+using PX.Objects.CS;
+using PX.Objects.DR;
+using PX.Objects.EP;
+using PX.Objects.GL;
+using PX.Objects.IN.Matrix.Attributes;
+using PX.Objects.IN.Matrix.Graphs;
+using PX.Objects.IN;
+using PX.Objects.PM;
+using PX.Objects.TX;
+using PX.Objects;
+using PX.TM;
+using SelectParentItemClass = PX.Data.BQL.Fluent.SelectFrom.Where>;
+using System.Collections.Generic;
+using System;
+
+namespace PhoneRepairShop
+{
+ // Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
+ public sealed class InventoryItemExt : PXCacheExtension
+ {
+ #region UsrRepairItem
+ [PXDBBool]
+ [PXUIField(DisplayName="Repair Item")]
+ [PXDefault(false, PersistingCheck = PXPersistingCheck.Nothing)]
+
+ public bool? UsrRepairItem { get; set; }
+ public abstract class usrRepairItem : PX.Data.BQL.BqlBool.Field { }
+ #endregion
+
+ #region UsrRepairItemType
+ [PXDBString(2, IsFixed = true)]
+ [PXStringList(
+ new string[]
+ {
+ PhoneRepairShop.RepairItemTypeConstants.Battery,
+ PhoneRepairShop.RepairItemTypeConstants.Screen,
+ PhoneRepairShop.RepairItemTypeConstants.ScreenCover,
+ PhoneRepairShop.RepairItemTypeConstants.BackCover,
+ PhoneRepairShop.RepairItemTypeConstants.Motherboard
+ },
+ new string[]
+ {
+ PhoneRepairShop.Messages.Battery,
+ PhoneRepairShop.Messages.Screen,
+ PhoneRepairShop.Messages.ScreenCover,
+ PhoneRepairShop.Messages.BackCover,
+ PhoneRepairShop.Messages.Motherboard
+ })]
+ [PXUIField(DisplayName = "Repair Item Type", Enabled = false)]
+ public string? UsrRepairItemType { get; set; }
+ public abstract class usrRepairItemType :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs
new file mode 100644
index 00000000..d4ca23c5
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs
@@ -0,0 +1,118 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using PX.Data;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVDevice)]
+ [PXPrimaryGraph(typeof(RSSVDeviceMaint))]
+ public class RSSVDevice : PXBqlTable, IBqlTable
+ {
+ #region DeviceID
+ [PXDBIdentity]
+ public virtual int? DeviceID { get; set; }
+ public abstract class deviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DeviceCD
+ [PXDBString(15, IsUnicode = true, IsKey = true, InputMask = ">aaaaaaaaaaaaaaa")]
+ [PXDefault]
+ [PXUIField(DisplayName = "Device Code")]
+ [PXSelector(typeof(Search),
+ typeof(RSSVDevice.deviceCD),
+ typeof(RSSVDevice.active),
+ typeof(RSSVDevice.avgComplexityOfRepair))]
+ public virtual string? DeviceCD { get; set; }
+ public abstract class deviceCD : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region Description
+ [PXDBString(256, IsUnicode = true, InputMask = "")]
+ [PXUIField(DisplayName = "Description")]
+ public virtual string? Description { get; set; }
+ public abstract class description :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+
+ #region Active
+ [PXDBBool()]
+ [PXDefault(true)]
+ [PXUIField(DisplayName = "Active")]
+ public virtual bool? Active { get; set; }
+ public abstract class active : PX.Data.BQL.BqlBool.Field { }
+ #endregion
+
+ #region AvgComplexityOfRepair
+ [PXDBString(1, IsFixed = true)]
+ [PXDefault(RepairComplexity.Medium)]
+ [PXUIField(DisplayName = "Complexity")]
+ [PXStringList(
+ new string[]
+ {
+ RepairComplexity.Low,
+ RepairComplexity.Medium,
+ RepairComplexity.High
+ },
+ new string[]
+ {
+ Messages.Low, Messages.Medium, Messages.High
+ })]
+ public virtual string? AvgComplexityOfRepair { get; set; }
+ public abstract class avgComplexityOfRepair :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs
new file mode 100644
index 00000000..8f760b17
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs
@@ -0,0 +1,113 @@
+using System;
+using PX.Data;
+using PX.Data.BQL.Fluent;
+using PX.Objects.IN;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVLabor)]
+ public class RSSVLabor : PXBqlTable, IBqlTable
+ {
+ #region ServiceID
+ [PXDBInt(IsKey = true)]
+ [PXDBDefault(typeof(RSSVRepairPrice.serviceID))]
+ [PXParent(typeof(SelectFrom.
+ Where.
+ And>>))]
+ public virtual int? ServiceID { get; set; }
+ public abstract class serviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DeviceID
+ [PXDBInt(IsKey = true)]
+ [PXDBDefault(typeof(RSSVRepairPrice.deviceID))]
+ public virtual int? DeviceID { get; set; }
+ public abstract class deviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region InventoryID
+ [Inventory(IsKey = true)]
+ [PXRestrictor(typeof(Where>),
+ Messages.ItemIsStock)]
+ public virtual int? InventoryID { get; set; }
+ public abstract class inventoryID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DefaultPrice
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Default Price")]
+ public virtual Decimal? DefaultPrice { get; set; }
+ public abstract class defaultPrice :
+ PX.Data.BQL.BqlDecimal.Field
+ { }
+ #endregion
+
+ #region Quantity
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Quantity")]
+ public virtual Decimal? Quantity { get; set; }
+ public abstract class quantity : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region ExtPrice
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Ext. Price", Enabled = false)]
+ [PXFormula(
+ typeof(RSSVLabor.quantity.Multiply),
+ typeof(SumCalc))]
+ public virtual Decimal? ExtPrice { get; set; }
+ public abstract class extPrice : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs
new file mode 100644
index 00000000..be8c71ad
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs
@@ -0,0 +1,175 @@
+using System;
+using PX.Data;
+using PX.Data.BQL.Fluent;
+using PX.Objects.IN;
+using PX.Data.BQL;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVRepairItem)]
+ public class RSSVRepairItem : PXBqlTable, IBqlTable
+ {
+ #region ServiceID
+ [PXDBInt(IsKey = true)]
+ [PXDBDefault(typeof(RSSVRepairPrice.serviceID))]
+ [PXParent(typeof(SelectFrom.
+ Where.
+ And>>))]
+ public virtual int? ServiceID { get; set; }
+ public abstract class serviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DeviceID
+ [PXDBInt(IsKey = true)]
+ [PXDBDefault(typeof(RSSVRepairPrice.deviceID))]
+ public virtual int? DeviceID { get; set; }
+ public abstract class deviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region LineNbr
+ [PXDBInt(IsKey = true)]
+ [PXLineNbr(typeof(RSSVRepairPrice.repairItemLineCntr))]
+ [PXUIField(DisplayName = "Line Nbr.", Visible = false)]
+ public virtual int? LineNbr { get; set; }
+ public abstract class lineNbr : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region RepairItemType
+ [PXDBString(2, IsFixed = true)]
+ [PXStringList(
+ new string[]
+ {
+ RepairItemTypeConstants.Battery,
+ RepairItemTypeConstants.Screen,
+ RepairItemTypeConstants.ScreenCover,
+ RepairItemTypeConstants.BackCover,
+ RepairItemTypeConstants.Motherboard
+ },
+ new string[]
+ {
+ Messages.Battery,
+ Messages.Screen,
+ Messages.ScreenCover,
+ Messages.BackCover,
+ Messages.Motherboard
+ })]
+ [PXUIField(DisplayName = "Repair Item Type")]
+ public virtual string? RepairItemType { get; set; }
+ public abstract class repairItemType :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+
+ #region InventoryID
+ [PXRestrictor(typeof(
+ Where.
+ And>>>>),
+ Messages.StockItemIncorrectRepairItemType,
+ typeof(RSSVRepairItem.repairItemType))]
+ [Inventory]
+ [PXDefault]
+ public virtual int? InventoryID { get; set; }
+ public abstract class inventoryID :
+ PX.Data.BQL.BqlInt.Field
+ { }
+ #endregion
+
+ #region Required
+ [PXDBBool()]
+ [PXDefault(false)]
+ [PXUIField(DisplayName = "Required")]
+ public virtual bool? Required { get; set; }
+ public abstract class required :
+ PX.Data.BQL.BqlBool.Field
+ { }
+ #endregion
+
+ #region IsDefault
+ [PXDBBool()]
+ [PXDefault(false)]
+ [PXUIField(DisplayName = "Default")]
+ public virtual bool? IsDefault { get; set; }
+ public abstract class isDefault :
+ PX.Data.BQL.BqlBool.Field
+ { }
+ #endregion
+
+ #region BasePrice
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Price")]
+ [PXFormula(null,
+ typeof(SumCalc))]
+ public virtual Decimal? BasePrice { get; set; }
+ public abstract class basePrice :
+ PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime :
+ PX.Data.BQL.BqlDateTime.Field
+ { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID :
+ PX.Data.BQL.BqlGuid.Field
+ { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime :
+ PX.Data.BQL.BqlDateTime.Field
+ { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID :
+ PX.Data.BQL.BqlGuid.Field
+ { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp :
+ PX.Data.BQL.BqlByteArray.Field
+ { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs
new file mode 100644
index 00000000..18521955
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs
@@ -0,0 +1,118 @@
+using System;
+using PX.Data;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVRepairPrice)]
+ public class RSSVRepairPrice : PXBqlTable, IBqlTable
+ {
+ #region ServiceID
+ [PXDBInt(IsKey = true)]
+ [PXDefault]
+ [PXUIField(DisplayName = "Service", Required = true)]
+ [PXSelector(typeof(Search),
+ typeof(RSSVRepairService.serviceCD),
+ typeof(RSSVRepairService.description),
+ SubstituteKey = typeof(RSSVRepairService.serviceCD),
+ DescriptionField = typeof(RSSVRepairService.description))]
+ public virtual int? ServiceID { get; set; }
+ public abstract class serviceID :
+ PX.Data.BQL.BqlInt.Field
+ { }
+ #endregion
+
+ #region DeviceID
+ [PXDBInt(IsKey = true)]
+ [PXDefault]
+ [PXUIField(DisplayName = "Device", Required = true)]
+ [PXSelector(typeof(Search),
+ typeof(RSSVDevice.deviceCD),
+ typeof(RSSVDevice.description),
+ SubstituteKey = typeof(RSSVDevice.deviceCD),
+ DescriptionField = typeof(RSSVDevice.description))]
+ public virtual int? DeviceID { get; set; }
+ public abstract class deviceID :
+ PX.Data.BQL.BqlInt.Field
+ { }
+ #endregion
+
+ #region Price
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Approximate Price", Enabled = false)]
+ public virtual Decimal? Price { get; set; }
+ public abstract class price : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region RepairItemLineCntr
+ [PXDBInt()]
+ [PXDefault(0)]
+ public virtual Int32? RepairItemLineCntr { get; set; }
+ public abstract class repairItemLineCntr :
+ PX.Data.BQL.BqlInt.Field
+ { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime :
+ PX.Data.BQL.BqlDateTime.Field
+ { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID :
+ PX.Data.BQL.BqlGuid.Field
+ { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime :
+ PX.Data.BQL.BqlDateTime.Field
+ { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID :
+ PX.Data.BQL.BqlGuid.Field
+ { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID :
+ PX.Data.BQL.BqlString.Field
+ { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp :
+ PX.Data.BQL.BqlByteArray.Field
+ { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs
new file mode 100644
index 00000000..931974d3
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs
@@ -0,0 +1,111 @@
+using System;
+using PX.Data;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVRepairService)]
+ public class RSSVRepairService : PXBqlTable, IBqlTable
+ {
+ #region ServiceID
+ [PXDBIdentity]
+ public virtual int? ServiceID { get; set; }
+ public abstract class serviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region ServiceCD
+ [PXDBString(15, IsKey = true, IsUnicode = true, InputMask = ">aaaaaaaaaaaaaaa")]
+ [PXDefault]
+ [PXUIField(DisplayName = "Service ID")]
+ public virtual string? ServiceCD { get; set; }
+ public abstract class serviceCD : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region Description
+ [PXDBString(50, IsUnicode = true, InputMask = "")]
+ [PXDefault]
+ [PXUIField(DisplayName = "Description")]
+ public virtual string? Description { get; set; }
+ public abstract class description : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region Active
+ [PXDBBool()]
+ [PXDefault(true)]
+ [PXUIField(DisplayName = "Active")]
+ public virtual bool? Active { get; set; }
+ public abstract class active : PX.Data.BQL.BqlBool.Field { }
+ #endregion
+
+ #region WalkInService
+ [PXDBBool()]
+ [PXDefault(false)]
+ [PXUIField(DisplayName = "Walk-In Service")]
+ public virtual bool? WalkInService { get; set; }
+ public abstract class walkInService : PX.Data.BQL.BqlBool.Field { }
+ #endregion
+
+ #region PreliminaryCheck
+ [PXDBBool()]
+ [PXDefault(false)]
+ [PXUIField(DisplayName = "Requires Preliminary Check")]
+ public virtual bool? PreliminaryCheck { get; set; }
+ public abstract class preliminaryCheck : PX.Data.BQL.BqlBool.Field { }
+ #endregion
+
+ #region Prepayment
+ [PXDBBool()]
+ [PXDefault(false)]
+ [PXUIField(DisplayName = "Requires Prepayment")]
+ public virtual bool? Prepayment { get; set; }
+ public abstract class prepayment : PX.Data.BQL.BqlBool.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs
new file mode 100644
index 00000000..73df82cd
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs
@@ -0,0 +1,97 @@
+using System;
+using PX.Data;
+using PX.Objects.AR;
+using PX.TM;
+using PX.Objects.CS;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVSetup)]
+ [PXPrimaryGraph(typeof(RSSVSetupMaint))]
+ public class RSSVSetup : PXBqlTable, IBqlTable
+ {
+ #region NumberingID
+ [PXDBString(10, IsUnicode = true)]
+ [PXUIField(DisplayName = "Numbering Sequence")]
+ [PXSelector(typeof(Numbering.numberingID),
+ DescriptionField = typeof(Numbering.descr))]
+ [PXDefault("RSSVWORDER")]
+ public virtual string? NumberingID { get; set; }
+ public abstract class numberingID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region WalkInCustomerID
+ [CustomerActive(DisplayName = "Walk-In Customer",
+ DescriptionField = typeof(Customer.acctName))]
+ [PXDefault]
+ public virtual int? WalkInCustomerID { get; set; }
+ public abstract class walkInCustomerID :
+ PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DefaultEmployee
+ [Owner(DisplayName = "Default Employee")]
+ [PXDefault]
+ public virtual int? DefaultEmployee { get; set; }
+ public abstract class defaultEmployee :
+ PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region PrepaymentPercent
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Prepayment Percent", Required = true)]
+ public virtual Decimal? PrepaymentPercent { get; set; }
+ public abstract class prepaymentPercent :
+ PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs
new file mode 100644
index 00000000..9bc79284
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs
@@ -0,0 +1,81 @@
+using System;
+using PX.Data;
+using PX.Data.BQL.Fluent;
+using PX.Objects.IN;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVStockItemDevice)]
+ public class RSSVStockItemDevice : PXBqlTable, IBqlTable
+ {
+ #region InventoryID
+ [PXDBInt(IsKey = true)]
+ [PXDBDefault(typeof(InventoryItem.inventoryID))]
+ [PXParent(typeof(SelectFrom.
+ Where>))]
+ public virtual int? InventoryID { get; set; }
+ public abstract class inventoryID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DeviceID
+ [PXDBInt(IsKey = true)]
+ [PXUIField(DisplayName = "Device")]
+ [PXSelector(
+ typeof(RSSVDevice.deviceID),
+ typeof(RSSVDevice.deviceCD),
+ typeof(RSSVDevice.description),
+ SubstituteKey = typeof(RSSVDevice.deviceCD),
+ DescriptionField = typeof(RSSVDevice.description))]
+ public virtual int? DeviceID { get; set; }
+ public abstract class deviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs
new file mode 100644
index 00000000..ebdd5ff8
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs
@@ -0,0 +1,125 @@
+using System;
+using PX.Data;
+using PX.Data.BQL.Fluent;
+using PX.Objects.CT;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVWarranty)]
+ public class RSSVWarranty : PXBqlTable, IBqlTable
+ {
+ #region ServiceID
+ [PXDBInt(IsKey = true)]
+ [PXDBDefault(typeof(RSSVRepairPrice.serviceID))]
+ [PXParent(typeof(SelectFrom.
+ Where.
+ And>>))]
+ public virtual int? ServiceID { get; set; }
+ public abstract class serviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DeviceID
+ [PXDBInt(IsKey = true)]
+ [PXDBDefault(typeof(RSSVRepairPrice.deviceID))]
+ public virtual int? DeviceID { get; set; }
+ public abstract class deviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region ContractID
+ [PXDBInt(IsKey = true)]
+ [PXUIField(DisplayName = "Contract ID")]
+ [PXDimensionSelector(ContractTemplateAttribute.DimensionName,
+ typeof(Search>>),
+ typeof(ContractTemplate.contractCD),
+ DescriptionField = typeof(ContractTemplate.description))]
+ public virtual int? ContractID { get; set; }
+ public abstract class contractID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DefaultWarranty
+ [PXDBBool()]
+ [PXUIField(DisplayName = "Default Warranty")]
+ [PXDefault(false, PersistingCheck = PXPersistingCheck.Nothing)]
+ public virtual bool? DefaultWarranty { get; set; }
+ public abstract class defaultWarranty :
+ PX.Data.BQL.BqlBool.Field
+ { }
+ #endregion
+
+ #region ContractDuration
+ [PXInt(MinValue = 1, MaxValue = 1000)]
+ [PXUIField(DisplayName = "Duration", Enabled = false)]
+ [PXFormula(typeof(ContractTemplate.duration.FromSelectorOf))]
+ public virtual int? ContractDuration { get; set; }
+ public abstract class contractDuration : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region ContractDurationType
+ [PXString(1, IsFixed = true)]
+ [PXUIField(DisplayName = "Duration Unit", Enabled = false)]
+ [Contract.durationType.List]
+ [PXFormula(typeof(ContractTemplate.durationType.FromSelectorOf))]
+ public virtual string? ContractDurationType { get; set; }
+ public abstract class contractDurationType : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region ContractType
+ [PXString(1, IsFixed = true)]
+ [PXUIField(DisplayName = "Contract Type", Enabled = false)]
+ [Contract.type.List]
+ [PXFormula(typeof(ContractTemplate.type.FromSelectorOf))]
+ public virtual string? ContractType { get; set; }
+ public abstract class contractType : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs
new file mode 100644
index 00000000..9ceb09ea
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs
@@ -0,0 +1,216 @@
+using System;
+using PX.Data;
+using PX.Objects.AR;
+using PX.Objects.CS;
+using PX.TM;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVWorkOrder)]
+ public class RSSVWorkOrder : PXBqlTable, IBqlTable
+ {
+ #region OrderNbr
+ [PXDBString(15, IsKey = true, IsUnicode = true,
+ InputMask = ">CCCCCCCCCCCCCCC")]
+ [PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
+ [PXUIField(DisplayName = "Order Nbr.",
+ Visibility = PXUIVisibility.SelectorVisible)]
+ [AutoNumber(typeof(RSSVSetup.numberingID),
+ typeof(RSSVWorkOrder.dateCreated))]
+ [PXSelector(typeof(Search))]
+ public virtual string? OrderNbr { get; set; }
+ public abstract class orderNbr : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CustomerID
+ [PXDefault]
+ [CustomerActive(DisplayName = "Customer ID",
+ DescriptionField = typeof(Customer.acctName))]
+ public virtual int? CustomerID { get; set; }
+ public abstract class customerID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DateCreated
+ [PXDBDate()]
+ [PXDefault(typeof(AccessInfo.businessDate))]
+ [PXUIField(DisplayName = "Date Created")]
+ public virtual DateTime? DateCreated { get; set; }
+ public abstract class dateCreated : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region DateCompleted
+ [PXDBDate()]
+ [PXUIField(DisplayName = "Date Completed", Enabled = false)]
+ public virtual DateTime? DateCompleted { get; set; }
+ public abstract class dateCompleted : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region Status
+ [PXDBString(2, IsFixed = true)]
+ [PXDefault(WorkOrderStatusConstants.OnHold)]
+ [PXUIField(DisplayName = "Status", Enabled = false)]
+ [PXStringList(
+ new string[]
+ {
+ WorkOrderStatusConstants.OnHold,
+ WorkOrderStatusConstants.PendingPayment,
+ WorkOrderStatusConstants.ReadyForAssignment,
+ WorkOrderStatusConstants.Assigned,
+ WorkOrderStatusConstants.Completed,
+ WorkOrderStatusConstants.Paid
+ },
+ new string[]
+ {
+ Messages.OnHold,
+ Messages.PendingPayment,
+ Messages.ReadyForAssignment,
+ Messages.Assigned,
+ Messages.Completed,
+ Messages.Paid
+ })]
+ public virtual string? Status { get; set; }
+ public abstract class status : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region Hold
+ [PXDBBool()]
+ [PXDefault(true)]
+ public virtual bool? Hold { get; set; }
+ public abstract class hold : PX.Data.BQL.BqlBool.Field { }
+ #endregion
+
+ #region Description
+ [PXDBString(60, IsUnicode = true)]
+ [PXUIField(DisplayName = "Description",
+ Visibility = PXUIVisibility.SelectorVisible)]
+ public virtual string? Description { get; set; }
+ public abstract class description : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region ServiceID
+ [PXDBInt()]
+ [PXDefault]
+ [PXUIField(DisplayName = "Service",
+ Visibility = PXUIVisibility.SelectorVisible)]
+ [PXSelector(typeof(Search),
+ typeof(RSSVRepairService.serviceCD),
+ typeof(RSSVRepairService.description),
+ SubstituteKey = typeof(RSSVRepairService.serviceCD),
+ DescriptionField = typeof(RSSVRepairService.description))]
+ public virtual int? ServiceID { get; set; }
+ public abstract class serviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DeviceID
+ [PXDBInt()]
+ [PXDefault]
+ [PXUIField(DisplayName = "Device",
+ Visibility = PXUIVisibility.SelectorVisible)]
+ [PXSelector(typeof(Search),
+ typeof(RSSVDevice.deviceCD),
+ typeof(RSSVDevice.description),
+ SubstituteKey = typeof(RSSVDevice.deviceCD),
+ DescriptionField = typeof(RSSVDevice.description))]
+ public virtual int? DeviceID { get; set; }
+ public abstract class deviceID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region OrderTotal
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Order Total", Enabled = false)]
+ public virtual Decimal? OrderTotal { get; set; }
+ public abstract class orderTotal : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region RepairItemLineCntr
+ [PXDBInt()]
+ [PXDefault(0)]
+ public virtual int? RepairItemLineCntr { get; set; }
+ public abstract class repairItemLineCntr :
+ PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region Assignee
+ [Owner(DisplayName = "Assignee")]
+ public virtual int? Assignee { get; set; }
+ public abstract class assignee : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region Priority
+ [PXDBString(1, IsFixed = true)]
+ [PXDefault(WorkOrderPriorityConstants.Medium)]
+ [PXUIField(DisplayName = "Priority")]
+ [PXStringList(
+ new string[]
+ {
+ WorkOrderPriorityConstants.High,
+ WorkOrderPriorityConstants.Medium,
+ WorkOrderPriorityConstants.Low
+ },
+ new string[]
+ {
+ Messages.High,
+ Messages.Medium,
+ Messages.Low
+ })]
+ public virtual string? Priority { get; set; }
+ public abstract class priority : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region InvoiceNbr
+ [PXDBString(15, IsUnicode = true)]
+ [PXUIField(DisplayName = "Invoice Nbr.", Enabled = false)]
+ public virtual string? InvoiceNbr { get; set; }
+ public abstract class invoiceNbr : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs
new file mode 100644
index 00000000..e34002a3
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs
@@ -0,0 +1,126 @@
+using System;
+using PX.Data;
+using PX.Data.BQL;
+using PX.Data.BQL.Fluent;
+using PX.Objects.IN;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVWorkOrderItem)]
+ public class RSSVWorkOrderItem : PXBqlTable, IBqlTable
+ {
+ #region OrderNbr
+ [PXDBString(15, IsKey = true, IsUnicode = true, InputMask = "")]
+ [PXDBDefault(typeof(RSSVWorkOrder.orderNbr))]
+ [PXParent(typeof(SelectFrom.
+ Where>))]
+ public virtual string? OrderNbr { get; set; }
+ public abstract class orderNbr : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LineNbr
+ [PXDBInt(IsKey = true)]
+ [PXLineNbr(typeof(RSSVWorkOrder.repairItemLineCntr))]
+ [PXUIField(DisplayName = "Line Nbr.", Visible = false)]
+ public virtual int? LineNbr { get; set; }
+ public abstract class lineNbr : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region RepairItemType
+ [PXDBString(2, IsFixed = true)]
+ [PXStringList(
+ new string[]
+ {
+ RepairItemTypeConstants.Battery,
+ RepairItemTypeConstants.Screen,
+ RepairItemTypeConstants.ScreenCover,
+ RepairItemTypeConstants.BackCover,
+ RepairItemTypeConstants.Motherboard
+ },
+ new string[]
+ {
+ Messages.Battery,
+ Messages.Screen,
+ Messages.ScreenCover,
+ Messages.BackCover,
+ Messages.Motherboard
+ }
+ )]
+ [PXUIField(DisplayName = "Repair Item Type")]
+ public virtual string? RepairItemType { get; set; }
+ public abstract class repairItemType : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region InventoryID
+ [Inventory]
+ [PXRestrictor(typeof(
+ Where.
+ And>>>>),
+ Messages.StockItemIncorrectRepairItemType,
+ typeof(RSSVWorkOrderItem.repairItemType))]
+ public virtual int? InventoryID { get; set; }
+ public abstract class inventoryID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region BasePrice
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Price")]
+ [PXFormula(null, typeof(SumCalc))]
+ public virtual Decimal? BasePrice { get; set; }
+ public abstract class basePrice : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs
new file mode 100644
index 00000000..83fa36fe
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs
@@ -0,0 +1,104 @@
+using System;
+using PX.Data;
+using PX.Data.BQL.Fluent;
+using PX.Objects.IN;
+
+namespace PhoneRepairShop
+{
+ [PXCacheName(Messages.RSSVWorkOrderLabor)]
+ public class RSSVWorkOrderLabor : PXBqlTable, IBqlTable
+ {
+ #region OrderNbr
+ [PXDBString(15, IsKey = true, IsUnicode = true, InputMask = "")]
+ [PXDBDefault(typeof(RSSVWorkOrder.orderNbr))]
+ [PXParent(typeof(SelectFrom.
+ Where>))]
+ public virtual string? OrderNbr { get; set; }
+ public abstract class orderNbr : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region InventoryID
+ [Inventory(IsKey = true)]
+ [PXRestrictor(typeof(Where>),
+ Messages.ItemIsStock)]
+ public virtual int? InventoryID { get; set; }
+ public abstract class inventoryID : PX.Data.BQL.BqlInt.Field { }
+ #endregion
+
+ #region DefaultPrice
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Default Price")]
+ public virtual Decimal? DefaultPrice { get; set; }
+ public abstract class defaultPrice : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region Quantity
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Quantity")]
+ public virtual Decimal? Quantity { get; set; }
+ public abstract class quantity : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region ExtPrice
+ [PXDBDecimal()]
+ [PXDefault(TypeCode.Decimal, "0.0")]
+ [PXUIField(DisplayName = "Ext. Price", Enabled = false)]
+ [PXFormula(
+ typeof(RSSVWorkOrderLabor.quantity.Multiply),
+ typeof(SumCalc))]
+ public virtual Decimal? ExtPrice { get; set; }
+ public abstract class extPrice : PX.Data.BQL.BqlDecimal.Field { }
+ #endregion
+
+ #region CreatedByID
+ [PXDBCreatedByID()]
+ public virtual Guid? CreatedByID { get; set; }
+ public abstract class createdByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region CreatedByScreenID
+ [PXDBCreatedByScreenID()]
+ public virtual string? CreatedByScreenID { get; set; }
+ public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region CreatedDateTime
+ [PXDBCreatedDateTime()]
+ public virtual DateTime? CreatedDateTime { get; set; }
+ public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region LastModifiedByID
+ [PXDBLastModifiedByID()]
+ public virtual Guid? LastModifiedByID { get; set; }
+ public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+
+ #region LastModifiedByScreenID
+ [PXDBLastModifiedByScreenID()]
+ public virtual string? LastModifiedByScreenID { get; set; }
+ public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field { }
+ #endregion
+
+ #region LastModifiedDateTime
+ [PXDBLastModifiedDateTime()]
+ public virtual DateTime? LastModifiedDateTime { get; set; }
+ public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field { }
+ #endregion
+
+ #region Tstamp
+ [PXDBTimestamp()]
+ public virtual byte[]? Tstamp { get; set; }
+ public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field { }
+ #endregion
+
+ #region NoteID
+ [PXNote()]
+ public virtual Guid? NoteID { get; set; }
+ public abstract class noteID : PX.Data.BQL.BqlGuid.Field { }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs
new file mode 100644
index 00000000..9aad8216
--- /dev/null
+++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs
@@ -0,0 +1,521 @@
+using System;
+using PX.Data;
+using Customization;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using PX.Objects.IN;
+using PX.Data.BQL.Fluent;
+using System.Globalization;
+
+namespace PhoneRepairShop
+{
+ //The customization plug-in fills the database with the data entered in the T210 and T220 courses
+ public class InputData : CustomizationPlugin
+ {
+ //This method executed after customization was published and website was restarted.
+ public override void UpdateDatabase()
+ {
+
+ #region T200Data
+
+ RSSVRepairServiceMaint repairServiceGraph = PXGraph.CreateInstance();
+
+ #region RSSVRepairService
+
+ RSSVRepairService repairService = SelectFrom.View.ReadOnly.Select(repairServiceGraph);
+ if (repairService == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVRepairService.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVRepairService service = new RSSVRepairService
+ {
+ ServiceCD = dic["ServiceCD"],
+ Description = dic["Description"],
+ Active = Convert.ToBoolean(Convert.ToInt32(dic["Active"])),
+ WalkInService = Convert.ToBoolean(Convert.ToInt32(dic["WalkInService"])),
+ Prepayment = Convert.ToBoolean(Convert.ToInt32(dic["Prepayment"])),
+ PreliminaryCheck = Convert.ToBoolean(Convert.ToInt32(dic["PreliminaryCheck"]))
+ };
+ repairServiceGraph.RepairService.Insert(service);
+ repairServiceGraph.Actions.PressSave();
+ repairServiceGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVRepairService updated");
+ }
+ }
+ #endregion
+
+ RSSVDeviceMaint deviceGraph = PXGraph.CreateInstance();
+
+ #region RSSVDevice
+
+ RSSVDevice servDevice = SelectFrom.View.ReadOnly.Select(deviceGraph);
+ if (servDevice == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVDevice.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVDevice device = new RSSVDevice
+ {
+ DeviceCD = dic["DeviceCD"],
+ Description = dic["Description"],
+ Active = Convert.ToBoolean(Convert.ToInt32(dic["Active"])),
+ AvgComplexityOfRepair = dic["AvgComplexityOfRepair"]
+ };
+ deviceGraph.ServDevices.Insert(device);
+ deviceGraph.Actions.PressSave();
+ deviceGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVDevice updated");
+ }
+ }
+ #endregion
+
+ #endregion
+
+
+ #region T210Data
+ var iiEntry = PXGraph.CreateInstance();
+ #region InventoryItem
+ //Add data to InventoryItem
+
+ InventoryItem invItem = SelectFrom.Where>.View.ReadOnly.Select(iiEntry);
+ if (invItem == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\InventoryItem.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ //Create a stock item
+ var iItem = new InventoryItem
+ {
+ InventoryCD = dic["InventoryCD"],
+ Descr = dic["Descr"],
+ };
+ iItem = iiEntry.Item.Insert(iItem);
+ iItem.ItemClassID = Convert.ToInt32(dic["ItemClassID"]);
+ iItem = iiEntry.Item.Update(iItem);
+
+ //Assign the values of custom fields
+ var extItem = PXCache.GetExtension(iItem);
+ extItem.UsrRepairItem = true;
+ extItem.UsrRepairItemType = dic["UsrRepairItemType"];
+ iiEntry.Item.Update(iItem);
+ //Assign base price and default warehouse
+ InventoryItemCurySettings curySettings = iiEntry.ItemCurySettings.Current;
+ curySettings.DfltSiteID = Convert.ToInt32(dic["DfltSiteID"]);
+ curySettings.BasePrice = Decimal.Parse(dic["BasePrice"], NumberStyles.Any, CultureInfo.InvariantCulture);
+ iiEntry.ItemCurySettings.Update(curySettings);
+
+ iiEntry.Actions.PressSave();
+ iiEntry.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("InventoryItem updated");
+ }
+ }
+ #endregion
+
+ var repairPriceGraph = PXGraph.CreateInstance();
+
+ #region RSSVRepairPrice
+ //Add data to RSSVRepairPrice
+ RSSVRepairPrice repairPrice = SelectFrom.View.ReadOnly.Select(repairPriceGraph);
+ if (repairPrice == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVRepairPrice.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVRepairPrice price = new RSSVRepairPrice
+ {
+ DeviceID = Convert.ToInt32(dic["DeviceID"]),
+ ServiceID = Convert.ToInt32(dic["ServiceID"]),
+ //Price = Decimal.Parse(dic["Price"], NumberStyles.Any, CultureInfo.InvariantCulture),
+ RepairItemLineCntr = Convert.ToInt32(dic["RepairItemLineCntr"])
+ };
+ repairPriceGraph.RepairPrices.Insert(price);
+ repairPriceGraph.Actions.PressSave();
+ repairPriceGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVRepairPrice updated");
+ }
+ }
+ #endregion
+
+ #region RSSVRepairItem
+ //Add data to RSSVRepairItem
+ RSSVRepairItem repairItem = SelectFrom.View.ReadOnly.Select(repairPriceGraph);
+ if (repairItem == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVRepairItem.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVRepairItem item = new RSSVRepairItem
+ {
+ ServiceID = Convert.ToInt32(dic["ServiceID"]),
+ DeviceID = Convert.ToInt32(dic["DeviceID"]),
+ LineNbr = Convert.ToInt32(dic["LineNbr"]),
+ RepairItemType = Convert.ToString(dic["RepairItemType"]),
+ InventoryID = Convert.ToInt32(dic["InventoryID"]),
+ Required = Convert.ToBoolean(Convert.ToInt32(dic["Required"])),
+ IsDefault = Convert.ToBoolean(Convert.ToInt32(dic["IsDefault"])),
+ BasePrice = Decimal.Parse(dic["BasePrice"], NumberStyles.Any, CultureInfo.InvariantCulture)
+ };
+ repairPriceGraph.RepairItems.Insert(item);
+ repairPriceGraph.Actions.PressSave();
+ repairPriceGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVRepairItem updated");
+ }
+ }
+ #endregion
+
+ #region RSSVLabor
+ //Add data to RSSVLabor
+ RSSVLabor labor = SelectFrom.View.ReadOnly.Select(repairPriceGraph);
+ if (labor == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVLabor.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVLabor priceLabor = new RSSVLabor
+ {
+ InventoryID = Convert.ToInt32(dic["InventoryID"]),
+ DeviceID = Convert.ToInt32(dic["DeviceID"]),
+ ServiceID = Convert.ToInt32(dic["ServiceID"]),
+ DefaultPrice = Decimal.Parse(dic["DefaultPrice"], NumberStyles.Any, CultureInfo.InvariantCulture),
+ Quantity = Decimal.Parse(dic["Quantity"], NumberStyles.Any, CultureInfo.InvariantCulture),
+ ExtPrice = Decimal.Parse(dic["ExtPrice"], NumberStyles.Any, CultureInfo.InvariantCulture)
+ };
+ repairPriceGraph.Labor.Insert(priceLabor);
+ repairPriceGraph.Actions.PressSave();
+ repairPriceGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVLabor updated");
+ }
+ }
+ #endregion
+
+ #region RSSVWarranty
+ //Add data to RSSVWarranty
+ RSSVWarranty warranty = SelectFrom.View.ReadOnly.Select(repairPriceGraph);
+ if (warranty == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVWarranty.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVWarranty priceWarranty = new RSSVWarranty
+ {
+ ContractID = Convert.ToInt32(dic["ContractID"]),
+ DeviceID = Convert.ToInt32(dic["DeviceID"]),
+ ServiceID = Convert.ToInt32(dic["ServiceID"]),
+ DefaultWarranty = Convert.ToBoolean(Convert.ToInt32(dic["DefaultWarranty"]))
+ };
+ repairPriceGraph.Warranty.Insert(priceWarranty);
+ repairPriceGraph.Actions.PressSave();
+ repairPriceGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVWarranty updated");
+ }
+ }
+ #endregion
+
+ #region RSSVStockItemDevice
+ //Add data to RSSVStockItemDevice
+ RSSVStockItemDevice stockItemDevice = SelectFrom.View.ReadOnly.Select(iiEntry);
+ if (stockItemDevice == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVStockItemDevice.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVStockItemDevice device = new RSSVStockItemDevice
+ {
+ DeviceID = Convert.ToInt32(dic["DeviceID"]),
+ InventoryID = Convert.ToInt32(dic["InventoryID"]),
+ };
+ iiEntry.GetExtension().CompatibleDevices.Insert(device);
+ iiEntry.Actions.PressSave();
+ iiEntry.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVStockItemDevice updated");
+ }
+ }
+ #endregion
+
+ #endregion
+
+
+ #region T220Data
+
+ var setupGraph = PXGraph.CreateInstance();
+
+ #region RSSVSetup
+ //Add data to RSSVSetup
+ RSSVSetup setup = SelectFrom.View.ReadOnly.Select(setupGraph);
+ if (setup == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVSetup.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+
+ RSSVSetup settings = new RSSVSetup
+ {
+ NumberingID = dic["NumberingID"],
+ WalkInCustomerID = Convert.ToInt32(dic["WalkInCustomerID"]),
+ DefaultEmployee = Convert.ToInt32(dic["DefaultEmployee"]),
+ PrepaymentPercent = Decimal.Parse(dic["PrepaymentPercent"], NumberStyles.Any, CultureInfo.InvariantCulture)
+ };
+ setupGraph.Setup.Insert(settings);
+ setupGraph.Actions.PressSave();
+ setupGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVSetup updated");
+ }
+ }
+ #endregion
+
+ var workOrderGraph = PXGraph.CreateInstance();
+
+ #region RSSVWorkOrder
+ //Add data to RSSVWorkOrder
+ RSSVWorkOrder workOrder = SelectFrom.View.ReadOnly.Select(workOrderGraph);
+ if (workOrder == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVWorkOrder.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v);
+ RSSVWorkOrder order = new RSSVWorkOrder
+ {
+ OrderNbr = dic["OrderNbr"],
+ CustomerID = Convert.ToInt32(dic["CustomerID"]),
+ DateCreated = Convert.ToDateTime(dic["DateCreated"]),
+ Status = dic["Status"],
+ Hold = Convert.ToBoolean(Convert.ToInt32(dic["Hold"])),
+ Description = dic["Description"],
+ DeviceID = Convert.ToInt32(dic["DeviceID"]),
+ ServiceID = Convert.ToInt32(dic["ServiceID"]),
+ //OrderTotal = Decimal.Parse(dic["OrderTotal"], NumberStyles.Any, CultureInfo.InvariantCulture),
+ RepairItemLineCntr = Convert.ToInt32(dic["RepairItemLineCntr"]),
+ Priority = dic["Priority"]
+ };
+ workOrderGraph.WorkOrders.Insert(order);
+ workOrderGraph.Actions.PressSave();
+ workOrderGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVWorkOrder updated");
+ }
+ }
+ #endregion
+
+ #region RSSVWorkOrderItem
+ //Add data to RSSVWorkOrderItem
+ RSSVWorkOrderItem workOrderItem = SelectFrom.View.ReadOnly.Select(workOrderGraph);
+ if (workOrderItem == null)
+ {
+ using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVWorkOrderItem.csv"))
+ {
+ string header = file.ReadLine();
+ if (header != null)
+ {
+ string[] headerParts = header.Split(';');
+ while (true)
+ {
+ string line = file.ReadLine();
+ if (line != null)
+ {
+ string[] lineParts = line.Split(';');
+ IDictionary dic = headerParts.Select((k, i) => new { k, v = lineParts[i] }).ToDictionary(x => x.k, x => x.v); //workOrderGraph.WorkOrders.Current = workOrderGraph.WorkOrders.Search(dic["OrderNbr"]);
+ RSSVWorkOrderItem orderItem = new RSSVWorkOrderItem
+ {
+ OrderNbr = dic["OrderNbr"],
+ LineNbr = Convert.ToInt32(dic["LineNbr"]),
+ RepairItemType = dic["RepairItemType"],
+ InventoryID = Convert.ToInt32(dic["InventoryID"]),
+ BasePrice = Decimal.Parse(dic["BasePrice"], NumberStyles.Any, CultureInfo.InvariantCulture)
+ };
+ workOrderGraph.RepairItems.Insert(orderItem);
+ workOrderGraph.Actions.PressSave();
+ workOrderGraph.Clear();
+ }
+ else break;
+ }
+ }
+ this.WriteLog("RSSVWorkOrderItem updated");
+ }
+ }
+ #endregion
+
+ #region RSSVWorkOrderLabor
+ //Add data to RSSVWorkOrderLabor
+ RSSVWorkOrderLabor workOrderLabor = SelectFrom