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

@ -5,394 +5,477 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased] ## [Unreleased]
### Added ### Added
- None. - None.
### Changed ### Changed
- None. - None.
### Fixed ### Fixed
- None. - None.
### Removed ### Removed
- None. - None.
## [v1.2.1] - 2021-08-19
## [v1.3.0] - 2021-09-04
### Added ### Added
- Added Missing Error Messages Words of API to Web UI i18n - added expiration datetimes to User in Admin UI
- Added rule_id to messages tables of fdd database - added expiration datetimes to user actions in API
- added version tags to images in Dockerfile - 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 ### Changed
- renamed virtualmeter.model.html in Admin UI - replaced Chinese with English in Excel Exporters of API
- replaced stateChangeStart with transitions.onStart in Admin UI - changed start&end datetime formatter for tariff from timestamp to strftime
- added filters for jstree action types of menu and space in Admin UI - changed lease start&end datetime formatter for tenant from timestamp to strftime
- updated README of Web UI - changed last run datetime and next run datetime formatter for rule from timestamp to strftime
- replaced href with ng-href in Admin UI - changed last seen datetime formatter for gateway from timestamp to strftime
- upgraded Highcharts JS to v9.1.2 - changed last seen datetime formatter of datasource from timestamp to strftime
- upgraded jquery-ui to v1.12.1 - changed upload datetime formatter of knowledgefile and offlinemeterfile from timestamp to strftime
- updated Admin UI translations for Error Messages of API - changed cost file upload datetime formatter from timestamp to strftime
- upgraded ocLazyLoad to v1.0.10 in Admin UI - updated translation of Admin UI
- updated Dockerfiles to add pip mirrors - updated database README
- upgraded AngularJS to v1.8.2 - 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
- removed unnecessary jc.jsextend library from Admin UI - fixed PEP8 warnings in API
- fixed debugging code issues in Admin UI - fixed typo in contact controller of Admin UI
- fixed unused code issues in Admin UI - added try_files directive to avoid 404 error while refreshing pages in Web UI
- fixed self assignment error in Web UI - modified API error message for knowledge file cannot be removed from disk.
- fixed 'Clear-text logging of sensitive information' in API
- fixed 'The variable binary_file_data does not seem to be defined for all execution paths' in API
- replaced == with === to avoid casting in Admin UI
- fixed response body of Restore actions
- fixed typos in database
- fixed typo in API
- fixed typo in demo data of database
### Removed ### Removed
- removed unused logs - removed cookies usages from API
- removed diff-match-patch library from Admin UI
- removed jeditable library from Admin UI
- removed js plugins codemirror and summernote from Admin UI
- removed 'unused import' from API
- removed uncessary pass from acquisition.py of myems-modbus-tcp
- removed unused import from meterbatch.py of API
- removed unnecessary library mathjax from Admin UI
- removed unnecessary libraries d3, and3, nvd3 and c3 from Admin UI
- removed unnecessary library nggrid from Admin UI
## [v1.2.0] - 2021-08-08 ## [v1.2.3] - 2021-09-04
### Added ### Added
- Added demo data to database - added tbl_reports to myems_reporting_db in database.
- added trusted-host to Dockerfiles
### Changed ### Changed
- Replaced every_day_* to periodic_* in excelexporters of API - updated README.
- Updated Dockerfiles - renamed language cn to zh-cn in Admin UI
### Fixed ### Fixed
- Replaced every_day_* to periodic_* in excelexporters of API - fixed Local Storage conflicts in Admin UI and Web UI .
- Fixed data issues of tbl_menus in database - fixed issues in database demo script
### Removed ### Removed
- Deleted unnecessary words in translations of Admin UI - None.
## [v1.1.6] - 2021-08-02 ## [v1.2.2] - 2021-08-28
### Added ### Added
- Added Meter Batch Analysis Report - added user log to UserLogin, ChangePassword and ResetPassword in API
- Added Child Space Share Pies for SpaceCost in Web UI - implemented user_logger decorators in API
- Added Web UI & Admin UI Installation Guide on Apache Web Server - added default passwords to README.
- Added Dockerfiles
- Added Customized Menus in Web UI, API and Admin UI
### Changed ### Changed
- None. - 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
- Upgraded jquery to v2.2.4 in Admin UI - 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
- None. - removed unnecessary dropzone-amd-module library from Admin UI
## [v1.1.5] - 2021-07-20 ## [v1.2.1] - 2021-08-19
### Added ### Added
- None. - Added Missing Error Messages Words of API to Web UI i18n
- Added rule_id to messages tables of fdd database
- added version tags to images in Dockerfile
### Changed ### Changed
- changed all worksheet names of Excel exporters in API - renamed virtualmeter.model.html in Admin UI
- replaced stateChangeStart with transitions.onStart in Admin UI
- added filters for jstree action types of menu and space in Admin UI
- updated README of Web UI
- replaced href with ng-href in Admin UI
- upgraded Highcharts JS to v9.1.2
- upgraded jquery-ui to v1.12.1
- updated Admin UI translations for Error Messages of API
- upgraded ocLazyLoad to v1.0.10 in Admin UI
- updated Dockerfiles to add pip mirrors
- upgraded AngularJS to v1.8.2
### Fixed ### Fixed
- updated upgrade1.1.4 sql - removed unnecessary jc.jsextend library from Admin UI
- fixed issue of gitignore in Admin UI - fixed debugging code issues in Admin UI
- fixed unused code issues in Admin UI
- fixed self assignment error in Web UI
- fixed 'Clear-text logging of sensitive information' in API
- fixed 'The variable binary_file_data does not seem to be defined for all execution paths' in API
- replaced == with === to avoid casting in Admin UI
- fixed response body of Restore actions
- fixed typos in database
- fixed typo in API
- fixed typo in demo data of database
### Removed ### Removed
- None. - removed unused logs
- removed diff-match-patch library from Admin UI
- removed jeditable library from Admin UI
- removed js plugins codemirror and summernote from Admin UI
- removed 'unused import' from API
- removed uncessary pass from acquisition.py of myems-modbus-tcp
- removed unused import from meterbatch.py of API
- removed unnecessary library mathjax from Admin UI
- removed unnecessary libraries d3, and3, nvd3 and c3 from Admin UI
- removed unnecessary library nggrid from Admin UI
## [v1.1.4] - 2021-07-19 ## [v1.2.0] - 2021-08-08
### Added ### Added
- added tbl_email_messages to myems_reporting_db - Added demo data to database
- added data sort to FDD messages in Admin UI
- added new category to FDD rule in API & Admin UI
- added Search Input for meters in Web UI
- added last year data to dashboard
- added ChildSpaceProportion SharePies to Space Energy Category report of Web UI
- added ORDER BY utc_date_time to all digital parameters data in API
- added the pagination for meter realtime page
- added pagination to MeterRealtime in Web UI
- added internationalization of Vertical Navigation Bar in Web UI
- added Equipment Batch Analysis report API
- added Cost File to API and Admin UI
- added restore button to offline meter file in API and Admin UI
### Changed ### Changed
- changed GET Data Source Point Collection to order by ID - Replaced every_day_* to periodic_* in excelexporters of API
- changed equipment and combined equipment associated points name to parameters name in reports API - Updated Dockerfiles
- updated validate expression of rule in API
- updated i18n in Web UI
- upgraded Web UI library to 2.10.2
### Fixed ### Fixed
- fixed typo for deleting email messages in Admin UI - Replaced every_day_* to periodic_* in excelexporters of API
- fixed issues of deleting text message and wechat message in Admin UI - Fixed data issues of tbl_menus in database
- fixed base period cost units issue of Dashboard API
- fixed selected meter issues in onSearchMeter of Web UI
- fixed wrong HTTP Status Code issues in API
- fixed Child Space Share Pie issue in excel exporter of spaceenergycategory
### Removed ### Removed
- Drop table tbl_sms_recipients from myems_fdd_db - Deleted unnecessary words in translations of Admin UI
- deleted parameters data from Dashboard
## [v1.1.3] - 2021-05-25 ## [v1.1.6] - 2021-08-02
### Added ### Added
- added Combined Equipment Batch Analysis Report - Added Meter Batch Analysis Report
- added Shopfloor Batch Analysis Report - Added Child Space Share Pies for SpaceCost in Web UI
- added Store Batch Analysis Report - Added Web UI & Admin UI Installation Guide on Apache Web Server
- added Tenant Batch Analysis Report - Added Dockerfiles
- implemented virtual point calculating in myems-normalization service - Added Customized Menus in Web UI, API and Admin UI
- added is_virtual to tbl_points in database
- added gateway process to myems-modbus-tcp service
- added gateway process to myems-bacnet service
- added procedure to update last seen datetime of data source in myems-modbus service
- added last seen datetime to data source setting in Admin UI
- added last seen datetime to Gateway Setting in Admin UI
- added excel exporter of spaceefficiency report in API
### Changed ### Changed
- updated Dashboard in web to display energy data of this year - None.
- updated tbl_expressions in database
- added start value and end value to metertracking report
- updated comments and log messages in myems-modbust-tcp service
- improved theme of energyflowdiagram in Web UI
### Fixed ### Fixed
- updated metertracking report to reduce duplicated meters - Upgraded jquery to v2.2.4 in Admin UI
- fixed detailed value missing issue in SpaceEfficiency report in Web UI
### Removed ### Removed
- None. - None.
## [v1.1.2] - 2021-04-23 ## [v1.1.5] - 2021-07-20
### Added ### Added
- added associated parameters data to excel exporter of shopfloorstatistics in API - None.
- added associated parameters data to excel exporter of shopfloorsaving in API
- added associated parameters data to excel exporter of shopfloorload in API
- added associated parameters data to excel exporter of shopfloorenergyitem in API
- added associated parameters data to excel exporter of shopfloorenergycategory in API
- added associated parameters data to excel exporter of shopfloorcost in API
- added associated parameters data to excel exporter of storestatistics in API
- added associated parameters data to excel exporter of storesaving in API
- added associated parameters data to excel exporter of storeload in API
- added associated parameters data to storeenergyitem in API
- added associated parameters data to excel exporter of storeenergycategory in API
- added associated parameters data to excel exporter of storecost in API
- added associated parameters data to excel exporter of spacestatistics in API
- added associated parameters data to excel exporter of spacesaving in API
- added associated parameters data to excel exporter of spaceoutput in API
- added associated parameters data to excel exporter of spaceload in API
- added associated parameters data to excel exporter of spaceincome in API
- added associated parameters data to excel exporter of spaceenergyitem in API
- added associated parameters data to excel exporter of spaceenergycategory in API
- added associated parameters data to excel export of spacecost in API
- added associated parameters data to excel exporter of metertrend in API
- added associated parameters data to excel exporter of meterenergy in API
- added associated parameters data to excel exporter of metersubmetersbalance in API
- added parameters data to excel exporter of metercost in API
- added associated parameters data to excel exporter of tenantstatistics in API
- added associated parameters data to excel exporter of tenantsaving in API
- added associated parameters data to excel exporter of tenantload in API
- added associated parameters data to excel exporter of tenantenergyitem in API
- added associated parameters data to excel exporter of tenantenergycategory in API
- added associated parameters data to excel exporter of tenantcost in API
- added associated parameters data to excel exporter of combinedequipmentstatistics in API
- added associated parameters data to combinedequipmentsaving in API
- added associated parameters data to combinedequipmentload in API
- added associated parameters data to combinedequipmentoutput in API
- added associated parameters data to combinedequipmentincome in API
- added associated parameters data to combinedequipmentenergyitem in API
- added associated parameters data to combinedequipmentenergycategory in API
- added associated parameters data to combinedequipmentcost in API
- added quickmode to HTTP request parameters of MeterTrend report in API
- added parameter data to excel exporter of EquipmentStatistics in API
- added parameter data to excel exporter of EquipmentSaving in API
- added parameter data to excel exporter of EquipmentOutput in API
- added parameter data to excel exporter of EquipmentLoad in API
- added parameters data to excel exporter of EquipmentEnergyItem in API
- added parameters data to excel exporter of EquipmentEnergyCategory in API
### Changed ### Changed
- updated README - changed all worksheet names of Excel exporters in API
- updated excel exporter of metersubmetersbalance in API
- updated excel exporter of meterenergy in API
- updated excel exporter of metercost in API
- updated panel width and height of costcenter in Admin UI
- updated panel width and height of combinedequipment view in Admin UI
- updated panel width and height of equipment view in Admin UI
- changed query form column width from auto to xs={6} sm={3} in Web UI
### Fixed ### Fixed
- fixed issues in excel exporters of combinedequipment in API - updated upgrade1.1.4 sql
- added parameters validator to statistics_hourly_data_by_period in API - fixed issue of gitignore in Admin UI
- added code to validate parameters of averaging_hourly_data_by_period in API
- fixed issue in excel exporter of equipmentincome in API
- fixed unit issue in CombinedEquipmentCost report in API
### Removed ### Removed
- deleted slim-scroll from and added maxheight to panel of views in Admin UI - None.
## [v1.1.4] - 2021-07-19
## [v1.1.1] - 2021-03-31
### Added ### Added
- added associated equipment data to CombinedEquipmentCost report in API - added tbl_email_messages to myems_reporting_db
- added associated equipment data to CombinedEquipmentStatistics report in API - added data sort to FDD messages in Admin UI
- added associated equipment data to CombinedEquipmentSaving report in API - added new category to FDD rule in API & Admin UI
- added associated equipment data to CombinedEquipmentOutput report in API - added Search Input for meters in Web UI
- added associated equipment data to CombinedEquipmentLoad report in API - added last year data to dashboard
- added associated equipment data to CombinedEquipmentIncome report in API - added ChildSpaceProportion SharePies to Space Energy Category report of Web UI
- added associated equipment data to CombinedEquipmentEnergyItem report in API - added ORDER BY utc_date_time to all digital parameters data in API
- added associated equipment data to CombinedEquipmentEnergyCategory report in API - added the pagination for meter realtime page
- added quickmode parameter to combinedequipmentefficiency report in API - added pagination to MeterRealtime in Web UI
- added associated equipment data to CombinedEquipmentStatistics in Web UI - added internationalization of Vertical Navigation Bar in Web UI
- added associated equipment data to CombinedEquipmentLoad in Web UI - added Equipment Batch Analysis report API
- added excel exporter of equipmentcost reporter in API - added Cost File to API and Admin UI
- added associated equipment data to CombinedEquipmentEnergyItem report in API - added restore button to offline meter file in API and Admin UI
- added AssociatedEquipmentTable to CombinedEquipmentIncome Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentSaving Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentOutput Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentIncome Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentCost Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentEnergyCategory Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentEnergyItem Report in web UI
- added last_run_datetime and next_run_datetime to rule in API
- added Deutsch (German) login language list in admin UI
### Changed ### Changed
- reduced font size of meterrealtime in Web UI - changed GET Data Source Point Collection to order by ID
- moved category before fdd_code of rule in admin UI and API - changed equipment and combined equipment associated points name to parameters name in reports API
- updated validate expression of rule in API
- updated i18n in Web UI
- upgraded Web UI library to 2.10.2
### Fixed ### Fixed
- fixed omission mistakes in myems-cleaning - fixed typo for deleting email messages in Admin UI
- fixed error for large number of parameters in combinedequipmentefficiency and equipmentefficiency in API - fixed issues of deleting text message and wechat message in Admin UI
- fixed error of None Comparison in API - fixed base period cost units issue of Dashboard API
- fixed NoneType error in all Load reports API. - fixed selected meter issues in onSearchMeter of Web UI
- fixed wrong HTTP Status Code issues in API
- fixed Child Space Share Pie issue in excel exporter of spaceenergycategory
### Removed ### Removed
- None. - Drop table tbl_sms_recipients from myems_fdd_db
- deleted parameters data from Dashboard
## [v1.1.3] - 2021-05-25
## [v1.1.0] - 2021-03-18
### Added ### Added
- added excel exporter of equipmentefficiency report. - added Combined Equipment Batch Analysis Report
- added excel exporter of conbinedequipmentefficiency report in API. - added Shopfloor Batch Analysis Report
- added 'optional' tips to meter,virtual meter and offline meter setting in admin UI. - added Store Batch Analysis Report
- added Optional key to translation in admin UI. - added Tenant Batch Analysis Report
- added cominbedequipmentefficiency report to api and web. - implemented virtual point calculating in myems-normalization service
- added equipmentefficiency report api. - added is_virtual to tbl_points in database
- added gateway process to myems-modbus-tcp service
- added gateway process to myems-bacnet service
- added procedure to update last seen datetime of data source in myems-modbus service
- added last seen datetime to data source setting in Admin UI
- added last seen datetime to Gateway Setting in Admin UI
- added excel exporter of spaceefficiency report in API
### Changed ### Changed
- updated cost file controller in admin UI - updated Dashboard in web to display energy data of this year
- updated user login session expire time to 8 hours. - updated tbl_expressions in database
- changed web UI and API to set contact of space is optional. - added start value and end value to metertracking report
- updated comments and log messages in myems-modbust-tcp service
- improved theme of energyflowdiagram in Web UI
### Fixed ### Fixed
- fixed http headers issues of offlinemeterfile, knowledgefile and costfile in admin UI - updated metertracking report to reduce duplicated meters
- changed float datatype to Decimal datatype for offline meter normalization. - fixed detailed value missing issue in SpaceEfficiency report in Web UI
- fixed issue of add space in web UI.
- added historical database close and disconnect at the end of reports.
### Removed ### Removed
- None. - None.
## [v1.0.8] - 2021-03-11 ## [v1.1.2] - 2021-04-23
### Added ### Added
- added excel exporter of combinedequipmentstatistics report - added associated parameters data to excel exporter of shopfloorstatistics in API
- added translation for German - added associated parameters data to excel exporter of shopfloorsaving in API
- added excel exporter of storesaving report - added associated parameters data to excel exporter of shopfloorload in API
- added excel exporter of equipmentincome report - added associated parameters data to excel exporter of shopfloorenergyitem in API
- added excel exporter of shopfloorsaving report - added associated parameters data to excel exporter of shopfloorenergycategory in API
- added excel exporter of equipmentload report - added associated parameters data to excel exporter of shopfloorcost in API
- added associated parameters data to excel exporter of storestatistics in API
- added associated parameters data to excel exporter of storesaving in API
- added associated parameters data to excel exporter of storeload in API
- added associated parameters data to storeenergyitem in API
- added associated parameters data to excel exporter of storeenergycategory in API
- added associated parameters data to excel exporter of storecost in API
- added associated parameters data to excel exporter of spacestatistics in API
- added associated parameters data to excel exporter of spacesaving in API
- added associated parameters data to excel exporter of spaceoutput in API
- added associated parameters data to excel exporter of spaceload in API
- added associated parameters data to excel exporter of spaceincome in API
- added associated parameters data to excel exporter of spaceenergyitem in API
- added associated parameters data to excel exporter of spaceenergycategory in API
- added associated parameters data to excel export of spacecost in API
- added associated parameters data to excel exporter of metertrend in API
- added associated parameters data to excel exporter of meterenergy in API
- added associated parameters data to excel exporter of metersubmetersbalance in API
- added parameters data to excel exporter of metercost in API
- added associated parameters data to excel exporter of tenantstatistics in API
- added associated parameters data to excel exporter of tenantsaving in API
- added associated parameters data to excel exporter of tenantload in API
- added associated parameters data to excel exporter of tenantenergyitem in API
- added associated parameters data to excel exporter of tenantenergycategory in API
- added associated parameters data to excel exporter of tenantcost in API
- added associated parameters data to excel exporter of combinedequipmentstatistics in API
- added associated parameters data to combinedequipmentsaving in API
- added associated parameters data to combinedequipmentload in API
- added associated parameters data to combinedequipmentoutput in API
- added associated parameters data to combinedequipmentincome in API
- added associated parameters data to combinedequipmentenergyitem in API
- added associated parameters data to combinedequipmentenergycategory in API
- added associated parameters data to combinedequipmentcost in API
- added quickmode to HTTP request parameters of MeterTrend report in API
- added parameter data to excel exporter of EquipmentStatistics in API
- added parameter data to excel exporter of EquipmentSaving in API
- added parameter data to excel exporter of EquipmentOutput in API
- added parameter data to excel exporter of EquipmentLoad in API
- added parameters data to excel exporter of EquipmentEnergyItem in API
- added parameters data to excel exporter of EquipmentEnergyCategory in API
### Changed ### Changed
- Changed default reporting range in EnergyFlowDiagram. - updated README
- updated excel exporter of metersubmetersbalance in API
- updated excel exporter of meterenergy in API
- updated excel exporter of metercost in API
- updated panel width and height of costcenter in Admin UI
- updated panel width and height of combinedequipment view in Admin UI
- updated panel width and height of equipment view in Admin UI
- changed query form column width from auto to xs={6} sm={3} in Web UI
### Fixed ### Fixed
- None. - fixed issues in excel exporters of combinedequipment in API
- added parameters validator to statistics_hourly_data_by_period in API
- added code to validate parameters of averaging_hourly_data_by_period in API
- fixed issue in excel exporter of equipmentincome in API
- fixed unit issue in CombinedEquipmentCost report in API
### Removed ### Removed
- None. - deleted slim-scroll from and added maxheight to panel of views in Admin UI
## [v1.0.7] - 2021-03-07
## [v1.1.1] - 2021-03-31
### Added ### Added
- added excel exporter of storeload report - added associated equipment data to CombinedEquipmentCost report in API
- added excel exporter of spaceincome report - added associated equipment data to CombinedEquipmentStatistics report in API
- added excel exporter of equipmentsaving report - added associated equipment data to CombinedEquipmentSaving report in API
- added excel exporter of combinedequipmentsaving report - added associated equipment data to CombinedEquipmentOutput report in API
- added excel exporter of combinedequipmentload report - added associated equipment data to CombinedEquipmentLoad report in API
- added excel exporter of spaceoutput report - added associated equipment data to CombinedEquipmentIncome report in API
- added excel exporter of combinedequipmentoutput - added associated equipment data to CombinedEquipmentEnergyItem report in API
- added excel exporter of combinedequipmentcost report - added associated equipment data to CombinedEquipmentEnergyCategory report in API
- added excel exporter of shopfloorcost report - added quickmode parameter to combinedequipmentefficiency report in API
- added excel exporter of shopfloorload report - added associated equipment data to CombinedEquipmentStatistics in Web UI
- added excel exporter of combinedequipmentenergycategory report - added associated equipment data to CombinedEquipmentLoad in Web UI
- added excel exporter of combinedequipmentitem report. - added excel exporter of equipmentcost reporter in API
- added excel exporter of equipmentenergyitem report. - added associated equipment data to CombinedEquipmentEnergyItem report in API
- added excel exporter of equipmentenergycategory report. - added AssociatedEquipmentTable to CombinedEquipmentIncome Report in web UI
- added excel exporter of shopfloorenergyitem report. - added AssociatedEquipmentTable to CombinedEquipmentSaving Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentOutput Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentIncome Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentCost Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentEnergyCategory Report in web UI
- added AssociatedEquipmentTable to CombinedEquipmentEnergyItem Report in web UI
- added last_run_datetime and next_run_datetime to rule in API
- added Deutsch (German) login language list in admin UI
### Changed ### Changed
- None. - reduced font size of meterrealtime in Web UI
- moved category before fdd_code of rule in admin UI and API
### Fixed ### Fixed
- fixed wrong HTTP headers in admin. - fixed omission mistakes in myems-cleaning
- fixed typo in combinedequipment controller in admin. - fixed error for large number of parameters in combinedequipmentefficiency and equipmentefficiency in API
- fixed energy item undefined issue when edit virtual meter and offline meter. - fixed error of None Comparison in API
- fixed NoneType error in all Load reports API.
### Removed ### Removed
- removed 'required' property from equipment model in admin. - None.
## [v1.0.6] - 2021-02-26
## [v1.1.0] - 2021-03-18
### Added ### Added
- added store statistics report excel exporter. - added excel exporter of equipmentefficiency report.
- added equipment tracking excel exporter. - added excel exporter of conbinedequipmentefficiency report in API.
- added store cost report excel exporter. - added 'optional' tips to meter,virtual meter and offline meter setting in admin UI.
- added equipment statistics report excel exporter. - added Optional key to translation in admin UI.
- added store energy item report excel exporter. - added cominbedequipmentefficiency report to api and web.
- added shopfloor statistics report excel exporter. - added equipmentefficiency report api.
- merged myems-api.
### Changed ### Changed
- modified database table tbl_energy_flow_diagrams_links - updated cost file controller in admin UI
- updated user login session expire time to 8 hours.
- changed web UI and API to set contact of space is optional.
### Fixed ### Fixed
- fixed energy category names and units issue in EnergyItem reports. - fixed http headers issues of offlinemeterfile, knowledgefile and costfile in admin UI
- changed float datatype to Decimal datatype for offline meter normalization.
- fixed issue of add space in web UI.
- added historical database close and disconnect at the end of reports.
### Removed ### Removed
- None. - None.
## [v1.0.5] - 2021-02-23 ## [v1.0.8] - 2021-03-11
### Added ### Added
- None. - added excel exporter of combinedequipmentstatistics report
- added translation for German
- added excel exporter of storesaving report
- added excel exporter of equipmentincome report
- added excel exporter of shopfloorsaving report
- added excel exporter of equipmentload report
### Changed ### Changed
- None. - Changed default reporting range in EnergyFlowDiagram.
### Fixed ### Fixed
- None. - None.
### Removed ### Removed
- None. - None.
[Unreleased]: https://github.com/MyEMS/myems/compare/v1.2.1...HEAD ## [v1.0.7] - 2021-03-07
[v1.2.1]: https://github.com/MyEMS/myems/compare/v1.2.0...v1.2.1 ### Added
[v1.2.0]: https://github.com/MyEMS/myems/compare/v1.1.6...v1.2.0 - added excel exporter of storeload report
[v1.1.6]: https://github.com/MyEMS/myems/compare/v1.1.5...v1.1.6 - added excel exporter of spaceincome report
[v1.1.5]: https://github.com/MyEMS/myems/compare/v1.1.4...v1.1.5 - added excel exporter of equipmentsaving report
[v1.1.4]: https://github.com/MyEMS/myems/compare/v1.1.3...v1.1.4 - added excel exporter of combinedequipmentsaving report
[v1.1.3]: https://github.com/MyEMS/myems/compare/v1.1.2...v1.1.3 - added excel exporter of combinedequipmentload report
[v1.1.2]: https://github.com/MyEMS/myems/compare/v1.1.1...v1.1.2 - added excel exporter of spaceoutput report
[v1.1.1]: https://github.com/MyEMS/myems/compare/v1.1.0...v1.1.1 - added excel exporter of combinedequipmentoutput
[v1.0.8]: https://github.com/MyEMS/myems/compare/v1.0.8...v1.1.0 - added excel exporter of combinedequipmentcost report
[v1.0.8]: https://github.com/MyEMS/myems/compare/v1.0.7...v1.0.8 - added excel exporter of shopfloorcost report
[v1.0.7]: https://github.com/MyEMS/myems/compare/v1.0.6...v1.0.7 - added excel exporter of shopfloorload report
[v1.0.6]: https://github.com/MyEMS/myems/compare/v1.0.5...v1.0.6 - added excel exporter of combinedequipmentenergycategory report
[v1.0.5]: https://github.com/MyEMS/myems/releases/tag/v1.0.5 - added excel exporter of combinedequipmentitem report.
- added excel exporter of equipmentenergyitem report.
- added excel exporter of equipmentenergycategory report.
- added excel exporter of shopfloorenergyitem report.
### Changed
- None.
### Fixed
- fixed wrong HTTP headers in admin.
- fixed typo in combinedequipment controller in admin.
- fixed energy item undefined issue when edit virtual meter and offline meter.
### Removed
- removed 'required' property from equipment model in admin.
## [v1.0.6] - 2021-02-26
### Added
- added store statistics report excel exporter.
- added equipment tracking excel exporter.
- added store cost report excel exporter.
- added equipment statistics report excel exporter.
- added store energy item report excel exporter.
- added shopfloor statistics report excel exporter.
- merged myems-api.
### Changed
- modified database table tbl_energy_flow_diagrams_links
### Fixed
- fixed energy category names and units issue in EnergyItem reports.
### Removed
- None.
## [v1.0.5] - 2021-02-23
### Added
- None.
### Changed
- None.
### Fixed
- None.
### Removed
- None.
[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

178
README.md
View File

@ -14,7 +14,9 @@
## MyEMS 介绍 ## MyEMS 介绍
MyEMS是行业领先的开源能源管理系统利用云计算、物联网、大数据、人工智能等信息化技术构建而成。MyEMS可用于构建统一规范、功能强大的综合能源管理服务平台。MyEMS由资深专业团队开发维护系统代码基于MIT开源软件许可协议发布。用开源助力实现碳达峰碳中和。 MyEMS是行业领先的开源能源管理系统。
MyEMS可用于能源管理项目的设备管理、数据采集、处理、分析、可视化和报表。
MyEMS由资深专业团队开发维护系统代码基于MIT开源软件许可协议发布。用开源助力实现碳达峰碳中和。
## MyEMS架构 ## MyEMS架构
@ -23,6 +25,16 @@ MyEMS是行业领先的开源能源管理系统利用云计算、物联网、
![MyEMS Architecture Site View](/docs/images/architecture-site-view.png) ![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组件(社区版)
MyEMS项目由下列组件构成: MyEMS项目由下列组件构成:
@ -66,49 +78,158 @@ MyEMS Web UI: 80
MyEMS Admin UI: 8001 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 git clone https://gitee.com/myems/myems.git
``` ```
修改以下文件中的数据库IP - 2.数据库导入 (否则数据库没有用户信息,网页无法验证登录)
假定数据库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
# 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' **3.2** 修改config.py里的数据库IP账号密码
假定本机IP为: 192.168.2.3
``` ```
sudo nano admin/nginx.conf # 这里以修改数据库IP为例如果数据库账号密码也不同请根据自己需求替换config.py里的账号密码
sudo nano web/nginx.conf cd myems
# proxy_pass http://127.0.0.1:8000/; => proxy_pass http://192.168.2.3:8000/; 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 cd myems/web
npm install npm install
npm run build npm run build
``` ```
使用docker-compose安装
- 5.docker-compose一键安装
``` ```
cd myems cd myems
docker-compose up -d 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
## 功能版本对比 ## 功能版本对比
| 功能 |社区版 |企业版 | 说明 | | 功能 |社区版 |企业版 | 说明 |
| :--- | :----: | :----: | :----: | | :--- | :----: | :----: | :----: |
| 开源 | ✔️ | ❌ | | | 开源 | ✔️ | ❌ | |
| 价格 | 免费 | 收费 | 标准组件授权费;定制组件开发费; | | 价格 | 免费 | 收费 | 标准组件授权费;定制组件开发费; |
| 更换品牌名称与标志LOGO | ❌ | ✔️ | | | 更换品牌名称与标志LOGO | ❌ | ✔️ | |
| Modbus TCP 协议 | ✔️ | ✔️ | 采集数据 https://modbus.org/ | | Modbus TCP 协议 | ✔️ | ✔️ | 采集数据 https://modbus.org/ |
@ -210,7 +331,14 @@ docker-compose up -d
| Honeywell EBI | ❌ | ✔️ | 采集数据 https://www.honeywell.com/ | | Honeywell EBI | ❌ | ✔️ | 采集数据 https://www.honeywell.com/ |
| SIEMENS Desigo CC | ❌ | ✔️ | 采集数据 https://siemens.com/ | | SIEMENS Desigo CC | ❌ | ✔️ | 采集数据 https://siemens.com/ |
| QWeather API | ❌ | ✔️ | 采集数据 https://www.qweather.com/ | | QWeather API | ❌ | ✔️ | 采集数据 https://www.qweather.com/ |
| FDD 能效故障诊断系统 | ❌ | ✔️ | 需要企业版组件许可或定制开发 | | 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) [社区版路线图](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-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 wird von einem erfahrenen Entwicklungsteam entwickelt und gewartet, und der Quellcode des Systems wird unter MIT-Lizenz veröffentlicht.
## MyEMS Architektur ## 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 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) ## MyEMS Komponenten (GCommunity Edition)
@ -69,6 +79,27 @@ MyEMS Web UI: 80
MyEMS Admin UI: 8001 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 ### Docker Docker-compose Installieren
``` ```
@ -76,24 +107,28 @@ git clone https://gitee.com/myems/myems.git
``` ```
Ändern Sie die Datenbankkonfiguration in den folgenden Dateien Ä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-api/config.py
sudo nano myems-aggregation/config.py sudo nano myems-aggregation/config.py
sudo nano myems-cleaning/config.py sudo nano myems-cleaning/config.py
sudo nano myems-modbus-tcp/config.py sudo nano myems-modbus-tcp/config.py
sudo nano myems-normalization/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 Ä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 admin/nginx.conf
sudo nano web/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 Verpacken Sie das web, um Produktdateien zu generieren
``` ```
@ -209,8 +244,15 @@ docker-compose up -d
| Johnson Controls Metasys API | ❌ | ✔️ | https://www.johnsoncontrols.com/ | | Johnson Controls Metasys API | ❌ | ✔️ | https://www.johnsoncontrols.com/ |
| Honeywell EBI | ❌️ | ✔️ | https://www.honeywell.com/ | | Honeywell EBI | ❌️ | ✔️ | https://www.honeywell.com/ |
| SIEMENS Desigo CC | ❌ | ✔️ | https://siemens.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 | | 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 | | Advanced Reporting Engine | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz oder eine benutzerdefinierte Entwicklung |
| Prognose des Energieverbrauchs | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz oder eine benutzerdefinierte Entwicklung | | Prognose des Energieverbrauchs | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz oder eine benutzerdefinierte Entwicklung |
| Graphics Drawing Tool | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz | | Graphics Drawing Tool | ❌ | ✔️ | Erfordert eine Standardkomponentenlizenz |
@ -238,26 +280,12 @@ docker-compose up -d
| Bidding Support Service | ❌ | ✔️ | | | Bidding Support Service | ❌ | ✔️ | |
| Customize Support Service | ❌ | ✔️ | | | Customize Support Service | ❌ | ✔️ | |
## MyEMS Bildschirmfoto ## MyEMS Bildschirmfoto
![MyEMS Space EnergyCategory1](/docs/images/myems-space-energycategory1.gif) ![MyEMS Space EnergyCategory1](/docs/images/myems-space-energycategory1.gif)
![MyEMS Space EnergyCategory2](/docs/images/myems-space-energycategory2.gif) ![MyEMS Space EnergyCategory2](/docs/images/myems-space-energycategory2.gif)
![MyEMS Space EnergyCategory3](/docs/images/myems-space-energycategory3.gif) ![MyEMS Space EnergyCategory3](/docs/images/myems-space-energycategory3.gif)
![MyEMS Großbild-Dashboard](/docs/images/myems-large-screen-dashboard.gif) ![MyEMS Großbild-Dashboard](/docs/images/myems-large-screen-dashboard.gif)
## MyEMS Straßenkarte ## MyEMS Straßenkarte
[Community Edition Straßenkarte](https://github.com/orgs/MyEMS/projects) [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 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 is being developed and maintained by an experienced development team, and the system's source code is published under MIT license.
## MyEMS Architecture ## 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 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) ## MyEMS Components (Community Edition)
@ -68,6 +78,26 @@ MyEMS Web UI: 80
MyEMS Admin UI: 8001 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 ### Docker-compose Installation
@ -76,23 +106,28 @@ git clone https://gitee.com/myems/myems.git
``` ```
Modify Database IP in the following files 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-api/config.py
sudo nano myems-aggregation/config.py sudo nano myems-aggregation/config.py
sudo nano myems-cleaning/config.py sudo nano myems-cleaning/config.py
sudo nano myems-modbus-tcp/config.py sudo nano myems-modbus-tcp/config.py
sudo nano myems-normalization/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 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 admin/nginx.conf
sudo nano web/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 Build web for production
``` ```
@ -211,8 +246,15 @@ docker-compose up -d
| Johnson Controls Metasys API | ❌ | ✔️ | https://www.johnsoncontrols.com/ | | Johnson Controls Metasys API | ❌ | ✔️ | https://www.johnsoncontrols.com/ |
| Honeywell EBI | ❌ | ✔️ | https://www.honeywell.com/ | | Honeywell EBI | ❌ | ✔️ | https://www.honeywell.com/ |
| SIEMENS Desigo CC | ❌ | ✔️ | https://siemens.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 | | 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 | | Advanced Reporting Engine | ❌ | ✔️ | Requires standard component license or custom development |
| Prognose des Energieverbrauchs | ❌ | ✔️ | Requires standard component license or custom development | | Prognose des Energieverbrauchs | ❌ | ✔️ | Requires standard component license or custom development |
| Graphics Drawing Tool | ❌ | ✔️ | | | Graphics Drawing Tool | ❌ | ✔️ | |
@ -246,20 +288,6 @@ docker-compose up -d
![MyEMS Space EnergyCategory3](/docs/images/myems-space-energycategory3.gif) ![MyEMS Space EnergyCategory3](/docs/images/myems-space-energycategory3.gif)
![MyEMS Large Screen Dashboard](/docs/images/myems-large-screen-dashboard.gif) ![MyEMS Large Screen Dashboard](/docs/images/myems-large-screen-dashboard.gif)
## MyEMS Roadmap ## MyEMS Roadmap
[Community Edition Roadmap](https://github.com/orgs/MyEMS/projects) [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 ## Prerequisites
nginx-1.18.0 or later nginx-1.18.0 or later
## Option 1: Install on NGINX Server ## Option 1: Install on NGINX Server
* Install NGINX Server * Install NGINX Server
@ -15,8 +14,8 @@ nginx-1.18.0 or later
refer to http://nginx.org/en/docs/install.html refer to http://nginx.org/en/docs/install.html
* Configure NGINX * Configure NGINX
``` ```bash
$ sudo nano /etc/nginx/nginx.conf sudo nano /etc/nginx/nginx.conf
``` ```
In the 'http' section, add some directives: In the 'http' section, add some directives:
``` ```
@ -54,25 +53,25 @@ Add a new 'server' section with direstives as below:
``` ```
* Download myems * Download myems
``` ```bash
$ cd ~ cd ~
$ git clone https://github.com/MyEMS/myems.git git clone https://github.com/MyEMS/myems.git
``` ```
* Install myems-admin : * 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 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
``` ```bash
$ sudo cp -r ~/myems/admin /var/www/html/admin sudo cp -r ~/myems/admin /var/www/html/admin
$ sudo chmod 0755 -R /var/www/html/admin sudo chmod 0755 -R /var/www/html/admin
``` ```
Check the config file and change it if necessary: Check the config file and change it if necessary:
``` ```bash
$ sudo nano /var/www/html/admin/app/api.js sudo nano /var/www/html/admin/app/api.js
``` ```
## NOTE: ## NOTE:
The 'upload' folder is for user uploaded files. DO NOT delete/move/overwrite the 'upload' folder when you upgraded myems-admin. 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 /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 refer to https://httpd.apache.org/docs/2.4/install.html
* Configure Apache2 * Configure Apache2
``` ```bash
$ sudo vi /etc/apache2/ports.conf sudo vi /etc/apache2/ports.conf
``` ```
Add a Listen Add a Listen
``` ```
Listen 8001 Listen 8001
``` ```
``` ```bash
$ sudo vi /etc/apache2/sites-available/000-default.conf sudo vi /etc/apache2/sites-available/000-default.conf
``` ```
Add a new 'VirtualHost' as below Add a new 'VirtualHost' as below
``` ```xml
<VirtualHost 127.0.0.1:8001> <VirtualHost 127.0.0.1:8001>
ServerAdmin MyEMS-admin ServerAdmin MyEMS-admin
DocumentRoot /var/www/admin DocumentRoot /var/www/admin
@ -110,18 +109,18 @@ Add a new 'VirtualHost' as below
``` ```
* Download myems-admin * Download myems-admin
``` ```bash
$ cd ~ cd ~
$ git clone https://github.com/MyEMS/myems.git git clone https://github.com/MyEMS/myems.git
``` ```
* Install myems-admin : * 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 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
``` ```bash
$ sudo cp -r ~/myems/admin /var/www/html/admin sudo cp -r ~/myems/admin /var/www/html/admin
$ sudo chmod 0755 -R /var/www/html/admin sudo chmod 0755 -R /var/www/html/admin
``` ```
Check the config file and change it if necessary: Check the config file and change it if necessary:
``` ```bash
$ sudo nano /var/www/html/admin/app/api.js sudo nano /var/www/html/admin/app/api.js
``` ```

View File

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

View File

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

View File

@ -15,10 +15,10 @@ app.controller('EmailMessageOptionController', function($scope, $timeout,
autoApply: true, autoApply: true,
locale:{ locale:{
format: 'YYYY-MM-DD', format: 'YYYY-MM-DD',
applyLabel: "确定", applyLabel: "OK",
cancelLabel: "取消", cancelLabel: "Cancel",
}, },
eventHandlers:{ eventHandlers:{
'apply.daterangepicker':function(ev,picker){ 'apply.daterangepicker':function(ev,picker){
//$scope.execute(); //$scope.execute();
@ -37,13 +37,13 @@ app.controller('EmailMessageOptionController', function($scope, $timeout,
load: true, load: true,
period:$scope.currentPeriod period:$scope.currentPeriod
}); });
EmailMessageAnalysisService.getAnalysisResult(query, function(response) { EmailMessageAnalysisService.getAnalysisResult(query, function(response) {
if (angular.isDefined(response.status) && response.status === 200) { if (angular.isDefined(response.status) && response.status === 200) {
$scope.$emit('handleEmitEmailMessageOptionChanged', response.data); $scope.$emit('handleEmitEmailMessageOptionChanged', response.data);
} }
}); });
}; };
$timeout(function() { $timeout(function() {
$scope.execute(); $scope.execute();

View File

@ -52,8 +52,8 @@ app.controller('RuleController', function($scope, $uibModal, $translate, RuleSer
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY",{template: $translate.instant("FDD.RULE")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY",{template: $translate.instant("FDD.RULE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -91,8 +91,8 @@ app.controller('RuleController', function($scope, $uibModal, $translate, RuleSer
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("FDD.RULE")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("FDD.RULE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
@ -126,18 +126,11 @@ app.controller('RuleController', function($scope, $uibModal, $translate, RuleSer
showCloseButton: true, showCloseButton: true,
}); });
$scope.getAllRules(); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.RULE")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("FDD.RULE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

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

View File

@ -15,10 +15,10 @@ app.controller('TextMessageOptionController', function($scope, $timeout,
autoApply: true, autoApply: true,
locale:{ locale:{
format: 'YYYY-MM-DD', format: 'YYYY-MM-DD',
applyLabel: "确定", applyLabel: "OK",
cancelLabel: "取消", cancelLabel: "Cancel",
}, },
eventHandlers:{ eventHandlers:{
'apply.daterangepicker':function(ev,picker){ 'apply.daterangepicker':function(ev,picker){
//$scope.execute(); //$scope.execute();
@ -37,13 +37,13 @@ app.controller('TextMessageOptionController', function($scope, $timeout,
load: true, load: true,
period:$scope.currentPeriod period:$scope.currentPeriod
}); });
TextMessageAnalysisService.getAnalysisResult(query, function (response) { TextMessageAnalysisService.getAnalysisResult(query, function (response) {
if (angular.isDefined(response.status) && response.status === 200) { if (angular.isDefined(response.status) && response.status === 200) {
$scope.$emit('handleEmitTextMessageOptionChanged', response.data); $scope.$emit('handleEmitTextMessageOptionChanged', response.data);
} }
}); });
}; };
$timeout(function() { $timeout(function() {
$scope.execute(); $scope.execute();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -74,8 +74,8 @@ app.controller('CombinedEquipmentParameterController', function ($scope, $uibMod
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -123,8 +123,8 @@ app.controller('CombinedEquipmentParameterController', function ($scope, $uibMod
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -157,18 +157,11 @@ app.controller('CombinedEquipmentParameterController', function ($scope, $uibMod
showCloseButton: true, showCloseButton: true,
}); });
$scope.getParametersByCombinedEquipmentID($scope.currentCombinedEquipment.id); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant(popBody, { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }),
body: $translate.instant(popBody, { template: $translate.instant("COMBINED_EQUIPMENT.PARAMETER") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -40,8 +40,8 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.CONTACT")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.CONTACT")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -68,7 +68,7 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
modalInstance.result.then(function (modifiedContact) { modalInstance.result.then(function (modifiedContact) {
ContactService.editContact(modifiedContact, function (response) { ContactService.editContact(modifiedContact, function (response) {
if(angular.isDefined(response.status) && response.status === 200200){ if(angular.isDefined(response.status) && response.status === 200){
toaster.pop({ toaster.pop({
type: "success", type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"), title: $translate.instant("TOASTER.SUCCESS_TITLE"),
@ -79,8 +79,8 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
}else{ }else{
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.CONTACT")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.CONTACT")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -115,8 +115,8 @@ app.controller('ContactController', function($scope, $translate,$uibModal, Conta
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.CONTACT")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.CONTACT")}), body: $translate.instant(response.data.description),
showCloseButton: true, 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")}), body: $translate.instant("TOASTER.SUCCESS_ADD_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
showCloseButton: true, showCloseButton: true,
}); });
$scope.getAllCostCenters(); $scope.getAllCostCenters();
$scope.$emit('handleEmitCostCenterChanged'); $scope.$emit('handleEmitCostCenterChanged');
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.COSTCENTER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -70,11 +69,11 @@ app.controller('CostCenterController', function($scope, $translate,$uibModal, Co
}); });
$scope.getAllCostCenters(); $scope.getAllCostCenters();
$scope.$emit('handleEmitCostCenterChanged'); $scope.$emit('handleEmitCostCenterChanged');
}else{ } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.COSTCENTER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -107,21 +106,14 @@ app.controller('CostCenterController', function($scope, $translate,$uibModal, Co
}); });
$scope.getAllCostCenters(); $scope.getAllCostCenters();
$scope.$emit('handleEmitCostCenterChanged'); $scope.$emit('handleEmitCostCenterChanged');
} else if (angular.isDefined(response.status) && response.status === 400) { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant(response.data.title), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.COSTCENTER")}),
body: $translate.instant(response.data.description), body: $translate.instant(response.data.description),
showCloseButton: true, 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")}),
showCloseButton: true,
});
}
}); });
} }
}); });

View File

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

View File

@ -9,7 +9,7 @@ app.controller('CostFileController', function (
toaster, toaster,
SweetAlert) { 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 () { $scope.getAllCostFiles = function () {
CostFileService.getAllCostFiles(function (response) { CostFileService.getAllCostFiles(function (response) {
@ -37,7 +37,7 @@ app.controller('CostFileController', function (
toaster.pop({ toaster.pop({
type: "success", type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"), 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, showCloseButton: true,
}); });
$scope.getAllCostFiles(); $scope.getAllCostFiles();
@ -45,8 +45,8 @@ app.controller('CostFileController', function (
'error': function (file, xhr) { 'error': function (file, xhr) {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY".format(file.name)), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -96,18 +96,11 @@ app.controller('CostFileController', function (
showCloseButton: true, showCloseButton: true,
}); });
$scope.getAllCostFiles(); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("TOASTER.COST_FILE")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("TOASTER.COST_FILE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -53,8 +53,8 @@ app.controller('DataSourceController', function($scope, $uibModal, $translate, D
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -93,8 +93,8 @@ app.controller('DataSourceController', function($scope, $uibModal, $translate, D
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -127,18 +127,11 @@ app.controller('DataSourceController', function($scope, $uibModal, $translate, D
showCloseButton: true, showCloseButton: true,
}); });
$scope.$emit("handleEmitDataSourceChanged"); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DATA_SOURCE.DATA_SOURCE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -57,8 +57,8 @@ app.controller('PointController', function($scope, $uibModal, $translate, DataSo
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY",{template: $translate.instant( "SETTING.POINT")}),
body: "TOASTER.ERROR_ADD_BODY", body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -99,8 +99,8 @@ app.controller('PointController', function($scope, $uibModal, $translate, DataSo
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.POINT")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.POINT")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -133,18 +133,11 @@ app.controller('PointController', function($scope, $uibModal, $translate, DataSo
showCloseButton: true, showCloseButton: true,
}); });
$scope.getPointsByDataSourceID($scope.currentDataSource); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.POINT")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.POINT")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -61,8 +61,8 @@ app.controller('DistributionCircuitController', function($scope, $translate, $ui
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -101,8 +101,8 @@ app.controller('DistributionCircuitController', function($scope, $translate, $ui
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -136,18 +136,11 @@ app.controller('DistributionCircuitController', function($scope, $translate, $ui
}); });
$scope.getDistributionCircuitsByDistributionSystemID($scope.currentDistributionSystem.id); $scope.getDistributionCircuitsByDistributionSystemID($scope.currentDistributionSystem.id);
$scope.$emit('handleEmitDistributionCircuitChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("DISTRIBUTION_SYSTEM.DISTRIBUTION_CIRCUIT")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

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

View File

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

View File

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

View File

@ -91,8 +91,8 @@ app.controller('EnergyFlowDiagramLinkController', function($scope,$uibModal, $tr
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -141,8 +141,8 @@ app.controller('EnergyFlowDiagramLinkController', function($scope,$uibModal, $tr
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -176,18 +176,11 @@ app.controller('EnergyFlowDiagramLinkController', function($scope,$uibModal, $tr
}); });
$scope.getLinksByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id); $scope.getLinksByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
$scope.$emit('handleEmitEnergyFlowDiagramLinkChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.LINK")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -62,8 +62,8 @@ app.controller('EnergyFlowDiagramNodeController', function($scope, $translate, $
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -101,8 +101,8 @@ app.controller('EnergyFlowDiagramNodeController', function($scope, $translate, $
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -136,18 +136,11 @@ app.controller('EnergyFlowDiagramNodeController', function($scope, $translate, $
}); });
$scope.getNodesByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id); $scope.getNodesByEnergyFlowDiagramID($scope.currentEnergyFlowDiagram.id);
$scope.$emit('handleEmitEnergyFlowDiagramNodeChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("ENERGY_FLOW_DIAGRAM.NODE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

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

View File

@ -74,8 +74,8 @@ app.controller('EquipmentParameterController', function($scope, $uibModal, $tran
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -123,8 +123,8 @@ app.controller('EquipmentParameterController', function($scope, $uibModal, $tran
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -157,18 +157,11 @@ app.controller('EquipmentParameterController', function($scope, $uibModal, $tran
showCloseButton: true, showCloseButton: true,
}); });
$scope.getParametersByEquipmentID($scope.currentEquipment.id); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("EQUIPMENT.PARAMETER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -40,8 +40,8 @@ app.controller('GatewayController', function($scope, $translate, $uibModal, Gat
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -80,8 +80,8 @@ app.controller('GatewayController', function($scope, $translate, $uibModal, Gat
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -115,18 +115,11 @@ app.controller('GatewayController', function($scope, $translate, $uibModal, Gat
}); });
$scope.getAllGateways(); $scope.getAllGateways();
$scope.$emit('handleEmitGatewayChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("GATEWAY.GATEWAY")}), body: $translate.instant(response.data.description),
showCloseButton: true, 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, toaster,
SweetAlert) { 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 () { $scope.getAllKnowledgeFiles = function () {
KnowledgeFileService.getAllKnowledgeFiles(function (response) { KnowledgeFileService.getAllKnowledgeFiles(function (response) {
@ -37,7 +37,7 @@ app.controller('KnowledgeFileController', function (
toaster.pop({ toaster.pop({
type: "success", type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"), 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, showCloseButton: true,
}); });
$scope.getAllKnowledgeFiles(); $scope.getAllKnowledgeFiles();
@ -45,8 +45,8 @@ app.controller('KnowledgeFileController', function (
'error': function (file, xhr) { 'error': function (file, xhr) {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY".format(file.name)), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -95,18 +95,11 @@ app.controller('KnowledgeFileController', function (
showCloseButton: true, showCloseButton: true,
}); });
$scope.getAllKnowledgeFiles(); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.KNOWLEDGEFILE") }),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.KNOWLEDGEFILE") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

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

View File

@ -155,8 +155,8 @@ app.controller('MeterController', function($scope, $translate, $uibModal, Meter
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.METER")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -211,8 +211,8 @@ app.controller('MeterController', function($scope, $translate, $uibModal, Meter
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.METER")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -246,18 +246,11 @@ app.controller('MeterController', function($scope, $translate, $uibModal, Meter
}); });
$scope.getAllMeters(); $scope.getAllMeters();
$scope.$emit('handleEmitMeterChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.METER")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -79,8 +79,8 @@ app.controller('OfflineMeterController', function($scope, $translate, $uibModal,
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -129,8 +129,8 @@ app.controller('OfflineMeterController', function($scope, $translate, $uibModal,
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -164,18 +164,11 @@ app.controller('OfflineMeterController', function($scope, $translate, $uibModal,
}); });
$scope.getAllOfflineMeters(); $scope.getAllOfflineMeters();
$scope.$emit('handleEmitOfflineMeterChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -9,7 +9,7 @@ app.controller('OfflineMeterFileController', function(
toaster, toaster,
SweetAlert) { 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() { $scope.getAllOfflineMeterFiles = function() {
OfflineMeterFileService.getAllOfflineMeterFiles(function (response) { OfflineMeterFileService.getAllOfflineMeterFiles(function (response) {
@ -38,7 +38,7 @@ app.controller('OfflineMeterFileController', function(
toaster.pop({ toaster.pop({
type: "success", type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"), 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, showCloseButton: true,
}); });
$scope.getAllOfflineMeterFiles(); $scope.getAllOfflineMeterFiles();
@ -46,8 +46,8 @@ app.controller('OfflineMeterFileController', function(
'error': function (file, xhr) { 'error': function (file, xhr) {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: file.name}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -97,18 +97,11 @@ app.controller('OfflineMeterFileController', function(
showCloseButton: true, showCloseButton: true,
}); });
$scope.getAllOfflineMeterFiles(); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER_FILE")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.OFFLINE_METER_FILE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -109,8 +109,8 @@ $scope.getAllEnergyItems = function() {
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -162,8 +162,8 @@ $scope.getAllEnergyItems = function() {
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -197,18 +197,11 @@ $scope.getAllEnergyItems = function() {
}); });
$scope.getAllVirtualMeters(); $scope.getAllVirtualMeters();
$scope.$emit('handleEmitVirtualMeterChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("SETTING.VIRTUAL_METER")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -40,8 +40,8 @@ app.controller('SensorController', function($scope, $translate, $uibModal, Sens
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.SENSOR")}),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", {template: $translate.instant("COMMON.SENSOR")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -80,8 +80,8 @@ app.controller('SensorController', function($scope, $translate, $uibModal, Sens
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.SENSOR")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.SENSOR")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -115,18 +115,11 @@ app.controller('SensorController', function($scope, $translate, $uibModal, Sens
}); });
$scope.getAllSensors(); $scope.getAllSensors();
$scope.$emit('handleEmitSensorChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.SENSOR")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.SENSOR")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -65,8 +65,8 @@ app.controller('ShopfloorController', function ($scope, $translate, $uibModal, C
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -110,8 +110,8 @@ app.controller('ShopfloorController', function ($scope, $translate, $uibModal, C
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -144,18 +144,11 @@ app.controller('ShopfloorController', function ($scope, $translate, $uibModal, C
showCloseButton: true, showCloseButton: true,
}); });
$scope.$emit('handleEmitShopfloorChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SHOPFLOOR") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -153,8 +153,8 @@ app.controller('SpaceController', function ($scope, $uibModal, SpaceService, Cos
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SPACE") }),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("COMMON.SPACE") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -206,8 +206,8 @@ app.controller('SpaceController', function ($scope, $uibModal, SpaceService, Cos
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SPACE") }),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("COMMON.SPACE") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -240,18 +240,11 @@ app.controller('SpaceController', function ($scope, $uibModal, SpaceService, Cos
showCloseButton: true, showCloseButton: true,
}); });
$scope.$emit('handleEmitSpaceChanged'); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SPACE") }),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("COMMON.SPACE") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -76,8 +76,8 @@ $scope.getAllStoreTypes = function() {
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant(popBody,{"TOASTER.ERROR_ADD_BODY": $translate.instant("COMMON.STORE")}),
body: $translate.instant(popBody,{"TOASTER.ERROR_ADD_BODY": $translate.instant("COMMON.STORE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -123,8 +123,8 @@ $scope.getAllStoreTypes = function() {
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.STORE")}),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", {template: $translate.instant("COMMON.STORE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -156,18 +156,11 @@ $scope.getAllStoreTypes = function() {
showCloseButton: true, showCloseButton: true,
}); });
$scope.$emit('handleEmitStoreChanged'); $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 { }else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.STORE")}),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", {template: $translate.instant("COMMON.STORE")}), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

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

View File

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

View File

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

View File

@ -43,8 +43,8 @@ app.controller('PrivilegeController', function ($scope,
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("USER.PRIVILEGE") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -82,8 +82,8 @@ app.controller('PrivilegeController', function ($scope,
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("USER.PRIVILEGE") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -116,18 +116,11 @@ app.controller('PrivilegeController', function ($scope,
showCloseButton: true, showCloseButton: true,
}); });
$scope.getAllPrivileges(); $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 { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("USER.PRIVILEGE") }),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("USER.PRIVILEGE") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }

View File

@ -1,15 +1,15 @@
'use strict'; 'use strict';
app.controller('UserController', function ($scope, app.controller('UserController', function ($scope,
$window, $window,
$uibModal, $uibModal,
UserService, UserService,
PrivilegeService, PrivilegeService,
toaster, toaster,
$translate, $translate,
SweetAlert) { 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 () { $scope.getAllUsers = function () {
UserService.getAllUsers(function (response) { UserService.getAllUsers(function (response) {
if (angular.isDefined(response.status) && response.status === 200) { if (angular.isDefined(response.status) && response.status === 200) {
@ -57,8 +57,8 @@ app.controller('UserController', function ($scope,
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant("TOASTER.ERROR_ADD_BODY", { template: $translate.instant("SETTING.USER") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -96,8 +96,8 @@ app.controller('UserController', function ($scope,
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -123,7 +123,7 @@ app.controller('UserController', function ($scope,
modalInstance.result.then(function (modifiedUser) { modalInstance.result.then(function (modifiedUser) {
let data = { let data = {
name: modifiedUser.name, name: modifiedUser.name,
password: modifiedUser.password }; password: modifiedUser.password };
let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token }; let headers = { "User-UUID": $scope.cur_user.uuid, "Token": $scope.cur_user.token };
@ -140,8 +140,8 @@ app.controller('UserController', function ($scope,
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant("TOASTER.ERROR_UPDATE_BODY", { template: $translate.instant("SETTING.USER") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
@ -163,34 +163,33 @@ app.controller('UserController', function ($scope,
closeOnConfirm: true, closeOnConfirm: true,
closeOnCancel: true closeOnCancel: true
}, },
function (isConfirm) { function (isConfirm) {
if (isConfirm) { if (isConfirm) {
UserService.deleteUser(user, function (response) { UserService.deleteUser(user, function (response) {
if (angular.isDefined(response.status) && response.status === 204) { if (angular.isDefined(response.status) && response.status === 204) {
toaster.pop({ toaster.pop({
type: "success", type: "success",
title: $translate.instant("TOASTER.SUCCESS_TITLE"), title: $translate.instant("TOASTER.SUCCESS_TITLE"),
body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", { template: $translate.instant("SETTING.USER") }), body: $translate.instant("TOASTER.SUCCESS_DELETE_BODY", { template: $translate.instant("SETTING.USER") }),
showCloseButton: true, showCloseButton: true,
}); });
$scope.getAllUsers(); $scope.getAllUsers();
} else { } else {
toaster.pop({ toaster.pop({
type: "error", type: "error",
title: $translate.instant("TOASTER.FAILURE_TITLE"), title: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.USER") }),
body: $translate.instant("TOASTER.ERROR_DELETE_BODY", { template: $translate.instant("SETTING.USER") }), body: $translate.instant(response.data.description),
showCloseButton: true, showCloseButton: true,
}); });
} }
}); });
} }
}); });
}; };
$scope.getAllUsers(); $scope.getAllUsers();
$scope.getAllPrivileges(); $scope.getAllPrivileges();
}); });
app.controller('ModalAddUserCtrl', function ($scope, $uibModalInstance, params) { app.controller('ModalAddUserCtrl', function ($scope, $uibModalInstance, params) {
@ -198,12 +197,27 @@ app.controller('ModalAddUserCtrl', function ($scope, $uibModalInstance, params)
$scope.operation = "USER.ADD_USER"; $scope.operation = "USER.ADD_USER";
$scope.privileges = params.privileges; $scope.privileges = params.privileges;
$scope.user = { $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 () { $scope.ok = function () {
if ($scope.user.is_admin) { if ($scope.user.is_admin) {
$scope.user.privilege_id = undefined; $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); $uibModalInstance.close($scope.user);
}; };
@ -213,7 +227,7 @@ app.controller('ModalAddUserCtrl', function ($scope, $uibModalInstance, params)
}); });
app.controller('ModalEditUserCtrl', function ($scope, $uibModalInstance, params) { app.controller('ModalEditUserCtrl', function ($scope, $uibModalInstance, params) {
$scope.operation = "USER.EDIT_USER"; $scope.operation = "USER.EDIT_USER";
$scope.user = params.user; $scope.user = params.user;
$scope.privileges = params.privileges; $scope.privileges = params.privileges;
@ -222,11 +236,24 @@ app.controller('ModalEditUserCtrl', function ($scope, $uibModalInstance, params)
} else { } else {
$scope.user.privilege_id = undefined; $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 () { $scope.ok = function () {
if ($scope.user.is_admin) { if ($scope.user.is_admin) {
$scope.user.privilege_id = undefined; $scope.user.privilege_id = undefined;
} }
$uibModalInstance.close($scope.user); $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);
}; };
$scope.cancel = function () { $scope.cancel = function () {

View File

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

View File

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

View File

@ -193,6 +193,14 @@
.dropzone .dz-message { .dropzone .dz-message {
text-align: center; text-align: center;
margin: 2em 0; } 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 { .dropzone .dz-preview {
position: relative; position: relative;
display: inline-block; 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 --> <!-- Main Inspinia CSS files -->
<link href="css/animate.css" rel="stylesheet"> <link href="css/animate.css" rel="stylesheet">
<link href="js/plugins/angular-loading-bar/loading-bar.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="css/plugins/dropzone/basic.css" rel="stylesheet">
<link href="js/dropzone/dropzone.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/style.css" rel="stylesheet">
<link id="loadBefore" href="css/myems.css" rel="stylesheet"> <link id="loadBefore" href="css/myems.css" rel="stylesheet">
<link href="css/plugins/jsTree/style.min.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/jquery/jquery.panzoom.min.js"></script>
<script src="js/plugins/jquery-ui/jquery-ui.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/bootstrap/bootstrap.min.js"></script>
<script src="js/dropzone/dropzone.js"></script> <script src="js/plugins/dropzone/dropzone.js"></script>
<script type="text/javascript"> <script type="text/javascript">
jQuery.event.props.push('dataTransfer'); jQuery.event.props.push('dataTransfer');
Dropzone.autoDiscover = false; Dropzone.autoDiscover = false;
@ -67,7 +67,7 @@
<script src="js/angular/angular.min.js"></script> <script src="js/angular/angular.min.js"></script>
<script src="js/angular/angular-sanitize.js"></script> <script src="js/angular/angular-sanitize.js"></script>
<script src="js/angular-highcharts/highcharts-ng.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/plugins/oclazyload/dist/ocLazyLoad.min.js"></script>
<script src="js/angular-translate/angular-translate.min.js"></script> <script src="js/angular-translate/angular-translate.min.js"></script>
<script src="js/ui-router/angular-ui-router.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. * Copyright 2014 Wang Shenwei.
* Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE) * 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 class="footer-login">
<div> <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>
</div> </div>

View File

@ -3,6 +3,6 @@
<strong><a href="https://myems.io">https://myems.io</a></strong> <strong><a href="https://myems.io">https://myems.io</a></strong>
</div> </div>
<div> <div>
<strong>{{'MY_EMS_NAME' | translate}} v1.2.1</strong> <strong>{{'MY_EMS_NAME' | translate}} v1.3.0</strong>
</div> </div>
</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.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.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.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> <li ui-sref-active="active"><a ui-sref="settings.knowledgefile">{{ 'MENU.SETTINGS.KNOWLEDGEFILE' | translate }}</a></li>
</ul> </ul>
</li> </li>

View File

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

View File

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

View File

@ -120,12 +120,11 @@
download="{{costfile.file_name}}">{{ costfile.file_name }}</a> download="{{costfile.file_name}}">{{ costfile.file_name }}</a>
</td> </td>
<td class="text-center">{{ costfile.status }}</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"> <td class="text-center">
<a ng-click="restoreCostFile(costfile)" <a ng-click="restoreCostFile(costfile)"
class="btn btn-danger btn-rounded btn-xs">{{'SETTING.RESTORE' | translate}}</a> class="btn btn-danger btn-rounded btn-xs">{{'SETTING.RESTORE' | translate}}</a>
<a ng-click="deleteCostFile(costfile)" <a ng-click="deleteCostFile(costfile)"
class="btn btn-danger btn-rounded btn-xs" >{{'SETTING.DELETE' | translate}}</a> class="btn btn-danger btn-rounded btn-xs" >{{'SETTING.DELETE' | translate}}</a>
</td> </td>
</tr> </tr>

View File

@ -28,7 +28,7 @@
<td class="text-center">{{ datasource.gateway.name }}</td> <td class="text-center">{{ datasource.gateway.name }}</td>
<td class="text-center">{{ datasource.protocol }}</td> <td class="text-center">{{ datasource.protocol }}</td>
<td class="text-center">{{ datasource.connection }}</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"> <td class="text-center">
<a ng-click="editDataSource(datasource)" <a ng-click="editDataSource(datasource)"
class="btn btn-primary btn-rounded btn-xs">{{'SETTING.EDIT' | translate}}</a> 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.id }}</td>
<td class="text-center">{{ gateway.name }}</td> <td class="text-center">{{ gateway.name }}</td>
<td class="text-center">{{ gateway.token}}</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"> <td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editGateway(gateway)" >{{'SETTING.EDIT' | translate}}</a> <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> <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">{{ 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"><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.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"> <td class="text-center">
<a ng-click="restoreKnowledgeFile(knowledgefile)" <a ng-click="restoreKnowledgeFile(knowledgefile)"
class="btn btn-danger btn-rounded btn-xs">{{'SETTING.RESTORE' | translate}}</a> class="btn btn-danger btn-rounded btn-xs">{{'SETTING.RESTORE' | translate}}</a>

View File

@ -310,7 +310,7 @@
</td> </td>
<td class="text-center">{{ offlinemeterfile.status }}</td> <td class="text-center">{{ offlinemeterfile.status }}</td>
<td class="text-center"> <td class="text-center">
{{ offlinemeterfile.upload_datetime | date:'yyyy-MM-dd HH:mm'}}</td> {{ offlinemeterfile.upload_datetime }}</td>
<td class="text-center"> <td class="text-center">
<a ng-click="restoreOfflineMeterFile(offlinemeterfile)" <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.START_DATETIME' | translate}}</th>
<th class="text-center">{{'SETTING.END_DATETIME' | translate}}</th> <th class="text-center">{{'SETTING.END_DATETIME' | translate}}</th>
<th class="text-center">{{'SETTING.ACTION' | translate}}</th> <th class="text-center">{{'SETTING.ACTION' | translate}}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -29,8 +28,8 @@
<td class="text-center">{{ tariff.energy_category.name }}</td> <td class="text-center">{{ tariff.energy_category.name }}</td>
<td class="text-center">{{showTariffType(tariff.tariff_type) | translate}}</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.unit_of_price }}</td>
<td class="text-center">{{ tariff.valid_from | date:'yyyy-MM-ddTHH:mm:ss' }}</td> <td class="text-center">{{ tariff.valid_from }}</td>
<td class="text-center">{{ tariff.valid_through | date:'yyyy-MM-ddTHH:mm:ss' }}</td> <td class="text-center">{{ tariff.valid_through }}</td>
<td class="text-center"> <td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editTariff(tariff)" >{{'SETTING.EDIT' | translate}}</a> <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> <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>
<td class="text-center">{{ tenant.lease_number }}</td> <td class="text-center">{{ tenant.lease_number }}</td>
<td class="text-center"> <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"> <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"> <td class="text-center">
{{ tenant.is_in_lease==false?'SETTING.NO':'SETTING.YES' | translate }}</td> {{ tenant.is_in_lease==false?'SETTING.NO':'SETTING.YES' | translate }}</td>
<td class="text-center">{{tenant.cost_center.name}}</td> <td class="text-center">{{tenant.cost_center.name}}</td>

View File

@ -96,13 +96,13 @@
</div> </div>
<div class="form-group"><label class="col-sm-2 control-label">{{'TENANT.LEASE_START_DATETIME' | translate}}</label> <div class="form-group"><label class="col-sm-2 control-label">{{'TENANT.LEASE_START_DATETIME' | translate}}</label>
<div class="col-sm-10"> <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="" /> placeholder="{{'SETTING.SELECT_DATE' | translate}}" readonly="" />
</div> </div>
</div> </div>
<div class="form-group"><label class="col-sm-2 control-label">{{'TENANT.LEASE_END_DATETIME' | translate}}</label> <div class="form-group"><label class="col-sm-2 control-label">{{'TENANT.LEASE_END_DATETIME' | translate}}</label>
<div class="col-sm-10"> <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="" /> placeholder="{{'SETTING.SELECT_DATE' | translate}}" readonly="" />
</div> </div>
</div> </div>

View File

@ -17,8 +17,9 @@
<th class="text-center">{{'USER.EMAIL' | translate}}</th> <th class="text-center">{{'USER.EMAIL' | translate}}</th>
<th class="text-center">{{'USER.IS_ADMIN' | translate}}</th> <th class="text-center">{{'USER.IS_ADMIN' | translate}}</th>
<th class="text-center">{{'USER.PRIVILEGE' | 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> <th class="text-center">{{'SETTING.ACTION' | translate}}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -27,8 +28,10 @@
<td class="text-center">{{ user.name }}</td> <td class="text-center">{{ user.name }}</td>
<td class="text-center">{{ user.display_name }}</td> <td class="text-center">{{ user.display_name }}</td>
<td class="text-center">{{ user.email }}</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.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"> <td class="text-center">
<a class="btn btn-primary btn-rounded btn-xs" ng-click="editUser(user)" >{{'SETTING.EDIT' | translate}}</a> <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> <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"> <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="form-group"><label class="col-sm-3 control-label">{{'USER.USERNAME' | translate}}</label>
<div class="col-sm-9"> <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"> <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> <small class="text-danger" ng-show="form_user.username.$error.required">{{'USER.INPUT_NAME' | translate}}</small>
</div> </div>
</div> </div>
</div> </div>
<div class="hr-line-dashed" ng-hide="operation=='edit'"></div> <div class="hr-line-dashed" ng-hide="operation=='USER.EDIT_USER'"></div>
<div class="form-group" ng-hide="operation=='edit'"><label class="col-sm-3 control-label">{{'USER.PASSWORD' | translate}}</label> <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"> <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> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
@ -59,7 +59,20 @@
</ui-select> </ui-select>
</div> </div>
</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> </form>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">

View File

@ -4,7 +4,6 @@
Providing database schema and scripts for MyEMS. Providing database schema and scripts for MyEMS.
### Prerequisites ### Prerequisites
[MySQL 8.0 or later](https://www.mysql.com/) [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) or [SingleStore 7.0 or later](https://www.singlestore.com/) (highly recommended)
### Installation ### Installation
Execute the following scripts in MySQL commandline, or execute in other MySQL client tools such as MySQL Workbench, Navicat, DBaver, phpMyAdmin, etc. 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_baseline_db.sql
mysql -u root -p < myems_billing_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_baseline_db.sql
@ -28,14 +27,15 @@ mysql -u root -p < myems_system_db.sql
mysql -u root -p < myems_user_db.sql mysql -u root -p < myems_user_db.sql
``` ```
To insert demo data execute the following scripts, To insert demo data execute the following scripts,
``` ```bash
mysql -u root -p < demo/myems_system_db.sql cd myems/database/demo
mysql -u root -p < myems_system_db.sql
``` ```
#### Change COLLATE for MySQL server before version 8.0 #### Change COLLATE for MySQL server before version 8.0
``` ```bash
sudo nano /etc/mysql/my.cnf sudo nano /etc/mysql/my.cnf
``` ```
``` ```bash
[client] [client]
default-character-set = utf8mb4 default-character-set = utf8mb4
[mysql] [mysql]
@ -45,6 +45,16 @@ character-set-client-handshake = FALSE
character-set-server = utf8mb4 character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci 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 ### 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`) (`id`, `name`, `uuid`,`gateway_id`, `protocol`, `connection`)
VALUES VALUES
(1, '示例ModbusTCP数据源', 'b3ace9d4-b63b-419b-818f-0f6d1d0603a4', 1, 'modbus-tcp', '{"host":"192.168.0.1", "port":502}'), (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}'), (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}'), (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/"}'), (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; COMMIT;
-- --------------------------------------------------------------------------------------------------------------------- -- ---------------------------------------------------------------------------------------------------------------------
@ -161,7 +167,7 @@ USE `myems_system_db`;
INSERT INTO `myems_system_db`.`tbl_distribution_circuits` INSERT INTO `myems_system_db`.`tbl_distribution_circuits`
(`id`, `name`, `uuid`, `distribution_system_id`, `distribution_room`, `switchgear`, `peak_load`, `peak_current`, `customers`, `meters`) (`id`, `name`, `uuid`, `distribution_system_id`, `distribution_room`, `switchgear`, `peak_load`, `peak_current`, `customers`, `meters`)
VALUES 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; COMMIT;
@ -216,16 +222,21 @@ COMMIT;
-- --------------------------------------------------------------------------------------------------------------------- -- ---------------------------------------------------------------------------------------------------------------------
START TRANSACTION; START TRANSACTION;
USE `myems_system_db`; USE `myems_system_db`;
INSERT INTO myems_system_db.tbl_energy_items
INSERT INTO `myems_system_db`.`tbl_energy_items` (id, name, uuid, energy_category_id)
(`id`, `name`, `uuid`, `energy_category_id`)
VALUES VALUES
(1, '空调用电', 'c5eac07a-e889-4a56-aa1b-a0b688c4e953', 1), (1, '照明和插座用电', 'cade4e78-2b85-4bea-ab6e-0d6accc88d03', 1),
(2, '动力用电', '6875e4e0-a2ec-47a5-a88e-becb10e9603a', 1), (2, '走廊和应急照明用电', '7a6dc086-ce08-4d66-ba75-f69af92b32f4', 1),
(3, '照明用电', '79918598-6477-4130-a85c-4cb87d0eac23', 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; COMMIT;
-- --------------------------------------------------------------------------------------------------------------------- -- ---------------------------------------------------------------------------------------------------------------------
-- Demo Data for table `myems_system_db`.`tbl_energy_flow_diagrams` -- 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` INSERT INTO `myems_system_db`.`tbl_energy_flow_diagrams`
(`id`, `name`, `uuid`) (`id`, `name`, `uuid`)
VALUES VALUES
(1, '低压配电系统', '3ccbc9c6-9575-4212-a63a-a688d1154302'); (1, '示例能流图', '3ccbc9c6-9575-4212-a63a-a688d1154302');
COMMIT; 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` ) (`id`, `name`, `data_source_id`, `object_type`, `units`, `high_limit`, `low_limit`, `ratio`, `is_trend`, `address`, `description` )
VALUES VALUES
(1, 'Active Energy Import Tariff 1', 1, 'ENERGY_VALUE', 'kWh', 99999999999, 0, 1.000, true, (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, (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, (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, (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, (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, (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, (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, (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), '{\"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` INSERT INTO `myems_system_db`.`tbl_variables`
(`id`, `name`, `expression_id`, `meter_type`, `meter_id`) (`id`, `name`, `expression_id`, `meter_type`, `meter_id`)
VALUES VALUES
(1, 'x', 1, 'meter', 1), (1, 'x1', 1, 'meter', 1),
(2, 'y', 1, 'meter', 2), (2, 'x2', 1, 'meter', 2),
(3, 'z', 1, 'meter', 3); (3, 'x3', 1, 'meter', 3);
COMMIT; COMMIT;

View File

@ -26,30 +26,6 @@ CREATE TABLE IF NOT EXISTS `myems_fdd_db`.`tbl_email_messages` (
PRIMARY KEY (`id`)); PRIMARY KEY (`id`));
CREATE INDEX `tbl_email_messages_index_1` ON `myems_fdd_db`.`tbl_email_messages` (`status`, `scheduled_datetime_utc`); 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` -- 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`)); PRIMARY KEY (`id`));
CREATE INDEX `tbl_email_messages_index_1` ON `myems_reporting_db`.`tbl_email_messages` (`status`, `scheduled_datetime_utc`); 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` -- Table `myems_reporting_db`.`tbl_reports_files`
-- --------------------------------------------------------------------------------------------------------------------- -- ---------------------------------------------------------------------------------------------------------------------

View File

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

View File

@ -22,6 +22,8 @@ CREATE TABLE IF NOT EXISTS `myems_user_db`.`tbl_users` (
`password` VARCHAR(256) NOT NULL, `password` VARCHAR(256) NOT NULL,
`is_admin` BOOL NOT NULL , `is_admin` BOOL NOT NULL ,
`privilege_id` BIGINT NULL, `privilege_id` BIGINT NULL,
`account_expiration_datetime_utc` DATETIME NOT NULL,
`password_expiration_datetime_utc` DATETIME NOT NULL,
PRIMARY KEY (`id`)); PRIMARY KEY (`id`));
-- -------------------------------------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------------------------------------
@ -31,9 +33,9 @@ START TRANSACTION;
USE `myems_user_db`; USE `myems_user_db`;
-- default username: administrator -- default username: administrator
-- default password: !MyEMS1 -- 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 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; COMMIT;
-- --------------------------------------------------------------------------------------------------------------------- -- ---------------------------------------------------------------------------------------------------------------------
@ -66,15 +68,18 @@ DROP TABLE IF EXISTS `myems_user_db`.`tbl_logs` ;
CREATE TABLE IF NOT EXISTS `myems_user_db`.`tbl_logs` ( CREATE TABLE IF NOT EXISTS `myems_user_db`.`tbl_logs` (
`id` BIGINT NOT NULL AUTO_INCREMENT, `id` BIGINT NOT NULL AUTO_INCREMENT,
`user_id` BIGINT NOT NULL, `user_uuid` CHAR(36) NOT NULL,
`utc_date_time` DATETIME NOT NULL, `request_datetime_utc` DATETIME NOT NULL,
`activity` VARCHAR(256) 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`)); 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` -- Table `myems_user_db`.`tbl_notifications`
-- ---------------------------------------------------------------------------------- -- ---------------------------------------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `myems_user_db`.`tbl_notifications` ; DROP TABLE IF EXISTS `myems_user_db`.`tbl_notifications` ;
CREATE TABLE IF NOT 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