cp demo: add buyer 01, improve cp hr, oper, implement one python configure cmd in scripts

dev-fastapi
Ivan Maslov 2 years ago
parent 90577582af
commit 7af278e208

@ -0,0 +1,29 @@
$('.ui.dropdown')
.dropdown('clear')
;
var content = [
];
let i = 1
document.getElementById("buyNumber").innerHTML = i
$('.ui.search')
.search({
source: content
})
;
function buy_confirm() {
j = String(i)
content.push({ title: j })
$('.ui.search').search({source: content})
i=i+1;
document.getElementById("buyNumber").innerHTML = i;
$('.ui.dropdown').dropdown('clear')
}

@ -0,0 +1,42 @@
from pyOpenRPA import Orchestrator
from pyOpenRPA.Orchestrator.Managers import ControlPanel
import time
import os
import sys
import socket
import datetime
import urllib.parse
from pyOpenRPA.Orchestrator.Server import app
import threading
from fastapi import Depends
from fastapi.responses import PlainTextResponse
from fastapi.responses import FileResponse
time.sleep(1.5)
g_cp_name_str = "BUYER_01"
g_repo_name_str = os.path.abspath(__file__).split("\\")[-5]
g_repo_package_cp_path_str = os.path.abspath("\\".join(os.path.abspath(__file__).split("\\")[:-1]))
# Подключени файлов связанных с роботом-казначеем01
@app.get(path="/BUYER_01/scripts",tags=["BUYER_01"])
def get_file():
return FileResponse("Demo\\BUYER_01\\buyer_01.js")
# User settings
g_host_str = socket.gethostname().upper() # Identify PC
g_control_panel = ControlPanel(inControlPanelNameStr=g_cp_name_str,
inRefreshHTMLJinja2TemplatePathStr=os.path.join(g_repo_package_cp_path_str, "index.html"),
inJinja2TemplateRefreshBool=True,inRobotNameStr=g_repo_name_str)
g_jinja_context_dict = {"settings": sys.modules[__name__],
"urllib_parse_quote_plus": urllib.parse.quote_plus, "g_host_str": g_host_str, "g_repo_name_str": g_repo_name_str}
g_control_panel.Jinja2DataUpdateDictSet(inJinja2DataUpdateDict=g_jinja_context_dict)

@ -0,0 +1,82 @@
<!doctype html>
<html lang="en">
<head>
<title> Treasurer </title>
</head>
<body>
<div class="card" style="width:450px;" id="card1">
<div class="content">
<center><h1>ЗАКУПЩИК</h1></center><br>
<div class="ui message">
<div class="header">Применение:</div>
<p>Робот-закупщик осуществляет закупку товаров по выбранным параметрам</p>
</div>
<h4><span>Оформление закупки</span></h4>
<div class="meta">
<div>Номер закупки - <span id="buyNumber"></span></div>
</div>
<h2 class="ui header">
<i class="shopping cart icon"></i>
<div class="content">Выбор товара</div>
</h2>
<div class="ui selection dropdown">
<input type="hidden" name="Product">
<i class="dropdown icon"></i>
<div class="default text">Товар</div>
<div class="menu">
<div class="item" data-value="1">Набор резисторов 200 штук, 0.25 Вт, 1%</div>
<div class="item" data-value="0">Набор резисторов 200 штук, 1.00 Вт, 5%</div>
</div>
</div>
<h2 class="ui header">
<i class="truck icon"></i>
<div class="content">Выбор адреса доставки</div>
</h2>
<div class="ui selection dropdown">
<input type="hidden" name="Adress">
<i class="dropdown icon"></i>
<div class="default text">Адресс</div>
<div class="menu">
<div class="item" data-value="1">Г. Москва, ул.Московская, д.15, к2</div>
<div class="item" data-value="0">Г. Санкт-Петербург, пр. Культуры, д.21</div>
</div>
</div>
<h2 class="ui header">
<i class="ruble sign icon"></i>
<div class="content">Номер счета для оплаты</div>
</h2>
<div class="ui selection dropdown">
<input type="hidden" name="Account">
<i class="dropdown icon"></i>
<div class="default text">Номер счета</div>
<div class="menu">
<div class="item" data-value="1">11111.11111111111.11111</div>
<div class="item" data-value="0">00000.11111111111.11111</div>
</div>
</div>
<br><br>
<button class="ui secondary button" onclick="buy_confirm()">
Оформить
</button>
</div>
</div>
<script src="/BUYER_01/scripts"></script>
</body>
</html>

