From 862e582f731c6baab8bd39654c692d7ec49f1c4a Mon Sep 17 00:00:00 2001 From: Mehran Qadri Date: Wed, 24 Jun 2026 12:32:35 -0400 Subject: [PATCH 1/4] EDU-9495: Committed starter and final version of the Test SDK project needed for the AI-Assisted Diagnostics and Testing for Acumatica Customizations workshop/help guide --- .../.gitattributes | 63 + .../.gitignore | 363 ++++ .../AIAssistedDiagnostics.ModernUI.Tests.sln | 25 + ...IAssistedDiagnostics.ModernUI.Tests.csproj | 71 + .../Helpers/TestData.cs | 13 + .../Program.cs | 9 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 6 + .../Properties/launchSettings.json | 9 + .../SETUP.md | 605 +++++++ .../Test.cs | 18 + .../Tests/RS301000_LaborQuantityTests.cs | 64 + .../Tests/StartTests.cs | 31 + .../Wrappers/Custom/RepairWorkOrdersScreen.cs | 74 + .../Wrappers/Generated/RS/RS301000.cs | 1502 +++++++++++++++++ .../Generated/RS/RS301000_response.json | 1 + .../.gitattributes | 63 + .../.gitignore | 363 ++++ .../AIAssistedDiagnostics.ModernUI.Tests.sln | 25 + ...IAssistedDiagnostics.ModernUI.Tests.csproj | 71 + .../Helpers/TestData.cs | 13 + .../Program.cs | 9 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 6 + .../Properties/launchSettings.json | 9 + .../SETUP.md | 299 ++++ .../Test.cs | 18 + .../Tests/RS301000_LaborQuantityTests.cs | 44 + .../Tests/StartTests.cs | 24 + .../Wrappers/Custom/RepairWorkOrdersScreen.cs | 74 + .../Wrappers/Generated/RS/RS301000.cs | 1502 +++++++++++++++++ .../Generated/RS/RS301000_response.json | 1 + 32 files changed, 5427 insertions(+) create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/FinalProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitattributes create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/.gitignore create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.sln create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests.csproj create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Helpers/TestData.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Program.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.Designer.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/Settings.settings create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Properties/launchSettings.json create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/SETUP.md create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Test.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/RS301000_LaborQuantityTests.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Tests/StartTests.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Custom/RepairWorkOrdersScreen.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/StarterProject/AIAssistedDiagnostics.ModernUI.Tests/AIAssistedDiagnostics.ModernUI.Tests/Wrappers/Generated/RS/RS301000_response.json 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/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 From 7641b1b6d5316c2fada04d6d3058fe7a95c00a04 Mon Sep 17 00:00:00 2001 From: Mehran Qadri Date: Wed, 24 Jun 2026 12:48:56 -0400 Subject: [PATCH 2/4] EDU-9495: Committed the project needed for completing the activities related to the Unit Test Framework for the AI-Assisted Diagnostics and Testing for Acumatica Customizations workshop/help guide --- .../InventoryItemMaintTests.cs | 46 ++ .../PhoneRepairShop_Code.Tests.csproj | 61 ++ .../Properties/AssemblyInfo.cs | 36 ++ .../RSSVRepairPriceMaintTests.cs | 143 +++++ .../RSSVRepairServiceMaintTests.cs | 45 ++ .../RSSVWorkOrderEntryTests.cs | 167 ++++++ .../PhoneRepairShop_Code.Tests/app.config | 35 ++ .../packages.config | 17 + .../DAC/InventoryItemExtensions.cs | 65 +++ .../PhoneRepairShop_Code/DAC/RSSVDevice.cs | 118 ++++ .../PhoneRepairShop_Code/DAC/RSSVLabor.cs | 113 ++++ .../DAC/RSSVRepairItem.cs | 175 ++++++ .../DAC/RSSVRepairPrice.cs | 118 ++++ .../DAC/RSSVRepairService.cs | 111 ++++ .../PhoneRepairShop_Code/DAC/RSSVSetup.cs | 97 ++++ .../DAC/RSSVStockItemDevice.cs | 81 +++ .../PhoneRepairShop_Code/DAC/RSSVWarranty.cs | 125 +++++ .../PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs | 216 ++++++++ .../DAC/RSSVWorkOrderItem.cs | 126 +++++ .../DAC/RSSVWorkOrderLabor.cs | 104 ++++ .../PhoneRepairShop_Code/Data/InputData.cs | 521 ++++++++++++++++++ .../PhoneRepairShop_Code/Helper/Constants.cs | 44 ++ .../PhoneRepairShop_Code/Helper/Messages.cs | 60 ++ .../InventoryItemMaint.cs | 40 ++ .../PhoneRepairShop_code.csproj | 60 ++ .../Properties/AssemblyInfo.cs | 34 ++ .../PhoneRepairShop_Code/RSSVDeviceMaint.cs | 15 + .../RSSVRepairPriceMaint.cs | 225 ++++++++ .../RSSVRepairServiceMaint.cs | 44 ++ .../PhoneRepairShop_Code/RSSVSetupMaint.cs | 32 ++ .../RSSVWorkOrderEntry.cs | 206 +++++++ .../PhoneRepairShop/PhoneRepairShop_code.sln | 56 ++ .../PhoneRepairShop/Solution.bat | 1 + .../PhoneRepairShop/Solution.lnk | Bin 0 -> 1144 bytes .../PhoneRepairShop/folder.lnk | Bin 0 -> 624 bytes 35 files changed, 3337 insertions(+) create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.bat create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.lnk create mode 100644 UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/folder.lnk diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs new file mode 100644 index 00000000..62f2e49e --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj new file mode 100644 index 00000000..51b1872f --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..746f44b0 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs new file mode 100644 index 00000000..30ffe8d0 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs new file mode 100644 index 00000000..dadc2fe3 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs new file mode 100644 index 00000000..18209e28 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config new file mode 100644 index 00000000..50370a18 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config new file mode 100644 index 00000000..e14011d3 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs new file mode 100644 index 00000000..d901e4ce --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs new file mode 100644 index 00000000..d4ca23c5 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs new file mode 100644 index 00000000..8f760b17 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs new file mode 100644 index 00000000..be8c71ad --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs new file mode 100644 index 00000000..18521955 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs new file mode 100644 index 00000000..931974d3 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs new file mode 100644 index 00000000..73df82cd --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs new file mode 100644 index 00000000..9bc79284 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs new file mode 100644 index 00000000..ebdd5ff8 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs new file mode 100644 index 00000000..9ceb09ea --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs new file mode 100644 index 00000000..e34002a3 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs new file mode 100644 index 00000000..83fa36fe --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs new file mode 100644 index 00000000..9aad8216 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/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.View.ReadOnly.Select(workOrderGraph); + if (workOrderLabor == null) + { + using (StreamReader file = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "InputData\\RSSVWorkOrderLabor.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); + RSSVWorkOrderLabor laborItem = new RSSVWorkOrderLabor + { + OrderNbr = dic["OrderNbr"], + InventoryID = Convert.ToInt32(dic["InventoryID"]), + 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) + }; + workOrderGraph.Labor.Insert(laborItem); + workOrderGraph.Actions.PressSave(); + workOrderGraph.Clear(); + } + else break; + } + } + this.WriteLog("RSSVWorkOrderLabor updated"); + } + } + #endregion + + + + #endregion + } + } +} \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs new file mode 100644 index 00000000..2c045ed0 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PhoneRepairShop +{ + public static class RepairComplexity + { + public const string Low = "L"; + public const string Medium = "M"; + public const string High = "H"; + } + + //Constants for the repair item types + public static class RepairItemTypeConstants + { + public const string Battery = "BT"; + public const string Screen = "SR"; + public const string ScreenCover = "SC"; + public const string BackCover = "BC"; + public const string Motherboard = "MB"; + } + + //Constants for the priority of repair work orders + public static class WorkOrderPriorityConstants + { + public const string High = "H"; + public const string Medium = "M"; + public const string Low = "L"; + } + + //Constants for the statuses of repair work orders + public static class WorkOrderStatusConstants + { + public const string OnHold = "OH"; + public const string PendingPayment = "PP"; + public const string ReadyForAssignment = "RA"; + public const string Assigned = "AS"; + public const string Completed = "CM"; + public const string Paid = "PD"; + } +} diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs new file mode 100644 index 00000000..19bcbdc4 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using PX.Common; + +namespace PhoneRepairShop +{ + [PXLocalizable()] + public static class Messages + { + //DAC names + public const string RSSVDevice = "Serviced Device"; + public const string RSSVRepairService = "Repair Service"; + public const string RSSVRepairPrice = "Repair Price"; + public const string RSSVRepairItem = "Repair Item"; + public const string RSSVStockItemDevice = "Device Compatible with Stock Item"; + public const string RSSVLabor = "Repair Labor"; + public const string RSSVWarranty = "Warranty"; + public const string RSSVWorkOrder = "Repair Work Order"; + public const string RSSVWorkOrderItem = "Repair Item Included in Repair Work Order"; + public const string RSSVWorkOrderLabor = "Work Order Labor"; + public const string RSSVSetup = "Repair Work Order Preferences"; + + //Complexity of repair and work order priorities + public const string High = "High"; + public const string Medium = "Medium"; + public const string Low = "Low"; + + //Repair item types + public const string Battery = "Battery"; + public const string Screen = "Screen"; + public const string ScreenCover = "Screen Cover"; + public const string BackCover = "Back Cover"; + public const string Motherboard = "Motherboard"; + + //Work order statuses + public const string OnHold = "On Hold"; + public const string PendingPayment = "Pending Payment"; + public const string ReadyForAssignment = "Ready for Assignment"; + public const string Assigned = "Assigned"; + public const string Completed = "Completed"; + public const string Paid = "Paid"; + + //Messages + public const string StockItemIncorrectRepairItemType = + "This stock item has a repair item type that differs from {0}."; + public const string ItemIsStock = "This item is a stock item."; + public const string DefaultWarrantyCanNotBeDeleted = + "The default warranty cannot be deleted."; + public const string QuantityCannotBeNegative = + "The value in the Quantity column cannot be negative."; + public const string QuantityTooSmall = @"The value in the Quantity column + has been corrected to the minimum possible value."; + public const string PriorityTooLow = + @"The priority must be at least Medium for + the repair service that requires preliminary check."; + } +} diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs new file mode 100644 index 00000000..67e7f6da --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs @@ -0,0 +1,40 @@ +using PX.Objects.IN; +using PX.Data; +using PhoneRepairShop; +using PX.Data.BQL.Fluent; + +namespace PhoneRepairShop +{ + // Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active + public class InventoryItemMaint_Extension : PXGraphExtension + { + #region Data Views + public SelectFrom. + Where>.View + CompatibleDevices = null!; + #endregion + + #region Event Handlers + + protected void _(Events.RowSelected e) + { + if (e.Row == null) return; + InventoryItem item = e.Row; + InventoryItemExt itemExt = PXCache. + GetExtension(item); + bool enableFields = itemExt != null && + itemExt.UsrRepairItem == true; + //Make the Repair Item Type box available + //when the Repair Item check box is selected. + PXUIFieldAttribute.SetEnabled( + e.Cache, e.Row, enableFields); + + //Display the Compatible Devices tab when the Repair Item check box + //is selected. + CompatibleDevices.Cache.AllowSelect = enableFields; + } + + #endregion + } +} \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj new file mode 100644 index 00000000..56c08b6a --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj @@ -0,0 +1,60 @@ + + + + net48 + Library + PhoneRepairShop_Code + PhoneRepairShop_Code + false + bin\$(Configuration) + false + 26.100.0217 + 26.100.0217 + 9.0 + enable + Copyright © 2005-2026 Acumatica, Inc. All rights reserved. + + + + ..\..\..\..\Bin\PX.Common.dll + False + + + ..\..\..\..\Bin\PX.Common.Std.dll + False + + + ..\..\..\..\Bin\PX.CS.Contracts.dll + False + + + ..\..\..\..\Bin\PX.Data.dll + False + + + ..\..\..\..\Bin\PX.Data.BQL.Fluent.dll + False + + + ..\..\..\..\Bin\PX.Objects.dll + False + + + ..\..\..\..\Bin\PX.Web.Customization.dll + False + + + + + 10.0.7 + + + 6.1.2 + + + + + + + + \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..4dca9b17 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +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("Addon")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[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("bb154e41-e6ba-48da-bf16-113ef7bbbc37")] + +// 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/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs new file mode 100644 index 00000000..20a8adba --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using PX.Data; +using PX.Data.BQL.Fluent; + +namespace PhoneRepairShop +{ + public class RSSVDeviceMaint : PXGraph + { + public SelectFrom.View ServDevices = null!; + } +} diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs new file mode 100644 index 00000000..facb32d8 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs @@ -0,0 +1,225 @@ +using System; +using PX.Data; +using PX.Data.BQL.Fluent; +using PX.Objects.IN; +using System.Linq; +using PX.Objects.CT; + +namespace PhoneRepairShop +{ + public class RSSVRepairPriceMaint : + PXGraph + { + #region Data Views + public SelectFrom.View RepairPrices = null!; + + public SelectFrom. + Where. + And>>.View + RepairItems = null!; + + public SelectFrom. + Where. + And>>.View + Labor = null!; + + public SelectFrom. + Where. + And>>. + OrderBy.View + Warranty = null!; + + //The view for the default warranty + public SelectFrom. + Where>. + View DefaultWarranty = null!; + + public PXFilter MasterView; + public PXFilter DetailsView; + + [Serializable] + public class MasterTable : PXBqlTable, IBqlTable + { + + } + + [Serializable] + public class DetailsTable : PXBqlTable, IBqlTable + { + + } + #endregion + + #region Event Handlers + //Update the price and repair item type when the inventory ID of + //the repair item is updated. + protected void _(Events.FieldUpdated e) + { + RSSVRepairItem row = e.Row; + + if (row.InventoryID != null && row.RepairItemType == null) + { + //Use the PXSelector attribute to select the stock item. + var item = PXSelectorAttribute. + Select(e.Cache, row) + as InventoryItem; + //Copy the repair item type from the stock item to the row. + var itemExt = item?.GetExtension(); + if (itemExt != null) e.Cache.SetValueExt( + row, itemExt.UsrRepairItemType); + } + //Trigger the FieldDefaulting event handler for basePrice. + e.Cache.SetDefaultExt(e.Row); + } + + //Set the value of the Price column. + protected void _(Events.FieldDefaulting e) + { + RSSVRepairItem row = e.Row; + if (row.InventoryID != null) + { + //Use the PXSelector attribute to select the stock item. + var item = PXSelectorAttribute. + Select(e.Cache, row) + as InventoryItem; + //Retrieve the base price for the stock item. + var curySettings = InventoryItemCurySettings.PK.Find( + this, item?.InventoryID, Accessinfo.BaseCuryID ?? "USD"); + //Copy the base price from the stock item to the row. + if (curySettings != null) e.NewValue = curySettings.BasePrice; + } + } + + //When Repair Item Type is updated, + //clear the values of the Inventory ID and Default columns and + //trigger FieldDefaulting for the Required column. + protected void _(Events.FieldUpdated e) + { + RSSVRepairItem row = e.Row; + e.Cache.SetDefaultExt(row); + if (e.OldValue != null) + { + e.Cache.SetValueExt(row, null); + e.Cache.SetValue(row, false); + } + } + + //Set the value of the Required column. + protected void _(Events.FieldDefaulting e) + { + RSSVRepairItem row = e.Row; + if (row.RepairItemType != null) + { + // Use LINQ to check whether there are any repair items + // with the same repair item type. + var repairItem = (RSSVRepairItem)RepairItems.Select() + .FirstOrDefault(item => + item.GetItem().RepairItemType == row.RepairItemType && + item.GetItem().LineNbr != row.LineNbr); + //Copy the Required value from the previous records. + e.NewValue = repairItem?.Required; + } + } + + //Update the IsDefault and Required fields of other records + //with the same repair item type when these fields are updated. + protected void _(Events.RowUpdated e) + { + if (e.Cache.ObjectsEqual(e.Row, e.OldRow)) + return; + + RSSVRepairItem row = e.Row; + //Use LINQ to select the repair items + // with the same repair item type as in the updated row. + var repairItems = RepairItems.Select() + .Where(item => item.GetItem().RepairItemType == + row.RepairItemType); + foreach (RSSVRepairItem repairItem in repairItems) + { + if (repairItem.LineNbr == row.LineNbr) continue; + + //Set IsDefault to false for all other items. + if (row.IsDefault == true && repairItem.IsDefault == true) + { + repairItem.IsDefault = false; + RepairItems.Update(repairItem); + } + //Make the Required field identical for all items of the type. + if (row.Required != e.OldRow.Required && + repairItem.Required != row.Required) + { + repairItem.Required = row.Required; + RepairItems.Update(repairItem); + } + } + //Refresh the UI. + RepairItems.View.RequestRefresh(); + } + + //Insert the default detail record. + protected virtual void _(Events.RowInserted e) + { + if (Warranty.Select().Count == 0) + { + bool oldDirty = Warranty.Cache.IsDirty; + // Retrieve the default warranty. + Contract defaultWarranty = (Contract)DefaultWarranty.Select(); + if (defaultWarranty != null) + { + RSSVWarranty line = new RSSVWarranty(); + line.ContractID = defaultWarranty.ContractID; + line.DefaultWarranty = true; + // Insert the data record into + // the cache of the Warranty data view. + Warranty.Insert(line); + // Clear the flag that indicates in the UI whether the cache + // contains changes. + Warranty.Cache.IsDirty = oldDirty; + } + } + } + + //Prevent removal of the default warranty. + protected virtual void _(Events.RowDeleting e) + { + if (e.Row.DefaultWarranty != true) return; + + if (e.ExternalCall && RepairPrices.Current != null && + RepairPrices.Cache.GetStatus(RepairPrices.Current) != PXEntryStatus.Deleted) + { + throw new PXException(Messages.DefaultWarrantyCanNotBeDeleted); + } + } + + //Make the default warranty unavailable for editing. + protected virtual void _(Events.RowSelected e) + { + if (e.Row == null) return; + RSSVWarranty line = e.Row; + PXUIFieldAttribute.SetEnabled(e.Cache, + line, line.DefaultWarranty != true); + } + #endregion + + #region Constant + //The FBQL constant for the free warranty that is inserted by default + public const string DefaultWarrantyConstant = "DFLTWARRNT"; + public class defaultWarranty : PX.Data.BQL.BqlString.Constant + { + public defaultWarranty() + : base(DefaultWarrantyConstant) + { + } + } + #endregion + } +} \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs new file mode 100644 index 00000000..e4e59951 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs @@ -0,0 +1,44 @@ +using System; +using PX.Data; +using PX.Data.BQL.Fluent; + +namespace PhoneRepairShop +{ + public class RSSVRepairServiceMaint : PXGraph + { + + protected void _(Events.FieldUpdated e) + { + var row = e.Row; + row.PreliminaryCheck = !(row.WalkInService == true); + } + + protected void _(Events.FieldUpdated e) + { + var row = e.Row; + row.WalkInService = !(row.PreliminaryCheck == true); + } + + public PXSave Save = null!; + public PXCancel Cancel = null!; + + public SelectFrom.View RepairService = null!; + + public PXFilter MasterView; + public PXFilter DetailsView; + + [Serializable] + public class MasterTable : PXBqlTable, IBqlTable + { + + } + + [Serializable] + public class DetailsTable : PXBqlTable, IBqlTable + { + + } + } +} \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs new file mode 100644 index 00000000..62aa6253 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs @@ -0,0 +1,32 @@ +using PX.Data; +using PX.Data.BQL.Fluent; +using System; + +namespace PhoneRepairShop +{ + public class RSSVSetupMaint : PXGraph + { + public PXSave Save = null!; + public PXCancel Cancel = null!; + + public SelectFrom.View Setup = null!; + + + public PXFilter MasterView; + public PXFilter DetailsView; + + [Serializable] + public class MasterTable : PXBqlTable, IBqlTable + { + + } + + [Serializable] + public class DetailsTable : PXBqlTable, IBqlTable + { + + } + + + } +} \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs new file mode 100644 index 00000000..10dae339 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs @@ -0,0 +1,206 @@ +using PX.Data; +using PX.Data.BQL.Fluent; +using PX.Objects.IN; +using System; +using PX.Data.BQL; + +namespace PhoneRepairShop +{ + public class RSSVWorkOrderEntry : PXGraph + { + #region Views + + //The primary view + public SelectFrom.View WorkOrders = null!; + + //The view for the Repair Items tab + public SelectFrom. + Where>.View + RepairItems = null!; + + //The view for the Labor tab + public SelectFrom. + Where>.View + Labor = null!; + + //The view for the auto-numbering of records + public PXSetup AutoNumSetup = null!; + #endregion + + #region Graph constructor + public RSSVWorkOrderEntry() + { + RSSVSetup setup = AutoNumSetup.Current; + } + #endregion + + + public PXFilter MasterView; + public PXFilter DetailsView; + + [Serializable] + public class MasterTable : PXBqlTable, IBqlTable + { + + } + + [Serializable] + public class DetailsTable : PXBqlTable, IBqlTable + { + + } + + #region Events + //Copy repair items and labor items from the Services and Prices form. + protected virtual void _(Events.RowUpdated e) + { + if (WorkOrders.Cache.GetStatus(e.Row) != PXEntryStatus.Inserted || + e.Cache.ObjectsEqual(e.Row, e.OldRow)) + return; + + if (e.Row.ServiceID == null || e.Row.DeviceID == null || + IsCopyPasteContext || RepairItems.Select().Count != 0 || + Labor.Select().Count != 0) + return; + + //Retrieve the default repair items + var repairItems = SelectFrom. + Where. + And>> + .View.Select(this); + //Insert default repair items + foreach (RSSVRepairItem item in repairItems) + { + RSSVWorkOrderItem orderItem = RepairItems.Insert(); + orderItem.RepairItemType = item.RepairItemType; + orderItem.InventoryID = item.InventoryID; + orderItem.BasePrice = item.BasePrice; + RepairItems.Update(orderItem); + } + + //Retrieve the default labor items + var laborItems = SelectFrom. + Where. + And>> + .View.Select(this); + //Insert the default labor items + foreach (RSSVLabor item in laborItems) + { + RSSVWorkOrderLabor orderItem = new RSSVWorkOrderLabor(); + orderItem.InventoryID = item.InventoryID; + orderItem = Labor.Insert(orderItem); + orderItem.DefaultPrice = item.DefaultPrice; + orderItem.Quantity = item.Quantity; + orderItem.ExtPrice = item.ExtPrice; + Labor.Update(orderItem); + } + } + + //Update price and repair item type when inventory ID of repair item is updated. + protected void _(Events.FieldUpdated e) + { + RSSVWorkOrderItem row = e.Row; + if (row.InventoryID != null && row.RepairItemType == null) + { + //Use the PXSelector attribute to select the stock item. + var item = PXSelectorAttribute.Select< + RSSVWorkOrderItem.inventoryID>(e.Cache, row) as InventoryItem; + //Copy the repair item type from the stock item to the row. + var itemExt = item?.GetExtension(); + if (itemExt != null) row.RepairItemType = itemExt.UsrRepairItemType; + } + e.Cache.SetDefaultExt(e.Row); + } + + protected void _(Events.FieldDefaulting e) + { + RSSVWorkOrderItem row = e.Row; + if (row.InventoryID == null) return; + //Use the PXSelector attribute to select the stock item. + var item = PXSelectorAttribute.Select(e.Cache, row) as InventoryItem; + //Retrieve the base price for the stock item. + var curySettings = InventoryItemCurySettings.PK.Find( + this, item?.InventoryID, Accessinfo.BaseCuryID ?? "USD"); + //Copy the base price from the stock item to the row. + if (curySettings != null) e.NewValue = curySettings.BasePrice; + } + + //Validate that Quantity is greater than or equal to 0 and + //correct the value to the default if the value is less than the default. + protected virtual void _(Events.FieldVerifying e) + { + if (e.Row == null || e.NewValue == null) return; + + if ((decimal)e.NewValue < 0) + { + //Throwing an exception to cancel the assignment + //of the new value to the field + throw new PXSetPropertyException(e.Row, + Messages.QuantityCannotBeNegative); + } + + var workOrder = WorkOrders.Current; + if (workOrder != null) + { + //Retrieving the default labor item related to the work order labor + RSSVLabor labor = SelectFrom. + Where. + And>. + And>> + .View.Select(this, workOrder.ServiceID, workOrder.DeviceID, + e.Row.InventoryID); + if (labor != null && (decimal)e.NewValue < labor.Quantity) + { + //Raising the ExceptionHandling event for the Quantity field + //to attach the exception object to the field + e.Cache.RaiseExceptionHandling( + e.Row, e.NewValue, new PXSetPropertyException(e.Row, + Messages.QuantityTooSmall, PXErrorLevel.Warning)); + } + } + } + + //Display an error if the priority is too low for the selected service + protected virtual void _(Events.RowUpdating e) + { + // The modified data record (not in the cache yet) + RSSVWorkOrder row = e.NewRow; + // The data record that is stored in the cache + RSSVWorkOrder originalRow = e.Row; + + if (!e.Cache.ObjectsEqual(row, originalRow)) + { + if (row.Priority == WorkOrderPriorityConstants.Low) + { + //Obtain the service record + RSSVRepairService service = SelectFrom. + Where>. + View.Select(this, row.ServiceID); + + if (service != null && service.PreliminaryCheck == true) + { + //Display the error for the Priority field + WorkOrders.Cache.RaiseExceptionHandling< + RSSVWorkOrder.priority>(row, originalRow.Priority, + new PXSetPropertyException(row, Messages.PriorityTooLow)); + + //Assign the proper priority + e.NewRow.Priority = WorkOrderPriorityConstants.Medium; + } + } + } + } + #endregion + } +} \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln new file mode 100644 index 00000000..12b91ce1 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln @@ -0,0 +1,56 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32901.215 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PhoneRepairShop", "..\..\..\", "{511A7860-082C-42D2-BB57-8FD0AD5F6C6F}" + ProjectSection(WebsiteProperties) = preProject + TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.8" + ProjectReferences = "{9BC6D61A-5D4B-4D57-BC6B-5E3F9D04377E}|PhoneRepairShop_Code.dll;" + Debug.AspNetCompiler.VirtualPath = "/localhost_4445" + Debug.AspNetCompiler.PhysicalPath = "..\..\..\..\PhoneRepairShop\" + Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_4445\" + Debug.AspNetCompiler.Updateable = "true" + Debug.AspNetCompiler.ForceOverwrite = "true" + Debug.AspNetCompiler.FixedNames = "false" + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.VirtualPath = "/localhost_4445" + Release.AspNetCompiler.PhysicalPath = "..\..\..\..\PhoneRepairShop\" + Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_4445\" + Release.AspNetCompiler.Updateable = "true" + Release.AspNetCompiler.ForceOverwrite = "true" + Release.AspNetCompiler.FixedNames = "false" + Release.AspNetCompiler.Debug = "False" + VWDPort = "4445" + VWDDynamicPort = "false" + SlnRelativePath = "..\..\..\..\PhoneRepairShop\" + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhoneRepairShop_Code", "PhoneRepairShop_Code\PhoneRepairShop_Code.csproj", "{9BC6D61A-5D4B-4D57-BC6B-5E3F9D04377E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhoneRepairShop_Code.Tests", "PhoneRepairShop_Code.Tests\PhoneRepairShop_Code.Tests.csproj", "{47B0F86E-9132-45D8-B3DC-B831C1842AFF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {511A7860-082C-42D2-BB57-8FD0AD5F6C6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {511A7860-082C-42D2-BB57-8FD0AD5F6C6F}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {511A7860-082C-42D2-BB57-8FD0AD5F6C6F}.Release|Any CPU.Build.0 = Debug|Any CPU + {9BC6D61A-5D4B-4D57-BC6B-5E3F9D04377E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BC6D61A-5D4B-4D57-BC6B-5E3F9D04377E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BC6D61A-5D4B-4D57-BC6B-5E3F9D04377E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BC6D61A-5D4B-4D57-BC6B-5E3F9D04377E}.Release|Any CPU.Build.0 = Release|Any CPU + {47B0F86E-9132-45D8-B3DC-B831C1842AFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47B0F86E-9132-45D8-B3DC-B831C1842AFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47B0F86E-9132-45D8-B3DC-B831C1842AFF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47B0F86E-9132-45D8-B3DC-B831C1842AFF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A6639F98-D64E-4CE0-AF0F-64E58393011A} + EndGlobalSection +EndGlobal diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.bat b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.bat new file mode 100644 index 00000000..46ba2a16 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.bat @@ -0,0 +1 @@ +"C:\TCourseInstances\SmartFix_T280\App_Data\Projects\PhoneRepairShop_Code\PhoneRepairShop_Code.sln" \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.lnk b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.lnk new file mode 100644 index 0000000000000000000000000000000000000000..9480423ceb8df3864b2b11206283ea0060cca4a4 GIT binary patch literal 1144 zcma)4K}Zx~6n<+RT%%fR)0D!cEo55Qv@B zNL-07QY5vo5OkQ+5Z*X!wYN5|t9 zIvebkoJ-pu5_MWhL3lssAu%54kM>VvD@1PEOTSh(qGPjs=EtqR)B*SkuLIGP-tQ90 zAemIkSvF24PLI-aW z6eNwNz-A(|S%w^z(z1sFx;`9|^D@!pe^^S(TtRk?Sw7aVeETs#0kG&ajJlZ#ze9f& zc}e&>;32`#vPvos(rx4~b9~0gudle_y*0=eo{f+IwHjriHw9!{vr*B!B>ZILNGuwT zb7zJsnt7j%k>9@Jj-RSQKA1cVjex-Si4*c_bQDOu4S6e5swU`&Nz(z z#9)+YbO+W4-jcyh9fRGgL>^bp+hM%sVT~|mEBuj*9z?>ZiiWJ_ z)ZDl!CH1tNSHz$;WtfU7RUcTYzK0}aw44%GbXheL8BHG!YH4N1O}{w-IY%glUMW!K zqicwx(5YI};$_oh=*5B_DMfny a#h%;uk7GZ>R1w%+xdDU4YvhC-xBXu-ru8`h literal 0 HcmV?d00001 diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/folder.lnk b/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/folder.lnk new file mode 100644 index 0000000000000000000000000000000000000000..9d5055ec1481b44958e9d63a5e01630f34cf92f8 GIT binary patch literal 624 zcmeZaU|?VrVFHp23TgAW?As8_XhG5QwfU_L}3?V^|o_?NnKp__fP6if+ z_xo=8rL}|P^nj||lKFrnGeR?%C6>a=7{XA*kjRk9kO#);48=eh35GPd+3$d6hX%Mf zhPZ;v_Jf)YGIv72JFwYv_HzLBn4_89+276(%22?N0yMpZA(bJ7!I>eSp%iFaF^~tb zg@M5fs7nTjK|ukcb%7WJJb_pch(Ru%@HKG>C^#8_!4OiEn3l&IEK=>t+RyS^BEpb>Sro69LT!=H*ozs@P;g#V0R}Zen$@`iR zl6M6f!wEFs5=a{c2Lx{v%XL}XTi~(W!$EI}ZAFhPP&@- Date: Wed, 24 Jun 2026 12:52:33 -0400 Subject: [PATCH 3/4] EDU-9495: Renamed the root folder for the project needed for completing the activities related to the Unit Test Framework for the AI-Assisted Diagnostics and Testing for Acumatica Customizations workshop/help guide --- .../InventoryItemMaintTests.cs | 0 .../PhoneRepairShop_Code.Tests.csproj | 0 .../Properties/AssemblyInfo.cs | 0 .../RSSVRepairPriceMaintTests.cs | 0 .../RSSVRepairServiceMaintTests.cs | 0 .../RSSVWorkOrderEntryTests.cs | 0 .../PhoneRepairShop_Code.Tests/app.config | 0 .../PhoneRepairShop_Code.Tests/packages.config | 0 .../DAC/InventoryItemExtensions.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVDevice.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVLabor.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVRepairItem.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVRepairService.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVSetup.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVWarranty.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs | 0 .../PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs | 0 .../PhoneRepairShop_Code/Data/InputData.cs | 0 .../PhoneRepairShop_Code/Helper/Constants.cs | 0 .../PhoneRepairShop_Code/Helper/Messages.cs | 0 .../PhoneRepairShop_Code/InventoryItemMaint.cs | 0 .../PhoneRepairShop_code.csproj | 0 .../PhoneRepairShop_Code/Properties/AssemblyInfo.cs | 0 .../PhoneRepairShop_Code/RSSVDeviceMaint.cs | 0 .../PhoneRepairShop_Code/RSSVRepairPriceMaint.cs | 0 .../PhoneRepairShop_Code/RSSVRepairServiceMaint.cs | 0 .../PhoneRepairShop_Code/RSSVSetupMaint.cs | 0 .../PhoneRepairShop_Code/RSSVWorkOrderEntry.cs | 0 .../PhoneRepairShop/PhoneRepairShop_code.sln | 0 .../DefectiveSolution/PhoneRepairShop/Solution.bat | 0 .../DefectiveSolution/PhoneRepairShop/Solution.lnk | Bin .../DefectiveSolution/PhoneRepairShop/folder.lnk | Bin 35 files changed, 0 insertions(+), 0 deletions(-) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/Solution.bat (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/Solution.lnk (100%) rename UnitTesting/{AIAssistedDiagnostics => AIAssistedDiagnosticsAndTesting}/DefectiveSolution/PhoneRepairShop/folder.lnk (100%) diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/InventoryItemMaintTests.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/PhoneRepairShop_Code.Tests.csproj diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/Properties/AssemblyInfo.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairPriceMaintTests.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVRepairServiceMaintTests.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/app.config diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code.Tests/packages.config diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/InventoryItemExtensions.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVDevice.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVLabor.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairItem.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairPrice.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVRepairService.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVSetup.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVStockItemDevice.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWarranty.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrder.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderItem.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/DAC/RSSVWorkOrderLabor.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Data/InputData.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Constants.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Helper/Messages.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/InventoryItemMaint.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/PhoneRepairShop_code.csproj diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/Properties/AssemblyInfo.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVDeviceMaint.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairPriceMaint.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVRepairServiceMaint.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVSetupMaint.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_Code/RSSVWorkOrderEntry.cs diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/PhoneRepairShop_code.sln diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.bat b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/Solution.bat similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.bat rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/Solution.bat diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.lnk b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/Solution.lnk similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/Solution.lnk rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/Solution.lnk diff --git a/UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/folder.lnk b/UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/folder.lnk similarity index 100% rename from UnitTesting/AIAssistedDiagnostics/DefectiveSolution/PhoneRepairShop/folder.lnk rename to UnitTesting/AIAssistedDiagnosticsAndTesting/DefectiveSolution/PhoneRepairShop/folder.lnk From 27fc082d51732d5a15776e43ce76c241818aa351 Mon Sep 17 00:00:00 2001 From: Mehran Qadri Date: Wed, 24 Jun 2026 16:06:00 -0400 Subject: [PATCH 4/4] EDU-9495: Added code snippets and prompts for the AI-Assisted Diagnostics and Testing for Acumatica Customizations workshop/help guide --- .../Lesson2.3_Step1/StartTests.cs | 36 +++++++++++++++++ .../Lesson2.3_Step2/StartTests.cs | 37 +++++++++++++++++ .../Lesson2.3_Step3/StartTests.cs | 36 +++++++++++++++++ .../Prompt_Inspect_RS301000_wrapper.txt | 21 ++++++++++ ...labor_quantity_restoration_validation_.txt | 40 +++++++++++++++++++ .../Prompt_Explain_generated_test.txt | 14 +++++++ .../Prompt_Classify_test_failure.txt | 39 ++++++++++++++++++ .../Prompt_Classify_failure_pattern.txt | 21 ++++++++++ .../Prompt_Inspect_the_failure.txt | 32 +++++++++++++++ .../Prompt_Optional_Copilot_fix_failure.txt | 12 ++++++ .../Prompt_Generate_regression_test.txt | 31 ++++++++++++++ 11 files changed, 319 insertions(+) create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step1/StartTests.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step2/StartTests.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/Code Snippets/Lesson2.3_Step3/StartTests.cs create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.1_Step5/Prompt_Inspect_RS301000_wrapper.txt create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step2/Prompt_Draft_UITest_for_labor_quantity_restoration_validation_.txt create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.2_Step5/Prompt_Explain_generated_test.txt create mode 100644 ModernUI/AIAssistedTestingAndDiagnostics/Prompts/Lesson2.3_Step6/Prompt_Classify_test_failure.txt create mode 100644 UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step3/Prompt_Classify_failure_pattern.txt create mode 100644 UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step4/Prompt_Inspect_the_failure.txt create mode 100644 UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step2/Prompt_Optional_Copilot_fix_failure.txt create mode 100644 UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step3/Prompt_Generate_regression_test.txt 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/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/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step3/Prompt_Classify_failure_pattern.txt b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step3/Prompt_Classify_failure_pattern.txt new file mode 100644 index 00000000..51589899 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step3/Prompt_Classify_failure_pattern.txt @@ -0,0 +1,21 @@ +Classify this Acumatica unit test failure. + +Failure output: + - Failed assertion: Assert.Equal() + - Expected value: 3 + - Actual value: 1 + - Stack Trace: RSSVWorkOrderEntryTests.TestRepairWorkOrdersForm() line 152 + +Use the open test and implementation files as context. + +Please classify the failure as one of the following: +1. Failed assertion +2. Runtime exception +3. Missing dependency/service registration +4. Setup DAC or test data issue +5. Implementation defect + +Then explain: +- What evidence supports the classification +- Which file or method to inspect first +- What not to change yet \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step4/Prompt_Inspect_the_failure.txt b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step4/Prompt_Inspect_the_failure.txt new file mode 100644 index 00000000..584115ad --- /dev/null +++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.1_Step4/Prompt_Inspect_the_failure.txt @@ -0,0 +1,32 @@ +Inspect the failing TestRepairWorkOrdersForm unit test. + +Files to review: +- PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs +- PhoneRepairShop_Code/RSSVWorkOrderEntry.cs +- PhoneRepairShop_Code/Helper/Messages.cs + +The expected rule is: +When RSSVWorkOrderLabor.Quantity is lower than the configured labor quantity, +the system should attach the QuantityTooSmall warning and restore the quantity to the +configured value. + +Observed failure: +The test sets woLabor.Quantity to 1. The QuantityTooSmall warning is expected, and woLabor. +Quantity should be restored to 3. +The test fails at the quantity assertion. + +Failing assertion: +Assert.Equal(3, woLabor.Quantity) + +Actual value: +1 + +Do not edit files yet. + +Please: +1. Explain what the failing assertion means. +2. Identify the most likely root cause. +3. Point to the method or event handler to inspect first. +4. Explain why the warning can still appear while the quantity is not restored. +5. Propose the smallest safe fix. +6. List assumptions I should verify before editing code. \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step2/Prompt_Optional_Copilot_fix_failure.txt b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step2/Prompt_Optional_Copilot_fix_failure.txt new file mode 100644 index 00000000..bb9aa19d --- /dev/null +++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step2/Prompt_Optional_Copilot_fix_failure.txt @@ -0,0 +1,12 @@ +The original fix did not make the TestRepairWorkOrdersForm test pass. + +Original failure: +Expected woLabor.Quantity to be 3 after setting it to 1, but it remained 1. + +New failure: +[Paste the new failure output.] + +Do not edit files yet. + +Please compare the new failure with the original failure and identify +whether the fix was incomplete or whether a different assertion is now failing. \ No newline at end of file diff --git a/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step3/Prompt_Generate_regression_test.txt b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step3/Prompt_Generate_regression_test.txt new file mode 100644 index 00000000..59027b38 --- /dev/null +++ b/UnitTesting/AIAssistedDiagnosticsAndTesting/Prompts/Lesson1.2_Step3/Prompt_Generate_regression_test.txt @@ -0,0 +1,31 @@ +Add one focused xUnit regression test to + PhoneRepairShop_Code.Tests/RSSVWorkOrderEntryTests.cs. + +Test name: +LaborQuantity_WhenBelowDefault_AttachesQuantityTooSmallWarningAndRestoresDefaultQuantity + +Business rule: +When RSSVWorkOrderLabor.Quantity is lower than the configured/default labor quantity, +the system should attach the QuantityTooSmall warning and restore the quantity to +the configured/default value. + +The test should specifically verify: +1. Setting the work order labor quantity to 1 triggers Messages.QuantityTooSmall. +2. The field state has PXErrorLevel.Warning. +3. The work order labor quantity is restored to the configured/default value of 3. + +Use the existing setup pattern already present in RSSVWorkOrderEntryTests.cs: +- Setup(new RSSVSetup()) +- PXGraph.CreateInstance() +- PXCache.GetStateExt to inspect PXFieldState +- PXCache.Locate to retrieve the proper RSSVWorkOrderLabor object after validation +- Existing message constants from PhoneRepairShop.Messages + +Constraints: +- Do not change production code. +- Do not require a live database or browser session. +- Reuse existing setup patterns from the file. +- Use Arrange, Act, Assert comments. +- Keep the test readable. +- Do not hide the tested business rule behind too many helper methods. +- Show me the diff before running the test. \ No newline at end of file