Merge remote-tracking branch 'origin/develop' into develop

pull/68/head
tianlinzhong 2021-10-11 17:18:06 +08:00
commit 515125a169
307 changed files with 15813 additions and 8970 deletions

View File

@ -16,6 +16,86 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Removed
- None.
## [v1.3.0] - 2021-09-04
### Added
- added expiration datetimes to User in Admin UI
- added expiration datetimes to user actions in API
- added expiration datetimes to user table in database
- added column ID to StoreBatch Excel Exporter in API
- added meter ID to meterbatch excel exporter in API
- added new datasource protocols to API
- added API error messages to translations.js and i18n.js
- added spinners to Dashboard of Web UI.
### Changed
- replaced Chinese with English in Excel Exporters of API
- changed start&end datetime formatter for tariff from timestamp to strftime
- changed lease start&end datetime formatter for tenant from timestamp to strftime
- changed last run datetime and next run datetime formatter for rule from timestamp to strftime
- changed last seen datetime formatter for gateway from timestamp to strftime
- changed last seen datetime formatter of datasource from timestamp to strftime
- changed upload datetime formatter of knowledgefile and offlinemeterfile from timestamp to strftime
- changed cost file upload datetime formatter from timestamp to strftime
- updated translation of Admin UI
- updated database README
- updated demo databse for database ingestion service
- updated distibutionssystem point value timeout value to 30 minutes
- updated Admin UI to make error messages more specific
- updated translations of KGCE & KGCO2E in Admin UI
- updated userlogger in API to pass HTTPError to client.
### Fixed
- fixed PEP8 warnings in API
- fixed typo in contact controller of Admin UI
- added try_files directive to avoid 404 error while refreshing pages in Web UI
- modified API error message for knowledge file cannot be removed from disk.
### Removed
- removed cookies usages from API
## [v1.2.3] - 2021-09-04
### Added
- added tbl_reports to myems_reporting_db in database.
- added trusted-host to Dockerfiles
### Changed
- updated README.
- renamed language cn to zh-cn in Admin UI
### Fixed
- fixed Local Storage conflicts in Admin UI and Web UI .
- fixed issues in database demo script
### Removed
- None.
## [v1.2.2] - 2021-08-28
### Added
- added user log to UserLogin, ChangePassword and ResetPassword in API
- implemented user_logger decorators in API
- added default passwords to README.
### Changed
- updated myems_user_db.tbl_logs in database
- updated i18n of WebUI
- changed user token hash algorithm from sha1 to sha256 in API
- upgraded dropzone js library in Admin UI
- moved css files for dropzone from js folder to css folder in Admin UI
### Fixed
- fixed code style warnings in README
- fixed PEP8 warnings in API
- fixed code style warnings in API
- fixed translation errors in Admin UI
- fixed issues of markdown in README files
- fixed typeof issue of dropzone js in Admin UI
- fixed issue of 'typeof' expression compared to 'null' in Web UI
- fixed toaster issues for uploading file in Admin UI
### Removed
- removed unnecessary dropzone-amd-module library from Admin UI
## [v1.2.1] - 2021-08-19
### Added
- Added Missing Error Messages Words of API to Web UI i18n
@ -381,18 +461,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Removed
- None.
[Unreleased]: https://github.com/MyEMS/myems/compare/v1.2.1...HEAD
[v1.2.1]: https://github.com/MyEMS/myems/compare/v1.2.0...v1.2.1
[v1.2.0]: https://github.com/MyEMS/myems/compare/v1.1.6...v1.2.0
[v1.1.6]: https://github.com/MyEMS/myems/compare/v1.1.5...v1.1.6
[v1.1.5]: https://github.com/MyEMS/myems/compare/v1.1.4...v1.1.5
[v1.1.4]: https://github.com/MyEMS/myems/compare/v1.1.3...v1.1.4
[v1.1.3]: https://github.com/MyEMS/myems/compare/v1.1.2...v1.1.3
[v1.1.2]: https://github.com/MyEMS/myems/compare/v1.1.1...v1.1.2
[v1.1.1]: https://github.com/MyEMS/myems/compare/v1.1.0...v1.1.1
[v1.0.8]: https://github.com/MyEMS/myems/compare/v1.0.8...v1.1.0
[v1.0.8]: https://github.com/MyEMS/myems/compare/v1.0.7...v1.0.8
[v1.0.7]: https://github.com/MyEMS/myems/compare/v1.0.6...v1.0.7
[v1.0.6]: https://github.com/MyEMS/myems/compare/v1.0.5...v1.0.6
[v1.0.5]: https://github.com/MyEMS/myems/releases/tag/v1.0.5
[Unreleased]: https://github.com/MyEMS/MyEMS/compare/v1.3.0...HEAD
[v1.3.0]: https://github.com/MyEMS/MyEMS/compare/v1.2.3...v1.3.0
[v1.2.3]: https://github.com/MyEMS/MyEMS/compare/v1.2.2...v1.2.3
[v1.2.2]: https://github.com/MyEMS/MyEMS/compare/v1.2.1...v1.2.2
[v1.2.1]: https://github.com/MyEMS/MyEMS/compare/v1.2.0...v1.2.1
[v1.2.0]: https://github.com/MyEMS/MyEMS/compare/v1.1.6...v1.2.0
[v1.1.6]: https://github.com/MyEMS/MyEMS/compare/v1.1.5...v1.1.6
[v1.1.5]: https://github.com/MyEMS/MyEMS/compare/v1.1.4...v1.1.5
[v1.1.4]: https://github.com/MyEMS/MyEMS/compare/v1.1.3...v1.1.4
[v1.1.3]: https://github.com/MyEMS/MyEMS/compare/v1.1.2...v1.1.3
[v1.1.2]: https://github.com/MyEMS/MyEMS/compare/v1.1.1...v1.1.2
[v1.1.1]: https://github.com/MyEMS/MyEMS/compare/v1.1.0...v1.1.1
[v1.0.8]: https://github.com/MyEMS/MyEMS/compare/v1.0.8...v1.1.0
[v1.0.8]: https://github.com/MyEMS/MyEMS/compare/v1.0.7...v1.0.8
[v1.0.7]: https://github.com/MyEMS/MyEMS/compare/v1.0.6...v1.0.7
[v1.0.6]: https://github.com/MyEMS/MyEMS/compare/v1.0.5...v1.0.6
[v1.0.5]: https://github.com/MyEMS/MyEMS/releases/tag/v1.0.5

174
README.md
View File