@ -56,7 +56,7 @@ html = f'''<!doctype html>
<body> <body>
<div class="card" style="width:450px;" id="card1"> <div class="card" style="width:550px;" id="card1">
<div class="content"> <div class="content">
<center><h1>{title}</h1></center><br> <center><h1>{title}</h1></center><br>
<div class="ui message"> <div class="ui message">

@ -11,7 +11,7 @@
<body> <body>
<div class="card" style="width:450px;" id="card1"> <div class="card" style="width:550px;" id="card1">
<div class="content"> <div class="content">
<center><h1>КАДРОВИК</h1></center><br> <center><h1>КАДРОВИК</h1></center><br>
<div class="ui message"> <div class="ui message">

@ -1,4 +1,4 @@
<div class="card" style="width: 450px;""> <div class="card" style="width: 350px;"">
<div class="content"> <div class="content">
<div class="right floated mini ui "> <div class="right floated mini ui ">
OPER_00 OPER_00

@ -60,7 +60,7 @@ html = f'''<!doctype html>
<body> <body>
<div class="card" style="width:450px;" id="card1"> <div class="card" style="width:550px;" id="card1">
<div class="content"> <div class="content">
<center><h1>{title}</h1></center><br> <center><h1>{title}</h1></center><br>
<div class="ui message"> <div class="ui message">

@ -10,7 +10,7 @@
<body> <body>
<div class="card" style="width:450px;" id="card1"> <div class="card" style="width:550px;" id="card1">
<div class="content"> <div class="content">
<center><h1>КАЗНАЧЕЙ</h1></center><br> <center><h1>КАЗНАЧЕЙ</h1></center><br>
<div class="ui message"> <div class="ui message">

@ -1,52 +0,0 @@
# Role model - if len of keys in dict is 0 - all access. If at least len is 1 - only this access
# "Orchestrator":{
# "Controls": {
# "RestartOrchestrator": {}, # Feature to restart orchestrator on virtual machine
# "LookMachineScreenshots": {} # Feature to look machina screenshots
# },
# "RDPActive": { # Robot RDP active module
# "ListRead": {} # Access to read RDP session list
# "RestartPC": {} # Restart PC
# "GITRestartOrchestrator": {} # Update GIT + restart orchestrator
# }
# }
# }
# USAGE in .py
# inRequest.
# inRequest.OpenRPA["DefUserRoleAccessAsk"](["Orchestrator","RDPActive","Controls"]) - return True or False
# inRequest.OpenRPA["DefUserRoleHierarchyGet"]() - Return dict of the role hierarchy or {}
# Init Section
gUserNameStr = "Login" # User name without domain name
gDomainNameStr = "" # DOMAIN or EMPTY str if no domain
gDomainIsDefaultBool = True # If domain is exist and is default (default = you can type login without domain name)
def SettingsUpdate(inDict):
lRuleDomainUserDict = {
"MethodMatchURLBeforeList": [
{
"Method":"GET",
"MatchType":"Beginwith",
"URL":"/",
#"FlagAccessDefRequestGlobalAuthenticate": TestDef
"FlagAccess": True
},
{
"Method":"POST",
"MatchType":"Beginwith",
"URL":"/",
#"FlagAccessDefRequestGlobalAuthenticate": TestDef
"FlagAccess": True
}
],
"ControlPanelKeyAllowedList": ["TestControlPanel", "RobotRDPActive","RobotScreenActive", "ControlPanel_Template"], # If empty - all is allowed
"RoleHierarchyAllowedDict": {"Key1":"Test"}
}
# Case add domain + user
inDict["Server"]["AccessUsers"]["RuleDomainUserDict"].update({(gDomainNameStr.upper(),gUserNameStr.upper()):lRuleDomainUserDict})
if gDomainIsDefaultBool:
# Case add default domain + user
inDict["Server"]["AccessUsers"]["RuleDomainUserDict"].update({("",gUserNameStr.upper()):lRuleDomainUserDict})
#Return current dict
return inDict

@ -60,6 +60,8 @@ else:
Orchestrator.OrchestratorSessionRestore(inGSettings=gSettings) Orchestrator.OrchestratorSessionRestore(inGSettings=gSettings)
# Autoinit control panels starts with CP_ # Autoinit control panels starts with CP_
lPyModules = Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="Demo\\*\\config.py", inAsyncInitBool=True) lPyModules = Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="Demo\\*\\config.py", inAsyncInitBool=True)
lPyModules2 = Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="..\\..\\KPI_Effect\\packages\\*_control_panel\\config.py", inAsyncInitBool=True, inPackageLevelInt=1)
# Call the orchestrator def # Call the orchestrator def
Orchestrator.Orchestrator(inGSettings=gSettings, inDumpRestoreBool=False) Orchestrator.Orchestrator(inGSettings=gSettings, inDumpRestoreBool=False)

@ -1,24 +0,0 @@
chcp 65001
@echo off
echo Формат использования init-python-env.cmd [имя запускаемого процесса.exe] [имя убиваемого процесса.exe]
echo Пример использования init-python-env.cmd orpa-rbt.exe orpa-rbt.exe
if [%1]==[] goto :python-env
goto create-exe
:create-exe
copy /Y "%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe" "%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64\%1"
if [%2]==[] goto :python-env
goto taskkill
:taskkill
taskkill /im "%2" /F /fi "username eq %username%"
goto :python-env
:python-env
set CD_PREV=%cd%
cd /d "%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64"
set PATH=%cd%;%cd%\Scripts;%PATH%
cd /d "%~dp0..\Sources"
set PYTHONPATH=%cd%;%PYTHONPATH%
cd %CD_PREV%
:eof
echo Инициализация Python окружения прошла успешно!
@echo on

@ -1,4 +0,0 @@
chcp 65001
cd /d "%~dp0"
call init-python-env.cmd orpa-rbt.exe orpa-rbt.exe
cmd

@ -1,5 +1,4 @@
chcp 65001 chcp 65001
cd /d "%~dp0" cd /d "%~dp0"
call init-python-env.cmd orpa-orc.exe orpa-orc.exe call .\..\Scripts\PythonWinInit.cmd script orpa-orc.exe orpa-orc.exe
orpa-orc.exe "config.py" orpa-orc.exe "config.py"
pause>nul