@ -14,7 +14,9 @@
## MyEMS 介绍
MyEMS是行业领先的开源能源管理系统利用云计算、物联网、大数据、人工智能等信息化技术构建而成。MyEMS可用于构建统一规范、功能强大的综合能源管理服务平台。MyEMS由资深专业团队开发维护系统代码基于MIT开源软件许可协议发布。用开源助力实现碳达峰碳中和。
MyEMS是行业领先的开源能源管理系统。
MyEMS可用于能源管理项目的设备管理、数据采集、处理、分析、可视化和报表。
MyEMS由资深专业团队开发维护系统代码基于MIT开源软件许可协议发布。用开源助力实现碳达峰碳中和。
## MyEMS架构
@ -23,6 +25,16 @@ MyEMS是行业领先的开源能源管理系统利用云计算、物联网、
![MyEMS Architecture Site View](/docs/images/architecture-site-view.png)
## MyEMS镜像
[1]. [Gitee](https://gitee.com/myems/myems) https://gitee.com/myems/myems
[2]. [Github](https://github.com/myems/myems) https://github.com/myems/myems
[3]. [Bitbucket](https://bitbucket.org/myems/myems) https://bitbucket.org/myems/myems
[4]. [Gitlab](https://gitlab.com/myems/myems) https://gitlab.com/myems/myems
## MyEMS组件(社区版)
MyEMS项目由下列组件构成:
@ -66,44 +78,153 @@ MyEMS Web UI: 80
MyEMS Admin UI: 8001
### Docker Docker-compose 安装
### 默认密码
<details>
<summary>Admin UI</summary>
```
administrator
!MyEMS1
```
</details>
<details>
<summary>Web UI</summary>
```
administrator@myems.io
!MyEMS1
```
</details>
### Docker-compose 安装
#### 前提
- 主机已安装docker、docker-compose、npm
- MySQL数据库已安装拥有一个账号为root密码为!MyEMS1的用户
- MySQL数据库可正常登陆可被安装Docker的主机Ping通以及远程访问
#### 配置
注一:这里的主机指的是**安装Docker的主机**, 这里的IP和账号密码都为假定的用来展示说明实际情况中用户需要根据自己的配置改为自己的具体的修改步骤会在“安装”中讲述。
注二:这里如果**安装数据库和安装Docker的主机为同一个主机那么数据库IP和主机IP修改为一个实际IP**即可这里是以数据库和安装Docker的主机不在同一个上举例的。
| -- | -- |
| ---------- | ----------- |
| 主机IP | 192.168.0.1 |
| 数据库IP | 192.168.0.2 |
| 数据库账号 | root |
| 数据库密码 | !MyEMS1 |
#### 安装
- 1.克隆仓库
```
git clone https://gitee.com/myems/myems.git
```
修改以下文件中的数据库IP
假定数据库IP为: 192.168.2.2
```
sudo nano myems-api/config.py
sudo nano myems-aggregation/config.py
sudo nano myems-cleaning/config.py
sudo nano myems-modbus-tcp/config.py
sudo nano myems-normalization/config.py
- 2.数据库导入 (否则数据库没有用户信息,网页无法验证登录)
# host: '127.0.0.1' => 'host': '192.168.2.2'
```
cd myems/database/install
mysql -u root -p < myems_billing_baseline_db.sql
mysql -u root -p < myems_billing_db.sql
mysql -u root -p < myems_energy_baseline_db.sql
mysql -u root -p < myems_energy_db.sql
mysql -u root -p < myems_fdd_db.sql
mysql -u root -p < myems_historical_db.sql
mysql -u root -p < myems_reporting_db.sql
mysql -u root -p < myems_system_db.sql
mysql -u root -p < myems_user_db.sql
```
注: 如有问题,详情可查看"database/README.md"
- 3.修改配置
注:如“配置”所述,这里假定的**主机IP为 192.168.0.1数据库IP为 192.168.0.2数据库账号为root,数据库密码:!MyEMS1,用户应该修改为自己对应的主机IP,数据库IP,数据库账号,数据库密码**
**3.1** 修改nginx.conf里的API配置
```
cd myems
sed -i 's/127.0.0.1:8000/192.168.0.1:8000/g' admin/nginx.conf
sed -i 's/127.0.0.1:8000/192.168.0.1:8000/g' web/nginx.conf
```
修改web和admin文件夹下nginx.conf中的location '/api'
假定本机IP为: 192.168.2.3
**3.2** 修改config.py里的数据库IP账号密码
```
sudo nano admin/nginx.conf
sudo nano web/nginx.conf
# proxy_pass http://127.0.0.1:8000/; => proxy_pass http://192.168.2.3:8000/;
# 这里以修改数据库IP为例如果数据库账号密码也不同请根据自己需求替换config.py里的账号密码
cd myems
sed -i 's/127.0.0.1/192.168.0.2/g' myems-api/config.py
sed -i 's/127.0.0.1/192.168.0.2/g' myems-aggregation/config.py
sed -i 's/127.0.0.1/192.168.0.2/g' myems-cleaning/config.py
sed -i 's/127.0.0.1/192.168.0.2/g' myems-modbus-tcp/config.py
sed -i 's/127.0.0.1/192.168.0.2/g' myems-normalization/config.py
```
将Web打包生成产品文件
**3.3** 测试数据库是否可以正确连接
```
python3 myems/database/test_mysql.py
```
如果测试通过继续下一步操作否则请修改config.py配置确保数据库可以通过Python3正常连接访问。
- 4.web打包 (myems/web为React项目需要打包为产品文件)
```
cd myems/web
npm install
npm run build
```
使用docker-compose安装
- 5.docker-compose一键安装
```
cd myems
docker-compose up -d
```
- 6.测试
| | 网址 | 结果 |
| ----- | ----------------------- | ---------------- |
| web | 192.168.0.1:80 | 输入账号密码登陆成功 |
| admin | 192.168.0.1:8001 | 输入账号密码登录成功 |
| api | 192.168.0.1:8000/spaces | 返回Json数据无报错 |
如果api测试报错请确认config.py里的数据库IP数据库账号数据库密码是否正确如果不正确请修改config.py后执行
```
docker-compose up --build -d
```
| -- | -- |
| ---------- | ----------- |
| web账号 | administrator@myems.io |
| web密码 | !MyEMS1 |
| admin账号 | administrator |
| admin密码 | !MyEMS1 |
如有问题欢迎创建Issue
## 功能版本对比
| 功能 |社区版 |企业版 | 说明 |
@ -210,7 +331,14 @@ docker-compose up -d
| Honeywell EBI | ❌ | ✔️ | 采集数据 https://www.honeywell.com/ |
| SIEMENS Desigo CC | ❌ | ✔️ | 采集数据 https://siemens.com/ |
| QWeather API | ❌ | ✔️ | 采集数据 https://www.qweather.com/ |
| Ingest from MySQL | ❌ | ✔️ | 采集数据 https://www.mysql.com/ |
| Ingest from Microsoft SQL Server | ❌ | ✔️ | 采集数据 https://www.microsoft.com/en-us/sql-server/ |
| Ingest from PostgreSQL | ❌ | ✔️ | 采集数据 https://www.postgresql.org/ |
| Ingest from Oracle | ❌ | ✔️ | 采集数据 https://www.oracle.com/database/ |
| Ingest from MongoDB | ❌ | ✔️ | 采集数据 https://www.mongodb.com/ |
| Ingest from InfluxDB | ❌ | ✔️ | 采集数据 https://www.influxdata.com/products/influxdb/ |
| FDD 能效故障诊断系统 | ❌ | ✔️ | 需要企业版组件许可或定制开发 |
| 阿里云短信服务发送报警 | ❌ | ✔️ | 短信服务 https://www.aliyun.com/product/sms?userCode=8jwn6m8c |
| 高级报表系统 | ❌ | ✔️ | 需要企业版组件许可或定制开发 |
| 能耗预测 | ❌ | ✔️ | 需要企业版组件许可或定制开发 |
| 组态图形绘制工具 | ❌ | ✔️ | 需要企业版组件许可或定制开发 |
@ -249,13 +377,3 @@ docker-compose up -d
[社区版路线图](https://github.com/orgs/MyEMS/projects)
## MyEMS镜像
[1]. [http://github.com/MyEMS/myems](http://github.com/MyEMS/myems)
[2]. [http://gitee.com/myems/myems](http://gitee.com/myems/myems)
[3]. [http://bitbucket.org/myems/myems](http://bitbucket.org/myems/myems)
[4]. [https://gitlab.com/myems/myems](https://gitlab.com/myems/myems)

View File

@ -14,7 +14,8 @@
## MyEMS-Einführung
MyEMS ist ein industrie führend Open Source Energiemanagementsystem, das auf Cloud-Computing-, IOT-, Big Data- und AI-Technologien basiert. MyEMS kann für eine standardmäßige und leistungsstarke integrierte Energiemanagement-Serviceplattform verwendet werden.
MyEMS ist ein industrie führend Open Source Energiemanagementsystem.
MyEMS kann für Gerätemanagement, Datenerfassung, Verarbeitung, Analyse, Visualisierung und Berichterstellung für Ihre EMS-Projekte verwendet werden.
MyEMS wird von einem erfahrenen Entwicklungsteam entwickelt und gewartet, und der Quellcode des Systems wird unter MIT-Lizenz veröffentlicht.
## MyEMS Architektur
@ -23,6 +24,15 @@ MyEMS wird von einem erfahrenen Entwicklungsteam entwickelt und gewartet, und de
![MyEMS Architecture Site View](/docs/images/architecture-site-view.png)
## MyEMS Spiegel
[1]. [Github](https://github.com/MyEMS/myems) https://github.com/myems/myems
[2]. [Gitee](https://gitee.com/myems/myems) https://gitee.com/myems/myems
[3]. [Bitbucket](https://bitbucket.org/myems/myems) https://bitbucket.org/myems/myems
[4]. [Gitlab](https://gitlab.com/myems/myems) https://gitlab.com/myems/myems
## MyEMS Komponenten (GCommunity Edition)
@ -69,6 +79,27 @@ MyEMS Web UI: 80
MyEMS Admin UI: 8001
### Voreingestelltes Passwort
<details>
<summary>Admin UI</summary>
```
administrator
!MyEMS1
```
</details>
<details>
<summary>Web UI</summary>
```
administrator@myems.io
!MyEMS1
```
</details>
### Docker Docker-compose Installieren
```
@ -76,24 +107,28 @@ git clone https://gitee.com/myems/myems.git
```
Ändern Sie die Datenbankkonfiguration in den folgenden Dateien
Angenommen, die Datenbank-IP lautet 192.168.2.2
Angenommen, die Datenbank-IP lautet 192.168.0.1
```
sudo nano myems-api/config.py
sudo nano myems-aggregation/config.py
sudo nano myems-cleaning/config.py
sudo nano myems-modbus-tcp/config.py
sudo nano myems-normalization/config.py
# host: '127.0.0.1' => 'host': '192.168.2.2'
```
~~'host': '127.0.0.1'~~
'host': '192.168.0.1'
Ändern Sie den location '/api' von nginx.conf in web und admin
Angenommen, die Host-IP lautet 192.168.2.3
Angenommen, die Host-IP lautet 192.168.0.2
```
sudo nano admin/nginx.conf
sudo nano web/nginx.conf
# proxy_pass http://127.0.0.1:8000/; => proxy_pass http://192.168.2.3:8000/;
```
~~proxy_pass http://127.0.0.1:8000/;~~
proxy_pass http://192.168.0.2:8000/;
Verpacken Sie das web, um Produktdateien zu generieren
```
@ -209,8 +244,15 @@ docker-compose up -d
| Johnson Controls Metasys API | ❌ | ✔️ | https://www.johnsoncontrols.com/ |
| Honeywell EBI | ❌️ | ✔️ | https://www.honeywell.com/ |
| SIEMENS Desigo CC | ❌ | ✔️ | https://siemens.com/ |
| QWeather API | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz |
| QWeather API | ❌ | ✔️ | https://www.qweather.com/ |
| Ingest from MySQL | ❌ | ✔️ | https://www.mysql.com/ |
| Ingest from Microsoft SQL Server | ❌ | ✔️ | https://www.microsoft.com/en-us/sql-server/ |
| Ingest from PostgreSQL | ❌ | ✔️ | https://www.postgresql.org/ |
| Ingest from Oracle | ❌ | ✔️ | https://www.oracle.com/database/ |
| Ingest from MongoDB | ❌ | ✔️ | https://www.mongodb.com/ |
| Ingest from InfluxDB | ❌ | ✔️ | https://www.influxdata.com/products/influxdb/ |
| FDD Rule Engine | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz |
| Alarm via Alibaba Cloud SMS Service| ❌ | ✔️ | https://www.aliyun.com/product/sms?userCode=8jwn6m8c |
| Advanced Reporting Engine | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz oder eine benutzerdefinierte Entwicklung |
| Prognose des Energieverbrauchs | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz oder eine benutzerdefinierte Entwicklung |
| Graphics Drawing Tool | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz |
@ -238,26 +280,12 @@ docker-compose up -d
| Bidding Support Service | ❌ | ✔️ | |
| Customize Support Service | ❌ | ✔️ | |
## MyEMS Bildschirmfoto
![MyEMS Space EnergyCategory1](/docs/images/myems-space-energycategory1.gif)
![MyEMS Space EnergyCategory2](/docs/images/myems-space-energycategory2.gif)
![MyEMS Space EnergyCategory3](/docs/images/myems-space-energycategory3.gif)
![MyEMS Großbild-Dashboard](/docs/images/myems-large-screen-dashboard.gif)
## MyEMS Straßenkarte
[Community Edition Straßenkarte](https://github.com/orgs/MyEMS/projects)
## MyEMS Spiegel
[1]. [http://github.com/MyEMS/myems](http://github.com/MyEMS/myems)
[2]. [http://gitee.com/myems/myems](http://gitee.com/myems/myems)
[3]. [http://bitbucket.org/myems/myems](http://bitbucket.org/myems/myems)
[4]. [https://gitlab.com/myems/myems](https://gitlab.com/myems/myems)

View File

@ -14,7 +14,8 @@
## MyEMS Introduction
MyEMS is an industry-leading open source Energy Management System that is built on cloud computing, IOT, Big Data and AI technologies. MyEMS can be used for a standard and powerful integrated energy management service platform.
MyEMS is an industry-leading open source Energy Management System.
MyEMS can be used for device management, data collection, processing, analysis, visualization and reporting for your EMS projects.
MyEMS is being developed and maintained by an experienced development team, and the system's source code is published under MIT license.
## MyEMS Architecture
@ -23,6 +24,15 @@ MyEMS is being developed and maintained by an experienced development team, and
![MyEMS Architecture Site View](/docs/images/architecture-site-view.png)
## MyEMS Mirrors
[1]. [Github](https://github.com/myems/myems) https://github.com/myems/myems
[2]. [Gitee](https://gitee.com/myems/myems) https://gitee.com/myems/myems
[3]. [Bitbucket](https://bitbucket.org/myems/myems) https://bitbucket.org/myems/myems
[4]. [Gitlab](https://gitlab.com/myems/myems) https://gitlab.com/myems/myems
## MyEMS Components (Community Edition)
@ -68,6 +78,26 @@ MyEMS Web UI: 80
MyEMS Admin UI: 8001
### Default Passwords
<details>
<summary>Admin UI</summary>
```
administrator
!MyEMS1
```
</details>
<details>
<summary>Web UI</summary>
```
administrator@myems.io
!MyEMS1
```
</details>
### Docker-compose Installation
@ -76,23 +106,28 @@ git clone https://gitee.com/myems/myems.git
```
Modify Database IP in the following files
Assume the Database IP is 192.168.2.2
Assume the Database IP is 192.168.0.1
```
sudo nano myems-api/config.py
sudo nano myems-aggregation/config.py
sudo nano myems-cleaning/config.py
sudo nano myems-modbus-tcp/config.py
sudo nano myems-normalization/config.py
# host: '127.0.0.1' => 'host': '192.168.2.2'
```
~~'host': '127.0.0.1'~~
'host': '192.168.0.1'
Modify location '/api' in nginx.conf of web and admin
Assume the Host IP is 192.168.2.3
Assume the Host IP is 192.168.0.2
```
sudo nano admin/nginx.conf
sudo nano web/nginx.conf
# proxy_pass http://127.0.0.1:8000/; => proxy_pass http://192.168.2.3:8000/;
```
~~proxy_pass http://127.0.0.1:8000/;~~
proxy_pass http://192.168.0.2:8000/;
Build web for production
```
@ -211,8 +246,15 @@ docker-compose up -d
| Johnson Controls Metasys API | ❌ | ✔️ | https://www.johnsoncontrols.com/ |
| Honeywell EBI | ❌ | ✔️ | https://www.honeywell.com/ |
| SIEMENS Desigo CC | ❌ | ✔️ | https://siemens.com/ |
| QWeather API | ❌ | ✔️ | Requires standard component license |
| QWeather API | ❌ | ✔️ | https://www.qweather.com/ |
| Ingest from MySQL | ❌ | ✔️ | https://www.mysql.com/ |
| Ingest from Microsoft SQL Server | ❌ | ✔️ | https://www.microsoft.com/en-us/sql-server/ |
| Ingest from PostgreSQL | ❌ | ✔️ | https://www.postgresql.org/ |
| Ingest from Oracle | ❌ | ✔️ | https://www.oracle.com/database/ |
| Ingest from MongoDB | ❌ | ✔️ | https://www.mongodb.com/ |
| Ingest from InfluxDB | ❌ | ✔️ | https://www.influxdata.com/products/influxdb/ |
| FDD Rule Engine | ❌ | ✔️ | Requires standard component license or custom development |
| Alarm via Alibaba Cloud SMS Service| ❌ | ✔️ | https://www.aliyun.com/product/sms?userCode=8jwn6m8c |
| Advanced Reporting Engine | ❌ | ✔️ | Requires standard component license or custom development |
| Prognose des Energieverbrauchs | ❌ | ✔️ | Requires standard component license or custom development |
| Graphics Drawing Tool | ❌ | ✔️ | |
@ -246,20 +288,6 @@ docker-compose up -d
![MyEMS Space EnergyCategory3](/docs/images/myems-space-energycategory3.gif)
![MyEMS Large Screen Dashboard](/docs/images/myems-large-screen-dashboard.gif)
## MyEMS Roadmap
[Community Edition Roadmap](https://github.com/orgs/MyEMS/projects)
## MyEMS Mirrors
[1]. [http://github.com/MyEMS/myems](http://github.com/MyEMS/myems)
[2]. [http://gitee.com/myems/myems](http://gitee.com/myems/myems)
[3]. [http://bitbucket.org/myems/myems](http://bitbucket.org/myems/myems)
[4]. [https://gitlab.com/myems/myems](https://gitlab.com/myems/myems)

49
admin/README.md vendored
View File

@ -7,7 +7,6 @@ Providing admin panel for MyEMS system administration and configuration
## Prerequisites
nginx-1.18.0 or later
## Option 1: Install on NGINX Server
* Install NGINX Server
@ -15,8 +14,8 @@ nginx-1.18.0 or later
refer to http://nginx.org/en/docs/install.html
* Configure NGINX
```
$ sudo nano /etc/nginx/nginx.conf
```bash
sudo nano /etc/nginx/nginx.conf
```
In the 'http' section, add some directives:
```
@ -54,25 +53,25 @@ Add a new 'server' section with direstives as below:
```
* Download myems
```
$ cd ~
$ git clone https://github.com/MyEMS/myems.git
```bash
cd ~
git clone https://github.com/MyEMS/myems.git
```
* Install myems-admin :
If the server can not connect to the internet, please compress the myems/admin folder and upload it to the server and extract it to ~/myems/admin
```
$ sudo cp -r ~/myems/admin /var/www/html/admin
$ sudo chmod 0755 -R /var/www/html/admin
```bash
sudo cp -r ~/myems/admin /var/www/html/admin
sudo chmod 0755 -R /var/www/html/admin
```
Check the config file and change it if necessary:
```
$ sudo nano /var/www/html/admin/app/api.js
```bash
sudo nano /var/www/html/admin/app/api.js
```
## NOTE:
The 'upload' folder is for user uploaded files. DO NOT delete/move/overwrite the 'upload' folder when you upgraded myems-admin.
```
```bash
/var/www/html/admin/upload
```
@ -83,18 +82,18 @@ The 'upload' folder is for user uploaded files. DO NOT delete/move/overwrite the
refer to https://httpd.apache.org/docs/2.4/install.html
* Configure Apache2
```
$ sudo vi /etc/apache2/ports.conf
```bash
sudo vi /etc/apache2/ports.conf
```
Add a Listen
```
Listen 8001
```
```
$ sudo vi /etc/apache2/sites-available/000-default.conf
```bash
sudo vi /etc/apache2/sites-available/000-default.conf
```
Add a new 'VirtualHost' as below
```
```xml
<VirtualHost 127.0.0.1:8001>
ServerAdmin MyEMS-admin
DocumentRoot /var/www/admin
@ -110,18 +109,18 @@ Add a new 'VirtualHost' as below
```
* Download myems-admin
```
$ cd ~
$ git clone https://github.com/MyEMS/myems.git
```bash
cd ~
git clone https://github.com/MyEMS/myems.git
```
* Install myems-admin :
If the server can not connect to the internet, please compress the myems/admin folder and upload it to the server and extract it to ~/myems/admin
```
$ sudo cp -r ~/myems/admin /var/www/html/admin
$ sudo chmod 0755 -R /var/www/html/admin
```bash
sudo cp -r ~/myems/admin /var/www/html/admin
sudo chmod 0755 -R /var/www/html/admin
```
Check the config file and change it if necessary:
```
$ sudo nano /var/www/html/admin/app/api.js
```bash
sudo nano /var/www/html/admin/app/api.js
```

View File

@ -13,11 +13,11 @@ app
$rootScope.$state = $state;
$transitions.onStart( { }, function(trans) {
if ($location.$$path.indexOf('login')==-1) {
if ($window.localStorage.getItem("currentUser")){
currentUser = JSON.parse($window.localStorage.getItem("currentUser"));
if ($window.localStorage.getItem("myems_admin_ui_current_user")){
currentUser = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
}
if (currentUser == undefined || currentUser.is_admin === false) {
$window.localStorage.removeItem("currentUser");
$window.localStorage.removeItem("myems_admin_ui_current_user");
return $state.target("login.login");
} else {
$rootScope.pageTitle = trans.to().data.pageTitle;
@ -390,7 +390,7 @@ app
deps: [
'$ocLazyLoad',
function ($ocLazyLoad) {
return $ocLazyLoad.load(['ui.select', 'toaster']).then(
return $ocLazyLoad.load(['ui.select', 'daterangepicker', 'toaster']).then(
function () {
return $ocLazyLoad.load([{
serie: true,
@ -768,7 +768,7 @@ app
deps: [
'$ocLazyLoad',
function ($ocLazyLoad) {
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'toaster']).then(
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'daterangepicker', 'toaster']).then(
function () {
return $ocLazyLoad.load([{
serie: true,
@ -781,9 +781,6 @@ app
}, {
name: 'oitozero.ngSweetAlert',
files: ['js/plugins/sweetalert/angular-sweetalert.min.js']
}, {
name: 'daterangepicker',
files: ['js/daterangepicker/angular-daterangepicker.min.js']
}, {
serie: true,
files: [
@ -824,7 +821,7 @@ app
deps: [
'$ocLazyLoad',
function ($ocLazyLoad) {
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'toaster']).then(
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'daterangepicker', 'toaster']).then(
function () {
return $ocLazyLoad.load([{
serie: true,
@ -837,9 +834,6 @@ app
}, {
name: 'oitozero.ngSweetAlert',
files: ['js/plugins/sweetalert/angular-sweetalert.min.js']
}, {
name: 'daterangepicker',
files: ['js/daterangepicker/angular-daterangepicker.min.js']
}, {
serie: true,
files: [
@ -880,7 +874,7 @@ app
deps: [
'$ocLazyLoad',
function ($ocLazyLoad) {
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'toaster']).then(
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'daterangepicker', 'toaster']).then(
function () {
return $ocLazyLoad.load([{
serie: true,
@ -893,9 +887,6 @@ app
}, {
name: 'oitozero.ngSweetAlert',
files: ['js/plugins/sweetalert/angular-sweetalert.min.js']
}, {
name: 'daterangepicker',
files: ['js/daterangepicker/angular-daterangepicker.min.js']
}, {
serie: true,
files: [
@ -1067,36 +1058,6 @@ app
]
}
})
.state('settings.gsmmodem', {
url: "/gsmmodem",
templateUrl: "views/settings/gsmmodem/gsmmodem.html",
data: {
pageTitle: 'MENU.SETTINGS.GSM_MODEM'
},
resolve: {
deps: [
'$ocLazyLoad',
function ($ocLazyLoad) {
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'toaster']).then(
function () {
return $ocLazyLoad.load([{
files: ['js/plugins/sweetalert/sweetalert.min.js', 'css/plugins/sweetalert/sweetalert.css']
}, {
name: 'oitozero.ngSweetAlert',
files: ['js/plugins/sweetalert/angular-sweetalert.min.js']
}, {
serie: true,
files: [
'app/services/settings/gsmmodem/gsmmodem.service.js',
'app/controllers/settings/gsmmodem/gsmmodem.controller.js'
]
}]);
}
);
}
]
}
})
.state('settings.knowledgefile', {
url: "/knowledgefile",
templateUrl: "views/settings/knowledgefile/knowledgefile.html",
@ -1171,9 +1132,15 @@ app
deps: [
'$ocLazyLoad',
function ($ocLazyLoad) {
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'toaster']).then(
return $ocLazyLoad.load(['ui.select', 'ui.checkbox', 'daterangepicker','toaster']).then(
function () {
return $ocLazyLoad.load([{
serie: true,
files: ['js/daterangepicker/daterangepicker.min.js', 'js/daterangepicker/daterangepicker.min.css']
}, {
name: 'daterangepicker',
files: ['js/daterangepicker/angular-daterangepicker.min.js']
}, {
files: ['js/plugins/sweetalert/sweetalert.min.js', 'css/plugins/sweetalert/sweetalert.css']
}, {
name: 'oitozero.ngSweetAlert',

View File

@ -46,8 +46,8 @@ app.controller('EmailMessageController', function($scope, $timeout,$translate,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.EMAIL_MESSAGE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.EMAIL_MESSAGE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});

View File

@ -15,8 +15,8 @@ app.controller('EmailMessageOptionController', function($scope, $timeout,
autoApply: true,
locale:{
format: 'YYYY-MM-DD',
applyLabel: "确定",
cancelLabel: "取消",
applyLabel: "OK",
cancelLabel: "Cancel",
},
eventHandlers:{

View File

@ -52,8 +52,8 @@ app.controller('RuleController', function($scope, $uibModal, $translate, RuleSer
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY",{template: $translate.instant("FDD.RULE")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY",{template: $translate.instant("FDD.RULE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -91,8 +91,8 @@ app.controller('RuleController', function($scope, $uibModal, $translate, RuleSer
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("FDD.RULE")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("FDD.RULE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
@ -126,18 +126,11 @@ app.controller('RuleController', function($scope, $uibModal, $translate, RuleSer
showCloseButton: true,
});
$scope.getAllRules();
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.RULE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.RULE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -45,8 +45,8 @@ app.controller('TextMessageController', function($scope,$timeout,$translate,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.TEXT_MESSAGE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.TEXT_MESSAGE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -15,8 +15,8 @@ app.controller('TextMessageOptionController', function($scope, $timeout,
autoApply: true,
locale:{
format: 'YYYY-MM-DD',
applyLabel: "确定",
cancelLabel: "取消",
applyLabel: "OK",
cancelLabel: "Cancel",
},
eventHandlers:{

View File

@ -44,8 +44,8 @@ app.controller('WebMessageController', function($scope, $timeout, $translate, $u
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("FDD.WEB_MESSAGE")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("FDD.WEB_MESSAGE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
@ -82,8 +82,8 @@ app.controller('WebMessageController', function($scope, $timeout, $translate, $u
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.WEB_MESSAGE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.WEB_MESSAGE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});

View File

@ -15,8 +15,8 @@ app.controller('WebMessageOptionController', function($scope, $timeout,
autoApply: true,
locale:{
format: 'YYYY-MM-DD',
applyLabel: "确定",
cancelLabel: "取消",
applyLabel: "OK",
cancelLabel: "Cancel",
},
eventHandlers:{

View File

@ -44,8 +44,8 @@ app.controller('WechatMessageController', function($scope, $timeout,$translate,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.WECHAT_MESSAGE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.WECHAT_MESSAGE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -15,8 +15,8 @@ app.controller('WechatMessageOptionController', function($scope, $timeout,
autoApply: true,
locale:{
format: 'YYYY-MM-DD',
applyLabel: "确定",
cancelLabel: "取消",
applyLabel: "OK",
cancelLabel: "Cancel",
},
eventHandlers:{

View File

@ -15,9 +15,9 @@ app.controller('LoginController', function (
$scope.dataLoading = false;
$scope.isFullScreen = false;
$scope.language = $window.localStorage.getItem("language") || 'cn';
$scope.language = $window.localStorage.getItem("myems_admin_ui_language") || "zh_CN";
$scope.fullScreenTitle = "FULLSCREEN";
$scope.cur_user = JSON.parse($window.localStorage.getItem("currentUser"));
$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
// login section start
$scope.login = function (user) {
$scope.dataLoading = true;
@ -30,22 +30,15 @@ app.controller('LoginController', function (
body: $translate.instant('TOASTER.LOGIN_SUCCESS'),
showCloseButton: true,
});
$window.localStorage.setItem("currentUser", JSON.stringify(response.data));
$window.localStorage.setItem("myems_admin_ui_current_user", JSON.stringify(response.data));
$location.path('/settings/space');
$scope.cur_user = JSON.parse($window.localStorage.getItem("currentUser"));
} else if (angular.isDefined(response.status) && response.status === 400 || response.status === 404) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant('TOASTER.LOGIN_FAILURE'),
title: $translate.instant('TOASTER.LOGIN_FAILURE'),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -61,19 +54,19 @@ app.controller('LoginController', function (
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant('TOASTER.LOGIN_SUCCESS'),
body: $translate.instant('TOASTER.LOGOUT_SUCCESS'),
showCloseButton: true,
});
$window.localStorage.removeItem("currentUser");
$window.localStorage.removeItem("myems_admin_ui_current_user");
$location.path('/login');
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
title: $translate.instant("TOASTER.LOGOUT_FAILURE"),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
$window.localStorage.removeItem("currentUser");
$window.localStorage.removeItem("myems_admin_ui_current_user");
$location.path('/login');
}
});
@ -118,13 +111,12 @@ app.controller('LoginController', function (
body: $translate.instant("TOASTER.SUCCESS_UPDATE_BODY", { template: $translate.instant("TOASTER.USER_PASSWORD") }),
showCloseButton: true,
});
$scope.$emit('handleEmitLineChanged');
} else {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title) || $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant( response.data.description, { template: $translate.instant("TOASTER.USER_PASSWORD") }) || $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("TOASTER.USER_PASSWORD") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("TOASTER.USER_PASSWORD") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -202,7 +194,7 @@ app.controller('LoginController', function (
$scope.changeLanguage = function (langKey) {
$translate.use(langKey);
$scope.language = langKey;
$window.localStorage.setItem("language", langKey);
$window.localStorage.setItem("myems_admin_ui_language", langKey);
};
// web message alarm section start

View File

@ -5,7 +5,7 @@ app.controller('MainController', [
$rootScope.$on("handleReLogin",function(){
$timeout(function(){
$window.localStorage.removeItem("currentUser");
$window.localStorage.removeItem("myems_admin_ui_current_user");
$location.path('/login');
},2000)
});

View File

@ -41,8 +41,8 @@ app.controller('EnergyCategoryController', function($scope, $translate,$uibModal
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.CATEGORY")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.CATEGORY")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -82,8 +82,8 @@ app.controller('EnergyCategoryController', function($scope, $translate,$uibModal
}else{
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.CATEGORY")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.CATEGORY")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -119,8 +119,8 @@ app.controller('EnergyCategoryController', function($scope, $translate,$uibModal
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.CATEGORY")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.CATEGORY")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -50,8 +50,8 @@ app.controller('EnergyItemController', function($scope, $translate,$uibModal, Ca
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.ENERGY_ITEM")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.ENERGY_ITEM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -90,8 +90,8 @@ app.controller('EnergyItemController', function($scope, $translate,$uibModal, Ca
}else{
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.ENERGY_ITEM")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.ENERGY_ITEM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -126,8 +126,8 @@ app.controller('EnergyItemController', function($scope, $translate,$uibModal, Ca
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.ENERGY_ITEM")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.ENERGY_ITEM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -49,8 +49,8 @@ app.controller('CombinedEquipmentController', function ($scope, $translate, $uib
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.COMBINED_EQUIPMENT") }),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.COMBINED_EQUIPMENT") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -90,8 +90,8 @@ app.controller('CombinedEquipmentController', function ($scope, $translate, $uib
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.COMBINED_EQUIPMENT") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.COMBINED_EQUIPMENT") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -128,8 +128,8 @@ app.controller('CombinedEquipmentController', function ($scope, $translate, $uib
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.COMBINED_EQUIPMENT") }),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.COMBINED_EQUIPMENT") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -26,7 +26,7 @@ app.controller('CombinedEquipmentMeterController', function ($scope, $timeout, $
CombinedEquipmentMeterService.getMetersByCombinedEquipmentID(id, value, function (response) {
if (angular.isDefined(response.status) && response.status === 200) {
angular.forEach(response.data, function (item, indx) {
data[indx].metertype = value;
response.data[indx].metertype = value;
});
$scope.combinedequipmentmeters = $scope.combinedequipmentmeters.concat(response.data);
}

View File

@ -74,8 +74,8 @@ app.controller('CombinedEquipmentParameterController', function ($scope, $uibMod
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -123,8 +123,8 @@ app.controller('CombinedEquipmentParameterController', function ($scope, $uibMod
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -157,18 +157,11 @@ app.controller('CombinedEquipmentParameterController', function ($scope, $uibMod
showCloseButton: true,
});
$scope.getParametersByCombinedEquipmentID($scope.currentCombinedEquipment.id);
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant(popBody, { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
title: $translate.instant(popBody, { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -40,8 +40,8 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.CONTACT")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.CONTACT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -68,7 +68,7 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
modalInstance.result.then(function (modifiedContact) {
ContactService.editContact(modifiedContact, function (response) {
if(angular.isDefined(response.status) && response.status === 200200){
if(angular.isDefined(response.status) && response.status === 200){
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
@ -79,8 +79,8 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
}else{
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.CONTACT")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.CONTACT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -115,8 +115,8 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.CONTACT")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.CONTACT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -27,14 +27,13 @@ app.controller('CostCenterController', function($scope, $translate,$uibModal, Co
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
showCloseButton: true,
});
$scope.getAllCostCenters();
$scope.$emit('handleEmitCostCenterChanged');
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -70,11 +69,11 @@ app.controller('CostCenterController', function($scope, $translate,$uibModal, Co
});
$scope.getAllCostCenters();
$scope.$emit('handleEmitCostCenterChanged');
}else{
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -107,18 +106,11 @@ app.controller('CostCenterController', function($scope, $translate,$uibModal, Co
});
$scope.getAllCostCenters();
$scope.$emit('handleEmitCostCenterChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -81,7 +81,7 @@ app.controller('CostCenterTariffController', function ($scope, $translate,
if (angular.isDefined(response.status) && response.status === 204) {
toaster.pop({
type: "success",
title: popTi$translate.instant("TOASTER.SUCCESS_TITLE"),
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", {template: $translate.instant("TOASTER.UNBIND_TARIFF_SUCCESS")}),
showCloseButton: true,
});

View File

@ -9,7 +9,7 @@ app.controller('CostFileController', function (
toaster,
SweetAlert) {
$scope.cur_user = JSON.parse($window.localStorage.getItem("currentUser"));
$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
$scope.getAllCostFiles = function () {
CostFileService.getAllCostFiles(function (response) {
@ -37,7 +37,7 @@ app.controller('CostFileController', function (
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY".format(file.name)),
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: file.name}),
showCloseButton: true,
});
$scope.getAllCostFiles();
@ -45,8 +45,8 @@ app.controller('CostFileController', function (
'error': function (file, xhr) {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY".format(file.name)),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -96,18 +96,11 @@ app.controller('CostFileController', function (
showCloseButton: true,
});
$scope.getAllCostFiles();
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("TOASTER.COST_FILE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("TOASTER.COST_FILE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -53,8 +53,8 @@ app.controller('DataSourceController', function($scope, $uibModal, $translate, D
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -93,8 +93,8 @@ app.controller('DataSourceController', function($scope, $uibModal, $translate, D
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -127,18 +127,11 @@ app.controller('DataSourceController', function($scope, $uibModal, $translate, D
showCloseButton: true,
});
$scope.$emit("handleEmitDataSourceChanged");
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -57,8 +57,8 @@ app.controller('PointController', function($scope, $uibModal, $translate, DataSo
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: "TOASTER.ERROR_ADD_BODY",
title: $translate.instant("TOASTER.ERROR_ADD_BODY",{template: $translate.instant( "SETTING.POINT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -99,8 +99,8 @@ app.controller('PointController', function($scope, $uibModal, $translate, DataSo
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.POINT")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.POINT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -133,18 +133,11 @@ app.controller('PointController', function($scope, $uibModal, $translate, DataSo
showCloseButton: true,
});
$scope.getPointsByDataSourceID($scope.currentDataSource);
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.POINT")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.POINT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -61,8 +61,8 @@ app.controller('DistributionCircuitController', function($scope, $translate, $ui
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -101,8 +101,8 @@ app.controller('DistributionCircuitController', function($scope, $translate, $ui
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -136,18 +136,11 @@ app.controller('DistributionCircuitController', function($scope, $translate, $ui
});
$scope.getDistributionCircuitsByDistributionSystemID($scope.currentDistributionSystem.id);
$scope.$emit('handleEmitDistributionCircuitChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -32,8 +32,8 @@ app.controller('DistributionSystemController', function($scope, $translate, $uib
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_SYSTEM")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_SYSTEM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -71,8 +71,8 @@ app.controller('DistributionSystemController', function($scope, $translate, $uib
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_SYSTEM")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_SYSTEM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -108,8 +108,8 @@ app.controller('DistributionSystemController', function($scope, $translate, $uib
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_SYSTEM")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_SYSTEM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -40,8 +40,8 @@ app.controller('EmailServerController', function($scope, $translate,$uibModal, E
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.EMAIL_SERVER")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.EMAIL_SERVER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -79,8 +79,8 @@ app.controller('EmailServerController', function($scope, $translate,$uibModal, E
}else{
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.EMAIL_SERVER")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.EMAIL_SERVER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -115,8 +115,8 @@ app.controller('EmailServerController', function($scope, $translate,$uibModal, E
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.EMAIL_SERVER")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.EMAIL_SERVER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -32,8 +32,8 @@ app.controller('EnergyFlowDiagramController', function($scope, $translate, $uibM
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.ENERGY_FLOW_DIAGRAM")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.ENERGY_FLOW_DIAGRAM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -71,8 +71,8 @@ app.controller('EnergyFlowDiagramController', function($scope, $translate, $uibM
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.ENERGY_FLOW_DIAGRAM")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.ENERGY_FLOW_DIAGRAM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -108,8 +108,8 @@ app.controller('EnergyFlowDiagramController', function($scope, $translate, $uibM
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.ENERGY_FLOW_DIAGRAM")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.ENERGY_FLOW_DIAGRAM")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -91,8 +91,8 @@ app.controller('EnergyFlowDiagramLinkController', function($scope,$uibModal, $tr
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -141,8 +141,8 @@ app.controller('EnergyFlowDiagramLinkController', function($scope,$uibModal, $tr
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -176,18 +176,11 @@ app.controller('EnergyFlowDiagramLinkController', function($scope,$uibModal, $tr
});
$scope.getLinksByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
$scope.$emit('handleEmitEnergyFlowDiagramLinkChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -62,8 +62,8 @@ app.controller('EnergyFlowDiagramNodeController', function($scope, $translate, $
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -101,8 +101,8 @@ app.controller('EnergyFlowDiagramNodeController', function($scope, $translate, $
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -136,18 +136,11 @@ app.controller('EnergyFlowDiagramNodeController', function($scope, $translate, $
});
$scope.getNodesByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
$scope.$emit('handleEmitEnergyFlowDiagramNodeChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -49,8 +49,8 @@ app.controller('EquipmentController', function($scope, $translate, $uibModal, Eq
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.EQUIPMENT")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.EQUIPMENT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -90,8 +90,8 @@ app.controller('EquipmentController', function($scope, $translate, $uibModal, Eq
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.EQUIPMENT")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.EQUIPMENT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -127,8 +127,8 @@ app.controller('EquipmentController', function($scope, $translate, $uibModal, Eq
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.EQUIPMENT")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.EQUIPMENT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -74,8 +74,8 @@ app.controller('EquipmentParameterController', function($scope, $uibModal, $tran
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -123,8 +123,8 @@ app.controller('EquipmentParameterController', function($scope, $uibModal, $tran
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -157,18 +157,11 @@ app.controller('EquipmentParameterController', function($scope, $uibModal, $tran
showCloseButton: true,
});
$scope.getParametersByEquipmentID($scope.currentEquipment.id);
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -40,8 +40,8 @@ app.controller('GatewayController', function($scope, $translate, $uibModal, Gat
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -80,8 +80,8 @@ app.controller('GatewayController', function($scope, $translate, $uibModal, Gat
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -115,18 +115,11 @@ app.controller('GatewayController', function($scope, $translate, $uibModal, Gat
});
$scope.getAllGateways();
$scope.$emit('handleEmitGatewayChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -1,155 +0,0 @@
'use strict';
app.controller('GSMModemController', function($scope, $translate,$uibModal, GSMModemService,toaster,SweetAlert) {
$scope.getAllGSMModems = function() {
GSMModemService.getAllGSMModems(function (response) {
if (angular.isDefined(response.status) && response.status === 200) {
$scope.gsmmodems = response.data;
} else {
$scope.gsmmodems = [];
}
});
};
$scope.addGSMModem = function() {
var modalInstance = $uibModal.open({
templateUrl: 'views/settings/gsmmodem/gsmmodem.model.html',
controller: 'ModalAddGSMModemCtrl',
windowClass: "animated fadeIn",
resolve: {
params:function(){
return {
gsmmodems:angular.copy($scope.gsmmodems)
};
}
}
});
modalInstance.result.then(function(gsmmodem) {
GSMModemService.addGSMModem(gsmmodem, function(response) {
if (angular.isDefined(response.status) && response.status === 201) {
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: $translate.instant("SETTING.GSM_MODEM")}),
showCloseButton: true,
});
$scope.getAllGSMModems();
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.GSM_MODEM")}),
showCloseButton: true,
});
}
});
}, function() {
});
};
$scope.editGSMModem=function(gsmmodem){
var modalInstance = $uibModal.open({
windowClass: "animated fadeIn",
templateUrl: 'views/settings/gsmmodem/gsmmodem.model.html',
controller: 'ModalEditGSMModemCtrl',
resolve: {
params:function(){
return {
gsmmodem:angular.copy(gsmmodem),
gsmmodems:angular.copy($scope.gsmmodems)
};
}
}
});
modalInstance.result.then(function (modifiedGSMModem) {
GSMModemService.editGSMModem(modifiedGSMModem,function (response){
if(angular.isDefined(response.status) && response.status === 200) {
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_UPDATE_BODY", {template: $translate.instant("SETTING.GSM_MODEM")}),
showCloseButton: true,
});
$scope.getAllGSMModems();
}else{
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.GSM_MODEM")}),
showCloseButton: true,
});
}
});
}, function () {
//do nothing;
});
};
$scope.deleteGSMModem=function(gsmmodem){
SweetAlert.swal({
title: $translate.instant("SWEET.TITLE"),
text: $translate.instant("SWEET.TEXT"),
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: $translate.instant("SWEET.CONFIRM_BUTTON_TEXT"),
cancelButtonText: $translate.instant("SWEET.CANCEL_BUTTON_TEXT"),
closeOnConfirm: true,
closeOnCancel: true },
function (isConfirm) {
if (isConfirm) {
GSMModemService.deleteGSMModem(gsmmodem, function(response) {
if (angular.isDefined(response.status) && response.status === 204) {
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", {template: $translate.instant("SETTING.GSM_MODEM")}),
showCloseButton: true,
});
$scope.getAllGSMModems();
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.GSM_MODEM")}),
showCloseButton: true,
});
}
});
}
});
};
$scope.getAllGSMModems();
});
app.controller('ModalAddGSMModemCtrl', function ($scope, $uibModalInstance,params) {
$scope.operation="SETTING.ADD_GSM_MODEM";
$scope.gsmmodems=params.gsmmodems;
$scope.ok = function () {
$uibModalInstance.close($scope.gsmmodem);
};
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
});
app.controller('ModalEditGSMModemCtrl', function ($scope, $uibModalInstance, params) {
$scope.operation="SETTING.EDIT_GSM_MODEM";
$scope.gsmmodem = params.gsmmodem;
$scope.gsmmodems=params.gsmmodems;
$scope.ok = function () {
$uibModalInstance.close($scope.gsmmodem);
};
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
});

View File

@ -8,7 +8,7 @@ app.controller('KnowledgeFileController', function (
toaster,
SweetAlert) {
$scope.cur_user = JSON.parse($window.localStorage.getItem("currentUser"));
$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
$scope.getAllKnowledgeFiles = function () {
KnowledgeFileService.getAllKnowledgeFiles(function (response) {
@ -37,7 +37,7 @@ app.controller('KnowledgeFileController', function (
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY".format(file.name)),
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: file.name}),
showCloseButton: true,
});
$scope.getAllKnowledgeFiles();
@ -45,8 +45,8 @@ app.controller('KnowledgeFileController', function (
'error': function (file, xhr) {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY".format(file.name)),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -95,18 +95,11 @@ app.controller('KnowledgeFileController', function (
showCloseButton: true,
});
$scope.getAllKnowledgeFiles();
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.KNOWLEDGEFILE") }),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.KNOWLEDGEFILE") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -116,8 +116,8 @@ app.controller('MenuController', function ($scope, $uibModal, MenuService, toast
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.MENU") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.MENU") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -155,8 +155,8 @@ app.controller('MeterController', function($scope, $translate, $uibModal, Meter
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.METER")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -211,8 +211,8 @@ app.controller('MeterController', function($scope, $translate, $uibModal, Meter
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.METER")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -246,18 +246,11 @@ app.controller('MeterController', function($scope, $translate, $uibModal, Meter
});
$scope.getAllMeters();
$scope.$emit('handleEmitMeterChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.METER")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -79,8 +79,8 @@ app.controller('OfflineMeterController', function($scope, $translate, $uibModal,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -129,8 +129,8 @@ app.controller('OfflineMeterController', function($scope, $translate, $uibModal,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -164,18 +164,11 @@ app.controller('OfflineMeterController', function($scope, $translate, $uibModal,
});
$scope.getAllOfflineMeters();
$scope.$emit('handleEmitOfflineMeterChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -9,7 +9,7 @@ app.controller('OfflineMeterFileController', function(
toaster,
SweetAlert) {
$scope.cur_user = JSON.parse($window.localStorage.getItem("currentUser"));
$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
$scope.getAllOfflineMeterFiles = function() {
OfflineMeterFileService.getAllOfflineMeterFiles(function (response) {
@ -38,7 +38,7 @@ app.controller('OfflineMeterFileController', function(
toaster.pop({
type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY",{template: file.name}),
body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: file.name}),
showCloseButton: true,
});
$scope.getAllOfflineMeterFiles();
@ -46,8 +46,8 @@ app.controller('OfflineMeterFileController', function(
'error': function (file, xhr) {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -97,18 +97,11 @@ app.controller('OfflineMeterFileController', function(
showCloseButton: true,
});
$scope.getAllOfflineMeterFiles();
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER_FILE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER_FILE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -109,8 +109,8 @@ $scope.getAllEnergyItems = function() {
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -162,8 +162,8 @@ $scope.getAllEnergyItems = function() {
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -197,18 +197,11 @@ $scope.getAllEnergyItems = function() {
});
$scope.getAllVirtualMeters();
$scope.$emit('handleEmitVirtualMeterChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: popTit$translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -40,8 +40,8 @@ app.controller('SensorController', function($scope, $translate, $uibModal, Sens
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.SENSOR")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.SENSOR")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -80,8 +80,8 @@ app.controller('SensorController', function($scope, $translate, $uibModal, Sens
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.SENSOR")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.SENSOR")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -115,18 +115,11 @@ app.controller('SensorController', function($scope, $translate, $uibModal, Sens
});
$scope.getAllSensors();
$scope.$emit('handleEmitSensorChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.SENSOR")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.SENSOR")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -65,8 +65,8 @@ app.controller('ShopfloorController', function ($scope, $translate, $uibModal, C
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -110,8 +110,8 @@ app.controller('ShopfloorController', function ($scope, $translate, $uibModal, C
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -144,18 +144,11 @@ app.controller('ShopfloorController', function ($scope, $translate, $uibModal, C
showCloseButton: true,
});
$scope.$emit('handleEmitShopfloorChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -153,8 +153,8 @@ app.controller('SpaceController', function ($scope, $uibModal, SpaceService, Cos
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SPACE") }),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SPACE") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -206,8 +206,8 @@ app.controller('SpaceController', function ($scope, $uibModal, SpaceService, Cos
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SPACE") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SPACE") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -240,18 +240,11 @@ app.controller('SpaceController', function ($scope, $uibModal, SpaceService, Cos
showCloseButton: true,
});
$scope.$emit('handleEmitSpaceChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "success",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SPACE") }),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SPACE") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -76,8 +76,8 @@ $scope.getAllStoreTypes = function() {
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant(popBody,{"TOASTER.ERROR_ADD_BODY": $translate.instant("COMMON.STORE")}),
title: $translate.instant(popBody,{"TOASTER.ERROR_ADD_BODY": $translate.instant("COMMON.STORE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -123,8 +123,8 @@ $scope.getAllStoreTypes = function() {
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.STORE")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.STORE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -156,18 +156,11 @@ $scope.getAllStoreTypes = function() {
showCloseButton: true,
});
$scope.$emit('handleEmitStoreChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.STORE")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.STORE")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -40,8 +40,8 @@ app.controller('FlatController', function($scope,$uibModal,$translate, FlatServi
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("TOASTER.FLAT")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("TOASTER.FLAT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -79,8 +79,8 @@ app.controller('FlatController', function($scope,$uibModal,$translate, FlatServi
}else{
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("TOASTER.FLAT")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("TOASTER.FLAT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -115,8 +115,8 @@ app.controller('FlatController', function($scope,$uibModal,$translate, FlatServi
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("TOASTER.FLAT")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("TOASTER.FLAT")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -54,8 +54,8 @@ app.controller('TariffController', function($scope,$uibModal,$translate, TARIFF_
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.TARIFF")}),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.TARIFF")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -94,8 +94,8 @@ app.controller('TariffController', function($scope,$uibModal,$translate, TARIFF_
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.TARIFF")}),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.TARIFF")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -131,8 +131,8 @@ app.controller('TariffController', function($scope,$uibModal,$translate, TARIFF_
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.TARIFF")}),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.TARIFF")}),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -158,13 +158,12 @@ app.controller('ModalAddTariffCtrl', function($scope, $timeout, $uibModalInstanc
$scope.dtOptions = {
locale:{
format: 'YYYY-MM-DD HH:mm:ss',
applyLabel: "确定",
cancelLabel: "取消",
customRangeLabel: "自定义",
applyLabel: "OK",
cancelLabel: "Cancel",
},
timePicker: true,
timePicker24Hour: true,
timePickerIncrement: 15,
timePickerIncrement: 1,
singleDatePicker: true,
};
$scope.showPeakType = function(type) {
@ -240,13 +239,12 @@ app.controller('ModalEditTariffCtrl', function($scope, $timeout, $uibModalInstan
$scope.dtOptions = {
locale:{
format: 'YYYY-MM-DD HH:mm:ss',
applyLabel: "确定",
cancelLabel: "取消",
customRangeLabel: "自定义",
applyLabel: "OK",
cancelLabel: "Cancel",
},
timePicker: true,
timePicker24Hour: true,
timePickerIncrement: 15,
timePickerIncrement: 1,
singleDatePicker: true,
};
$scope.showPeakType = function(type) {

View File

@ -82,8 +82,8 @@ app.controller('TenantController', function ($scope, $translate, $uibModal, Cost
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.TENANT") }),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.TENANT") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -135,8 +135,8 @@ app.controller('TenantController', function ($scope, $translate, $uibModal, Cost
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.TENANT") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.TENANT") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -169,18 +169,11 @@ app.controller('TenantController', function ($scope, $translate, $uibModal, Cost
showCloseButton: true,
});
$scope.$emit('handleEmitTenantChanged');
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.TENANT") }),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.TENANT") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -204,15 +197,14 @@ app.controller('ModalAddTenantCtrl', function ($scope, $uibModalInstance, params
$scope.costcenters = params.costcenters;
$scope.contacts = params.contacts;
$scope.tenant = {
lease_start_datetime_utc: moment(),
lease_start_datetime: moment(),
lease_end_datetime_utc: moment(),
};
$scope.dtOptions = {
locale: {
format: 'YYYY-MM-DD HH:mm:ss',
applyLabel: "确定",
cancelLabel: "取消",
customRangeLabel: "自定义",
applyLabel: "OK",
cancelLabel: "Cancel",
},
timePicker: true,
timePicker24Hour: true,
@ -220,8 +212,8 @@ app.controller('ModalAddTenantCtrl', function ($scope, $uibModalInstance, params
singleDatePicker: true,
};
$scope.ok = function () {
$scope.tenant.lease_start_datetime_utc = moment($scope.tenant.lease_start_datetime_utc).format().slice(0, 19);
$scope.tenant.lease_end_datetime_utc = moment($scope.tenant.lease_end_datetime_utc).format().slice(0, 19);
$scope.tenant.lease_start_datetime = moment($scope.tenant.lease_start_datetime).format().slice(0, 19);
$scope.tenant.lease_end_datetime = moment($scope.tenant.lease_end_datetime).format().slice(0, 19);
$uibModalInstance.close($scope.tenant);
};
@ -239,9 +231,8 @@ app.controller('ModalEditTenantCtrl', function ($scope, $uibModalInstance, param
$scope.dtOptions = {
locale: {
format: 'YYYY-MM-DD HH:mm:ss',
applyLabel: "确定",
cancelLabel: "取消",
customRangeLabel: "自定义",
applyLabel: "OK",
cancelLabel: "Cancel",
},
timePicker: true,
timePicker24Hour: true,
@ -249,8 +240,8 @@ app.controller('ModalEditTenantCtrl', function ($scope, $uibModalInstance, param
singleDatePicker: true,
};
$scope.ok = function () {
$scope.tenant.lease_start_datetime_utc = moment($scope.tenant.lease_start_datetime_utc).format().slice(0, 19);
$scope.tenant.lease_end_datetime_utc = moment($scope.tenant.lease_end_datetime_utc).format().slice(0, 19);
$scope.tenant.lease_start_datetime = moment($scope.tenant.lease_start_datetime).format().slice(0, 19);
$scope.tenant.lease_end_datetime = moment($scope.tenant.lease_end_datetime).format().slice(0, 19);
$uibModalInstance.close($scope.tenant);
};

View File

@ -43,8 +43,8 @@ app.controller('PrivilegeController', function ($scope,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -82,8 +82,8 @@ app.controller('PrivilegeController', function ($scope,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -116,18 +116,11 @@ app.controller('PrivilegeController', function ($scope,
showCloseButton: true,
});
$scope.getAllPrivileges();
} else if (angular.isDefined(response.status) && response.status === 400) {
toaster.pop({
type: "error",
title: $translate.instant(response.data.title),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}

View File

@ -9,7 +9,7 @@ app.controller('UserController', function ($scope,
$translate,
SweetAlert) {
$scope.cur_user = JSON.parse($window.localStorage.getItem("currentUser"));
$scope.cur_user = JSON.parse($window.localStorage.getItem("myems_admin_ui_current_user"));
$scope.getAllUsers = function () {
UserService.getAllUsers(function (response) {
if (angular.isDefined(response.status) && response.status === 200) {
@ -57,8 +57,8 @@ app.controller('UserController', function ($scope,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("SETTING.USER") }),
title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -96,8 +96,8 @@ app.controller('UserController', function ($scope,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -140,8 +140,8 @@ app.controller('UserController', function ($scope,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }),
title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -177,8 +177,8 @@ app.controller('UserController', function ($scope,
} else {
toaster.pop({
type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.USER") }),
title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant(response.data.description),
showCloseButton: true,
});
}
@ -190,7 +190,6 @@ app.controller('UserController', function ($scope,
$scope.getAllUsers();
$scope.getAllPrivileges();
});
app.controller('ModalAddUserCtrl', function ($scope, $uibModalInstance, params) {
@ -198,12 +197,27 @@ app.controller('ModalAddUserCtrl', function ($scope, $uibModalInstance, params)
$scope.operation = "USER.ADD_USER";
$scope.privileges = params.privileges;
$scope.user = {
is_admin: false
is_admin: false,
account_expiration_datetime:moment(),
password_expiration_datetime:moment()
};
$scope.dtOptions = {
locale:{
format: 'YYYY-MM-DD HH:mm:ss',
applyLabel: "OK",
cancelLabel: "Cancel",
},
timePicker: true,
timePicker24Hour: true,
timePickerIncrement: 15,
singleDatePicker: true,
};
$scope.ok = function () {
if ($scope.user.is_admin) {
$scope.user.privilege_id = undefined;
}
$scope.user.account_expiration_datetime = $scope.user.account_expiration_datetime.format().slice(0,19);
$scope.user.password_expiration_datetime = $scope.user.password_expiration_datetime.format().slice(0,19);
$uibModalInstance.close($scope.user);
};
@ -222,10 +236,23 @@ app.controller('ModalEditUserCtrl', function ($scope, $uibModalInstance, params)
} else {
$scope.user.privilege_id = undefined;
}
$scope.dtOptions = {
locale: {
format: 'YYYY-MM-DD HH:mm:ss',
applyLabel: "OK",
cancelLabel: "Cancel",
},
timePicker: true,
timePicker24Hour: true,
timePickerIncrement: 15,
singleDatePicker: true,
};
$scope.ok = function () {
if ($scope.user.is_admin) {
$scope.user.privilege_id = undefined;
}
$scope.user.account_expiration_datetime = moment($scope.user.account_expiration_datetime).format().slice(0,19);
$scope.user.password_expiration_datetime = moment($scope.user.password_expiration_datetime).format().slice(0,19);
$uibModalInstance.close($scope.user);
};

View File

@ -342,7 +342,6 @@ function dropZone() {
link: function(scope, element, attrs) {
var config = {
url: 'http://localhost:8080/upload',
maxFilesize: 100,
paramName: "uploadfile",
maxThumbnailFilesize: 10,

View File

@ -5,7 +5,7 @@
* Custom scripts
*/
$(document).ready(function () {
$(function () {
// Append config box / Only for demo purpose
//$.get("views/skin-config.html", function (data) {

View File

@ -1,53 +0,0 @@
'use strict';
app.factory('GSMModemService', function($http) {
return {
getAllGSMModems:function(callback){
$http.get(getAPI()+'gsmmodems')
.then(function (response) {
callback(response);
}, function (response) {
callback(response);
});
},
searchGSMModems: function(query, callback) {
$http.get(getAPI()+'gsmmodems', { params: { q: query } })
.then(function (response) {
callback(response);
}, function (response) {
callback(response);
});
},
addGSMModem: function(gsmmodem, callback) {
$http.post(getAPI()+'gsmmodems',{data:gsmmodem})
.then(function (response) {
callback(response);
}, function (response) {
callback(response);
});
},
editGSMModem: function(gsmmodem, callback) {
$http.put(getAPI()+'gsmmodems/'+gsmmodem.id,{data:gsmmodem})
.then(function (response) {
callback(response);
}, function (response) {
callback(response);
});
},
deleteGSMModem: function(gsmmodem, callback) {
$http.delete(getAPI()+'gsmmodems/'+gsmmodem.id)
.then(function (response) {
callback(response);
}, function (response) {
callback(response);
});
},
getGSMModem: function(id, callback) {
$http.get(getAPI()+'gsmmodems/'+id)
.then(function (response) {
callback(response);
}, function (response) {
callback(response);
});
}
};
});

View File

@ -96,7 +96,6 @@ function config($translateProvider) {
MENU: 'Menu Settings',
TARIFF: 'Tariff Settings',
EMAIL_SERVER: 'Email Server Settings',
GSM_MODEM: 'GSM Modem Settings',
CONTACT: 'Contacts',
KNOWLEDGEFILE: 'Knowledge Base Settings'
},
@ -155,7 +154,6 @@ function config($translateProvider) {
ADD_ENERGY_ITEM: 'Add Energy Item',
ADD_CONTACT: 'Add Contact',
ADD_EMAIL_SERVER: 'Add Email Server',
ADD_GSM_MODEM: 'Add GSM Modem',
EDIT_SPACE: 'Edit Space',
EDIT_TENANT: 'Edit Tenant',
@ -169,7 +167,6 @@ function config($translateProvider) {
EDIT_CATEGORY: 'Edit Energy Category',
EDIT_CONTACT: 'Edit Contact',
EDIT_EMAIL_SERVER: 'Edit Email Server',
EDIT_GSM_MODEM: 'Edit GSM Modem',
REQUIRES_AUTHENTICATION: 'Requires Authentication',
SELECT_DATE: 'Please Select Date',
@ -239,8 +236,8 @@ function config($translateProvider) {
EXPRESSION: 'Expression',
VARIABLE_NAME: 'Variable Name',
POINT: 'Point',
KGCE: 'KGCE',
KGCO2E: 'KGCO2E',
KGCE: 'Kilogram of Standard Coal',
KGCO2E: 'Kilogram CO2 Emission',
START_DATETIME: 'Start Datetime',
START_TIME: 'Start Time',
@ -388,7 +385,7 @@ function config($translateProvider) {
SELECT_COST_CENTER: 'Please Select Cost Center',
DESCRIPTION: 'Description',
INPUT_DESCRIPTION: 'Please Input Description',
INPUT_METER: 'Please Input Meter',
INPUT_METER: 'Input Meter',
OUTPUT_METER: 'Output Meter',
PARAMETER: 'Parameter',
BIND_PARAMETER: 'Bind Parameter',
@ -420,7 +417,7 @@ function config($translateProvider) {
BIND_EQUIPMENT: 'Bind Equipment',
N_S_EQUIPMENT: 'Bound Equipments',
EQUIPMENT_LIST: 'Equipment List',
INPUT_METER: 'Please Input Meter',
INPUT_METER: 'Input Meter',
OUTPUT_METER: 'Output Meter',
PARAMETER: 'Parameter',
BIND_PARAMETER: 'Bind Parameter',
@ -544,6 +541,8 @@ function config($translateProvider) {
EMAIL: 'Email',
INPUT_EMAIL: 'Please Input Email',
INVALID_EMAIL: 'Invalid Email Format(xxx@xxx.xx)',
ACCOUNT_EXPIRATION_DATETIME: 'Account Expiration Datetime',
PASSWORD_EXPIRATION_DATETIME: 'Password Expiration Datetime',
},
KNOWLEDGEFILE: {
KNOWLEDGE_FILE_LIST: 'Knowledge File List',
@ -552,10 +551,11 @@ function config($translateProvider) {
DELETE: 'Delete',
},
TOASTER: {
FAILURE_TITLE: 'Error',
SUCCESS_TITLE: 'Success',
LOGIN_SUCCESS: 'Login Success',
LOGIN_FAILURE: 'Login Failure',
LOGOUT_SUCCESS: 'Logout Success',
LOGOUT_FAILURE: 'Logout Failure',
SUCCESS_ADD_BODY: 'Add {{template}} Success',
SUCCESS_UPDATE_BODY: 'Update {{template}} Success',
@ -666,8 +666,6 @@ function config($translateProvider) {
FAILED_TO_UPLOAD_OFFLINE_METER_FILE: 'Failed To Upload Offline Meter File',
GATEWAY_NAME_IS_ALREADY_IN_USE: 'Gateway Name Is Already In Use',
GATEWAY_NOT_FOUND: 'Gateway Not Found',
GSM_MODEM_NOT_FOUND: 'Gsm Modem Not Found',
GSM_MODEM_SERIAL_PORT_IS_ALREADY_IN_USE: 'Gsm Modem Serial Port Is Already In Use',
INVALID_ADDRESS: 'Invalid Address',
INVALID_ADDRESS_VALUE: 'Invalid Address Value',
INVALID_ADVANCED_REPORT_ID: 'Invalid Advanced Report ID',
@ -727,7 +725,6 @@ function config($translateProvider) {
INVALID_FROM_ADDR: 'Invalid From Address',
INVALID_GATEWAY_ID: 'Invalid Gateway ID',
INVALID_GATEWAY_NAME: 'Invalid Gateway Name',
INVALID_GSM_MODEM_ID: 'Invalid Gsm Modem ID',
INVALID_HOURLY_HIGH_LIMIT_VALUE: 'Invalid Hourly High Limit Value',
INVALID_HOURLY_LOW_LIMIT_VALUE: 'Invalid Hourly Low Limit Value',
INVALID_IS_ADMIN_VALUE: 'Invalid Is Admin Value',
@ -834,6 +831,7 @@ function config($translateProvider) {
INVALID_VIRTUAL_METER_NAME: 'Invalid Virtual Meter Name',
INVALID_WEB_MESSAGE_ID: 'Invalid Web Message ID',
INVALID_WECHAT_MESSAGE_ID: 'Invalid Wechat Message ID',
KNOWLEDGE_FILE_CANNOT_BE_REMOVED_FROM_DISK: 'Knowledge File Cannot be Removed from Disk',
KNOWLEDGE_FILE_NOT_FOUND: 'Knowledge File Not Found',
MASTER_METER_DOES_NOT_BELONG_TO_SAME_ENERGY_CATEGORY: 'Master Meter Does Not Belong To Same Energy Category',
MASTER_METER_NOT_FOUND: 'Master Meter Not Found',
@ -971,8 +969,10 @@ function config($translateProvider) {
THIS_SPACE_CANNOT_BE_DELETED: 'This Space Cannot Be Deleted',
TIMEZONE_NOT_FOUND: 'Timezone Not Found',
TOKEN_NOT_FOUND_IN_HEADERS_PLEASE_LOGIN: 'Token Not Found In Headers Please Login',
USER_ACCOUNT_HAS_EXPIRED: 'User Account Has Expired',
USER_NAME_IS_ALREADY_IN_USE: 'User Name Is Already In Use',
USER_NOT_FOUND: 'User Not Found',
USER_PASSWORD_HAS_EXPIRED: 'User Password Has Expired',
USER_PRIVILEGE_NOT_FOUND: 'User Privilege Not Found',
USER_SESSION_NOT_FOUND: 'User Session Not Found',
USER_SESSION_TIMEOUT: 'User Session Timeout',
@ -985,7 +985,7 @@ function config($translateProvider) {
WECHAT_MESSAGE_NOT_FOUND: 'Wechat Message Not Found',
},
})
.translations('cn', {
.translations('zh_CN', {
MY_EMS_NAME: 'MyEMS',
LANGUAGE: '语 言',
FULLSCREEN: '全屏显示',
@ -1075,7 +1075,6 @@ function config($translateProvider) {
MENU: '菜单管理',
TARIFF: '能源费率管理',
EMAIL_SERVER: '邮件服务器设置',
GSM_MODEM: '短信模块设置',
CONTACT: '联系人管理',
KNOWLEDGEFILE: '知识库管理'
},
@ -1134,7 +1133,6 @@ function config($translateProvider) {
ADD_ENERGY_ITEM: '添加能耗分项',
ADD_CONTACT: '添加联系人',
ADD_EMAIL_SERVER: '添加邮件服务器',
ADD_GSM_MODEM: '添加短信模块',
EDIT_SPACE: '编辑空间',
EDIT_TENANT: '编辑租户',
@ -1149,7 +1147,6 @@ function config($translateProvider) {
EDIT_ENERGY_ITEM: '编辑能耗分项',
EDIT_CONTACT: '编辑联系人',
EDIT_EMAIL_SERVER: '编辑邮箱服务器',
EDIT_GSM_MODEM: '编辑短信模块',
REQUIRES_AUTHENTICATION: '需要身份验证',
SELECT_DATE: '请选择日期',
@ -1173,8 +1170,8 @@ function config($translateProvider) {
INPUT_UNIT: '请输入单位',
INPUT_CONTACT: '请输入联系人',
INPUT_EXPRESSION: '请输入表达式',
INPUT_KGCE: '请输入标准煤系数',
INPUT_KGCO2E: '请输入二氧化碳排放系数',
INPUT_KGCE: '请输入千克标准煤',
INPUT_KGCO2E: '请输入千克二氧化碳排放',
INPUT_HOST: '请输入服务器',
INPUT_PORT: '请输入端口号',
INPUT_USER_NAME: '请输入用户名',
@ -1183,7 +1180,6 @@ function config($translateProvider) {
INPUT_BAUD_RATE: '请输入波特率',
EMAIL_SERVER: '邮件服务器',
GSM_MODEM: '短信模块',
INVALID_FORMAT: '格式不正确',
INVALID_FROM_ADDR: '发件人地址不正确',
INVALID_BAUD_RATE: '波特率不正确',
@ -1221,8 +1217,8 @@ function config($translateProvider) {
EXPRESSION: '表达式',
VARIABLE_NAME: '变量名',
POINT: '数据点',
KGCE: '标准煤系数',
KGCO2E: '二氧化碳排放系数',
KGCE: '千克标准煤',
KGCO2E: '千克二氧化碳排放',
START_DATETIME: '起始时间',
START_TIME: '开始时间',
@ -1318,7 +1314,7 @@ function config($translateProvider) {
INPUT_SVG: '请输入SVG',
DESCRIPTION: '描述',
DISTRIBUTION_CIRCUIT: '配电回路',
N_S_DISTRIBUTION_CIRCUIT: '属配电回路',
N_S_DISTRIBUTION_CIRCUIT: '属配电回路',
ADD_DISTRIBUTION_CIRCUIT: '添加配电回路',
EDIT_DISTRIBUTION_CIRCUIT: '编辑配电回路',
SELECT_DISTRIBUTION_CIRCUIT: '请选择配电回路',
@ -1345,14 +1341,14 @@ function config($translateProvider) {
EDIT_ENERGY_FLOW_DIAGRAM: '编辑能流图',
SELECT_ENERGY_FLOW_DIAGRAM: '请选择能流图',
NODE: '节点',
N_S_NODE: ' 属节点',
N_S_NODE: ' 属节点',
ADD_NODE: '添加节点',
EDIT_NODE: '编辑节点',
NODE_ID: '节点ID',
NODE_NAME: '节点名称',
INPUT_NODE_NAME: '请输入节点名称',
LINK: '链接',
N_S_LINK: ' 属链接',
N_S_LINK: ' 属链接',
LINK_ID: '链接ID',
ADD_LINK: '添加链接',
EDIT_LINK: '编辑链接',
@ -1372,14 +1368,14 @@ function config($translateProvider) {
BIND_EQUIPMENT: '绑定设备',
N_S_EQUIPMENT: '绑定的设备',
EQUIPMENT_LIST: '设备列表',
INPUT_METER: '请输入表',
INPUT_DESCRIPTION: '请输入描述',
INPUT_METER: '输入表',
OUTPUT_METER: '输出表',
PARAMETER: '参数',
BIND_PARAMETER: '绑定参数',
ADD_PARAMETER: '添加参数',
EDIT_PARAMETER: '编辑参数',
N_S_PARAMETER: '所含参数',
N_S_PARAMETER: '附属参数',
PARAMETER_ID: 'ID',
PARAMETER_NAME: '名称',
INPUT_PARAMETER_NAME: '请输入名称',
@ -1401,14 +1397,14 @@ function config($translateProvider) {
COST_CENTER: '成本中心',
SELECT_COST_CENTER: '请选择成本中心',
DESCRIPTION: '描述',
INPUT_METER: '请输入表',
INPUT_DESCRIPTION: '请输入描述',
INPUT_METER: '输入表',
OUTPUT_METER: '输出表',
PARAMETER: '参数',
BIND_PARAMETER: '绑定参数',
ADD_PARAMETER: '添加参数',
EDIT_PARAMETER: '编辑参数',
N_S_PARAMETER: '所含参数',
N_S_PARAMETER: '附属参数',
PARAMETER_ID: 'ID',
PARAMETER_NAME: '名称',
INPUT_PARAMETER_NAME: '请输入名称',
@ -1529,6 +1525,8 @@ function config($translateProvider) {
EMAIL: '邮箱',
INPUT_EMAIL: '请输入邮箱',
INVALID_EMAIL: '邮箱格式不正确(xxx@xxx.xx)',
ACCOUNT_EXPIRATION_DATETIME: '账户失效时间',
PASSWORD_EXPIRATION_DATETIME: '密码失效时间',
},
KNOWLEDGEFILE: {
KNOWLEDGE_FILE_LIST: '知识文件列表',
@ -1537,10 +1535,11 @@ function config($translateProvider) {
DELETE: '删除',
},
TOASTER: {
FAILURE_TITLE: '错误',
SUCCESS_TITLE: '成功',
LOGIN_SUCCESS: '登录成功。',
LOGIN_FAILURE: '登录失败。',
LOGIN_SUCCESS: '登录成功',
LOGIN_FAILURE: '登录失败',
LOGOUT_SUCCESS: '退出成功',
LOGOUT_FAILURE: '退出失败',
SUCCESS_ADD_BODY: '添加 {{template}} 成功',
SUCCESS_UPDATE_BODY: '更新 {{template}} 成功',
@ -1579,7 +1578,7 @@ function config($translateProvider) {
ADMINISTRATOR_SESSION_NOT_FOUND: 'Administrator Session Not Found',
ADMINISTRATOR_SESSION_TIMEOUT: 'Administrator Session Timeout',
ADVANCED_REPORT_NOT_FOUND: 'Advanced Report Not Found',
BAD_REQUEST: '错误的请求',
BAD_REQUEST: 'Bad Request',
CANNOT_SET_EXISTING_SUBMETER_AS_MASTER_METER: 'Cannot Set Existing Submeter As Master Meter',
COMBINED_EQUIPMENT_EQUIPMENT_RELATION_EXISTS: 'Combined Equipment Equipment Relation Exists',
COMBINED_EQUIPMENT_EQUIPMENT_RELATION_NOT_FOUND: 'Combined Equipment Equipment Relation Not Found',
@ -1653,8 +1652,6 @@ function config($translateProvider) {
FAILED_TO_UPLOAD_OFFLINE_METER_FILE: 'Failed To Upload Offline Meter File',
GATEWAY_NAME_IS_ALREADY_IN_USE: 'Gateway Name Is Already In Use',
GATEWAY_NOT_FOUND: 'Gateway Not Found',
GSM_MODEM_NOT_FOUND: 'Gsm Modem Not Found',
GSM_MODEM_SERIAL_PORT_IS_ALREADY_IN_USE: 'Gsm Modem Serial Port Is Already In Use',
INVALID_ADDRESS: 'Invalid Address',
INVALID_ADDRESS_VALUE: 'Invalid Address Value',
INVALID_ADVANCED_REPORT_ID: 'Invalid Advanced Report ID',
@ -1714,7 +1711,6 @@ function config($translateProvider) {
INVALID_FROM_ADDR: 'Invalid From Address',
INVALID_GATEWAY_ID: 'Invalid Gateway ID',
INVALID_GATEWAY_NAME: 'Invalid Gateway Name',
INVALID_GSM_MODEM_ID: 'Invalid Gsm Modem ID',
INVALID_HOURLY_HIGH_LIMIT_VALUE: 'Invalid Hourly High Limit Value',
INVALID_HOURLY_LOW_LIMIT_VALUE: 'Invalid Hourly Low Limit Value',
INVALID_IS_ADMIN_VALUE: 'Invalid Is Admin Value',
@ -1821,6 +1817,7 @@ function config($translateProvider) {
INVALID_VIRTUAL_METER_NAME: 'Invalid Virtual Meter Name',
INVALID_WEB_MESSAGE_ID: 'Invalid Web Message ID',
INVALID_WECHAT_MESSAGE_ID: 'Invalid Wechat Message ID',
KNOWLEDGE_FILE_CANNOT_BE_REMOVED_FROM_DISK: 'Knowledge File Cannot be Removed from Disk',
KNOWLEDGE_FILE_NOT_FOUND: 'Knowledge File Not Found',
MASTER_METER_DOES_NOT_BELONG_TO_SAME_ENERGY_CATEGORY: 'Master Meter Does Not Belong To Same Energy Category',
MASTER_METER_NOT_FOUND: 'Master Meter Not Found',
@ -1958,8 +1955,10 @@ function config($translateProvider) {
THIS_SPACE_CANNOT_BE_DELETED: 'This Space Cannot Be Deleted',
TIMEZONE_NOT_FOUND: 'Timezone Not Found',
TOKEN_NOT_FOUND_IN_HEADERS_PLEASE_LOGIN: 'Token Not Found In Headers Please Login',
USER_ACCOUNT_HAS_EXPIRED: 'User Account Has Expired',
USER_NAME_IS_ALREADY_IN_USE: 'User Name Is Already In Use',
USER_NOT_FOUND: 'User Not Found',
USER_PASSWORD_HAS_EXPIRED: 'User Password Has Expired',
USER_PRIVILEGE_NOT_FOUND: 'User Privilege Not Found',
USER_SESSION_NOT_FOUND: 'User Session Not Found',
USER_SESSION_TIMEOUT: 'User Session Timeout',
@ -2062,7 +2061,6 @@ function config($translateProvider) {
MENU: 'Verwaltung des Menüs',
TARIFF: 'Energieratenmanagement',
EMAIL_SERVER: 'Mailserver-Einstellungen',
GSM_MODEM: 'SMS-Moduleinstellungen',
CONTACT: 'Kontaktmanagement',
KNOWLEDGEFILE: 'Wissensdatenbankverwaltung'
},
@ -2121,7 +2119,6 @@ function config($translateProvider) {
ADD_ENERGY_ITEM: 'Unterelemente zum Energieverbrauch hinzufügen',
ADD_CONTACT: 'Kontakt hinzufügen',
ADD_EMAIL_SERVER: 'Mail-Server hinzufügen',
ADD_GSM_MODEM: 'SMS-Modul hinzufügen',
EDIT_SPACE: 'Leerzeichen bearbeiten',
EDIT_TENANT: 'Mieter bearbeiten',
@ -2136,7 +2133,6 @@ function config($translateProvider) {
EDIT_ENERGY_ITEM: 'Unterelemente zum Energieverbrauch bearbeiten',
EDIT_CONTACT: 'Kontakt bearbeiten',
EDIT_EMAIL_SERVER: 'Postfachserver bearbeiten',
EDIT_GSM_MODEM: 'SMS-Modul bearbeiten',
REQUIRES_AUTHENTICATION: 'Authentifizierung erforderlich',
SELECT_DATE: 'Bitte wählen Sie ein Datum',
@ -2160,8 +2156,8 @@ function config($translateProvider) {
INPUT_UNIT: 'Bitte geben Sie eine Einheit ein',
INPUT_CONTACT: 'Bitte geben Sie einen Kontakt ein',
INPUT_EXPRESSION: 'Bitte geben Sie einen Ausdruck ein',
INPUT_KGCE: 'Bitte geben Sie den Standardkohlekoeffizienten ein',
INPUT_KGCO2E: 'Bitte geben Sie den CO2-Emissionsfaktor ein',
INPUT_KGCE: 'Bitte geben Sie den Kilogramm Standardkohle ein',
INPUT_KGCO2E: 'Bitte geben Sie Kilogramm Kohlendioxid-Emissionen ein',
INPUT_HOST: 'Bitte geben Sie den Server ein',
INPUT_PORT: 'Bitte geben Sie die Portnummer ein',
INPUT_USER_NAME: 'Bitte geben sie einen Benutzernamen ein',
@ -2170,7 +2166,6 @@ function config($translateProvider) {
INPUT_BAUD_RATE: 'Bitte geben Sie die Baudrate ein',
EMAIL_SERVER: 'Mail-Server',
GSM_MODEM: 'SMS-Modul',
INVALID_FORMAT: 'Falsches Format',
INVALID_FROM_ADDR: 'Falsche Absenderadresse',
INVALID_BAUD_RATE: 'Falsche Baudrate',
@ -2208,8 +2203,8 @@ function config($translateProvider) {
EXPRESSION: 'Ausdruck',
VARIABLE_NAME: 'Variablennamen',
POINT: 'Datenpunkt',
KGCE: 'Standardkohlekoeffizient',
KGCO2E: 'CO2-Emissionsfaktor',
KGCE: 'Kilogramm Standardkohle',
KGCO2E: 'Kilogramm CO2-Emission',
START_DATETIME: 'Startzeit',
START_TIME: 'Anfangszeit',
@ -2358,9 +2353,9 @@ function config($translateProvider) {
BIND_EQUIPMENT: 'Gerät binden',
N_S_EQUIPMENT: 'Gebundenes Gerät',
EQUIPMENT_LIST: 'Geräteliste',
INPUT_METER: 'Bitte geben Sie die Tabelle ein',
INPUT_DESCRIPTION: 'Bitte geben Sie eine Beschreibung ein',
OUTPUT_METER: 'Ausgabetabelle',
INPUT_METER: 'Input Meter',
OUTPUT_METER: 'Output Meter',
PARAMETER: 'Parameter',
BIND_PARAMETER: 'Bindungsparameter',
ADD_PARAMETER: 'Parameter hinzufügen',
@ -2387,9 +2382,9 @@ function config($translateProvider) {
COST_CENTER: 'Kostenstelle',
SELECT_COST_CENTER: 'Bitte wählen Sie eine Kostenstelle',
DESCRIPTION: 'Beschreibung',
INPUT_METER: 'Bitte geben Sie die Tabelle ein',
INPUT_DESCRIPTION: 'Bitte geben Sie eine Beschreibung ein',
OUTPUT_METER: 'Ausgabetabelle',
INPUT_METER: 'Input Meter',
OUTPUT_METER: 'Output Meter',
PARAMETER: 'Parameter',
BIND_PARAMETER: 'Bindungsparameter',
ADD_PARAMETER: 'Parameter hinzufügen',
@ -2515,6 +2510,8 @@ function config($translateProvider) {
EMAIL: 'Briefkasten',
INPUT_EMAIL: 'Bitte geben Sie Ihre E-Mail-Adresse ein',
INVALID_EMAIL: 'Falsches E-Mail-Format (xxx@xxx.xx)',
ACCOUNT_EXPIRATION_DATETIME: 'Ablaufdatum des Kontos',
PASSWORD_EXPIRATION_DATETIME: 'Ablaufdatum des Passworts',
},
KNOWLEDGEFILE: {
KNOWLEDGE_FILE_LIST: 'Liste der Wissensdateien',
@ -2523,10 +2520,11 @@ function config($translateProvider) {
DELETE: 'löschen',
},
TOASTER: {
FAILURE_TITLE: 'Error',
SUCCESS_TITLE: 'Erfolg',
LOGIN_SUCCESS: 'Anmeldung erfolgreich',
LOGIN_FAILURE: 'Login fehlgeschlagen',
LOGOUT_SUCCESS: 'Abmeldung erfolgreich',
LOGOUT_FAILURE: 'Abmeldefehler',
SUCCESS_ADD_BODY: 'Fügen Sie {{template}} erfolgreich hinzu',
SUCCESS_UPDATE_BODY: 'Update {{template}} erfolgreich',
@ -2639,8 +2637,6 @@ function config($translateProvider) {
FAILED_TO_UPLOAD_OFFLINE_METER_FILE: 'Failed To Upload Offline Meter File',
GATEWAY_NAME_IS_ALREADY_IN_USE: 'Gateway Name Is Already In Use',
GATEWAY_NOT_FOUND: 'Gateway Not Found',
GSM_MODEM_NOT_FOUND: 'Gsm Modem Not Found',
GSM_MODEM_SERIAL_PORT_IS_ALREADY_IN_USE: 'Gsm Modem Serial Port Is Already In Use',
INVALID_ADDRESS: 'Invalid Address',
INVALID_ADDRESS_VALUE: 'Invalid Address Value',
INVALID_ADVANCED_REPORT_ID: 'Invalid Advanced Report ID',
@ -2700,7 +2696,6 @@ function config($translateProvider) {
INVALID_FROM_ADDR: 'Invalid From Address',
INVALID_GATEWAY_ID: 'Invalid Gateway ID',
INVALID_GATEWAY_NAME: 'Invalid Gateway Name',
INVALID_GSM_MODEM_ID: 'Invalid Gsm Modem ID',
INVALID_HOURLY_HIGH_LIMIT_VALUE: 'Invalid Hourly High Limit Value',
INVALID_HOURLY_LOW_LIMIT_VALUE: 'Invalid Hourly Low Limit Value',
INVALID_IS_ADMIN_VALUE: 'Invalid Is Admin Value',
@ -2807,6 +2802,7 @@ function config($translateProvider) {
INVALID_VIRTUAL_METER_NAME: 'Invalid Virtual Meter Name',
INVALID_WEB_MESSAGE_ID: 'Invalid Web Message ID',
INVALID_WECHAT_MESSAGE_ID: 'Invalid Wechat Message ID',
KNOWLEDGE_FILE_CANNOT_BE_REMOVED_FROM_DISK: 'Knowledge File Cannot be Removed from Disk',
KNOWLEDGE_FILE_NOT_FOUND: 'Knowledge File Not Found',
MASTER_METER_DOES_NOT_BELONG_TO_SAME_ENERGY_CATEGORY: 'Master Meter Does Not Belong To Same Energy Category',
MASTER_METER_NOT_FOUND: 'Master Meter Not Found',
@ -2944,8 +2940,10 @@ function config($translateProvider) {
THIS_SPACE_CANNOT_BE_DELETED: 'This Space Cannot Be Deleted',
TIMEZONE_NOT_FOUND: 'Timezone Not Found',
TOKEN_NOT_FOUND_IN_HEADERS_PLEASE_LOGIN: 'Token Not Found In Headers Please Login',
USER_ACCOUNT_HAS_EXPIRED: 'User Account Has Expired',
USER_NAME_IS_ALREADY_IN_USE: 'User Name Is Already In Use',
USER_NOT_FOUND: 'User Not Found',
USER_PASSWORD_HAS_EXPIRED: 'User Password Has Expired',
USER_PRIVILEGE_NOT_FOUND: 'User Privilege Not Found',
USER_SESSION_NOT_FOUND: 'User Session Not Found',
USER_SESSION_TIMEOUT: 'User Session Timeout',
@ -2959,7 +2957,7 @@ function config($translateProvider) {
},
})
;
var lang = window.localStorage.getItem("language") || "cn";
var lang = window.localStorage.getItem("myems_admin_ui_language") || "zh_CN";
$translateProvider.preferredLanguage(lang);

View File

@ -193,6 +193,14 @@
.dropzone .dz-message {
text-align: center;
margin: 2em 0; }
.dropzone .dz-message .dz-button {
background: none;
color: inherit;
border: none;
padding: 0;
font: inherit;
cursor: pointer;
outline: inherit; }
.dropzone .dz-preview {
position: relative;
display: inline-block;

View File

@ -0,0 +1,118 @@
/*
* Beautify Dropzone
*
* @author Uday Hiwarale <uhiwarale@gmail.com>
* https://www.github.com/thatisuday/ngDropzone
*
* Remove huge border radius, odd colors
* Remove unnecessary preview elements like size, name etc.
* Use .md, .sm, .xs classes with .dropzone class for smaller thumbnail previews
* * * * * * * * * * * * * * *
* Make sure you set font family property in body else add below style to your dropzones
* font-family:sans-serif;
**/
.dropzone {
position: relative;
padding: 5px;
cursor: pointer;
border: 1px solid #eee;
/* Drop message */
/* Preview */ }
.dropzone .dz-message {
margin: 0;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
font-weight: 300;
color: #999;
font-size: 12px;
text-transform: uppercase; }
.dropzone .dz-preview {
margin: 5px;
min-height: auto;
/* Preview image */
/* Preview info */
/* Progress */
/* Callback icons */
/* Error */
/* Remove file */ }
.dropzone .dz-preview.dz-file-preview .dz-image {
border-radius: 3px; }
.dropzone .dz-preview .dz-image {
border-radius: 3px; }
.dropzone .dz-preview .dz-size,
.dropzone .dz-preview .dz-filename {
display: none; }
.dropzone .dz-preview .dz-progress {
left: 0;
width: 90%;
border-radius: 3px;
margin-left: 5%;
margin-right: 5%; }
.dropzone .dz-preview .dz-progress .dz-upload {
background: #8BC34A;
background: -webkit-linear-gradient(top, #E6EE9C, #8BC34A);
background: linear-gradient(to bottom, #E6EE9C, #8BC34A); }
.dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
margin: 0;
width: 100%;
height: 100%; }
.dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
position: absolute;
margin-top: -6px;
width: 50%;
height: 50%;
transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%); }
.dropzone .dz-preview.dz-error .dz-error-message {
top: auto;
left: 0;
font-size: 12px;
font-weight: 300;
line-height: 14px;
border-radius: 3px;
background: #FF9800;
background: -webkit-linear-gradient(top, #FFA726, #FF9800);
background: linear-gradient(to bottom, #FFA726, #FF9800);
text-align: center;
margin-top: 10px;
margin-left: -10px; }
.dropzone .dz-preview.dz-error .dz-error-message:after {
border-bottom: 6px solid #FF9800; }
.dropzone .dz-preview .dz-remove {
position: absolute;
bottom: 0;
width: 100%;
color: #fff;
font-size: 11px;
padding: 3px 0;
background-color: rgba(100, 100, 100, 0.5);
font-weight: 300;
z-index: 10;
text-transform: uppercase;
white-space: nowrap;
overflow: hidden;
text-decoration: none; }
.dropzone.md .dz-preview .dz-image {
width: 100px;
height: 100px; }
.dropzone.md .dz-preview.dz-error .dz-error-message {
margin-left: -20px; }
.dropzone.sm .dz-preview .dz-image {
width: 80px;
height: 80px; }
.dropzone.sm .dz-preview.dz-error .dz-error-message {
margin-left: -30px; }
.dropzone.sm .dz-preview .dz-remove {
font-size: 10px; }
.dropzone.xs .dz-preview .dz-image {
width: 60px;
height: 60px; }
.dropzone.xs .dz-preview.dz-error .dz-error-message {
margin-left: -40px; }
.dropzone.xs .dz-preview .dz-remove {
font-size: 9px; }

8
admin/index.html vendored
View File

@ -26,8 +26,8 @@
<!-- Main Inspinia CSS files -->
<link href="css/animate.css" rel="stylesheet">
<link href="js/plugins/angular-loading-bar/loading-bar.css" rel="stylesheet">
<link href="js/dropzone/basic.css" rel="stylesheet">
<link href="js/dropzone/dropzone.css" rel="stylesheet">
<link href="css/plugins/dropzone/basic.css" rel="stylesheet">
<link href="css/plugins/dropzone/dropzone.css" rel="stylesheet">
<link id="loadBefore" href="css/style.css" rel="stylesheet">
<link id="loadBefore" href="css/myems.css" rel="stylesheet">
<link href="css/plugins/jsTree/style.min.css" rel="stylesheet">
@ -47,7 +47,7 @@
<script src="js/jquery/jquery.panzoom.min.js"></script>
<script src="js/plugins/jquery-ui/jquery-ui.min.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/dropzone/dropzone.js"></script>
<script src="js/plugins/dropzone/dropzone.js"></script>
<script type="text/javascript">
jQuery.event.props.push('dataTransfer');
Dropzone.autoDiscover = false;
@ -67,7 +67,7 @@
<script src="js/angular/angular.min.js"></script>
<script src="js/angular/angular-sanitize.js"></script>
<script src="js/angular-highcharts/highcharts-ng.js"></script>
<script src="js/dropzone/ng-dropzone.js"></script>
<script src="js/plugins/dropzone/ng-dropzone.js"></script>
<script src="js/plugins/oclazyload/dist/ocLazyLoad.min.js"></script>
<script src="js/angular-translate/angular-translate.min.js"></script>
<script src="js/ui-router/angular-ui-router.min.js"></script>

File diff suppressed because it is too large Load Diff

View File

@ -1,99 +0,0 @@
/**!
* AngularJS dropzone directive
* @author Uday Hiwarale <uhiwarale@gmail.com>
* https://www.github.com/thatisuday/ngDropzone
*/
(function(){
'use strict';
angular.module('thatisuday.dropzone', []).provider('dropzoneOps', function(){
/*
* Add default options here
**/
var defOps = {
//Add your options here
};
return {
setOptions : function(newOps){
angular.extend(defOps, newOps);
},
$get : function(){
return defOps;
}
}
}).directive('ngDropzone', ['$timeout', 'dropzoneOps', function($timeout, dropzoneOps){
return {
restrict : 'AE',
template : '<div></div>',
replace : true,
scope : {
options : '=?', //http://www.dropzonejs.com/#configuration-options
callbacks : '=?', //http://www.dropzonejs.com/#events
methods : '=?' //http://www.dropzonejs.com/#dropzone-methods
},
link : function(scope, iElem, iAttr){
//Set options for dropzone {override from dropzone options provider}
scope.options = scope.options || {};
var initOps = angular.extend({}, dropzoneOps, scope.options);
//Instantiate dropzone with initOps
var dropzone = new Dropzone(iElem[0], initOps);
/*********************************************/
//Instantiate Dropzone methods (Control actions)
scope.methods = scope.methods || {};
scope.methods.getDropzone = function(){
return dropzone; //Return dropzone instance
};
scope.methods.getAllFiles = function(){
return dropzone.files; //Return all files
};
var controlMethods = [
'removeFile', 'removeAllFiles', 'processQueue',
'getAcceptedFiles', 'getRejectedFiles', 'getQueuedFiles', 'getUploadingFiles',
'disable', 'enable', 'confirm', 'createThumbnailFromUrl'
];
angular.forEach(controlMethods, function(methodName){
scope.methods[methodName] = function(){
dropzone[methodName].apply(dropzone, arguments);
if(!scope.$$phase && !scope.$root.$$phase) scope.$apply();
}
});
/*********************************************/
//Set invents (callbacks)
if(scope.callbacks){
var callbackMethods = [
'drop', 'dragstart', 'dragend',
'dragenter', 'dragover', 'dragleave', 'addedfile', 'removedfile',
'thumbnail', 'error', 'processing', 'uploadprogress',
'sending', 'success', 'complete', 'canceled', 'maxfilesreached',
'maxfilesexceeded', 'processingmultiple', 'sendingmultiple', 'successmultiple',
'completemultiple', 'canceledmultiple', 'totaluploadprogress', 'reset', 'queuecomplete'
];
angular.forEach(callbackMethods, function(method){
var callback = (scope.callbacks[method] || angular.noop);
dropzone.on(method, function(){
callback.apply(null, arguments);
if(!scope.$$phase && !scope.$root.$$phase) scope.$apply();
});
});
}
}
}
}]);
})();

View File

@ -1,5 +1,5 @@
/*!
* ClockPicker v{package.version} (http://weareoutman.github.io/clockpicker/)
* ClockPicker v0.0.7 (http://weareoutman.github.io/clockpicker/)
* Copyright 2014 Wang Shenwei.
* Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,114 @@
/**!
* AngularJS dropzone directive
* @author Uday Hiwarale <uhiwarale@gmail.com>
* https://www.github.com/thatisuday/ngDropzone
*/
(function(root){
'use strict';
function factory(angular, Dropzone){
angular.module('thatisuday.dropzone', []).provider('dropzoneOps', function(){
/*
* Add default options here
**/
var defOps = {
//Add your options here
};
return {
setOptions : function(newOps){
angular.extend(defOps, newOps);
},
$get : function(){
return defOps;
}
}
}).directive('ngDropzone', ['$timeout', 'dropzoneOps', function($timeout, dropzoneOps){
return {
restrict : 'AE',
template : '<div></div>',
replace : true,
scope : {
options : '=?', //http://www.dropzonejs.com/#configuration-options
callbacks : '=?', //http://www.dropzonejs.com/#events
methods : '=?' //http://www.dropzonejs.com/#dropzone-methods
},
link : function(scope, iElem, iAttr){
//Set options for dropzone {override from dropzone options provider}
scope.options = scope.options || {};
var initOps = angular.extend({}, dropzoneOps, scope.options);
//Instantiate dropzone with initOps
var dropzone = new Dropzone(iElem[0], initOps);
/*********************************************/
//Instantiate Dropzone methods (Control actions)
scope.methods = scope.methods || {};
scope.methods.getDropzone = function(){
return dropzone; //Return dropzone instance
};
scope.methods.getAllFiles = function(){
return dropzone.files; //Return all files
};
var controlMethods = [
'removeFile', 'removeAllFiles', 'processQueue',
'getAcceptedFiles', 'getRejectedFiles', 'getQueuedFiles', 'getUploadingFiles',
'disable', 'enable', 'confirm', 'createThumbnailFromUrl'
];
angular.forEach(controlMethods, function(methodName){
scope.methods[methodName] = function(){
dropzone[methodName].apply(dropzone, arguments);
if(!scope.$$phase && !scope.$root.$$phase) scope.$apply();
}
});
/*********************************************/
//Set invents (callbacks)
if(scope.callbacks){
var callbackMethods = [
'drop', 'dragstart', 'dragend',
'dragenter', 'dragover', 'dragleave', 'addedfile', 'removedfile',
'thumbnail', 'error', 'processing', 'uploadprogress',
'sending', 'success', 'complete', 'canceled', 'maxfilesreached',
'maxfilesexceeded', 'processingmultiple', 'sendingmultiple', 'successmultiple',
'completemultiple', 'canceledmultiple', 'totaluploadprogress', 'reset', 'queuecomplete'
];
angular.forEach(callbackMethods, function(method){
var callback = (scope.callbacks[method] || angular.noop);
dropzone.on(method, function(){
callback.apply(null, arguments);
if(!scope.$$phase && !scope.$root.$$phase) scope.$apply();
});
});
}
}
}
}]);
}
if ((typeof module === 'object') && module.exports) {
/* CommonJS module */
module.exports = factory(require('angular'), require('dropzone'));
} else if (typeof define === 'function' && define.amd) {
/* AMD module */
define(['angular', 'dropzone'], factory);
} else {
/* Browser global */
factory(root.angular, root.Dropzone);
}
})(this);

View File

@ -1,5 +1,5 @@
<div class="footer-login">
<div>
<strong>{{'MY_EMS_NAME' | translate}} v1.2.1 <a href="https://myems.io">https://myems.io</a> </strong>
<strong>{{'MY_EMS_NAME' | translate}} v1.3.0 <a href="https://myems.io">https://myems.io</a> </strong>
</div>
</div>

View File

@ -3,6 +3,6 @@
<strong><a href="https://myems.io">https://myems.io</a></strong>
</div>
<div>
<strong>{{'MY_EMS_NAME' | translate}} v1.2.1</strong>
<strong>{{'MY_EMS_NAME' | translate}} v1.3.0</strong>
</div>
</div>

View File

@ -32,7 +32,6 @@
<li ui-sref-active="active"><a ui-sref="settings.distributionsystem">{{ 'MENU.SETTINGS.DISTRIBUTION_SYSTEM' | translate }}</a></li>
<li ui-sref-active="active"><a ui-sref="settings.menu">{{ 'MENU.SETTINGS.MENU' | translate }}</a></li>
<li ui-sref-active="active"><a ui-sref="settings.emailserver">{{ 'MENU.SETTINGS.EMAIL_SERVER' | translate }}</a></li>
<li ui-sref-active="active"><a ui-sref="settings.gsmmodem">{{ 'MENU.SETTINGS.GSM_MODEM' | translate }}</a></li>
<li ui-sref-active="active"><a ui-sref="settings.knowledgefile">{{ 'MENU.SETTINGS.KNOWLEDGEFILE' | translate }}</a></li>
</ul>
</li>

View File

@ -21,7 +21,6 @@
<th >{{'FDD.EXPRESSION' | translate}}</th>
<th >{{'FDD.MESSAGE_TEMPLATE' | translate}}</th>
<th >{{'SETTING.ACTION' | translate}}</th>
</tr>
</thead>
<tbody>
@ -33,14 +32,13 @@
<td >{{ rule.priority }}</td>
<td >{{ rule.channel }}</td>
<td >{{ rule.is_enabled==true?'SETTING.ON':'SETTING.OFF' | translate}}</td>
<td >{{ rule.last_run_datetime | date:'yyyy-MM-ddTHH:mm:ss'}}</td>
<td >{{ rule.next_run_datetime | date:'yyyy-MM-ddTHH:mm:ss'}}</td>
<td >{{ rule.last_run_datetime }}</td>
<td >{{ rule.next_run_datetime }}</td>
<td > {{'FDD.CLICK_EDIT_FOR_DETAILS' | translate}} </td>
<td > {{'FDD.CLICK_EDIT_FOR_DETAILS' | translate}} </td>
<td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editRule(rule)" >{{'SETTING.EDIT' | translate}}</a>
<a ng-click="deleteRule(rule)" class="btn btn-danger btn-rounded btn-xs" >{{'SETTING.DELETE' | translate}}</a>
</td>
</tr>
</tbody>

View File

@ -22,7 +22,7 @@
<select ng-change="changeLanguage(language)" ng-model="language" class="form-control" >
<option value="de">Deutsch</option>
<option value="en">English</option>
<option value="cn"></option>
<option value="zh_CN">简体中</option>
</select>
</div>
<div>

View File

@ -120,8 +120,7 @@
download="{{costfile.file_name}}">{{ costfile.file_name }}</a>
</td>
<td class="text-center">{{ costfile.status }}</td>
<td class="text-center">{{ costfile.upload_datetime | date:'yyyy-MM-dd HH:mm'}}</td>
<td class="text-center">{{ costfile.upload_datetime}}</td>
<td class="text-center">
<a ng-click="restoreCostFile(costfile)"
class="btn btn-danger btn-rounded btn-xs">{{'SETTING.RESTORE' | translate}}</a>

View File

@ -28,7 +28,7 @@
<td class="text-center">{{ datasource.gateway.name }}</td>
<td class="text-center">{{ datasource.protocol }}</td>
<td class="text-center">{{ datasource.connection }}</td>
<td class="text-center">{{ datasource.last_seen_datetime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
<td class="text-center">{{ datasource.last_seen_datetime }}</td>
<td class="text-center">
<a ng-click="editDataSource(datasource)"
class="btn btn-primary btn-rounded btn-xs">{{'SETTING.EDIT' | translate}}</a>

View File

@ -23,7 +23,7 @@
<td class="text-center">{{ gateway.id }}</td>
<td class="text-center">{{ gateway.name }}</td>
<td class="text-center">{{ gateway.token}}</td>
<td class="text-center">{{ gateway.last_seen_datetime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
<td class="text-center">{{ gateway.last_seen_datetime }}</td>
<td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editGateway(gateway)" >{{'SETTING.EDIT' | translate}}</a>
<a ng-click="deleteGateway(gateway)" class="btn btn-danger btn-rounded btn-xs" >{{'SETTING.DELETE' | translate}}</a>

View File

@ -1,36 +0,0 @@
<div class="wrapper wrapper-content">
<div class="row">
<div class="col-lg-12">
<div class="tabs-container">
<uib-tabset>
<uib-tab heading="{{'SETTING.GSM_MODEM' | translate}}">
<div class="panel-body" ng-controller="GSMModemController">
<!-- <a ng-click="addGSMModem()" class="btn btn-primary btn-rounded btn-outline" href=""><i class="fa fa-plus-circle"></i> {{'SETTING.ADD_GSM_MODEM' | translate}}</a> -->
<table class="table table-bordered table-hover" >
<thead>
<tr>
<th class="text-center">{{'SETTING.ID' | translate}}</th>
<th class="text-center">{{'SETTING.SERIAL_PORT' | translate}}</th>
<th class="text-center">{{'SETTING.BAUD_RATE' | translate}}</th>
<th class="text-center">{{'SETTING.ACTION' | translate}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="gsmmodem in gsmmodems">
<td class="text-center">{{ gsmmodem.id }}</td>
<td class="text-center">{{ gsmmodem.serial_port }}</td>
<td class="text-center">{{ gsmmodem.baud_rate }}</td>
<td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editGSMModem(gsmmodem)" >{{'SETTING.EDIT' | translate}}</a>
<!-- <a ng-click="deleteGSMModem(gsmmodem)" class="btn btn-danger btn-rounded btn-xs" >{{'SETTING.DELETE' | translate}}</a> -->
</td>
</tr>
</tbody>
</table>
</div>
</uib-tab>
</uib-tabset>
</div>
</div>
</div>
</div>

View File

@ -1,31 +0,0 @@
<div class="inmodal">
<div class="modal-header">
<h4 class="modal-title">{{operation | translate}}</h4>
</div>
<div class="modal-body">
<form role="form" name="form_gsmmodem" novalidate class="form-horizontal">
<div class="form-group"><label class="col-sm-3 control-label">{{'SETTING.SERIAL_PORT' | translate}}</label>
<div class="col-sm-9"><input ng-model="gsmmodem.serial_port" type="text" name="serial_port" class="form-control" required="">
<div class="m-t-xs" ng-show="form_gsmmodem.serial_port.$invalid && form_gsmmodem.serial_port.$dirty">
<small class="text-danger" ng-show="form_gsmmodem.serial_port.$error.required">{{'SETTING.INPUT_SERIAL_PORT' | translate}}</small>
</div>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group"><label class="col-sm-3 control-label">{{'SETTING.BAUD_RATE' | translate}}</label>
<div class="col-sm-9"><input ng-model="gsmmodem.baud_rate" type="number" name="baud_rate" class="form-control" required="">
<div class="m-t-xs" ng-show="form_gsmmodem.port.$invalid && form_gsmmodem.baud_rate.$dirty">
<small class="text-danger" ng-show="form_gsmmodem.baud_rate.$error.required">{{'SETTING.INPUT_BAUD_RATE' | translate}}</small>
<small class="text-danger" ng-show="form_gsmmodem.baud_rate.$error">{{'SETTING.INVALID_BAUD_RATE' | translate}}</small>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" ng-click="cancel()">{{'SETTING.CANCEL' | translate}}</button>
<button type="button" ng-disabled="form_contact.$invalid" class="btn btn-primary" ng-click="ok()">{{'SETTING.SAVE' | translate}}</button>
</div>
</div>

View File

@ -22,7 +22,7 @@
<td class="text-center">{{ knowledgefile.id }}</td>
<td class="text-center"><a href="./upload/{{knowledgefile.uuid}}" download="{{knowledgefile.file_name}}">{{ knowledgefile.file_name }}</a></td>
<td class="text-center">{{ knowledgefile.user_display_name }}</td>
<td class="text-center">{{ knowledgefile.upload_datetime | date:'yyyy-MM-dd HH:mm'}}</td>
<td class="text-center">{{ knowledgefile.upload_datetime }}</td>
<td class="text-center">
<a ng-click="restoreKnowledgeFile(knowledgefile)"
class="btn btn-danger btn-rounded btn-xs">{{'SETTING.RESTORE' | translate}}</a>

View File

@ -310,7 +310,7 @@
</td>
<td class="text-center">{{ offlinemeterfile.status }}</td>
<td class="text-center">
{{ offlinemeterfile.upload_datetime | date:'yyyy-MM-dd HH:mm'}}</td>
{{ offlinemeterfile.upload_datetime }}</td>
<td class="text-center">
<a ng-click="restoreOfflineMeterFile(offlinemeterfile)"

View File

@ -19,7 +19,6 @@
<th class="text-center">{{'SETTING.START_DATETIME' | translate}}</th>
<th class="text-center">{{'SETTING.END_DATETIME' | translate}}</th>
<th class="text-center">{{'SETTING.ACTION' | translate}}</th>
</tr>
</thead>
<tbody>
@ -29,8 +28,8 @@
<td class="text-center">{{ tariff.energy_category.name }}</td>
<td class="text-center">{{showTariffType(tariff.tariff_type) | translate}}</td>
<td class="text-center">{{ tariff.unit_of_price }}</td>
<td class="text-center">{{ tariff.valid_from | date:'yyyy-MM-ddTHH:mm:ss' }}</td>
<td class="text-center">{{ tariff.valid_through | date:'yyyy-MM-ddTHH:mm:ss' }}</td>
<td class="text-center">{{ tariff.valid_from }}</td>
<td class="text-center">{{ tariff.valid_through }}</td>
<td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editTariff(tariff)" >{{'SETTING.EDIT' | translate}}</a>
<a ng-click="deleteTariff(tariff)" class="btn btn-danger btn-rounded btn-xs" >{{'SETTING.DELETE' | translate}}</a>

View File

@ -48,9 +48,9 @@
</td>
<td class="text-center">{{ tenant.lease_number }}</td>
<td class="text-center">
{{ tenant.lease_start_datetime_utc | date:'yyyy-MM-ddTHH:mm:ss' }}</td>
{{ tenant.lease_start_datetime }}</td>
<td class="text-center">
{{ tenant.lease_end_datetime_utc | date:'yyyy-MM-ddTHH:mm:ss' }}</td>
{{ tenant.lease_end_datetime }}</td>
<td class="text-center">
{{ tenant.is_in_lease==false?'SETTING.NO':'SETTING.YES' | translate }}</td>
<td class="text-center">{{tenant.cost_center.name}}</td>

View File

@ -96,13 +96,13 @@
</div>
<div class="form-group"><label class="col-sm-2 control-label">{{'TENANT.LEASE_START_DATETIME' | translate}}</label>
<div class="col-sm-10">
<input date-range-picker class="form-control date-picker" type="text" ng-model="tenant.lease_start_datetime_utc" options="dtOptions"
<input date-range-picker class="form-control date-picker" type="text" ng-model="tenant.lease_start_datetime" options="dtOptions"
placeholder="{{'SETTING.SELECT_DATE' | translate}}" readonly="" />
</div>
</div>
<div class="form-group"><label class="col-sm-2 control-label">{{'TENANT.LEASE_END_DATETIME' | translate}}</label>
<div class="col-sm-10">
<input date-range-picker class="form-control date-picker" type="text" ng-model="tenant.lease_end_datetime_utc" options="dtOptions"
<input date-range-picker class="form-control date-picker" type="text" ng-model="tenant.lease_end_datetime" options="dtOptions"
placeholder="{{'SETTING.SELECT_DATE' | translate}}" readonly="" />
</div>
</div>

View File

@ -17,8 +17,9 @@
<th class="text-center">{{'USER.EMAIL' | translate}}</th>
<th class="text-center">{{'USER.IS_ADMIN' | translate}}</th>
<th class="text-center">{{'USER.PRIVILEGE' | translate}}</th>
<th class="text-center">{{'USER.ACCOUNT_EXPIRATION_DATETIME' | translate}}</th>
<th class="text-center">{{'USER.PASSWORD_EXPIRATION_DATETIME' | translate}}</th>
<th class="text-center">{{'SETTING.ACTION' | translate}}</th>
</tr>
</thead>
<tbody>
@ -27,8 +28,10 @@
<td class="text-center">{{ user.name }}</td>
<td class="text-center">{{ user.display_name }}</td>
<td class="text-center">{{ user.email }}</td>
<td class="text-center">{{ user.is_admin==1?'是':'否' }}</td>
<td class="text-center">{{ user.is_admin==1?'Y':'N' }}</td>
<td class="text-center">{{ user.privilege.name }}</td>
<td class="text-center">{{ user.account_expiration_datetime }}</td>
<td class="text-center">{{ user.password_expiration_datetime }}</td>
<td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editUser(user)" >{{'SETTING.EDIT' | translate}}</a>
<a ng-hide="user.name=='administrator'" class="btn btn-info btn-rounded btn-xs" ng-click="resetPassword(user)" >{{'USER.RESET_PASSWORD' | translate}}</a>

View File

@ -6,16 +6,16 @@
<form role="form" name="form_user" novalidate class="form-horizontal">
<div class="form-group"><label class="col-sm-3 control-label">{{'USER.USERNAME' | translate}}</label>
<div class="col-sm-9">
<input ng-model="user.name" type="text" name="username" class="form-control" ng-disabled="operation=='edit'" required>
<input ng-model="user.name" type="text" name="username" class="form-control" ng-disabled="operation=='USER.EDIT_USER'" required>
<div class="m-t-xs" ng-show="form_user.username.$invalid && form_user.username.$dirty">
<small class="text-danger" ng-show="form_user.username.$error.required">{{'USER.INPUT_NAME' | translate}}</small>
</div>
</div>
</div>
<div class="hr-line-dashed" ng-hide="operation=='edit'"></div>
<div class="form-group" ng-hide="operation=='edit'"><label class="col-sm-3 control-label">{{'USER.PASSWORD' | translate}}</label>
<div class="hr-line-dashed" ng-hide="operation=='USER.EDIT_USER'"></div>
<div class="form-group" ng-hide="operation=='USER.EDIT_USER'"><label class="col-sm-3 control-label">{{'USER.PASSWORD' | translate}}</label>
<div class="col-sm-9">
<input ng-model="user.password" type="password" name="userpassword" class="form-control" ng-disabled="operation=='edit'">
<input ng-model="user.password" type="password" name="userpassword" class="form-control" ng-disabled="operation=='USER.EDIT_USER'">
</div>
</div>
<div class="hr-line-dashed"></div>
@ -59,7 +59,20 @@
</ui-select>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group"><label class="col-sm-3 control-label">{{'USER.ACCOUNT_EXPIRATION_DATETIME' | translate}}</label>
<div class="col-sm-5">
<input date-range-picker class="form-control date-picker" type="text" ng-model="user.account_expiration_datetime" options="dtOptions"
placeholder="{{'SETTING.SELECT_DATE' | translate}}" readonly="" />
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group"><label class="col-sm-3 control-label">{{'USER.PASSWORD_EXPIRATION_DATETIME' | translate}}</label>
<div class="col-sm-5">
<input date-range-picker class="form-control date-picker" type="text" ng-model="user.password_expiration_datetime" options="dtOptions"
placeholder="{{'SETTING.SELECT_DATE' | translate}}" readonly="" />
</div>
</div>
</form>
</div>
<div class="modal-footer">

View File

@ -4,7 +4,6 @@
Providing database schema and scripts for MyEMS.
### Prerequisites
[MySQL 8.0 or later](https://www.mysql.com/)
@ -12,11 +11,11 @@ Providing database schema and scripts for MyEMS.
or [SingleStore 7.0 or later](https://www.singlestore.com/) (highly recommended)
### Installation
Execute the following scripts in MySQL commandline, or execute in other MySQL client tools such as MySQL Workbench, Navicat, DBaver, phpMyAdmin, etc.
```
```bash
cd myems/database/install
mysql -u root -p < myems_billing_baseline_db.sql
mysql -u root -p < myems_billing_db.sql
mysql -u root -p < myems_energy_baseline_db.sql
@ -28,14 +27,15 @@ mysql -u root -p < myems_system_db.sql
mysql -u root -p < myems_user_db.sql
```
To insert demo data execute the following scripts,
```
mysql -u root -p < demo/myems_system_db.sql
```bash
cd myems/database/demo
mysql -u root -p < myems_system_db.sql
```
#### Change COLLATE for MySQL server before version 8.0
```
```bash
sudo nano /etc/mysql/my.cnf
```
```
```bash
[client]
default-character-set = utf8mb4
[mysql]
@ -45,6 +45,16 @@ character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
```
#### Fix MySQL Error: Got a packet bigger than 'max_allowed_packet' bytes
Change the my.cnf or my.ini file (usually found in /etc/mysql/) under the mysqld section and set:
```
max_allowed_packet=100M
```
or you could run these commands in a MySQL console connected to that same server:
```
set global net_buffer_length=1000000;
set global max_allowed_packet=1000000000;
```
### Database Definition

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -144,12 +144,18 @@ INSERT INTO `myems_system_db`.`tbl_data_sources`
(`id`, `name`, `uuid`,`gateway_id`, `protocol`, `connection`)
VALUES
(1, '示例ModbusTCP数据源', 'b3ace9d4-b63b-419b-818f-0f6d1d0603a4', 1, 'modbus-tcp', '{"host":"192.168.0.1", "port":502}'),
(2, '示例ModbusRTU数据源', 'b903f0af-9115-448c-9d46-8caf5f9995f3', 1, 'modbus-tru', '{"port": "/dev/ttyUSB0","slaveaddress": 1, "baudrate": 9600,"bytesize": 8,"parity": "N","stopbits": 1,"timeout": 0.05,"mode": "rtu"}'),
(2, '示例ModbusRTU数据源', 'b903f0af-9115-448c-9d46-8caf5f9995f3', 1, 'modbus-rtu', '{"port": "/dev/ttyUSB0","slaveaddress": 1, "baudrate": 9600,"bytesize": 8,"parity": "N","stopbits": 1,"timeout": 0.05,"mode": "rtu"}'),
(3, '示例Bacnet/IP数据源', 'e2d5b30b-b554-4ebe-8ce7-f377ab380d19', 1, 'bacnet-ip', '{"host":"192.168.0.3", "port":47808}'),
(4, '示例S7数据源', '9eb0d705-d02a-43f8-9c62-7e5ef508b255', 1, 's7', '{"host":"192.168.0.4", "port":102, "rack": 0, "slot": 2}'),
(5, '示例ControlLogix数据源', 'd1dc9792-7861-4dd3-9b01-07511dae16c1', 1, 'control-logix', '{"host":"192.168.0.5","port":44818,"processorslot":3}'),
(5, '示例ControlLogix数据源', 'd1dc9792-7861-4dd3-9b01-07511dae16c1', 1, 'controllogix', '{"host":"192.168.0.5","port":44818,"processorslot":3}'),
(6, '示例OPU UA数据源', '56e1c642-8032-495b-af2e-18a77ca75e0f', 1, 'opc-ua', '{"url":"opc.tcp://192.168.0.6:49320/OPCUA/SimulationServer/"}'),
(7, '示例天气数据源', '9bff8e95-c7c9-4002-b040-08a96ae196b5', 1, 'weather', '{"base_url":"WEATHER_API_URL", "location":"beijing", "key":"APPKEY"}');
(7, '示例天气数据源', '9bff8e95-c7c9-4002-b040-08a96ae196b5', 1, 'weather', '{"base_url":"WEATHER_API_URL", "location":"beijing", "key":"APPKEY"}'),
(8, '示例MySQL数据源', '409439d0-3e0a-4ab3-865a-a5c0329925f8', 1, 'mysql', '{"host":"192.168.0.8", "port":3306, "user":"myems", "password":"!MyEMS1", "database":"myems_ingestion_db" }'),
(9, '示例SQL Server数据源', '025f0429-5088-4f2a-85a3-dff9b4523692', 1, 'sqlserver', '{"host":"192.168.0.9", "port":1433, "user":"myems", "password":"!MyEMS1", "database":"myems_ingestion_db" }'),
(10, '示例PostgreSQL数据源', 'd89b81e6-4917-4a84-b0e9-c2e939599d3a', 1, 'postgresql', '{"host":"192.168.0.10", "port":5432, "user":"myems", "password":"!MyEMS1", "database":"myems_ingestion_db" }'),
(11, '示例Oracle数据源', '1bdf4db8-ea71-433e-ad16-b637275073d7', 1, 'oracle', '{"host":"192.168.0.11", "port":1521, "user":"myems", "password":"!MyEMS1", "database":"myems_ingestion_db" }'),
(12, '示例MongoDB数据源', 'c211fbad-d1d4-465c-bdf5-242f5593682e', 1, 'mongodb', '{"host":"192.168.0.12", "port":27017, "user":"myems", "password":"!MyEMS1", "database":"myems_ingestion_db" }'),
(13, '示例InfluxDB数据源', '79cb60ff-c683-4289-ac69-bd13e1f970d1', 1, 'influxdb', '{"host":"192.168.0.13", "port":8086, "user":"myems", "password":"!MyEMS1", "database":"myems_ingestion_db" }');
COMMIT;
-- ---------------------------------------------------------------------------------------------------------------------
@ -161,7 +167,7 @@ USE `myems_system_db`;
INSERT INTO `myems_system_db`.`tbl_distribution_circuits`
(`id`, `name`, `uuid`, `distribution_system_id`, `distribution_room`, `switchgear`, `peak_load`, `peak_current`, `customers`, `meters`)
VALUES
(1, '51W91', '52f7abe1-ba0e-47a6-a327-4faac42a1d11', 1, 'EW1', '51AL9', 30, 53.6, '地下室应急照明', 'ALE-1102, ALE-1082');
(1, 'AHa01', '52f7abe1-ba0e-47a6-a327-4faac42a1d11', 1, '1ES', 'AHa01', 5100, 1250, '11#电源进线1WHj2', 'AHa01');
COMMIT;
@ -216,16 +222,21 @@ COMMIT;
-- ---------------------------------------------------------------------------------------------------------------------
START TRANSACTION;
USE `myems_system_db`;
INSERT INTO `myems_system_db`.`tbl_energy_items`
(`id`, `name`, `uuid`, `energy_category_id`)
INSERT INTO myems_system_db.tbl_energy_items
(id, name, uuid, energy_category_id)
VALUES
(1, '空调用电', 'c5eac07a-e889-4a56-aa1b-a0b688c4e953', 1),
(2, '动力用电', '6875e4e0-a2ec-47a5-a88e-becb10e9603a', 1),
(3, '照明用电', '79918598-6477-4130-a85c-4cb87d0eac23', 1);
(1, '照明和插座用电', 'cade4e78-2b85-4bea-ab6e-0d6accc88d03', 1),
(2, '走廊和应急照明用电', '7a6dc086-ce08-4d66-ba75-f69af92b32f4', 1),
(3, '室外景观照明用电', 'abcebbd1-b770-4e7c-ae54-8434d724522c', 1),
(4, '冷热站用电', '97cdea54-04c7-4a6a-b4c2-df15874b2f49', 1),
(5, '空调末端用电', '84ab7262-33fb-43a1-9880-9287cc268cc0', 1),
(6, '电梯用电', '26a5fc62-3da1-41b0-bcb1-0056e25ee121', 1),
(7, '水泵用电', 'fc6079f5-01a4-434f-9004-9382e8c3dd47', 1),
(8, '通风机用电', 'a4bf68cd-6ae1-48dd-b281-07c95312921d', 1),
(9, '特殊用电', '1990d151-02ff-4fd6-b298-2b2edee4e0ea', 1);
COMMIT;
-- ---------------------------------------------------------------------------------------------------------------------
-- Demo Data for table `myems_system_db`.`tbl_energy_flow_diagrams`
-- ---------------------------------------------------------------------------------------------------------------------
@ -235,7 +246,7 @@ USE `myems_system_db`;
INSERT INTO `myems_system_db`.`tbl_energy_flow_diagrams`
(`id`, `name`, `uuid`)
VALUES
(1, '低压配电系统', '3ccbc9c6-9575-4212-a63a-a688d1154302');
(1, '示例能流图', '3ccbc9c6-9575-4212-a63a-a688d1154302');
COMMIT;
@ -449,25 +460,25 @@ INSERT INTO `myems_system_db`.`tbl_points`
(`id`, `name`, `data_source_id`, `object_type`, `units`, `high_limit`, `low_limit`, `ratio`, `is_trend`, `address`, `description` )
VALUES
(1, 'Active Energy Import Tariff 1', 1, 'ENERGY_VALUE', 'kWh', 99999999999, 0, 1.000, true,
'{\"slave_id\":1, \"function_code\":3, \"offset\":801, \"number_of_registers\":4, \"format\":\"=d\", \"swap_adjacent_bytes\":false}', null),
'{\"slave_id\":1, \"function_code\":3, \"offset\":801, \"number_of_registers\":4, \"format\":\"=d\", \"byte_swap\":false}', null),
(2, 'Working hours counter', 1, 'ANALOG_VALUE', 'S', 999999999, 0, 1.000, true,
'{\"slave_id\":1, \"function_code\":3, \"offset\":209, \"number_of_registers\":2, \"format\":\"=L\", \"swap_adjacent_bytes\":true}', null),
'{\"slave_id\":1, \"function_code\":3, \"offset\":209, \"number_of_registers\":2, \"format\":\"=L\", \"byte_swap\":true}', null),
(3, 'Current a', 1, 'ANALOG_VALUE', 'A', 5, 0, 1.000, true,
'{\"slave_id\":1, \"function_code\":3, \"offset\":13, \"number_of_registers\":2, \"format\":\"=f\", \"swap_adjacent_bytes\":false}', null),
'{\"slave_id\":1, \"function_code\":3, \"offset\":13, \"number_of_registers\":2, \"format\":\"=f\", \"byte_swap\":false}', null),
(4, 'Active Power a', 1, 'ANALOG_VALUE', 'W', 3450, 0, 1.000, true,
'{\"slave_id\":1, \"function_code\":3, \"offset\":25, \"number_of_registers\":2, \"format\":\"=f\", \"swap_adjacent_bytes\":false}', null),
'{\"slave_id\":1, \"function_code\":3, \"offset\":25, \"number_of_registers\":2, \"format\":\"=f\", \"byte_swap\":false}', null),
(5, 'Power Factor a', 1, 'ANALOG_VALUE', 'W', 1, 0, 1.000, true,
'{\"slave_id\":1, \"function_code\":3, \"offset\":37, \"number_of_registers\":2, \"format\":\"=f\", \"swap_adjacent_bytes\":false}', null),
'{\"slave_id\":1, \"function_code\":3, \"offset\":37, \"number_of_registers\":2, \"format\":\"=f\", \"byte_swap\":false}', null),
(6, '示例ModbusTCP数据点6', 2, 'ENERGY_VALUE', 'Wh', 99999999999, 0, 1.000, true,
'{\"slave_id\":1, \"function_code\":3, \"offset\":40001, \"number_of_registers\":2, \"format\":\"=f\", \"swap_adjacent_bytes\":false}', null),
'{\"slave_id\":1, \"function_code\":3, \"offset\":40001, \"number_of_registers\":2, \"format\":\"=f\", \"byte_swap\":false}', null),
(7, '示例数据点7', 2, 'ANALOG_VALUE', 'V', 690, 0, 1.000, true,
'{\"slave_id\":1, \"function_code\":3, \"offset\":40002, \"number_of_registers\":2, \"format\":\"=f\", \"swap_adjacent_bytes\":false}', null),
'{\"slave_id\":1, \"function_code\":3, \"offset\":40002, \"number_of_registers\":2, \"format\":\"=f\", \"byte_swap\":false}', null),
(8, 'BACnet示例数据点1', 3, 'ANALOG_VALUE', 'V', 690, 0, 1.000, true,
'{\"object_type\":\"analogValue\", \"object_id\":3004860, \"property_name\":\"presentValue\", \"property_array_index\":null}', null),
@ -1131,9 +1142,9 @@ USE `myems_system_db`;
INSERT INTO `myems_system_db`.`tbl_variables`
(`id`, `name`, `expression_id`, `meter_type`, `meter_id`)
VALUES
(1, 'x', 1, 'meter', 1),
(2, 'y', 1, 'meter', 2),
(3, 'z', 1, 'meter', 3);
(1, 'x1', 1, 'meter', 1),
(2, 'x2', 1, 'meter', 2),
(3, 'x3', 1, 'meter', 3);
COMMIT;

View File

@ -26,30 +26,6 @@ CREATE TABLE IF NOT EXISTS `myems_fdd_db`.`tbl_email_messages` (
PRIMARY KEY (`id`));
CREATE INDEX `tbl_email_messages_index_1` ON `myems_fdd_db`.`tbl_email_messages` (`status`, `scheduled_datetime_utc`);
-- ---------------------------------------------------------------------------------------------------------------------
-- Table `myems_fdd_db`.`tbl_gsm_modems`
-- ---------------------------------------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `myems_fdd_db`.`tbl_gsm_modems` ;
CREATE TABLE IF NOT EXISTS `myems_fdd_db`.`tbl_gsm_modems` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`serial_port` VARCHAR(64) NOT NULL,
`baud_rate` INT NOT NULL,
PRIMARY KEY (`id`));
-- ---------------------------------------------------------------------------------------------------------------------
-- Data for table `myems_fdd_db`.`tbl_gsm_modems`
-- ---------------------------------------------------------------------------------------------------------------------
START TRANSACTION;
USE `myems_fdd_db`;
INSERT INTO `myems_fdd_db`.`tbl_gsm_modems`
(`id`, `serial_port`, `baud_rate`)
VALUES
(1, '/dev/ttyS0', 115200);
COMMIT;
-- ---------------------------------------------------------------------------------------------------------------------
-- Table `myems_fdd_db`.`tbl_rules`
-- ---------------------------------------------------------------------------------------------------------------------

View File

@ -26,6 +26,25 @@ CREATE TABLE IF NOT EXISTS `myems_reporting_db`.`tbl_email_messages` (
PRIMARY KEY (`id`));
CREATE INDEX `tbl_email_messages_index_1` ON `myems_reporting_db`.`tbl_email_messages` (`status`, `scheduled_datetime_utc`);
-- ---------------------------------------------------------------------------------------------------------------------
-- Table `myems_reporting_db`.`tbl_reports`
-- ---------------------------------------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `myems_reporting_db`.`tbl_reports` ;
CREATE TABLE IF NOT EXISTS `myems_reporting_db`.`tbl_reports` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) NOT NULL,
`uuid` CHAR(36) NOT NULL,
`category` VARCHAR(128) NOT NULL COMMENT 'SPACE, METER, VIRTUALMETER, TENANT, STORE, SHOPFLOOR, EQUIPMENT, COMBINEDEQUIPMENT',
`report_code` VARCHAR(128) NOT NULL COMMENT 'SPACE01, SPACE02, ... METER01, METER02, ... TENANT01, TENANT02, ...',
`expression` JSON NOT NULL COMMENT 'JSON string of reporting objects, peroids, date ranges, and recipients',
`is_enabled` BOOL NOT NULL,
`last_run_datetime_utc` DATETIME,
`next_run_datetime_utc` DATETIME,
PRIMARY KEY (`id`));
CREATE INDEX `tbl_reports_index_1` ON `myems_reporting_db`.`tbl_reports` (`name`);
-- ---------------------------------------------------------------------------------------------------------------------
-- Table `myems_reporting_db`.`tbl_reports_files`
-- ---------------------------------------------------------------------------------------------------------------------

View File

@ -1243,6 +1243,6 @@ USE `myems_system_db`;
INSERT INTO `myems_system_db`.`tbl_versions`
(`id`, `version`, `release_date`)
VALUES
(1, '1.2.1', '2021-08-19');
(1, '1.3.0', '2021-09-24');
COMMIT;

View File

@ -22,6 +22,8 @@ CREATE TABLE IF NOT EXISTS `myems_user_db`.`tbl_users` (
`password` VARCHAR(256) NOT NULL,
`is_admin` BOOL NOT NULL ,
`privilege_id` BIGINT NULL,
`account_expiration_datetime_utc` DATETIME NOT NULL,
`password_expiration_datetime_utc` DATETIME NOT NULL,
PRIMARY KEY (`id`));
-- --------------------------------------------------------------------------------------------------------------------
@ -31,9 +33,9 @@ START TRANSACTION;
USE `myems_user_db`;
-- default username: administrator
-- default password: !MyEMS1
INSERT INTO `myems_user_db`.`tbl_users`(`id`, `name`, `uuid`, `display_name`, `email`, `salt`, `password`, `is_admin`, `privilege_id`)
INSERT INTO `myems_user_db`.`tbl_users`(`id`, `name`, `uuid`, `display_name`, `email`, `salt`, `password`, `is_admin`, `privilege_id`, `account_expiration_datetime_utc`, `password_expiration_datetime_utc`)
VALUES
(1, 'administrator', 'dcdb67d1-6116-4987-916f-6fc6cf2bc0e4', 'Administrator', 'administrator@myems.io', 'adfd6fb6d78d4e3780ebdd6afdec2c3a', 'bc00df65270b1a72b9ed37136fa95a695896edc8c114391821f5edc6b1bbdbabc3d449962f8d1c7a4ec3f2d0a1a79055623963d88ecb9b778423194ff7b6be42', 1, NULL);
(1, 'administrator', 'dcdb67d1-6116-4987-916f-6fc6cf2bc0e4', 'Administrator', 'administrator@myems.io', 'adfd6fb6d78d4e3780ebdd6afdec2c3a', 'bc00df65270b1a72b9ed37136fa95a695896edc8c114391821f5edc6b1bbdbabc3d449962f8d1c7a4ec3f2d0a1a79055623963d88ecb9b778423194ff7b6be42', 1, NULL, '2099-12-31 16:00:00', '2099-12-31 16:00:00');
COMMIT;
-- ---------------------------------------------------------------------------------------------------------------------
@ -66,15 +68,18 @@ DROP TABLE IF EXISTS `myems_user_db`.`tbl_logs` ;
CREATE TABLE IF NOT EXISTS `myems_user_db`.`tbl_logs` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`utc_date_time` DATETIME NOT NULL,
`activity` VARCHAR(256) NOT NULL,
`user_uuid` CHAR(36) NOT NULL,
`request_datetime_utc` DATETIME NOT NULL,
`request_method` VARCHAR(256) NOT NULL,
`resource_type` VARCHAR(256) NOT NULL,
`resource_id` BIGINT NULL,
`request_body` JSON NULL,
PRIMARY KEY (`id`));
CREATE INDEX `tbl_logs_index_1` ON `myems_user_db`.`tbl_logs` (`user_uuid`, `request_datetime_utc`, `request_method`);
-- ----------------------------------------------------------------------------------
-- ---------------------------------------------------------------------------------------------------------------------
-- Table `myems_user_db`.`tbl_notifications`
-- ----------------------------------------------------------------------------------
-- ---------------------------------------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `myems_user_db`.`tbl_notifications` ;
CREATE TABLE IF NOT EXISTS `myems_user_db`.`tbl_notifications` (

28
database/test_mysql.py Normal file
View File

@ -0,0 +1,28 @@
import mysql.connector
import config
def test_connect():
cursor = None
cnx = None
try:
cnx = mysql.connector.connect(**config.myems_user_db)
cursor = cnx.cursor()
query = (" SELECT id, name, display_name, email "
" FROM tbl_users "
" ORDER BY id ")
cursor.execute(query)
rows = cursor.fetchall()
print("The config of database is right:", rows)
except Exception as e:
print("The config of database is wrong:", str(e))
finally:
if cursor:
cursor.close()
if cnx:
cnx.disconnect()
if __name__ == "__main__":
test_connect()

View File

@ -0,0 +1,15 @@
DROP TABLE IF EXISTS `myems_user_db`.`tbl_logs` ;
CREATE TABLE IF NOT EXISTS `myems_user_db`.`tbl_logs` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`user_uuid` CHAR(36) NOT NULL,
`request_datetime_utc` DATETIME NOT NULL,
`request_method` VARCHAR(256) NOT NULL,
`resource_type` VARCHAR(256) NOT NULL,
`resource_id` BIGINT NULL,
`request_body` JSON NULL,
PRIMARY KEY (`id`));
CREATE INDEX `tbl_logs_index_1` ON `myems_user_db`.`tbl_logs` (`user_uuid`, `request_datetime_utc`, `request_method`);
-- UPDATE VERSION NUMBER
UPDATE myems_system_db.tbl_versions SET version='1.2.2', release_date='2021-08-28' WHERE id=1;

View File

@ -0,0 +1,21 @@
-- ---------------------------------------------------------------------------------------------------------------------
-- Table `myems_reporting_db`.`tbl_reports`
-- ---------------------------------------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `myems_reporting_db`.`tbl_reports` ;
CREATE TABLE IF NOT EXISTS `myems_reporting_db`.`tbl_reports` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) NOT NULL,
`uuid` CHAR(36) NOT NULL,
`category` VARCHAR(128) NOT NULL COMMENT 'SPACE, METER, VIRTUALMETER, TENANT, STORE, SHOPFLOOR, EQUIPMENT, COMBINEDEQUIPMENT',
`report_code` VARCHAR(128) NOT NULL COMMENT 'SPACE01, SPACE02, ... METER01, METER02, ... TENANT01, TENANT02, ...',
`expression` JSON NOT NULL COMMENT 'JSON string of reporting objects, peroids, date ranges, and recipients',
`is_enabled` BOOL NOT NULL,
`last_run_datetime_utc` DATETIME,
`next_run_datetime_utc` DATETIME,
PRIMARY KEY (`id`));
CREATE INDEX `tbl_reports_index_1` ON `myems_reporting_db`.`tbl_reports` (`name`);
-- UPDATE VERSION NUMBER
UPDATE myems_system_db.tbl_versions SET version='1.2.3', release_date='2021-09-04' WHERE id=1;

Some files were not shown because too many files have changed in this diff Show More