@ -0,0 +1,75 @@
chcp 65001
if [%1]==[echo_on] goto :program
:echo_no
set TEMP_ECHO_NO=TRUE
@echo off
:program
if NOT "%PYTHON_CONFIGURE%"=="" goto :echo_check
set PYTHON_CONFIGURE=%~f0
set CD_PREV=%cd%
rem "%~dp0..\Resources" - УСТАНОВКА ПУТИ ОТ РАСПОЛОЖЕНИЯ ФАЙЛА, В КОТОРОМ НАПИСАН ЭТОТ ТЕКСТ. ВНИМАНИЕ! ПОСЛЕ %~dp0 СИМВОЛ \ СТАВИТЬ НЕ ТРЕБУЕТСЯ
rem "%cd%\..\Resources" - УСТАНОВКА ПУТИ ОТ РАБОЧЕЙ ДИРЕКТОРИИ, В КОТОРОЙ БЫЛ ВЫЗВАН ЭТОТ СКРИПТ. ВНИМАНИЕ! ПОСЛЕ %cd% СИМВОЛ \ СТАВИТЬ ТРЕБУЕТСЯ ОБЯЗАТЕЛЬНО
rem Пример использования python-win-configure.cmd python - выполнить команду python в настроенном окружении
goto comment_set_path
rem ПРИМЕР КОНСТРУКЦИИ ДЛЯ ДОБАВЛЕНИЯ ДИРЕКТОРИИ В ПЕРЕМЕННУЮ ОКРУЖЕНИЯ PATH
set TEMP_LOCATION="%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64"
cd /d %TEMP_LOCATION%
set PATH=%cd%;%PATH%
rem ВНИМАНИЕ! ЗНАК = ДОЛЖЕН БЫТЬ УСТАНОВЛЕН ВПРИТЫК С ПЕРЕМЕННОЙ ОКРУЖЕНИЯ И ЗНАЧЕНИЕМ - ИНАЧЕ УСТАНОВКА ЗНАЧЕНИЯ БУДЕТ ПРОИЗВЕДЕНА НЕКОРРЕКТНО
:comment_set_path
goto comment_set_pythonpath
rem ПРИМЕР КОНСТРУКЦИИ ДЛЯ ДОБАВЛЕНИЯ ДИРЕКТОРИИ В ПЕРЕМЕННУЮ ОКРУЖЕНИЯ PYTHONPATH
set TEMP_LOCATION="%~dp0..\Sources"
cd /d %TEMP_LOCATION%
set PYTHONPATH=%cd%;%PYTHONPATH%
rem ВНИМАНИЕ! ЗНАК = ДОЛЖЕН БЫТЬ УСТАНОВЛЕН ВПРИТЫК С ПЕРЕМЕННОЙ ОКРУЖЕНИЯ И ЗНАЧЕНИЕМ - ИНАЧЕ УСТАНОВКА ЗНАЧЕНИЯ БУДЕТ ПРОИЗВЕДЕНА НЕКОРРЕКТНО
:comment_set_pythonpath
rem ЗОНА УСТАНОВКИ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ!
:configure
set TEMP_LOCATION="%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64\Scripts"
cd /d %TEMP_LOCATION%
set PATH=%cd%;%PATH%
set TEMP_LOCATION="%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64"
cd /d %TEMP_LOCATION%
set PATH=%cd%;%PATH%
set TEMP_LOCATION="%~dp0..\Sources"
cd /d %TEMP_LOCATION%
set PYTHONPATH=%cd%;%PYTHONPATH%
rem восстановление каталога рабочей директории программы
cd %CD_PREV%
rem выполнить вызов, если есть параметры, начиная с %2+
if "%1"=="" goto :echo_check
set ORPA_ARGV=
rem один shift - все параметры, начиная с %2 (или с %1, если не echo_on)
if "%1"=="echo_on" shift
:loop1
if "%1"=="" goto after_loop
if "%ORPA_ARGV%"=="" goto :no_param
set ORPA_ARGV=%ORPA_ARGV% %1
goto :loop1_next
:no_param
set ORPA_ARGV=%1
:loop1_next
shift
goto loop1
:after_loop
echo PYTHON-CONFIGURE: ОБНАРУЖЕНЫ ПАРАМЕТРЫ ИНИЦИАЛИЗАЦИИ ПРОГРАММЫ: %ORPA_ARGV%
:echo_check
rem включить Echo, если он был принудительно выключен
if NOT [%TEMP_ECHO_NO%]==[] goto :echo_on
goto :eof
:echo_on
@echo on
:eof
if "%ORPA_ARGV%"=="" goto :eof2
%ORPA_ARGV%
pause>nul
:eof2

@ -0,0 +1,24 @@
@echo off
chcp 65001
echo Формат использования PythonWinInit.cmd [console,script] [имя запускаемого процесса.exe] [имя убиваемого процесса.exe]
echo Пример использования PythonWinInit.cmd script orpa-rbt.exe orpa-rbt.exe
if [%2]==[] goto :python-env
goto create-exe
:create-exe
copy /Y "%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe" "%~dp0..\Resources\WPy64-3720\python-3.7.2.amd64\%2"
if [%3]==[] goto :python-env
goto taskkill
:taskkill
taskkill /im "%3" /F /fi "username eq %username%"
goto :python-env
:python-env
call "%~dp0PythonWinConfigure.cmd"
echo Инициализация Python окружения прошла успешно!
if [%1]==[] goto :console
if [%1]==[console] goto :console
goto :eof
:console
cmd
:eof
@echo on
Loading…
Cancel
Save